diff --git a/.arcconfig b/.arcconfig index c81050db3d..88f04f72c5 100644 --- a/.arcconfig +++ b/.arcconfig @@ -1,12 +1,5 @@ { - "project_id" : "phabricator", - "conduit_uri" : "https://secure.phabricator.com/api/", - "lint_engine" : "PhabricatorLintEngine", - "unit_engine" : "PhutilUnitTestEngine", - "copyright_holder" : "Facebook, Inc.", - "remote_hooks_installed" : true, - "phutil_libraries" : { - "phabricator" : "src/" - }, - "lint.xhpast.naminghook" : "PhabricatorSymbolNameLinter" + "phabricator.uri": "https://secure.phabricator.com/", + "load": ["src/"], + "history.immutable": false } diff --git a/.arclint b/.arclint new file mode 100644 index 0000000000..29258b5d3e --- /dev/null +++ b/.arclint @@ -0,0 +1,86 @@ +{ + "exclude": [ + "(^externals/)", + "(^webroot/rsrc/externals/(?!javelin/))", + "(/__tests__/data/)" + ], + "linters": { + "chmod": { + "type": "chmod" + }, + "filename": { + "type": "filename" + }, + "generated": { + "type": "generated" + }, + "javelin": { + "type": "javelin", + "include": "(\\.js$)", + "exclude": [ + "(^support/aphlict/)" + ] + }, + "jshint-browser": { + "type": "jshint", + "include": "(\\.js$)", + "exclude": [ + "(^support/aphlict/server/.*\\.js$)", + "(^webroot/rsrc/externals/javelin/core/init_node\\.js$)" + ], + "jshint.jshintrc": "support/lint/browser.jshintrc" + }, + "jshint-node": { + "type": "jshint", + "include": [ + "(^support/aphlict/server/.*\\.js$)", + "(^webroot/rsrc/externals/javelin/core/init_node\\.js$)" + ], + "jshint.jshintrc": "support/lint/node.jshintrc" + }, + "json": { + "type": "json", + "include": [ + "(^src/docs/book/.*\\.book$)", + "(^support/lint/jshintrc$)", + "(^\\.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", + "xhpast.php-version": "5.5" + } + } +} diff --git a/.arcunit b/.arcunit new file mode 100644 index 0000000000..860ee1aee2 --- /dev/null +++ b/.arcunit @@ -0,0 +1,8 @@ +{ + "engines": { + "phutil": { + "type": "phutil", + "include": "(\\.php$)" + } + } +} diff --git a/.divinerconfig b/.divinerconfig deleted file mode 100644 index ef6c805d91..0000000000 --- a/.divinerconfig +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name" : "Phabricator", - "src_link" : "https://secure.phabricator.com/diffusion/P/browse/master/%f$%l", - "groups" : { - "intro" : "Introduction", - "config" : "Configuration", - "userguide" : "Application User Guides", - "contrib" : "Contributing", - "developer" : "Phabricator Developer Guides", - "flavortext" : "Flavor Text", - "differential" : "Differential (Code Review)", - "diffusion" : "Diffusion (Repository Browser)", - "maniphest" : "Maniphest (Task Tracking)", - "slowvote" : "Slowvote (Polls)", - "herald" : "Herald (Notifications)", - "conduit" : "Conduit (Phabricator HTTP API)", - "celerity" : "Celerity (CSS/JS Management)", - "phriction" : "Phriction (Wiki)", - "aphront" : "Aphront (Web Stack)", - "console" : "DarkConsole (Debugging Console)", - "storage" : "Storage", - "filestorage" : "File Storage", - "search" : "Search", - "daemon" : "Daemons, Tasks and Workers", - "irc" : "IRC", - "markup" : "Remarkup Extensions" - }, - "engines" : [ - ["DivinerArticleEngine", {}], - ["DivinerXHPEngine", {}] - ] -} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..11da68c2c0 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,34 @@ +; 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 + +[.arclint] +max_line_length = unset + +[resources/sql/**.sql] +max_line_length = unset + +[scripts/install/install_*.sh] +max_line_length = unset + +[src/applications/differential/parser/__tests__/data/*.diff] +trim_trailing_whitespace = false + +[src/applications/differential/parser/__tests__/messages/long-title.txt] +max_line_length = unset + +[src/applications/diffusion/ssh/__tests__/hgwiredata/*.txt] +max_line_length = unset + +[externals/**] +indent_style = unset +indent_size = unset +trim_trailing_whitespace = false +insert_final_newline = false diff --git a/.gitignore b/.gitignore index 4238818d5b..b7f6818b8f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,20 +1,44 @@ -.DS_Store -._* +# 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/ +/src/.cache/ + +# libphutil /src/.phutil_module_cache + +# Configuration /conf/custom/* -/webroot/rsrc/custom -/.divinercache -.#* -*# -*~ -*.swp +/conf/local/local.json +/conf/local/ENVIRONMENT +/conf/local/VERSION +/conf/keys/device.pub +/conf/keys/device.key +/conf/keys/device.id +/conf/aphlict/aphlict.custom.json + +# Impact Font +/resources/font/impact.ttf + +# User-accessible hook for adhoc debugging scripts +/support/debug.php + +# User-accessible hook for adhoc startup code +/support/preamble.php + +# Users can link binaries here +/support/bin/* -# NetBeans project files -/nbproject/ +# User extensions +/src/extensions/* -# Arcanist scratch directory -/.arc +# NPM local packages +/support/aphlict/server/node_modules/ +/support/aphlict/server/package.json +/support/aphlict/server/package-lock.json -# Custom Logo File -/webroot/rsrc/image/custom/custom.png +# Places for users to add custom resources. +/resources/cows/custom/* +/resources/figlet/custom/* diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index e4f67ca880..0000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "externals/javelin"] - path = externals/javelin - url = git://github.com/facebook/javelin.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..d9a10c0d8e --- /dev/null +++ b/LICENSE @@ -0,0 +1,176 @@ + 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 new file mode 100644 index 0000000000..f514a400e2 --- /dev/null +++ b/NOTICE @@ -0,0 +1,21 @@ +Phabricator +Copyright 2014 Phacility, Inc. + +Phabricator was originally 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. + +Phabricator 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/" and "webroot/rsrc/externals/". These libraries have their own +licenses and copyright holders. diff --git a/README b/README deleted file mode 100644 index 6dbcd68c85..0000000000 --- a/README +++ /dev/null @@ -1,13 +0,0 @@ -Phabricator is a open source collection of web applications which make it easier -to write, review, and share source code. Phabricator was developed at Facebook. - -This is an early release. It's pretty high-quality and usable, but under -active development so things may change quickly. - -You can learn more about the project and find links to documentation and -resources at: http://phabricator.org/ - -LICENSE - -Phabricator is released under the Apache 2.0 license except as otherwise noted. -http://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000..5190845da4 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +Effective June 1, 2021: Phabricator is no longer actively maintained. + +**Phabricator** is a collection of web applications for software development. + +**LICENSE** + +Phabricator is released under the Apache 2.0 license except as otherwise noted. diff --git a/bin/accountadmin b/bin/accountadmin deleted file mode 120000 index a846766c26..0000000000 --- a/bin/accountadmin +++ /dev/null @@ -1 +0,0 @@ -../scripts/user/account_admin.php \ No newline at end of file diff --git a/bin/almanac b/bin/almanac new file mode 120000 index 0000000000..015c541cdc --- /dev/null +++ b/bin/almanac @@ -0,0 +1 @@ +../scripts/almanac/manage_almanac.php \ No newline at end of file diff --git a/bin/audit b/bin/audit new file mode 120000 index 0000000000..26939acdec --- /dev/null +++ b/bin/audit @@ -0,0 +1 @@ +../scripts/setup/manage_audit.php \ No newline at end of file diff --git a/bin/auth b/bin/auth new file mode 120000 index 0000000000..01e2796608 --- /dev/null +++ b/bin/auth @@ -0,0 +1 @@ +../scripts/setup/manage_auth.php \ No newline at end of file diff --git a/bin/bulk b/bin/bulk new file mode 120000 index 0000000000..04d0550497 --- /dev/null +++ b/bin/bulk @@ -0,0 +1 @@ +../scripts/setup/manage_bulk.php \ No newline at end of file diff --git a/bin/cache b/bin/cache new file mode 120000 index 0000000000..f3b182e818 --- /dev/null +++ b/bin/cache @@ -0,0 +1 @@ +../scripts/cache/manage_cache.php \ No newline at end of file diff --git a/bin/calendar b/bin/calendar new file mode 120000 index 0000000000..33929a5ba1 --- /dev/null +++ b/bin/calendar @@ -0,0 +1 @@ +../scripts/setup/manage_calendar.php \ No newline at end of file diff --git a/bin/celerity b/bin/celerity new file mode 120000 index 0000000000..f4558cb181 --- /dev/null +++ b/bin/celerity @@ -0,0 +1 @@ +../scripts/setup/manage_celerity.php \ No newline at end of file diff --git a/bin/commit-hook b/bin/commit-hook new file mode 120000 index 0000000000..9eda12cfb7 --- /dev/null +++ b/bin/commit-hook @@ -0,0 +1 @@ +../scripts/repository/commit_hook.php \ No newline at end of file diff --git a/bin/conduit b/bin/conduit new file mode 120000 index 0000000000..9221340a93 --- /dev/null +++ b/bin/conduit @@ -0,0 +1 @@ +../scripts/setup/manage_conduit.php \ No newline at end of file diff --git a/bin/config b/bin/config new file mode 120000 index 0000000000..068eb7da38 --- /dev/null +++ b/bin/config @@ -0,0 +1 @@ +../scripts/setup/manage_config.php \ No newline at end of file diff --git a/bin/differential b/bin/differential new file mode 120000 index 0000000000..5a50360da3 --- /dev/null +++ b/bin/differential @@ -0,0 +1 @@ +../scripts/setup/manage_differential.php \ No newline at end of file diff --git a/bin/diviner b/bin/diviner new file mode 120000 index 0000000000..465b7cf593 --- /dev/null +++ b/bin/diviner @@ -0,0 +1 @@ +../scripts/diviner/diviner.php \ No newline at end of file diff --git a/bin/drydock b/bin/drydock new file mode 120000 index 0000000000..a98cf0d298 --- /dev/null +++ b/bin/drydock @@ -0,0 +1 @@ +../scripts/drydock/drydock_control.php \ No newline at end of file diff --git a/bin/fact b/bin/fact new file mode 120000 index 0000000000..9a84ebad20 --- /dev/null +++ b/bin/fact @@ -0,0 +1 @@ +../scripts/fact/manage_facts.php \ No newline at end of file diff --git a/bin/feed b/bin/feed new file mode 120000 index 0000000000..ce9bbb77a6 --- /dev/null +++ b/bin/feed @@ -0,0 +1 @@ +../scripts/setup/manage_feed.php \ No newline at end of file diff --git a/bin/files b/bin/files new file mode 120000 index 0000000000..bb0c48da5b --- /dev/null +++ b/bin/files @@ -0,0 +1 @@ +../scripts/files/manage_files.php \ No newline at end of file diff --git a/bin/garbage b/bin/garbage new file mode 120000 index 0000000000..417438c09c --- /dev/null +++ b/bin/garbage @@ -0,0 +1 @@ +../scripts/setup/manage_garbage.php \ No newline at end of file diff --git a/bin/harbormaster b/bin/harbormaster new file mode 120000 index 0000000000..448588ebef --- /dev/null +++ b/bin/harbormaster @@ -0,0 +1 @@ +../scripts/setup/manage_harbormaster.php \ No newline at end of file diff --git a/bin/herald b/bin/herald new file mode 120000 index 0000000000..53f039ddf1 --- /dev/null +++ b/bin/herald @@ -0,0 +1 @@ +../scripts/setup/manage_herald.php \ No newline at end of file diff --git a/bin/i18n b/bin/i18n new file mode 120000 index 0000000000..cb5eaeaab3 --- /dev/null +++ b/bin/i18n @@ -0,0 +1 @@ +../scripts/setup/manage_i18n.php \ No newline at end of file diff --git a/bin/lipsum b/bin/lipsum new file mode 120000 index 0000000000..ea04709c7d --- /dev/null +++ b/bin/lipsum @@ -0,0 +1 @@ +../scripts/lipsum/manage_lipsum.php \ No newline at end of file diff --git a/bin/lock b/bin/lock new file mode 120000 index 0000000000..686fa38798 --- /dev/null +++ b/bin/lock @@ -0,0 +1 @@ +../scripts/setup/manage_lock.php \ No newline at end of file diff --git a/bin/mail b/bin/mail new file mode 120000 index 0000000000..d75b7b811d --- /dev/null +++ b/bin/mail @@ -0,0 +1 @@ +../scripts/mail/manage_mail.php \ No newline at end of file diff --git a/bin/nuance b/bin/nuance new file mode 120000 index 0000000000..c2cf50a211 --- /dev/null +++ b/bin/nuance @@ -0,0 +1 @@ +../scripts/setup/manage_nuance.php \ No newline at end of file diff --git a/bin/phd b/bin/phd index f1945da552..101465cd29 120000 --- a/bin/phd +++ b/bin/phd @@ -1 +1 @@ -../scripts/daemon/phabricator_daemon_launcher.php \ No newline at end of file +../scripts/daemon/manage_daemons.php \ No newline at end of file diff --git a/bin/phortune b/bin/phortune new file mode 120000 index 0000000000..cde0acff7e --- /dev/null +++ b/bin/phortune @@ -0,0 +1 @@ +../scripts/setup/manage_phortune.php \ No newline at end of file diff --git a/bin/policy b/bin/policy new file mode 120000 index 0000000000..ffb2bac562 --- /dev/null +++ b/bin/policy @@ -0,0 +1 @@ +../scripts/setup/manage_policy.php \ No newline at end of file diff --git a/bin/remove b/bin/remove new file mode 120000 index 0000000000..a073e3ebef --- /dev/null +++ b/bin/remove @@ -0,0 +1 @@ +../scripts/setup/manage_remove.php \ No newline at end of file diff --git a/bin/repository b/bin/repository new file mode 120000 index 0000000000..9da13e8ae7 --- /dev/null +++ b/bin/repository @@ -0,0 +1 @@ +../scripts/repository/manage_repositories.php \ No newline at end of file diff --git a/bin/search b/bin/search new file mode 120000 index 0000000000..774c1e1412 --- /dev/null +++ b/bin/search @@ -0,0 +1 @@ +../scripts/search/manage_search.php \ No newline at end of file diff --git a/bin/ssh-auth b/bin/ssh-auth new file mode 120000 index 0000000000..136faff7e6 --- /dev/null +++ b/bin/ssh-auth @@ -0,0 +1 @@ +../scripts/ssh/ssh-auth.php \ No newline at end of file diff --git a/bin/ssh-connect b/bin/ssh-connect new file mode 120000 index 0000000000..79f7c94d03 --- /dev/null +++ b/bin/ssh-connect @@ -0,0 +1 @@ +../scripts/ssh/ssh-connect.php \ No newline at end of file diff --git a/bin/ssh-exec b/bin/ssh-exec new file mode 120000 index 0000000000..9d3f453bee --- /dev/null +++ b/bin/ssh-exec @@ -0,0 +1 @@ +../scripts/ssh/ssh-exec.php \ No newline at end of file diff --git a/bin/trigger b/bin/trigger new file mode 120000 index 0000000000..37d4b4a7cb --- /dev/null +++ b/bin/trigger @@ -0,0 +1 @@ +../scripts/setup/manage_trigger.php \ No newline at end of file diff --git a/bin/user b/bin/user new file mode 120000 index 0000000000..4b4b6b7ab5 --- /dev/null +++ b/bin/user @@ -0,0 +1 @@ +../scripts/setup/manage_user.php \ No newline at end of file diff --git a/bin/webhook b/bin/webhook new file mode 120000 index 0000000000..d320336874 --- /dev/null +++ b/bin/webhook @@ -0,0 +1 @@ +../scripts/setup/manage_webhook.php \ No newline at end of file diff --git a/bin/worker b/bin/worker new file mode 120000 index 0000000000..d0284581e5 --- /dev/null +++ b/bin/worker @@ -0,0 +1 @@ +../scripts/setup/manage_worker.php \ No newline at end of file diff --git a/conf/__init_conf__.php b/conf/__init_conf__.php index 6cd7ecdd7e..18c132c6d4 100644 --- a/conf/__init_conf__.php +++ b/conf/__init_conf__.php @@ -1,29 +1,49 @@ true, + 'darkconsole.enabled' => true, + ); + } + + $files = id(new FileFinder($root.'/conf/')) + ->withType('f') + ->withSuffix('conf.php') + ->withFollowSymlinks(true) + ->find(); + + foreach ($files as $key => $file) { + $file = trim($file, './'); + $files[$key] = preg_replace('/\.conf\.php$/', '', $file); + } + $files = ' '.implode("\n ", $files); + + throw new Exception( + pht( + "CONFIGURATION ERROR\n". + "Config file '%s' does not exist. Valid config files are:\n\n%s", + $original_config, + $files)); + } + // Make sure config file errors are reported. $old_error_level = error_reporting(E_ALL | E_STRICT); $old_display_errors = ini_get('display_errors'); @@ -37,25 +57,11 @@ function phabricator_read_config_file($original_config) { ini_set('display_errors', $old_display_errors); if ($conf === false) { - if (!Filesystem::pathExists($full_config_path)) { - $files = id(new FileFinder($root.'/conf/')) - ->withType('f') - ->withSuffix('conf.php') - ->withFollowSymlinks(true) - ->find(); - - foreach ($files as $key => $file) { - $file = trim($file, './'); - $files[$key] = preg_replace('/\.conf\.php$/', '', $file); - } - $files = " ".implode("\n ", $files); - - throw new Exception( - "CONFIGURATION ERROR\n". - "Config file '{$original_config}' does not exist. Valid config files ". - "are:\n\n".$files); - } - throw new Exception("Failed to read config file '{$config}': {$errors}"); + throw new Exception( + pht( + "Failed to read config file '%s': %s", + $config, + $errors)); } return $conf; diff --git a/conf/aphlict/README b/conf/aphlict/README new file mode 100644 index 0000000000..2786ea5658 --- /dev/null +++ b/conf/aphlict/README @@ -0,0 +1,16 @@ +To customize this configuration, you have two options: create a custom +configuration file in this directory, or specify a path to a configuration file +explicitly when starting Aphlict. + +To create a custom configuration file, copy `aphlict.default.json` in this +directory and rename it `aphlict.custom.json`. If this file exists, it will +be read by default. + +To specify a path when starting Aphlict, use the `--config` flag: + + phabricator/ $ ./bin/aphlict start --config path/to/config.json + +Specifying a configuration file explicitly overrides default configuration. + +For more information about configuring notifications, see the article +"Notifications User Guide: Setup and Configuration" in the documentation. diff --git a/conf/aphlict/aphlict.default.json b/conf/aphlict/aphlict.default.json new file mode 100644 index 0000000000..7afdf7e8ff --- /dev/null +++ b/conf/aphlict/aphlict.default.json @@ -0,0 +1,26 @@ +{ + "servers": [ + { + "type": "client", + "port": 22280, + "listen": "0.0.0.0", + "ssl.key": null, + "ssl.cert": null, + "ssl.chain": null + }, + { + "type": "admin", + "port": 22281, + "listen": "127.0.0.1", + "ssl.key": null, + "ssl.cert": null, + "ssl.chain": null + } + ], + "logs": [ + { + "path": "/var/log/aphlict.log" + } + ], + "pidfile": "/var/tmp/aphlict/pid/aphlict.pid" +} diff --git a/conf/default.conf.php b/conf/default.conf.php deleted file mode 100644 index a52f2cab50..0000000000 --- a/conf/default.conf.php +++ /dev/null @@ -1,1117 +0,0 @@ - null, - - // If you have multiple environments, provide the production environment URI - // here so that emails, etc., generated in development/sandbox environments - // contain the right links. - 'phabricator.production-uri' => null, - - // Setting this to 'true' will invoke a special setup mode which helps guide - // you through setting up Phabricator. - 'phabricator.setup' => false, - -// -- IMPORTANT! Security! -------------------------------------------------- // - - // IMPORTANT: By default, Phabricator serves files from the same domain the - // application lives on. This is convenient but not secure: it creates a large - // class of vulnerabilities which can not be generally mitigated. - // - // To avoid this, you should configure a second domain in the same way you - // have the primary domain configured (e.g., point it at the same machine and - // set up the same vhost rules) and provide it here. For instance, if your - // primary install is on "http://www.phabricator-example.com/", you could - // configure "http://www.phabricator-files.com/" and specify the entire - // domain (with protocol) here. This will enforce that files are - // served only from the alternate domain. Ideally, you should use a - // completely separate domain name rather than just a different subdomain. - // - // It is STRONGLY RECOMMENDED that you configure this. Your install is NOT - // SECURE unless you do so. - 'security.alternate-file-domain' => null, - - // Default key for HMAC digests where the key is not important (i.e., the - // hash itself is secret). You can change this if you want (to any other - // string), but doing so will break existing sessions and CSRF tokens. - 'security.hmac-key' => '[D\t~Y7eNmnQGJ;rnH6aF;m2!vJ8@v8C=Cs:aQS\.Qw', - - -// -- Customization --------------------------------------------------------- // - - // If you want to use a custom logo (e.g., for your company or organization), - // copy 'webroot/rsrc/image/custom/example_template.png' to - // 'webroot/rsrc/image/custom/custom.png' and set this to the URI you want it - // to link to (like http://www.yourcompany.com/). - 'phabricator.custom.logo' => null, - - -// -- Internationalization -------------------------------------------------- // - - // This allows customizing texts used in Phabricator. The class must extend - // PhabricatorTranslation. - 'translation.provider' => 'PhabricatorEnglishTranslation', - - -// -- Access Policies ------------------------------------------------------- // - - // Phabricator allows you to set the visibility of objects (like repositories - // and source code) to "Public", which means anyone on the internet can see - // them, even without being logged in. This is great for open source, but - // some installs may never want to make anything public, so this policy is - // disabled by default. You can enable it here, which will let you set the - // policy for objects to "Public". With this option disabled, the most open - // policy is "All Users", which means users must be logged in to view things. - 'policy.allow-public' => false, - - -// -- Logging --------------------------------------------------------------- // - - // To enable the Phabricator access log, specify a path here. The Phabricator - // access log can provide more detailed information about Phabricator access - // than normal HTTP access logs (for instance, it can show logged-in users, - // controllers, and other application data). If not set, no log will be - // written. - // - // Make sure the PHP process can write to the log! - 'log.access.path' => null, - - // Format for the access log. If not set, the default format will be used: - // - // "[%D]\t%h\t%u\t%M\t%C\t%m\t%U\t%c\t%T" - // - // Available variables are: - // - // - %c The HTTP response code. - // - %C The controller which handled the request. - // - %D The request date. - // - %e Epoch timestamp. - // - %h The webserver's host name. - // - %p The PID of the server process. - // - %R The HTTP referrer. - // - %r The remote IP. - // - %T The request duration, in microseconds. - // - %U The request path. - // - %u The logged-in user, if one is logged in. - // - %M The HTTP method. - // - %m For conduit, the Conduit method which was invoked. - // - // If a variable isn't available (for example, %m appears in the file format - // but the request is not a Conduit request), it will be rendered as "-". - // - // Note that the default format is subject to change in the future, so if you - // rely on the log's format, specify it explicitly. - 'log.access.format' => null, - - -// -- DarkConsole ----------------------------------------------------------- // - - // DarkConsole is a administrative debugging/profiling tool built into - // Phabricator. You can leave it disabled unless you're developing against - // Phabricator. - - // Determines whether or not DarkConsole is available. DarkConsole exposes - // some data like queries and stack traces, so you should be careful about - // turning it on in production (although users can not normally see it, even - // if the deployment configuration enables it). - 'darkconsole.enabled' => false, - - // Always enable DarkConsole, even for logged out users. This potentially - // exposes sensitive information to users, so make sure untrusted users can - // not access an install running in this mode. You should definitely leave - // this off in production. It is only really useful for using DarkConsole - // utilities to debug or profile logged-out pages. You must set - // 'darkconsole.enabled' to use this option. - 'darkconsole.always-on' => false, - - - // Allows you to mask certain configuration values from appearing in the - // "Config" tab of DarkConsole. - 'darkconsole.config-mask' => array( - 'mysql.pass', - 'amazon-ses.secret-key', - 'recaptcha.private-key', - 'phabricator.csrf-key', - 'facebook.application-secret', - 'github.application-secret', - 'google.application-secret', - 'phabricator.application-secret', - 'disqus.application-secret', - 'phabricator.mail-key', - 'security.hmac-key', - ), - - -// -- MySQL --------------------------------------------------------------- // - - // Class providing database configuration. It must implement - // DatabaseConfigurationProvider. - 'mysql.configuration-provider' => 'DefaultDatabaseConfigurationProvider', - - // The username to use when connecting to MySQL. - 'mysql.user' => 'root', - - // The password to use when connecting to MySQL. - 'mysql.pass' => '', - - // The MySQL server to connect to. If you want to connect to a different - // port than the default (which is 3306), specify it in the hostname - // (e.g., db.example.com:1234). - 'mysql.host' => 'localhost', - - // The number of times to try reconnecting to the MySQL database - 'mysql.connection-retries' => 3, - - // Phabricator supports PHP extensions MySQL and MySQLi. It is possible to - // implement also other access mechanism (e.g. PDO_MySQL). The class must - // extend AphrontMySQLDatabaseConnectionBase. - 'mysql.implementation' => 'AphrontMySQLDatabaseConnection', - - -// -- Notifications --------------------------------------------------------- // - - 'notification.enabled' => false, - - // Client port for the realtime server to listen on, and for realtime clients - // to connect to. Use "localhost" if you are running the notification server - // on the same host as the web server. - 'notification.client-uri' => 'http://localhost:22280/', - - // URI and port for the notification root server. - 'notification.server-uri' => 'http://localhost:22281/', - - // The server must be started as root so it can bind to privileged ports, but - // if you specify a user here it will drop permissions after binding. - 'notification.user' => null, - - // Location where the server should log to. - 'notification.log' => '/var/log/aphlict.log', - - // PID file to use. - 'notification.pidfile' => '/var/run/aphlict.pid', - - -// -- Email ----------------------------------------------------------------- // - - // Some Phabricator tools send email notifications, e.g. when Differential - // revisions are updated or Maniphest tasks are changed. These options allow - // you to configure how email is delivered. - - // You can test your mail setup by going to "MetaMTA" in the web interface, - // clicking "Send New Message", and then composing a message. - - // Default address to send mail "From". - 'metamta.default-address' => 'noreply@example.com', - - // Domain used to generate Message-IDs. - 'metamta.domain' => 'example.com', - - // When a message is sent to multiple recipients (for example, several - // reviewers on a code review), Phabricator can either deliver one email to - // everyone (e.g., "To: alincoln, usgrant, htaft") or separate emails to each - // user (e.g., "To: alincoln", "To: usgrant", "To: htaft"). The major - // advantages and disadvantages of each approach are: - // - // - One mail to everyone: - // - Recipients can see To/Cc at a glance. - // - If you use mailing lists, you won't get duplicate mail if you're - // a normal recipient and also Cc'd on a mailing list. - // - Getting threading to work properly is harder, and probably requires - // making mail less useful by turning off options. - // - Sometimes people will "Reply All" and everyone will get two mails, - // one from the user and one from Phabricator turning their mail into - // a comment. - // - Not supported with a private reply-to address. - // - One mail to each user: - // - Recipients need to look in the mail body to see To/Cc. - // - If you use mailing lists, recipients may sometimes get duplicate - // mail. - // - Getting threading to work properly is easier, and threading settings - // can be customzied by each user. - // - "Reply All" no longer spams all other users. - // - Required if private reply-to addresses are configured. - // - // In the code, splitting one outbound email into one-per-recipient is - // sometimes referred to as "multiplexing". - 'metamta.one-mail-per-recipient' => true, - - // When a user takes an action which generates an email notification (like - // commenting on a Differential revision), Phabricator can either send that - // mail "From" the user's email address (like "alincoln@logcabin.com") or - // "From" the 'metamta.default-address' address. The user experience is - // generally better if Phabricator uses the user's real address as the "From" - // since the messages are easier to organize when they appear in mail clients, - // but this will only work if the server is authorized to send email on behalf - // of the "From" domain. Practically, this means: - // - If you are doing an install for Example Corp and all the users will - // have corporate @corp.example.com addresses and any hosts Phabricator - // is running on are authorized to send email from corp.example.com, - // you can enable this to make the user experience a little better. - // - If you are doing an install for an open source project and your - // users will be registering via Facebook and using personal email - // addresses, you MUST NOT enable this or virtually all of your outgoing - // email will vanish into SFP blackholes. - // - If your install is anything else, you're much safer leaving this - // off since the risk in turning it on is that your outgoing mail will - // mostly never arrive. - 'metamta.can-send-as-user' => false, - - - // Adapter class to use to transmit mail to the MTA. The default uses - // PHPMailerLite, which will invoke "sendmail". This is appropriate - // if sendmail actually works on your host, but if you haven't configured mail - // it may not be so great. You can also use Amazon SES, by changing this to - // 'PhabricatorMailImplementationAmazonSESAdapter', signing up for SES, and - // filling in your 'amazon-ses.access-key' and 'amazon-ses.secret-key' below. - 'metamta.mail-adapter' => - 'PhabricatorMailImplementationPHPMailerLiteAdapter', - - // When email is sent, try to hand it off to the MTA immediately. This may - // be worth disabling if your MTA infrastructure is slow or unreliable. If you - // disable this option, you must run the 'metamta_mta.php' daemon or mail - // won't be handed off to the MTA. If you're using Amazon SES it can be a - // little slugish sometimes so it may be worth disabling this and moving to - // the daemon after you've got your install up and running. If you have a - // properly configured local MTA it should not be necessary to disable this. - 'metamta.send-immediately' => true, - - // If you're using Amazon SES to send email, provide your AWS access key - // and AWS secret key here. To set up Amazon SES with Phabricator, you need - // to: - // - Make sure 'metamta.mail-adapter' is set to: - // "PhabricatorMailImplementationAmazonSESAdapter" - // - Make sure 'metamta.can-send-as-user' is false. - // - Make sure 'metamta.default-address' is configured to something sensible. - // - Make sure 'metamta.default-address' is a validated SES "From" address. - 'amazon-ses.access-key' => null, - 'amazon-ses.secret-key' => null, - - // If you're using Sendgrid to send email, provide your access credentials - // here. This will use the REST API. You can also use Sendgrid as a normal - // SMTP service. - 'sendgrid.api-user' => null, - 'sendgrid.api-key' => null, - - // You can configure a reply handler domain so that email sent from Maniphest - // will have a special "Reply To" address like "T123+82+af19f@example.com" - // that allows recipients to reply by email and interact with tasks. For - // instructions on configurating reply handlers, see the article - // "Configuring Inbound Email" in the Phabricator documentation. By default, - // this is set to 'null' and Phabricator will use a generic 'noreply@' address - // or the address of the acting user instead of a special reply handler - // address (see 'metamta.default-address'). If you set a domain here, - // Phabricator will begin generating private reply handler addresses. See - // also 'metamta.maniphest.reply-handler' to further configure behavior. - // This key should be set to the domain part after the @, like "example.com". - 'metamta.maniphest.reply-handler-domain' => null, - - // You can follow the instructions in "Configuring Inbound Email" in the - // Phabricator documentation and set 'metamta.maniphest.reply-handler-domain' - // to support updating Maniphest tasks by email. If you want more advanced - // customization than this provides, you can override the reply handler - // class with an implementation of your own. This will allow you to do things - // like have a single public reply handler or change how private reply - // handlers are generated and validated. - // This key should be set to a loadable subclass of - // PhabricatorMailReplyHandler (and possibly of ManiphestReplyHandler). - 'metamta.maniphest.reply-handler' => 'ManiphestReplyHandler', - - // If you don't want phabricator to take up an entire domain - // (or subdomain for that matter), you can use this and set a common - // prefix for mail sent by phabricator. It will make use of the fact that - // a mail-address such as phabricator+D123+1hjk213h@example.com will be - // delivered to the phabricator users mailbox. - // Set this to the left part of the email address and it well get - // prepended to all outgoing mail. If you want to use e.g. - // 'phabricator@example.com' this should be set to 'phabricator'. - 'metamta.single-reply-handler-prefix' => null, - - // Prefix prepended to mail sent by Maniphest. You can change this to - // distinguish between testing and development installs, for example. - 'metamta.maniphest.subject-prefix' => '[Maniphest]', - - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, - // but allows email replies via Differential. - 'metamta.differential.reply-handler-domain' => null, - - // See 'metamta.maniphest.reply-handler'. This does the same thing, but - // affects Differential. - 'metamta.differential.reply-handler' => 'DifferentialReplyHandler', - - // Prefix prepended to mail sent by Differential. - 'metamta.differential.subject-prefix' => '[Differential]', - - // Set this to true if you want patches to be attached to mail from - // Differential. This won't work if you are using SendGrid as your mail - // adapter. - 'metamta.differential.attach-patches' => false, - - // To include patches in email bodies, set this to a positive integer. Patches - // will be inlined if they are at most that many lines. For instance, a value - // of 100 means "inline patches if they are no longer than 100 lines". By - // default, patches are not inlined. - 'metamta.differential.inline-patches' => 0, - - // If you enable either of the options above, you can choose what format - // patches are sent in. Valid options are 'unified' (like diff -u) or 'git'. - 'metamta.differential.patch-format' => 'unified', - - // Prefix prepended to mail sent by Diffusion. - 'metamta.diffusion.subject-prefix' => '[Diffusion]', - - // See 'metamta.maniphest.reply-handler-domain'. This does the same thing, - // but allows email replies via Diffusion. - 'metamta.diffusion.reply-handler-domain' => null, - - // See 'metamta.maniphest.reply-handler'. This does the same thing, but - // affects Diffusion. - 'metamta.diffusion.reply-handler' => 'PhabricatorAuditReplyHandler', - - // Prefix prepended to mail sent by Package. - 'metamta.package.subject-prefix' => '[Package]', - - // See 'metamta.maniphest.reply-handler'. This does similar thing for package - // except that it only supports sending out mail and doesn't handle incoming - // email. - 'metamta.package.reply-handler' => 'OwnersPackageReplyHandler', - - // By default, Phabricator generates unique reply-to addresses and sends a - // separate email to each recipient when you enable reply handling. This is - // more secure than using "From" to establish user identity, but can mean - // users may receive multiple emails when they are on mailing lists. Instead, - // you can use a single, non-unique reply to address and authenticate users - // based on the "From" address by setting this to 'true'. This trades away - // a little bit of security for convenience, but it's reasonable in many - // installs. Object interactions are still protected using hashes in the - // single public email address, so objects can not be replied to blindly. - 'metamta.public-replies' => false, - - // You can configure an email address like "bugs@phabricator.example.com" - // which will automatically create Maniphest tasks when users send email - // to it. This relies on the "From" address to authenticate users, so it is - // is not completely secure. To set this up, enter a complete email - // address like "bugs@phabricator.example.com" and then configure mail to - // that address so it routed to Phabricator (if you've already configured - // reply handlers, you're probably already done). See "Configuring Inbound - // Email" in the documentation for more information. - 'metamta.maniphest.public-create-email' => null, - - // If you enable 'metamta.public-replies', Phabricator uses "From" to - // authenticate users. You can additionally enable this setting to try to - // authenticate with 'Reply-To'. Note that this is completely spoofable and - // insecure (any user can set any 'Reply-To' address) but depending on the - // nature of your install or other deliverability conditions this might be - // okay. Generally, you can't do much more by spoofing Reply-To than be - // annoying (you can write but not read content). But, you know, this is - // still **COMPLETELY INSECURE**. - 'metamta.insecure-auth-with-reply-to' => false, - - // If you enable 'metamta.maniphest.public-create-email' and create an - // email address like "bugs@phabricator.example.com", it will default to - // rejecting mail which doesn't come from a known user. However, you might - // want to let anyone send email to this address; to do so, set a default - // author here (a Phabricator username). A typical use of this might be to - // create a "System Agent" user called "bugs" and use that name here. If you - // specify a valid username, mail will always be accepted and used to create - // a task, even if the sender is not a system user. The original email - // address will be stored in an 'From Email' field on the task. - 'metamta.maniphest.default-public-author' => null, - - // If this option is enabled, Phabricator will add a "Precedence: bulk" - // header to transactional mail (e.g., Differential, Maniphest and Herald - // notifications). This may improve the behavior of some auto-responder - // software and prevent it from replying. However, it may also cause - // deliverability issues -- notably, you currently can not send this header - // via Amazon SES, and enabling this option with SES will prevent delivery - // of any affected mail. - 'metamta.precedence-bulk' => false, - - // Mail.app on OS X Lion won't respect threading headers unless the subject - // is prefixed with "Re:". If you enable this option, Phabricator will add - // "Re:" to the subject line of all mail which is expected to thread. If - // you've set 'metamta.one-mail-per-recipient', users can override this - // setting in their preferences. - 'metamta.re-prefix' => false, - - // If true, allow MetaMTA to change mail subjects to put text like - // '[Accepted]' and '[Commented]' in them. This makes subjects more useful, - // but might break threading on some clients. If you've set - // 'metamta.one-mail-per-recipient', users can override this setting in their - // preferences. - 'metamta.vary-subjects' => true, - - -// -- Auth ------------------------------------------------------------------ // - - // Can users login with a username/password, or by following the link from - // a password reset email? You can disable this and configure one or more - // OAuth providers instead. - 'auth.password-auth-enabled' => true, - - // Maximum number of simultaneous web sessions each user is permitted to have. - // Setting this to "1" will prevent a user from logging in on more than one - // browser at the same time. - 'auth.sessions.web' => 5, - - // Maximum number of simultaneous Conduit sessions each user is permitted - // to have. - 'auth.sessions.conduit' => 5, - - // Set this true to enable the Settings -> SSH Public Keys panel, which will - // allow users to associated SSH public keys with their accounts. This is only - // really useful if you're setting up services over SSH and want to use - // Phabricator for authentication; in most situations you can leave this - // disabled. - 'auth.sshkeys.enabled' => false, - - // If true, email addresses must be verified (by clicking a link in an - // email) before a user can login. By default, verification is optional - // unless 'auth.email-domains' is nonempty (see below). - 'auth.require-email-verification' => false, - - // You can restrict allowed email addresses to certain domains (like - // "yourcompany.com") by setting a list of allowed domains here. Users will - // only be allowed to register using email addresses at one of the domains, - // and will only be able to add new email addresses for these domains. If - // you configure this, it implies 'auth.require-email-verification'. - // - // To configure email domains, set a list of domains like this: - // - // array( - // 'yourcompany.com', - // 'yourcompany.co.uk', - // ) - // - // You should omit the "@" from domains. Note that the domain must match - // exactly. If you allow "yourcompany.com", that permits "joe@yourcompany.com" - // but rejects "joe@mail.yourcompany.com". - 'auth.email-domains' => array(), - - -// -- Accounts -------------------------------------------------------------- // - - // Is basic account information (email, real name, profile picture) editable? - // If you set up Phabricator to automatically synchronize account information - // from some other authoritative system, you can disable this to ensure - // information remains consistent across both systems. - 'account.editable' => true, - - // When users set or reset a password, it must have at least this many - // characters. - 'account.minimum-password-length' => 8, - - -// -- Facebook OAuth -------------------------------------------------------- // - - // Can users use Facebook credentials to login to Phabricator? - 'facebook.auth-enabled' => false, - - // Can users use Facebook credentials to create new Phabricator accounts? - 'facebook.registration-enabled' => true, - - // Are Facebook accounts permanently linked to Phabricator accounts, or can - // the user unlink them? - 'facebook.auth-permanent' => false, - - // The Facebook "Application ID" to use for Facebook API access. - 'facebook.application-id' => null, - - // The Facebook "Application Secret" to use for Facebook API access. - 'facebook.application-secret' => null, - - -// -- GitHub OAuth ---------------------------------------------------------- // - - // Can users use GitHub credentials to login to Phabricator? - 'github.auth-enabled' => false, - - // Can users use GitHub credentials to create new Phabricator accounts? - 'github.registration-enabled' => true, - - // Are GitHub accounts permanently linked to Phabricator accounts, or can - // the user unlink them? - 'github.auth-permanent' => false, - - // The GitHub "Client ID" to use for GitHub API access. - 'github.application-id' => null, - - // The GitHub "Secret" to use for GitHub API access. - 'github.application-secret' => null, - - -// -- Google OAuth ---------------------------------------------------------- // - - // Can users use Google credentials to login to Phabricator? - 'google.auth-enabled' => false, - - // Can users use Google credentials to create new Phabricator accounts? - 'google.registration-enabled' => true, - - // Are Google accounts permanently linked to Phabricator accounts, or can - // the user unlink them? - 'google.auth-permanent' => false, - - // The Google "Client ID" to use for Google API access. - 'google.application-id' => null, - - // The Google "Client Secret" to use for Google API access. - 'google.application-secret' => null, - -// -- LDAP Auth ----------------------------------------------------- // - // Enable ldap auth - 'ldap.auth-enabled' => false, - - // The LDAP server hostname - 'ldap.hostname' => '', - - // The LDAP base domain name - 'ldap.base_dn' => '', - - // The attribute to be regarded as 'username'. Has to be unique - 'ldap.search_attribute' => '', - - // The attribute(s) to be regarded as 'real name'. - // If more then one attribute is supplied the values of the attributes in - // the array will be joined - 'ldap.real_name_attributes' => array(), - - // The LDAP version - 'ldap.version' => 3, - -// -- Disqus OAuth ---------------------------------------------------------- // - - // Can users use Disqus credentials to login to Phabricator? - 'disqus.auth-enabled' => false, - - // Can users use Disqus credentials to create new Phabricator accounts? - 'disqus.registration-enabled' => true, - - // Are Disqus accounts permanently linked to Phabricator accounts, or can - // the user unlink them? - 'disqus.auth-permanent' => false, - - // The Disqus "Client ID" to use for Disqus API access. - 'disqus.application-id' => null, - - // The Disqus "Client Secret" to use for Disqus API access. - 'disqus.application-secret' => null, - - -// -- Phabricator OAuth ----------------------------------------------------- // - - // Meta-town -- Phabricator is itself an OAuth Provider - // TODO -- T887 -- make this support multiple Phabricator instances! - - // The URI of the Phabricator instance to use as an OAuth server. - 'phabricator.oauth-uri' => null, - - // Can users use Phabricator credentials to login to Phabricator? - 'phabricator.auth-enabled' => false, - - // Can users use Phabricator credentials to create new Phabricator accounts? - 'phabricator.registration-enabled' => true, - - // Are Phabricator accounts permanently linked to Phabricator accounts, or can - // the user unlink them? - 'phabricator.auth-permanent' => false, - - // The Phabricator "Client ID" to use for Phabricator API access. - 'phabricator.application-id' => null, - - // The Phabricator "Client Secret" to use for Phabricator API access. - 'phabricator.application-secret' => null, - -// -- Disqus Comments ------------------------------------------------------- // - - // Should Phame users have Disqus comment widget, and if so what's the - // website shortname to use? For example, secure.phabricator.org uses - // "phabricator", which we registered with Disqus. If you aren't familiar - // with Disqus, see: - // Disqus quick start guide - http://docs.disqus.com/help/4/ - // Information on shortnames - http://docs.disqus.com/help/68/ - 'disqus.shortname' => null, - -// -- Recaptcha ------------------------------------------------------------- // - - // Is Recaptcha enabled? If disabled, captchas will not appear. You should - // enable Recaptcha if your install is public-facing, as it hinders - // brute-force attacks. - 'recaptcha.enabled' => false, - - // Your Recaptcha public key, obtained from Recaptcha. - 'recaptcha.public-key' => null, - - // Your Recaptcha private key, obtained from Recaptcha. - 'recaptcha.private-key' => null, - - -// -- Misc ------------------------------------------------------------------ // - - // This is hashed with other inputs to generate CSRF tokens. If you want, you - // can change it to some other string which is unique to your install. This - // will make your install more secure in a vague, mostly theoretical way. But - // it will take you like 3 seconds of mashing on your keyboard to set it up so - // you might as well. - 'phabricator.csrf-key' => '0b7ec0592e0a2829d8b71df2fa269b2c6172eca3', - - // This is hashed with other inputs to generate mail tokens. If you want, you - // can change it to some other string which is unique to your install. In - // particular, you will want to do this if you accidentally send a bunch of - // mail somewhere you shouldn't have, to invalidate all old reply-to - // addresses. - 'phabricator.mail-key' => '5ce3e7e8787f6e40dfae861da315a5cdf1018f12', - - // Version string displayed in the footer. You probably should leave this - // alone. - 'phabricator.version' => 'UNSTABLE', - - // PHP requires that you set a timezone in your php.ini before using date - // functions, or it will emit a warning. If this isn't possible (for instance, - // because you are using HPHP) you can set some valid constant for - // date_default_timezone_set() here and Phabricator will set it on your - // behalf, silencing the warning. - 'phabricator.timezone' => null, - - // When unhandled exceptions occur, stack traces are hidden by default. - // You can enable traces for development to make it easier to debug problems. - 'phabricator.show-stack-traces' => false, - - // Shows an error callout if a page generated PHP errors, warnings or notices. - // This makes it harder to miss problems while developing Phabricator. - 'phabricator.show-error-callout' => false, - - // When users write comments which have URIs, they'll be automatically linked - // if the protocol appears in this set. This whitelist is primarily to prevent - // security issues like javascript:// URIs. - 'uri.allowed-protocols' => array( - 'http' => true, - 'https' => true, - ), - - // Tokenizers are UI controls which let the user select other users, email - // addresses, project names, etc., by typing the first few letters and having - // the control autocomplete from a list. They can load their data in two ways: - // either in a big chunk up front, or as the user types. By default, the data - // is loaded in a big chunk. This is simpler and performs better for small - // datasets. However, if you have a very large number of users or projects, - // (in the ballpark of more than a thousand), loading all that data may become - // slow enough that it's worthwhile to query on demand instead. This makes - // the typeahead slightly less responsive but overall performance will be much - // better if you have a ton of stuff. You can figure out which setting is - // best for your install by changing this setting and then playing with a - // user tokenizer (like the user selectors in Maniphest or Differential) and - // seeing which setting loads faster and feels better. - 'tokenizer.ondemand' => false, - - // By default, Phabricator includes some silly nonsense in the UI, such as - // a submit button called "Clowncopterize" in Differential and a call to - // "Leap Into Action". If you'd prefer more traditional UI strings like - // "Submit", you can set this flag to disable most of the jokes and easter - // eggs. - 'phabricator.serious-business' => false, - - -// -- Files ----------------------------------------------------------------- // - - // Lists which uploaded file types may be viewed in the browser. If a file - // has a mime type which does not appear in this list, it will always be - // downloaded instead of displayed. This is mainly a usability - // consideration, since browsers tend to freak out when viewing enormous - // binary files. - // - // The keys in this array are viewable mime types; the values are the mime - // types they will be delivered as when they are viewed in the browser. - // - // IMPORTANT: Configure 'security.alternate-file-domain' above! Your install - // is NOT safe if it is left unconfigured. - 'files.viewable-mime-types' => array( - 'image/jpeg' => 'image/jpeg', - 'image/jpg' => 'image/jpg', - 'image/png' => 'image/png', - 'image/gif' => 'image/gif', - 'text/plain' => 'text/plain; charset=utf-8', - 'text/x-diff' => 'text/plain; charset=utf-8', - - // ".ico" favicon files, which have mime type diversity. See: - // http://en.wikipedia.org/wiki/ICO_(file_format)#MIME_type - 'image/x-ico' => 'image/x-icon', - 'image/x-icon' => 'image/x-icon', - 'image/vnd.microsoft.icon' => 'image/x-icon', - ), - - // List of mime types which can be used as the source for an tag. - // This should be a subset of 'files.viewable-mime-types' and exclude files - // like text. - 'files.image-mime-types' => array( - 'image/jpeg' => true, - 'image/jpg' => true, - 'image/png' => true, - 'image/gif' => true, - 'image/x-ico' => true, - 'image/x-icon' => true, - 'image/vnd.microsoft.icon' => true, - ), - - // Phabricator can proxy images from other servers so you can paste the URI - // to a funny picture of a cat into the comment box and have it show up as an - // image. However, this means the webserver Phabricator is running on will - // make HTTP requests to arbitrary URIs. If the server has access to internal - // resources, this could be a security risk. You should only enable it if you - // are installed entirely a VPN and VPN access is required to access - // Phabricator, or if the webserver has no special access to anything. If - // unsure, it is safer to leave this disabled. - 'files.enable-proxy' => false, - - -// -- Storage --------------------------------------------------------------- // - - // Phabricator allows users to upload files, and can keep them in various - // storage engines. This section allows you to configure which engines - // Phabricator will use, and how it will use them. - - // The largest filesize Phabricator will store in the MySQL BLOB storage - // engine, which just uses a database table to store files. While this isn't a - // best practice, it's really easy to set up. This is hard-limited by the - // value of 'max_allowed_packet' in MySQL (since this often defaults to 1MB, - // the default here is slightly smaller than 1MB). Set this to 0 to disable - // use of the MySQL blob engine. - 'storage.mysql-engine.max-size' => 1000000, - - // Phabricator provides a local disk storage engine, which just writes files - // to some directory on local disk. The webserver must have read/write - // permissions on this directory. This is straightforward and suitable for - // most installs, but will not scale past one web frontend unless the path - // is actually an NFS mount, since you'll end up with some of the files - // written to each web frontend and no way for them to share. To use the - // local disk storage engine, specify the path to a directory here. To - // disable it, specify null. - 'storage.local-disk.path' => null, - - // If you want to store files in Amazon S3, specify an AWS access and secret - // key here and a bucket name below. - 'amazon-s3.access-key' => null, - 'amazon-s3.secret-key' => null, - - // Set this to a valid Amazon S3 bucket to store files there. You must also - // configure S3 access keys above. - 'storage.s3.bucket' => null, - - // Phabricator uses a storage engine selector to choose which storage engine - // to use when writing file data. If you add new storage engines or want to - // provide very custom rules (e.g., write images to one storage engine and - // other files to a different one), you can provide an alternate - // implementation here. The default engine will use choose MySQL, Local Disk, - // and S3, in that order, if they have valid configurations above and a file - // fits within configured limits. - 'storage.engine-selector' => 'PhabricatorDefaultFileStorageEngineSelector', - - // Set the size of the largest file a user may upload. This is used to render - // text like "Maximum file size: 10MB" on interfaces where users can upload - // files, and files larger than this size will be rejected. - // - // Specify this limit in bytes, or using a "K", "M", or "G" suffix. - // - // NOTE: Setting this to a large size is NOT sufficient to allow users to - // upload large files. You must also configure a number of other settings. To - // configure file upload limits, consult the article "Configuring File Upload - // Limits" in the documentation. Once you've configured some limit across all - // levels of the server, you can set this limit to an appropriate value and - // the UI will then reflect the actual configured limit. - 'storage.upload-size-limit' => null, - - // Phabricator puts databases in a namespace, which defualts to "phabricator" - // -- for instance, the Differential database is named - // "phabricator_differential" by default. You can change this namespace if you - // want. Normally, you should not do this unless you are developing - // Phabricator and using namespaces to separate multiple sandbox datasets. - 'storage.default-namespace' => 'phabricator', - - -// -- Search ---------------------------------------------------------------- // - - // Phabricator supports Elastic Search; to use it, specify a host like - // 'http://elastic.example.com:9200/' here. - 'search.elastic.host' => null, - - // Phabricator uses a search engine selector to choose which search engine - // to use when indexing and reconstructing documents, and when executing - // queries. You can override the engine selector to provide a new selector - // class which can select some custom engine you implement, if you want to - // store your documents in some search engine which does not have default - // support. - 'search.engine-selector' => 'PhabricatorDefaultSearchEngineSelector', - - -// -- Differential ---------------------------------------------------------- // - - 'differential.revision-custom-detail-renderer' => null, - - // Array for custom remarkup rules. The array should have a list of - // class names of classes that extend PhutilRemarkupRule - 'differential.custom-remarkup-rules' => null, - - // Array for custom remarkup block rules. The array should have a list of - // class names of classes that extend PhutilRemarkupEngineBlockRule - 'differential.custom-remarkup-block-rules' => null, - - // Set display word-wrap widths for Differential. Specify a dictionary of - // regular expressions mapping to column widths. The filename will be matched - // against each regexp in order until one matches. The default configuration - // uses a width of 100 for Java and 80 for other languages. Note that 80 is - // the greatest column width of all time. Changes here will not be immediately - // reflected in old revisions unless you purge the changeset render cache - // (with `./scripts/util/purge_cache.php --changesets`). - 'differential.wordwrap' => array( - '/\.java$/' => 100, - '/.*/' => 80, - ), - - // List of file regexps where whitespace is meaningful and should not - // use 'ignore-all' by default - 'differential.whitespace-matters' => array( - '/\.py$/', - '/\.l?hs$/', - ), - - 'differential.field-selector' => 'DifferentialDefaultFieldSelector', - - // Differential can show "Host" and "Path" fields on revisions, with - // information about the machine and working directory where the - // change came from. These fields are disabled by default because they may - // occasionally have sensitive information; you can set this to true to - // enable them. - 'differential.show-host-field' => false, - - // Differential has a required "Test Plan" field by default, which requires - // authors to fill out information about how they verified the correctness of - // their changes when sending code for review. If you'd prefer not to use - // this field, you can disable it here. You can also make it optional - // (instead of required) below. - 'differential.show-test-plan-field' => true, - - // Differential has a required "Test Plan" field by default. You can make it - // optional by setting this to false. You can also completely remove it above, - // if you prefer. - 'differential.require-test-plan-field' => true, - - // If you set this to true, users can "!accept" revisions via email (normally, - // they can take other actions but can not "!accept"). This action is disabled - // by default because email authentication can be configured to be very weak, - // and, socially, email "!accept" is kind of sketchy and implies revisions may - // not actually be receiving thorough review. - 'differential.enable-email-accept' => false, - - // If you set this to true, users won't need to login to view differential - // revisions. Anonymous users will have read-only access and won't be able to - // interact with the revisions. - 'differential.anonymous-access' => false, - - // List of file regexps that should be treated as if they are generated by - // an automatic process, and thus get hidden by default in differential - 'differential.generated-paths' => array( - // '/config\.h$/', - // '#/autobuilt/#', - ), - - -// -- Maniphest ------------------------------------------------------------- // - - 'maniphest.enabled' => true, - - // Array of custom fields for Maniphest tasks. For details on adding custom - // fields to Maniphest, see "Maniphest User Guide: Adding Custom Fields". - 'maniphest.custom-fields' => array(), - - // Class which drives custom field construction. See "Maniphest User Guide: - // Adding Custom Fields" in the documentation for more information. - 'maniphest.custom-task-extensions-class' => 'ManiphestDefaultTaskExtensions', - -// -- Phriction ------------------------------------------------------------- // - - 'phriction.enabled' => true, - -// -- Remarkup -------------------------------------------------------------- // - - // If you enable this, linked YouTube videos will be embeded inline. This has - // mild security implications (you'll leak referrers to YouTube) and is pretty - // silly (but sort of awesome). - 'remarkup.enable-embedded-youtube' => false, - - -// -- Garbage Collection ---------------------------------------------------- // - - // Phabricator generates various logs and caches in the database which can - // be garbage collected after a while to make the total data size more - // manageable. To run garbage collection, launch a - // PhabricatorGarbageCollector daemon. - - // Since the GC daemon can issue large writes and table scans, you may want to - // run it only during off hours or make sure it is scheduled so it doesn't - // overlap with backups. This determines when the daemon can start running - // each day. - 'gcdaemon.run-at' => '12 AM', - - // How many seconds after 'gcdaemon.run-at' the daemon may collect garbage - // for. By default it runs continuously, but you can set it to run for a - // limited period of time. For instance, if you do backups at 3 AM, you might - // run garbage collection for an hour beforehand. This is not a high-precision - // limit so you may want to leave some room for the GC to actually stop, and - // if you set it to something like 3 seconds you're on your own. - 'gcdaemon.run-for' => 24 * 60 * 60, - - // These 'ttl' keys configure how much old data the GC daemon keeps around. - // Objects older than the ttl will be collected. Set any value to 0 to store - // data indefinitely. - - 'gcdaemon.ttl.herald-transcripts' => 30 * (24 * 60 * 60), - 'gcdaemon.ttl.daemon-logs' => 7 * (24 * 60 * 60), - 'gcdaemon.ttl.differential-parse-cache' => 14 * (24 * 60 * 60), - - -// -- Feed ------------------------------------------------------------------ // - - // If you set this to true, you can embed Phabricator activity feeds in other - // pages using iframes. These feeds are completely public, and a login is not - // required to view them! This is intended for things like open source - // projects that want to expose an activity feed on the project homepage. - 'feed.public' => false, - - -// -- Drydock --------------------------------------------------------------- // - - // If you want to use Drydock's builtin EC2 Blueprints, configure your AWS - // EC2 credentials here. - 'amazon-ec2.access-key' => null, - 'amazon-ec2.secret-key' => null, - -// -- Customization --------------------------------------------------------- // - - // Paths to additional phutil libraries to load. - 'load-libraries' => array(), - - 'aphront.default-application-configuration-class' => - 'AphrontDefaultApplicationConfiguration', - - 'controller.oauth-registration' => - 'PhabricatorOAuthDefaultRegistrationController', - - - // Directory that phd (the Phabricator daemon control script) should use to - // track running daemons. - 'phd.pid-directory' => '/var/tmp/phd', - - // Number of "TaskMaster" daemons that "phd start" should start. You can - // raise this if you have a task backlog, or explicitly launch more with - // "phd launch taskmaster". - 'phd.start-taskmasters' => 4, - - // Path to custom celerity resource map relative to 'phabricator/src'. - // See also `scripts/celerity_mapper.php`. - 'celerity.resource-path' => '__celerity_resource_map__.php', - - // This value is an input to the hash function when building resource hashes. - // It has no security value, but if you accidentally poison user caches (by - // pushing a bad patch or having something go wrong with a CDN, e.g.) you can - // change this to something else and rebuild the Celerity map to break user - // caches. Unless you are doing Celerity development, it is exceptionally - // unlikely that you need to modify this. - 'celerity.resource-hash' => 'd9455ea150622ee044f7931dabfa52aa', - - // In a development environment, it is desirable to force static resources - // (CSS and JS) to be read from disk on every request, so that edits to them - // appear when you reload the page even if you haven't updated the resource - // maps. This setting ensures requests will be verified against the state on - // disk. Generally, you should leave this off in production (caching behavior - // and performance improve with it off) but turn it on in development. (These - // settings are the defaults.) - 'celerity.force-disk-reads' => false, - - // Minify static resources by removing whitespace and comments. You should - // enable this in production, but disable it in development. - 'celerity.minify' => false, - - // You can respond to various application events by installing listeners, - // which will receive callbacks when interesting things occur. Specify a list - // of classes which extend PhabricatorEventListener here. - 'events.listeners' => array(), - -// -- Pygments -------------------------------------------------------------- // - - // Phabricator can highlight PHP by default, but if you want syntax - // highlighting for other languages you should install the python package - // 'Pygments', make sure the 'pygmentize' script is available in the - // $PATH of the webserver, and then enable this. - 'pygments.enabled' => false, - - // In places that we display a dropdown to syntax-highlight code, - // this is where that list is defined. - // Syntax is 'lexer-name' => 'Display Name', - 'pygments.dropdown-choices' => array( - 'apacheconf' => 'Apache Configuration', - 'bash' => 'Bash Scripting', - 'brainfuck' => 'Brainf*ck', - 'c' => 'C', - 'cpp' => 'C++', - 'css' => 'CSS', - 'diff' => 'Diff', - 'django' => 'Django Templating', - 'erb' => 'Embedded Ruby/ERB', - 'erlang' => 'Erlang', - 'html' => 'HTML', - 'infer' => 'Infer from title (extension)', - 'java' => 'Java', - 'js' => 'Javascript', - 'mysql' => 'MySQL', - 'perl' => 'Perl', - 'php' => 'PHP', - 'text' => 'Plain Text', - 'python' => 'Python', - 'rainbow' => 'Rainbow', - 'remarkup' => 'Remarkup', - 'ruby' => 'Ruby', - 'xml' => 'XML', - ), - - 'pygments.dropdown-default' => 'infer', - - // This is an override list of regular expressions which allows you to choose - // what language files are highlighted as. If your projects have certain rules - // about filenames or use unusual or ambiguous language extensions, you can - // create a mapping here. This is an ordered dictionary of regular expressions - // which will be tested against the filename. They should map to either an - // explicit language as a string value, or a numeric index into the captured - // groups as an integer. - 'syntax.filemap' => array( - // Example: Treat all '*.xyz' files as PHP. - // '@\\.xyz$@' => 'php', - - // Example: Treat 'httpd.conf' as 'apacheconf'. - // '@/httpd\\.conf$@' => 'apacheconf', - - // Example: Treat all '*.x.bak' file as '.x'. NOTE: we map to capturing - // group 1 by specifying the mapping as "1". - // '@\\.([^.]+)\\.bak$@' => 1, - - '@\.arcconfig$@' => 'js', - ), - -); diff --git a/conf/development.conf.php b/conf/development.conf.php deleted file mode 100644 index 425afda13a..0000000000 --- a/conf/development.conf.php +++ /dev/null @@ -1,27 +0,0 @@ - true, - 'celerity.force-disk-reads' => true, - 'phabricator.show-stack-traces' => true, - 'phabricator.show-error-callout' => true, - 'celerity.minify' => false, - -) + phabricator_read_config_file('default'); diff --git a/conf/keys/.keep b/conf/keys/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/conf/local/README b/conf/local/README new file mode 100644 index 0000000000..a7dca3593a --- /dev/null +++ b/conf/local/README @@ -0,0 +1 @@ +Run bin/config to work with this directory. diff --git a/conf/production.conf.php b/conf/production.conf.php deleted file mode 100644 index 7228521c76..0000000000 --- a/conf/production.conf.php +++ /dev/null @@ -1,22 +0,0 @@ - + +Usage JavaScript: + + + +Note: +Google Closure Compiler is much more powerful and efficient tool. +JsShrink was created for those looking for PHP or JavaScript only solution. +Most other JS minifiers are not able to process valid JavaScript code: +http://php.vrana.cz/minifikace-javascriptu.php#srovnani diff --git a/externals/amazon-ses/ses.php b/externals/amazon-ses/ses.php deleted file mode 100644 index bec4230df2..0000000000 --- a/externals/amazon-ses/ses.php +++ /dev/null @@ -1,742 +0,0 @@ -__accessKey; } - public function getSecretKey() { return $this->__secretKey; } - public function getHost() { return $this->__host; } - - protected $__verifyHost = 1; - protected $__verifyPeer = 1; - - // verifyHost and verifyPeer determine whether curl verifies ssl certificates. - // It may be necessary to disable these checks on certain systems. - // These only have an effect if SSL is enabled. - public function verifyHost() { return $this->__verifyHost; } - public function enableVerifyHost($enable = true) { $this->__verifyHost = $enable; } - - public function verifyPeer() { return $this->__verifyPeer; } - public function enableVerifyPeer($enable = true) { $this->__verifyPeer = $enable; } - - // If you use exceptions, errors will be communicated by throwing a - // SimpleEmailServiceException. By default, they will be trigger_error()'d. - protected $__useExceptions = 0; - public function useExceptions() { return $this->__useExceptions; } - public function enableUseExceptions($enable = true) { $this->__useExceptions = $enable; } - - /** - * Constructor - * - * @param string $accessKey Access key - * @param string $secretKey Secret key - * @return void - */ - public function __construct($accessKey = null, $secretKey = null, $host = 'email.us-east-1.amazonaws.com') { - if ($accessKey !== null && $secretKey !== null) { - $this->setAuth($accessKey, $secretKey); - } - $this->__host = $host; - } - - /** - * Set AWS access key and secret key - * - * @param string $accessKey Access key - * @param string $secretKey Secret key - * @return void - */ - public function setAuth($accessKey, $secretKey) { - $this->__accessKey = $accessKey; - $this->__secretKey = $secretKey; - } - - /** - * Lists the email addresses that have been verified and can be used as the 'From' address - * - * @return An array containing two items: a list of verified email addresses, and the request id. - */ - public function listVerifiedEmailAddresses() { - $rest = new SimpleEmailServiceRequest($this, 'GET'); - $rest->setParameter('Action', 'ListVerifiedEmailAddresses'); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('listVerifiedEmailAddresses', $rest->error); - return false; - } - - $response = array(); - if(!isset($rest->body)) { - return $response; - } - - $addresses = array(); - foreach($rest->body->ListVerifiedEmailAddressesResult->VerifiedEmailAddresses->member as $address) { - $addresses[] = (string)$address; - } - - $response['Addresses'] = $addresses; - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - - return $response; - } - - /** - * Requests verification of the provided email address, so it can be used - * as the 'From' address when sending emails through SimpleEmailService. - * - * After submitting this request, you should receive a verification email - * from Amazon at the specified address containing instructions to follow. - * - * @param string email The email address to get verified - * @return The request id for this request. - */ - public function verifyEmailAddress($email) { - $rest = new SimpleEmailServiceRequest($this, 'POST'); - $rest->setParameter('Action', 'VerifyEmailAddress'); - $rest->setParameter('EmailAddress', $email); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('verifyEmailAddress', $rest->error); - return false; - } - - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - return $response; - } - - /** - * Removes the specified email address from the list of verified addresses. - * - * @param string email The email address to remove - * @return The request id for this request. - */ - public function deleteVerifiedEmailAddress($email) { - $rest = new SimpleEmailServiceRequest($this, 'DELETE'); - $rest->setParameter('Action', 'DeleteVerifiedEmailAddress'); - $rest->setParameter('EmailAddress', $email); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('deleteVerifiedEmailAddress', $rest->error); - return false; - } - - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - return $response; - } - - /** - * Retrieves information on the current activity limits for this account. - * See http://docs.amazonwebservices.com/ses/latest/APIReference/API_GetSendQuota.html - * - * @return An array containing information on this account's activity limits. - */ - public function getSendQuota() { - $rest = new SimpleEmailServiceRequest($this, 'GET'); - $rest->setParameter('Action', 'GetSendQuota'); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('getSendQuota', $rest->error); - return false; - } - - $response = array(); - if(!isset($rest->body)) { - return $response; - } - - $response['Max24HourSend'] = (string)$rest->body->GetSendQuotaResult->Max24HourSend; - $response['MaxSendRate'] = (string)$rest->body->GetSendQuotaResult->MaxSendRate; - $response['SentLast24Hours'] = (string)$rest->body->GetSendQuotaResult->SentLast24Hours; - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - - return $response; - } - - /** - * Retrieves statistics for the last two weeks of activity on this account. - * See http://docs.amazonwebservices.com/ses/latest/APIReference/API_GetSendStatistics.html - * - * @return An array of activity statistics. Each array item covers a 15-minute period. - */ - public function getSendStatistics() { - $rest = new SimpleEmailServiceRequest($this, 'GET'); - $rest->setParameter('Action', 'GetSendStatistics'); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('getSendStatistics', $rest->error); - return false; - } - - $response = array(); - if(!isset($rest->body)) { - return $response; - } - - $datapoints = array(); - foreach($rest->body->GetSendStatisticsResult->SendDataPoints->member as $datapoint) { - $p = array(); - $p['Bounces'] = (string)$datapoint->Bounces; - $p['Complaints'] = (string)$datapoint->Complaints; - $p['DeliveryAttempts'] = (string)$datapoint->DeliveryAttempts; - $p['Rejects'] = (string)$datapoint->Rejects; - $p['Timestamp'] = (string)$datapoint->Timestamp; - - $datapoints[] = $p; - } - - $response['SendDataPoints'] = $datapoints; - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - - return $response; - } - - - public function sendRawEmail($raw) { - $rest = new SimpleEmailServiceRequest($this, 'POST'); - $rest->setParameter('Action', 'SendRawEmail'); - $rest->setParameter('RawMessage.Data', base64_encode($raw)); - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('sendRawEmail', $rest->error); - return false; - } - - $response['MessageId'] = (string)$rest->body->SendEmailResult->MessageId; - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - return $response; - } - - /** - * Given a SimpleEmailServiceMessage object, submits the message to the service for sending. - * - * @return An array containing the unique identifier for this message and a separate request id. - * Returns false if the provided message is missing any required fields. - */ - public function sendEmail($sesMessage) { - if(!$sesMessage->validate()) { - return false; - } - - $rest = new SimpleEmailServiceRequest($this, 'POST'); - $rest->setParameter('Action', 'SendEmail'); - - $i = 1; - foreach($sesMessage->to as $to) { - $rest->setParameter('Destination.ToAddresses.member.'.$i, $to); - $i++; - } - - if(is_array($sesMessage->cc)) { - $i = 1; - foreach($sesMessage->cc as $cc) { - $rest->setParameter('Destination.CcAddresses.member.'.$i, $cc); - $i++; - } - } - - if(is_array($sesMessage->bcc)) { - $i = 1; - foreach($sesMessage->bcc as $bcc) { - $rest->setParameter('Destination.BccAddresses.member.'.$i, $bcc); - $i++; - } - } - - if(is_array($sesMessage->replyto)) { - $i = 1; - foreach($sesMessage->replyto as $replyto) { - $rest->setParameter('ReplyToAddresses.member.'.$i, $replyto); - $i++; - } - } - - $rest->setParameter('Source', $sesMessage->from); - - if($sesMessage->returnpath != null) { - $rest->setParameter('ReturnPath', $sesMessage->returnpath); - } - - if($sesMessage->subject != null && strlen($sesMessage->subject) > 0) { - $rest->setParameter('Message.Subject.Data', $sesMessage->subject); - if($sesMessage->subjectCharset != null && strlen($sesMessage->subjectCharset) > 0) { - $rest->setParameter('Message.Subject.Charset', $sesMessage->subjectCharset); - } - } - - - if($sesMessage->messagetext != null && strlen($sesMessage->messagetext) > 0) { - $rest->setParameter('Message.Body.Text.Data', $sesMessage->messagetext); - if($sesMessage->messageTextCharset != null && strlen($sesMessage->messageTextCharset) > 0) { - $rest->setParameter('Message.Body.Text.Charset', $sesMessage->messageTextCharset); - } - } - - if($sesMessage->messagehtml != null && strlen($sesMessage->messagehtml) > 0) { - $rest->setParameter('Message.Body.Html.Data', $sesMessage->messagehtml); - if($sesMessage->messageHtmlCharset != null && strlen($sesMessage->messageHtmlCharset) > 0) { - $rest->setParameter('Message.Body.Html.Charset', $sesMessage->messageHtmlCharset); - } - } - - $rest = $rest->getResponse(); - if($rest->error === false && $rest->code !== 200) { - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - } - if($rest->error !== false) { - $this->__triggerError('sendEmail', $rest->error); - return false; - } - - $response['MessageId'] = (string)$rest->body->SendEmailResult->MessageId; - $response['RequestId'] = (string)$rest->body->ResponseMetadata->RequestId; - return $response; - } - - /** - * Trigger an error message - * - * @internal Used by member functions to output errors - * @param array $error Array containing error information - * @return string - */ - public function __triggerError($functionname, $error) - { - if($error == false) { - $message = sprintf("SimpleEmailService::%s(): Encountered an error, but no description given", $functionname); - } - else if(isset($error['curl']) && $error['curl']) - { - $message = sprintf("SimpleEmailService::%s(): %s %s", $functionname, $error['code'], $error['message']); - } - else if(isset($error['Error'])) - { - $e = $error['Error']; - $message = sprintf("SimpleEmailService::%s(): %s - %s: %s\nRequest Id: %s\n", $functionname, $e['Type'], $e['Code'], $e['Message'], $error['RequestId']); - } - - if ($this->useExceptions()) { - throw new SimpleEmailServiceException($message); - } else { - trigger_error($message, E_USER_WARNING); - } - } - - /** - * Callback handler for 503 retries. - * - * @internal Used by SimpleDBRequest to call the user-specified callback, if set - * @param $attempt The number of failed attempts so far - * @return The retry delay in microseconds, or 0 to stop retrying. - */ - public function __executeServiceTemporarilyUnavailableRetryDelay($attempt) - { - if(is_callable($this->__serviceUnavailableRetryDelayCallback)) { - $callback = $this->__serviceUnavailableRetryDelayCallback; - return $callback($attempt); - } - return 0; - } -} - -final class SimpleEmailServiceRequest -{ - private $ses, $verb, $parameters = array(); - public $response; - - /** - * Constructor - * - * @param string $ses The SimpleEmailService object making this request - * @param string $action action - * @param string $verb HTTP verb - * @return mixed - */ - function __construct($ses, $verb) { - $this->ses = $ses; - $this->verb = $verb; - $this->response = new STDClass; - $this->response->error = false; - } - - /** - * Set request parameter - * - * @param string $key Key - * @param string $value Value - * @param boolean $replace Whether to replace the key if it already exists (default true) - * @return void - */ - public function setParameter($key, $value, $replace = true) { - if(!$replace && isset($this->parameters[$key])) - { - $temp = (array)($this->parameters[$key]); - $temp[] = $value; - $this->parameters[$key] = $temp; - } - else - { - $this->parameters[$key] = $value; - } - } - - /** - * Get the response - * - * @return object | false - */ - public function getResponse() { - - $params = array(); - foreach ($this->parameters as $var => $value) - { - if(is_array($value)) - { - foreach($value as $v) - { - $params[] = $var.'='.$this->__customUrlEncode($v); - } - } - else - { - $params[] = $var.'='.$this->__customUrlEncode($value); - } - } - - sort($params, SORT_STRING); - - // must be in format 'Sun, 06 Nov 1994 08:49:37 GMT' - $date = gmdate('D, d M Y H:i:s e'); - - $query = implode('&', $params); - - $headers = array(); - $headers[] = 'Date: '.$date; - $headers[] = 'Host: '.$this->ses->getHost(); - - $auth = 'AWS3-HTTPS AWSAccessKeyId='.$this->ses->getAccessKey(); - $auth .= ',Algorithm=HmacSHA256,Signature='.$this->__getSignature($date); - $headers[] = 'X-Amzn-Authorization: '.$auth; - - $url = 'https://'.$this->ses->getHost().'/'; - - // Basic setup - $curl = curl_init(); - curl_setopt($curl, CURLOPT_USERAGENT, 'SimpleEmailService/php'); - - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, ($this->ses->verifyHost() ? 1 : 0)); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, ($this->ses->verifyPeer() ? 1 : 0)); - - // Request types - switch ($this->verb) { - case 'GET': - $url .= '?'.$query; - break; - case 'POST': - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); - curl_setopt($curl, CURLOPT_POSTFIELDS, $query); - $headers[] = 'Content-Type: application/x-www-form-urlencoded'; - break; - case 'DELETE': - $url .= '?'.$query; - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); - break; - default: break; - } - curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - curl_setopt($curl, CURLOPT_HEADER, false); - - curl_setopt($curl, CURLOPT_URL, $url); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); - curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - - // Execute, grab errors - if (curl_exec($curl)) { - $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); - } else { - $this->response->error = array( - 'curl' => true, - 'code' => curl_errno($curl), - 'message' => curl_error($curl), - 'resource' => $this->resource - ); - } - - @curl_close($curl); - - // Parse body into XML - if ($this->response->error === false && isset($this->response->body)) { - $this->response->body = simplexml_load_string($this->response->body); - - // Grab SES errors - if (!in_array($this->response->code, array(200, 201, 202, 204)) - && isset($this->response->body->Error)) { - $error = $this->response->body->Error; - $output = array(); - $output['curl'] = false; - $output['Error'] = array(); - $output['Error']['Type'] = (string)$error->Type; - $output['Error']['Code'] = (string)$error->Code; - $output['Error']['Message'] = (string)$error->Message; - $output['RequestId'] = (string)$this->response->body->RequestId; - - $this->response->error = $output; - unset($this->response->body); - } - } - - return $this->response; - } - - /** - * CURL write callback - * - * @param resource &$curl CURL resource - * @param string &$data Data - * @return integer - */ - private function __responseWriteCallback(&$curl, &$data) { - $this->response->body .= $data; - return strlen($data); - } - - /** - * Contributed by afx114 - * URL encode the parameters as per http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/index.html?Query_QueryAuth.html - * PHP's rawurlencode() follows RFC 1738, not RFC 3986 as required by Amazon. The only difference is the tilde (~), so convert it back after rawurlencode - * See: http://www.morganney.com/blog/API/AWS-Product-Advertising-API-Requires-a-Signed-Request.php - * - * @param string $var String to encode - * @return string - */ - private function __customUrlEncode($var) { - return str_replace('%7E', '~', rawurlencode($var)); - } - - /** - * Generate the auth string using Hmac-SHA256 - * - * @internal Used by SimpleDBRequest::getResponse() - * @param string $string String to sign - * @return string - */ - private function __getSignature($string) { - return base64_encode(hash_hmac('sha256', $string, $this->ses->getSecretKey(), true)); - } -} - - -final class SimpleEmailServiceMessage { - - // these are public for convenience only - // these are not to be used outside of the SimpleEmailService class! - public $to, $cc, $bcc, $replyto; - public $from, $returnpath; - public $subject, $messagetext, $messagehtml; - public $subjectCharset, $messageTextCharset, $messageHtmlCharset; - - function __construct() { - $to = array(); - $cc = array(); - $bcc = array(); - $replyto = array(); - - $from = null; - $returnpath = null; - - $subject = null; - $messagetext = null; - $messagehtml = null; - - $subjectCharset = null; - $messageTextCharset = null; - $messageHtmlCharset = null; - } - - - /** - * addTo, addCC, addBCC, and addReplyTo have the following behavior: - * If a single address is passed, it is appended to the current list of addresses. - * If an array of addresses is passed, that array is merged into the current list. - */ - function addTo($to) { - if(!is_array($to)) { - $this->to[] = $to; - } - else { - $this->to = array_merge($this->to, $to); - } - } - - function addCC($cc) { - if(!is_array($cc)) { - $this->cc[] = $cc; - } - else { - $this->cc = array_merge($this->cc, $cc); - } - } - - function addBCC($bcc) { - if(!is_array($bcc)) { - $this->bcc[] = $bcc; - } - else { - $this->bcc = array_merge($this->bcc, $bcc); - } - } - - function addReplyTo($replyto) { - if(!is_array($replyto)) { - $this->replyto[] = $replyto; - } - else { - $this->replyto = array_merge($this->replyto, $replyto); - } - } - - function setFrom($from) { - $this->from = $from; - } - - function setReturnPath($returnpath) { - $this->returnpath = $returnpath; - } - - function setSubject($subject) { - $this->subject = $subject; - } - - function setSubjectCharset($charset) { - $this->subjectCharset = $charset; - } - - function setMessageFromString($text, $html = null) { - $this->messagetext = $text; - $this->messagehtml = $html; - } - - function setMessageFromFile($textfile, $htmlfile = null) { - if(file_exists($textfile) && is_file($textfile) && is_readable($textfile)) { - $this->messagetext = file_get_contents($textfile); - } - if(file_exists($htmlfile) && is_file($htmlfile) && is_readable($htmlfile)) { - $this->messagehtml = file_get_contents($htmlfile); - } - } - - function setMessageFromURL($texturl, $htmlurl = null) { - $this->messagetext = file_get_contents($texturl); - if($htmlurl !== null) { - $this->messagehtml = file_get_contents($htmlurl); - } - } - - function setMessageCharset($textCharset, $htmlCharset = null) { - $this->messageTextCharset = $textCharset; - $this->messageHtmlCharset = $htmlCharset; - } - - /** - * Validates whether the message object has sufficient information to submit a request to SES. - * This does not guarantee the message will arrive, nor that the request will succeed; - * instead, it makes sure that no required fields are missing. - * - * This is used internally before attempting a SendEmail or SendRawEmail request, - * but it can be used outside of this file if verification is desired. - * May be useful if e.g. the data is being populated from a form; developers can generally - * use this function to verify completeness instead of writing custom logic. - * - * @return boolean - */ - public function validate() { - if(count($this->to) == 0) - return false; - if($this->from == null || strlen($this->from) == 0) - return false; - if($this->messagetext == null) - return false; - return true; - } -} - - -/** - * Thrown by SimpleEmailService when errors occur if you call - * enableUseExceptions(true). - */ -final class SimpleEmailServiceException extends Exception { - -} \ No newline at end of file diff --git a/externals/cldr/cldr_windows_timezones.xml b/externals/cldr/cldr_windows_timezones.xml new file mode 100644 index 0000000000..47b689d8af --- /dev/null +++ b/externals/cldr/cldr_windows_timezones.xml @@ -0,0 +1,769 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/externals/cowsay/ChangeLog b/externals/cowsay/ChangeLog new file mode 100644 index 0000000000..b28ef91b85 --- /dev/null +++ b/externals/cowsay/ChangeLog @@ -0,0 +1,31 @@ +3.03 28 May 1999 + - Added cows/tux.cow, as suggested by xmanoel@i.am + - Compatibility with 5.6.0, due to a change in qw(). + - Renamed devil.cow to daemon.cow, since I know better. :-) + +3.02 04 November 1999 + - Fixed boneheaded code placement so that cowsay -l actually works. + +3.01 01 November 1999 + - Fixed compatibility issues between the Text::Wrap module + that changed between 5.005_02 and 5.005_03. + - Fixed tab expansion issues with Text::Tabs. + +3.0 13 April 1999, released 14 August 1999 + - Rewritten into Perl 5 and presented to the world. + +-- Not present in CVS from here on down -- + +2.x Date? + - Arbitrary messages. + - Figlet support (-n). + - Line wrap length (-w). + - Multiple pre-set expressions. + - Better arg parsing loop. + - Message from stdin or command line. + +1.0 Date? + - SUBJECT is VERB OBJECT + +$Id: ChangeLog,v 1.4 2000/05/29 17:55:24 tony Exp $ +This file is part of cowsay. (c) 1999-2000 Tony Monroe. diff --git a/externals/cowsay/INSTALL b/externals/cowsay/INSTALL new file mode 100644 index 0000000000..d3844ca565 --- /dev/null +++ b/externals/cowsay/INSTALL @@ -0,0 +1,15 @@ +================= +Installing cowsay +================= + +If you really want to get things installed a nice and pretty way, + + sh install.sh + +It will ask approximately one question. If you can't answer it, +you need serious help. + +If the install goes well, you can start cowing immediately! Just +be sure to read the manual page first... + +$Id: INSTALL,v 1.1 1999/08/14 08:03:17 tony Exp $ diff --git a/externals/cowsay/LICENSE b/externals/cowsay/LICENSE new file mode 100644 index 0000000000..944770492d --- /dev/null +++ b/externals/cowsay/LICENSE @@ -0,0 +1,36 @@ +============== +cowsay License +============== + +cowsay is distributed under the same licensing terms as Perl: the +Artistic License or the GNU General Public License. If you don't +want to track down these licenses and read them for yourself, use +the parts that I'd prefer: + +(0) I wrote it and you didn't. + +(1) Give credit where credit is due if you borrow the code for some +other purpose. + +(2) If you have any bugfixes or suggestions, please notify me so +that I may incorporate them. + +(3) If you try to make money off of cowsay, you suck. + +=============== +cowsay Legalese +=============== + +(0) Copyright (c) 1999 Tony Monroe. All rights reserved. All +lefts may or may not be reversed at my discretion. + +(1) This software package can be freely redistributed or modified +under the terms described above in the "cowsay License" section +of this file. + +(2) cowsay is provided "as is," with no warranties whatsoever, +expressed or implied. If you want some implied warranty about +merchantability and/or fitness for a particular purpose, you will +not find it here, because there is no such thing here. + +(3) I hate legalese. diff --git a/externals/cowsay/MANIFEST b/externals/cowsay/MANIFEST new file mode 100644 index 0000000000..a3ff805fed --- /dev/null +++ b/externals/cowsay/MANIFEST @@ -0,0 +1,11 @@ +ChangeLog Changes to recent versions. +INSTALL Instructions for installing cowsay. +LICENSE The license for use and redistribution of cowsay. +MANIFEST This file. +README Read this first. Really. +Wrap.pm.diff Diff for Text/Wrap.pm. +cows/* Support files used by cowsay. +cowsay Main cowsay executable. +cowsay.1 Main cowsay manual page. +install.sh cowsay installation script. +pgp_public_key.txt Verify the signature file with this key. diff --git a/externals/cowsay/README b/externals/cowsay/README new file mode 100644 index 0000000000..b5de08c405 --- /dev/null +++ b/externals/cowsay/README @@ -0,0 +1,38 @@ +=========== +cowsay 3.03 +=========== + +cowsay is a configurable talking cow, written in Perl. It operates +much as the figlet program does, and it written in the same spirit +of silliness. + +cowsay is actually a pretty old program. It has not really been +released before, and I am releasing it in the hope that someone +other than myself will be amused by it. + +The first major version of cowsay had one cow and one message +template: $foo is $verb $bar. Not very flexible, but people managed +to do pretty interesting things with it. The second major version +scrapped many of the limitations of the first, by allowing arbitrary +messages, multiple cowfiles, and even support for cows talking in +figlet. The third version was a rewrite of the second into Perl +5, whereupon the code got a lot smaller and more manageable. :-) + +If you are using Perl 5.004, you may have problems with Text::Wrap. +(Yeesh, this module changes more than it should...) I've included +a diff for the Text::Wrap (version 97.011701) that is shipped with +5.004_04; the concept is simple enough that even older Perls can +take advantage of this silly little patch; if there is a "sub fill" +in the documentation for the module, copy it to a more useful +section of that file. If not, just take "sub fill" wholesale from +the patch. Oh, and consider upgrading to 5.005_03 or later. +Please. You'll like it, I promise. + +To install cowsay, consult the INSTALL file in this directory. + +For the terms and conditions of use, consult the LICENSE file in +this directory. + +-- Tony Monroe (tony@nog.net) + +$Id: README,v 1.3 2000/05/28 06:24:46 tony Exp $ diff --git a/externals/cowsay/Wrap.pm.diff b/externals/cowsay/Wrap.pm.diff new file mode 100644 index 0000000000..1da064079e --- /dev/null +++ b/externals/cowsay/Wrap.pm.diff @@ -0,0 +1,47 @@ +*** Wrap.pm.in Thu May 22 00:21:42 1997 +--- Wrap.pm Fri Nov 12 10:00:15 1999 +*************** +*** 3,9 **** + require Exporter; + + @ISA = (Exporter); +! @EXPORT = qw(wrap); + @EXPORT_OK = qw($columns); + + $VERSION = 97.011701; +--- 3,9 ---- + require Exporter; + + @ISA = (Exporter); +! @EXPORT = qw(wrap fill); + @EXPORT_OK = qw($columns); + + $VERSION = 97.011701; +*************** +*** 66,71 **** +--- 66,90 ---- + + print "-----------$r---------\n" if $debug;; + return $r; ++ } ++ ++ ## Copied up from below. ++ sub fill ++ { ++ my ($ip, $xp, @raw) = @_; ++ my @para; ++ my $pp; ++ ++ for $pp (split(/\n\s+/, join("\n",@raw))) { ++ $pp =~ s/\s+/ /g; ++ my $x = wrap($ip, $xp, $pp); ++ push(@para, $x); ++ } ++ ++ # if paragraph_indent is the same as line_indent, ++ # separate paragraphs with blank lines ++ ++ return join ($ip eq $xp ? "\n\n" : "\n", @para); + } + + 1; diff --git a/externals/cowsay/cows/bunny.cow b/externals/cowsay/cows/bunny.cow new file mode 100644 index 0000000000..869933f72a --- /dev/null +++ b/externals/cowsay/cows/bunny.cow @@ -0,0 +1,10 @@ +## +## A cute little wabbit +## +$the_cow = <> 5.4 +## +$the_cow = < \\ _ -~ `. ^-` ^-_ + ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ + /.-~ +EOC diff --git a/externals/cowsay/cows/elephant.cow b/externals/cowsay/cows/elephant.cow new file mode 100644 index 0000000000..959cd3f6dd --- /dev/null +++ b/externals/cowsay/cows/elephant.cow @@ -0,0 +1,15 @@ +## +## An elephant out and about +## +$the_cow = < < > .---. + $thoughts | \\ \\ - ~ ~ - / / | + _____ ..-~ ~-..-~ + | | \\~~~\\.' `./~~~/ + --------- \\__/ \\__/ + .' O \\ / / \\ " + (_____, `._.' | } \\/~~~/ + `----. / } | / \\__/ + `-. | / | / `. ,~~| + ~-.__| /_ - ~ ^| /- _ `..-' + | / | / ~-. `-. _ _ _ + |_____| |_____| ~ - . _ _ _ _ _> +EOC diff --git a/externals/cowsay/cows/supermilker.cow b/externals/cowsay/cows/supermilker.cow new file mode 100644 index 0000000000..1424f9e668 --- /dev/null +++ b/externals/cowsay/cows/supermilker.cow @@ -0,0 +1,10 @@ +## +## A cow being milked, probably from Lars Smith (lars@csua.berkeley.edu) +## +$the_cow = <____) >___ ^\\_\\_\\_\\_\\_\\_\\) + ^^^//\\\\_^^//\\\\_^ ^(\\_\\_\\_\\) + ^^^ ^^ ^^^ ^ +EOC diff --git a/externals/cowsay/cows/turtle.cow b/externals/cowsay/cows/turtle.cow new file mode 100644 index 0000000000..4286b0948a --- /dev/null +++ b/externals/cowsay/cows/turtle.cow @@ -0,0 +1,20 @@ +## +## A mysterious turtle... +## +$the_cow = < 'oo', + 'f' => 'default.cow', + 'n' => 0, + 'T' => ' ', + 'W' => 40, +); + +getopts('bde:f:ghlLnNpstT:wW:y', \%opts); + +&display_usage if $opts{'h'}; +&list_cowfiles if $opts{'l'}; + +$borg = $opts{'b'}; +$dead = $opts{'d'}; +$greedy = $opts{'g'}; +$paranoid = $opts{'p'}; +$stoned = $opts{'s'}; +$tired = $opts{'t'}; +$wired = $opts{'w'}; +$young = $opts{'y'}; +$eyes = substr($opts{'e'}, 0, 2); +$tongue = substr($opts{'T'}, 0, 2); +$the_cow = ""; + +&slurp_input; +$Text::Wrap::columns = $opts{'W'}; +@message = ($opts{'n'} ? expand(@message) : + split("\n", fill("", "", @message))); +&construct_balloon; +&construct_face; +&get_cow; +print @balloon_lines; +print $the_cow; + +sub list_cowfiles { + my $basedir; + my @dirfiles; + chop($basedir = cwd); + for my $d (split(/$pathsep/, $cowpath)) { + print "Cow files in $d:\n"; + opendir(COWDIR, $d) || die "$0: Cannot open $d\n"; + for my $file (readdir COWDIR) { + if ($file =~ s/\.cow$//) { + push(@dirfiles, $file); + } + } + closedir(COWDIR); + print wrap("", "", sort @dirfiles), "\n"; + @dirfiles = (); + chdir($basedir); + } + exit(0); +} + +sub slurp_input { + unless ($ARGV[0]) { + chomp(@message = ); + } else { + &display_usage if $opts{'n'}; + @message = join(' ', @ARGV); + } +} + +sub maxlength { + my ($l, $m); + $m = -1; + for my $i (@_) { + $l = length $i; + $m = $l if ($l > $m); + } + return $m; +} + +sub construct_balloon { + my $max = &maxlength(@message); + my $max2 = $max + 2; ## border space fudge. + my $format = "%s %-${max}s %s\n"; + my @border; ## up-left, up-right, down-left, down-right, left, right + if ($0 =~ /think/i) { + $thoughts = 'o'; + @border = qw[ ( ) ( ) ( ) ]; + } elsif (@message < 2) { + $thoughts = '\\'; + @border = qw[ < > ]; + } else { + $thoughts = '\\'; + if ($V and $V gt v5.6.0) { # Thanks, perldelta. + @border = qw[ / \\ \\ / | | ]; + } else { + @border = qw[ / \ \ / | | ]; + } + } + push(@balloon_lines, + " " . ("_" x $max2) . " \n" , + sprintf($format, $border[0], $message[0], $border[1]), + (@message < 2 ? "" : + map { sprintf($format, $border[4], $_, $border[5]) } + @message[1 .. $#message - 1]), + (@message < 2 ? "" : + sprintf($format, $border[2], $message[$#message], $border[3])), + " " . ("-" x $max2) . " \n" + ); +} + +sub construct_face { + if ($borg) { $eyes = "=="; } + if ($dead) { $eyes = "xx"; $tongue = "U "; } + if ($greedy) { $eyes = "\$\$"; } + if ($paranoid) { $eyes = "@@"; } + if ($stoned) { $eyes = "**"; $tongue = "U "; } + if ($tired) { $eyes = "--"; } + if ($wired) { $eyes = "OO"; } + if ($young) { $eyes = ".."; } +} + +sub get_cow { +## +## Get a cow from the specified cowfile; otherwise use the default cow +## which was defined above in $the_cow. +## + my $f = $opts{'f'}; + my $full = ""; + if ($opts{'f'} =~ m,/,) { + $full = $opts{'f'}; + } else { + for my $d (split(/:/, $cowpath)) { + if (-f "$d/$f") { + $full = "$d/$f"; + last; + } elsif (-f "$d/$f.cow") { + $full = "$d/$f.cow"; + last; + } + } + if ($full eq "") { + die "$progname: Could not find $f cowfile!\n"; + } + } + do $full; + die "$progname: $@\n" if $@; +} + +sub display_usage { + die </dev/null 2>&1; then + echo Found a good perl in $perl + goodperls="$goodperls $perl" + fi +done +echo The following perl executables will run cowsay: +echo $goodperls +echo I recommend the latest stable perl you can find. +set $goodperls +if [ -z "$1" ]; then + echo Ack! You do not have Perl 5 installed correctly! + echo Get thee to CPAN! + exit 1 +fi +usethisperl=$1 +echo I will be using $1 because I know it will work. + +echo Now I need an installation prefix. I will use /usr/local unless +printf "you give me a better idea here: " +if [ -n "$backdoor" ]; then + prefix=$backdoor + printf "%s (specified on command line)\n" $prefix +else + read prefix +fi + +PREFIX=${prefix:-/usr/local} + +echo Okay, time to install this puppy. + +echo s,%BANGPERL%,!$usethisperl,\; > install.pl +echo s,%PREFIX%,$PREFIX,\; >> install.pl +set -x +mkdir -p $PREFIX/bin || (mkdir $PREFIX; mkdir $PREFIX/bin) +$usethisperl -p install.pl cowsay > $PREFIX/bin/cowsay +chmod a+x $PREFIX/bin/cowsay +ln -s cowsay $PREFIX/bin/cowthink +mkdir -p $PREFIX/man/man1 || ($mkdir $PREFIX; mkdir $PREFIX/man; mkdir $PREFIX/man/man1) +$usethisperl -p install.pl cowsay.1 > $PREFIX/man/man1/cowsay.1 +chmod a+r $PREFIX/man/man1/cowsay.1 +ln -s cowsay.1 $PREFIX/man/man1/cowthink.1 +mkdir -p $PREFIX/share/cows || (mkdir $PREFIX; mkdir $PREFIX/share; mkdir $PREFIX/share/cows) +tar -cf - $filelist | (cd $PREFIX/share && tar -xvf -) +set +x + +echo Okay, let us see if the install actually worked. + +if [ ! -f $PREFIX/share/cows/default.cow ]; then + echo The default cow file did not make it across! + echo Ooops, it failed...sorry! + exit 1 +fi + +echo Installation complete! Enjoy the cows! diff --git a/externals/cowsay/pgp_public_key.txt b/externals/cowsay/pgp_public_key.txt new file mode 100644 index 0000000000..135735e6f9 --- /dev/null +++ b/externals/cowsay/pgp_public_key.txt @@ -0,0 +1,14 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: 2.6.2 + +mQCNAzNS+H4AAAEEAMilCcxLMIqMNXhZoeHjbeJGnHoKP0JpKDejz66qBlDwP+du +FvVBHkyNIuU3orKe7l/aXIR8TcpjrxdcmrjjzwuB1aV48V4swT7v9UXvv9YP41Pd +1pXYXNelXHmE0eKSfcnkkFmYTJBXPaPNTJ3rpZpZOEW3SfgrrheqQm6w/6IJAAUR +tBpUb255IE1vbnJvZSA8dG9ueUBub2cubmV0PrQdVG9ueSBNb25yb2UgPHRtb25y +b2VAbm9nLm5ldD6JAJUDBRA2bDA5F6pCbrD/ogkBASOZA/9XtYSpcPjpi62MTEZl +l+wV1svtlUlPvKkDE7FB9bwnMbF1FgGhTe/H4/8qDu20m5eGxMX58Ri7HPXWjjJ/ +CrUWMzGVbg1JBkgh+d9QvEywmR0j4WezaifW1nCbxk0GrW1PjJyGb3kx7vrIF1Km +xt6VwxTgfJzjIioBJFb4EiDyaLQnVG9ueSBNb25yb2UgPHRtb25yb2VAQ1NVQS5C +ZXJrZWxleS5FRFU+ +=WpM4 +-----END PGP PUBLIC KEY BLOCK----- diff --git a/externals/figlet/.gitignore b/externals/figlet/.gitignore new file mode 100644 index 0000000000..dc65b3c3eb --- /dev/null +++ b/externals/figlet/.gitignore @@ -0,0 +1,8 @@ +chkfont +figlet +tags +*.o +core +*~ +tests.log +*.tar.gz diff --git a/externals/figlet/CHANGES b/externals/figlet/CHANGES new file mode 100644 index 0000000000..4f2d6e9edb --- /dev/null +++ b/externals/figlet/CHANGES @@ -0,0 +1,205 @@ +Changes in FIGlet 2.2.5 +----------------------- + +FIGlet 2.2.5 is a revision of FIGlet 2.2.4 containing updated andproperly +licensed ISO8859 map files. The full list of changes is: + +o Add regression tests for uskata and jis0201 control files + +o Properly escape minus signs in figlist(6) man page (Jonathan + McCrohan) + +o Fix chkfont coredump on invalid input (Kenneth Davies and + Jonathan McCrohan) + +o Update ISO8859 map files to fix licensing issue raised in Debian + bugs 673096 and 674844 + +o Re-add missing figmagic and getopt.c files which were left out + of releases 2.2.3 and 2.2.4 + +o Fix output of test script in MacOS X + +These changes were made by Claudio Matsuoka +31 May 2012 + +Changes in FIGlet 2.2.4 +----------------------- + +FIGlet 2.2.4 is a revision of FIGlet 2.2.3 featuring bugfixes and support +to tlf2 fonts. The full list of changes is: + +o Add support to Sam Hocevar's TOIlet TLF fonts containing UTF-8 + encoded Unicode characters. + +o Add infocode 5 to list supported font formats + +o Fix rendering error caused by the previous attempt to fix invalid + memory accesses when smushing at start of line + +o New environment variable FIGLET_FONTDIR can be used to specify + the path to search for fonts + +o Add regression tests + +These changes were made by Claudio Matsuoka +26 January 2011 + +Changes in FIGlet 2.2.3 +----------------------- + +FIGlet 2.2.3 is a revision of FIGlet 2.2.2 featuring minor bugfixes and +important licensing changes in the zipio files. The full list of +changes is: + +o License changed from "Academic Free License" to "New BSD License" + (3-clause) as agreed by FIGlet authors + +o New JIS X 0201 control file (Micah Cowan) + +o Fix behavior of JIS0201 SHIFT-OUT and SHIFT-IN that were previouly + inverted (Micah Cowan) + +o Fix memory violation when smushing at line start + +o Fix handling of memory allocation errors + +o Relicense Ed Hamrick zipio under the MIT license. This should + eliminate any concerns about redistribution of FIGlet as libre + software. + +o Update Makefile to meet modern standards in variable naming, using + BINDIR as the pathname for binary files and reservind DESTDIR + as the extra prefix commonly used in package building. + +o Add a Turbo C makefile, just because I had the compiler. (this + also tests portability to old compilers and foreign platforms) + +o Add Jonathon Abbott's man pages for figlist, showfigfonts and + chkfont originally contributed to the Debian Project + +These changes were made by Claudio Matsuoka +12 January 2011 + +Changes in FIGlet 2.2.2 +----------------------- + +License changed from "Artistic License" to "Academic Free +License" as agreed by FIGlet authors. 05 July 2005 + +Changes in FIGlet 2.2.1 +----------------------- + +FIGlet 2.2.1 is a minor revision of FIGlet 2.2. The files +README, Makefile, figfont.txt, figlet.c and figlet.6 have been +changed to reflect changes in documentation, official contact +details etc. FTP-NOTE merged into README. FAQ and CHANGES +added to the distribution. + +All other files are identical with the 2.2 release. + +These changes were made by Christiaan Keet + +Changes in FIGlet 2.2 +--------------------- + +FIGlet 2.2 is a moderate revision of FIGlet 2.1.2. The new features are: + +o font files and control files can be compressed using ``zip'', and + will be automatically decompressed + +o new commands in controlfiles provide support for + single-byte (default), double-byte, HZ, Shift-JIS, and Unicode + UTF-8 encodings of the input + +o ISO 2022 escape sequences are decoded and interpreted + +o control files can now have the format of Unicode Consortium + mapping tables (two columns of numbers representing + input character and output character, no ranges, # comments) + +o new options -s (smush, same as -m-2), -k (kern, same as -m0), + -S (forced smushing), and -W (full width, same as -m-1) make + -m option unnecessary except for font designers. The -S option + works even if the font's smushmode is 0 or -1, in which case + the smushmode is read from a new parameter in the + font's first line, or does universal overlapping if no such parameter + exists + +o universal smushing (-o option to force it, but -S will use it + if no smush rules are available) makes FIGcharacters overlap by + one place independent of how they are constructed + more fonts smushable. + +o file "figmagic" can be appended to your system magic number + file to make the "file" command recognize FIGlet files + +o file "figfont.txt" is an implementation-independent specification + for FIGlet fonts and control files + +o integrated support for extended characters (extended Latin in + "standard", Greek in "big", katakana in "banner", Hebrew in new + "ivrit" fonts) with appropriate controlfiles + +o smushing rule 16 has changed slightly: "/\" now smushes + into "|" and "\/" smushes into "Y"; "><" still smushes + into "X" and "<>" is still not smushed at all. + +o -A option introduced in FIGlet 2.1.2 is now optional; + if any words appear on the command line after the options, + they are formatted, and the standard input is not read. + +These changes were made by John Cowan . + +Changes in FIGlet 2.1.2 +------------------------ + +FIGlet 2.1.2 is a minor revision of FIGlet 2.1.1. The files +README, FTP-NOTE, figlet.c and figlet.6 have been changed. All other +files are identical with the 2.1.1 release. + +o The only new option is -A, which causes FIGlet to read input + from the command line. + +These changes were made by Gilbert Healton as Glenn +Chappell is now busy as a new professor of Mathematics. + +Changes in FIGlet 2.1 +---------------------- + +A number of minor bugs and major incompatibility problems have been +fixed. FIGlet 2.1 should compile correctly on many operating systems for +which FIGlet 2.0 did not. + +o The "-F" command line option, which used to list all the available + fonts, has been removed, since it made FIGlet incompatible with some + operating systems. It has been replaced by the "figlist" script. The + "showfigfonts" script has been updated so that it no longer requires + the "-F" option to be available. + +o The FIGlet font file format has been extended to allow an arbitrarily + large number of characters. The ISO Latin-1 character set, which + includes many accented letters and special symbols, has been added to + most standard fonts. + +o FIGlet can now print right-to-left. This can be specified on the + command line ("-R") or in the font file. Thus, for example, Hebrew and + Arabic fonts can be handled more easily. + +o FIGlet can now right justify its output. This is the default when + right-to-left printing is selected. It can also be specified on the + command line ("-r"). + +o FIGlet now supports "control files". These can be used to change which + character FIGlet will print when it sees a certain input character -- + sort of an expanded version of the "-D" option. For example, a control + file could convert lower-case letters to upper-case or map certain + ASCII characters to accented letters. Control file names end with the + suffix ".flc". Select a control file by using "-C controlfile" on the + command line. Several controlfiles can be used at once by giving + muliple "-C" options. + +o There is now a way for programs that use FIGlet to get various + information from FIGlet, for example, what version of FIGlet is being + used or the name of the default font directory. This information is + gotten through the "-I" option. See the man page for details. diff --git a/externals/figlet/FAQ b/externals/figlet/FAQ new file mode 100644 index 0000000000..8e8ca43163 --- /dev/null +++ b/externals/figlet/FAQ @@ -0,0 +1,63 @@ + _____ _____ _____ __ __ _____ _____ _____ +| __| | __| |____| |_ | __| _ | | This FIGlet FAQ is +| __|- -| | | | - _| _| | __| | | | posted once a month +|__| |_____|_____|__|____|__| |__| |__|__|__ _| on figlet@figlet.org + info@figlet.org http://www.figlet.org/ |__| [FIGlet FAQ v0.91] + +=========================================================================== +The latest version of FIGlet is 2.2.5 and can be downloaded from +ftp://ftp.figlet.org/pub/figlet/program +=========================================================================== + +1 What is FIGlet? +2 Where can I get FIGlet from? +3 Where can I get more fonts for FIGlet? +4 Where can I hear about regular FIGlet program and font updates? +5 How can I contribute? +6 Why am I getting this mail and can you make it stop? +7 Where does the name FIGlet come from? + +=========================================================================== + +1. What is FIGlet? + FIGlet is a program for making large letters out of ordinary text + _ _ _ _ _ _ + | (_) | _____ | |_| |__ (_)___ + | | | |/ / _ \ | __| '_ \| / __| + | | | < __/ | |_| | | | \__ \ + |_|_|_|\_\___| \__|_| |_|_|___/ + +2. Where can I get FIGlet from? + From the official FIGlet website at http://www.figlet.org/ + or from the FIGlet FTP site at ftp://ftp.figlet.org/pub/figlet/ + +3. Where can I get more fonts for FIGlet? + From the FTP site at ftp://ftp.figlet.org/pub/figlet/fonts/ + There are currently over 400 fonts available for download + +4 Where can I hear about regular FIGlet program and font updates? + There is a mailing list for FIGlet for general discussions about + FIGlet and a place where you can ask questions or share ideas + with other FIGlet users. It is also the place where we will publish + news about new fonts, new software updates etc. + + To subscribe or unsubscribe from the FIGlet mailing list, + please send email to figlet-subscribe@figlet.org or visit the + following web page: http://www.figlet.org/mailman/listinfo/figlet + +5. How can I contribute? + To contribute new fonts, software or information, please contact + us at info@figlet.org + +6. Why am I getting this mail and can you make it stop? + If you received this email it is probably because you are subscribed + to the FIGlet mailing list. Please see Question 4 of this FAQ on how + to unsubscribe from the FIGlet list. + +7. Where does the name FIGlet come from? + "Frank, Ian and Glen's letters" + + += FAQ Maintainer ========================================================== +Christiaan Keet keet@plig.net July 2005 +=========================================================================== diff --git a/externals/figlet/LICENSE b/externals/figlet/LICENSE new file mode 100644 index 0000000000..a841aeaa0a --- /dev/null +++ b/externals/figlet/LICENSE @@ -0,0 +1,30 @@ +Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai +Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 John Cowan +Copyright (C) 2002 Christiaan Keet +Copyright (C) 2011 Claudio Matsuoka +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of the copyright holders nor the names of their + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS +OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR +TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/externals/figlet/Makefile b/externals/figlet/Makefile new file mode 100644 index 0000000000..e92bcaf582 --- /dev/null +++ b/externals/figlet/Makefile @@ -0,0 +1,122 @@ +# Makefile for figlet version 2.2.4 (26 Jan 2011) +# adapted from Makefile for figlet version 2.2.2 (05 July 2005) +# adapted from Makefile for figlet version 2.2 (15 Oct 1996) +# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai +# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan +# Copyright 2002 Christiaan Keet +# Copyright 2011 Claudio Matsuoka + +# Please notice that to follow modern standards and ease third-party +# package creation, binaries are now installed under BINDIR, and DESTDIR +# is reserved for the installation pathname prefix. +# +# Please make sure BINDIR, MANDIR, DEFAULTFONTDIR and +# DEFAULTFONTFILE are defined to reflect the situation +# on your computer. See README for details. + +# Don't change this even if your shell is different. The only reason +# for changing this is if sh is not in the same place. +SHELL = /bin/sh + +# The C compiler and linker to use +CC = gcc +CFLAGS = -g -O2 -Wall -Wno-unused-value +LD = gcc +LDFLAGS = + +# Feature flags: +# define TLF_FONTS to use TOIlet TLF fonts +XCFLAGS = -DTLF_FONTS + +# Where to install files +prefix = /usr/local + +# Where the executables should be put +BINDIR = $(prefix)/bin + +# Where the man page should be put +MANDIR = $(prefix)/man + +# Where figlet will search first for fonts (the ".flf" files). +DEFAULTFONTDIR = $(prefix)/share/figlet +# Use this definition if you can't put things in $(prefix)/share/figlet +#DEFAULTFONTDIR = fonts + +# The filename of the font to be used if no other is specified, +# without suffix.(standard is recommended, but any other can be +# used). This font file should reside in the directory specified +# by DEFAULTFONTDIR. +DEFAULTFONTFILE = standard + +## +## END OF CONFIGURATION SECTION +## + +VERSION = 2.2.5 +DIST = figlet-$(VERSION) +OBJS = figlet.o zipio.o crc.o inflate.o utf8.o +BINS = figlet chkfont figlist showfigfonts +MANUAL = figlet.6 chkfont.6 figlist.6 showfigfonts.6 +DFILES = Makefile Makefile.tc $(MANUAL) $(OBJS:.o=.c) chkfont.c getopt.c \ + figlist showfigfonts CHANGES FAQ README LICENSE figfont.txt \ + crc.h inflate.h zipio.h utf8.h run-tests.sh figmagic + +.c.o: + $(CC) -c $(CFLAGS) $(XCFLAGS) -DDEFAULTFONTDIR=\"$(DEFAULTFONTDIR)\" \ + -DDEFAULTFONTFILE=\"$(DEFAULTFONTFILE)\" -o $*.o $< + +all: $(BINS) + +figlet: $(OBJS) + $(LD) $(LDFLAGS) -o $@ $(OBJS) + +chkfont: chkfont.o + $(LD) $(LDFLAGS) -o $@ chkfont.o + +clean: + rm -f *.o *~ core figlet chkfont + +install: all + mkdir -p $(DESTDIR)$(BINDIR) + mkdir -p $(DESTDIR)$(MANDIR)/man6 + mkdir -p $(DESTDIR)$(DEFAULTFONTDIR) + cp $(BINS) $(DESTDIR)$(BINDIR) + cp $(MANUAL) $(DESTDIR)$(MANDIR)/man6 + cp fonts/*.flf $(DESTDIR)$(DEFAULTFONTDIR) + cp fonts/*.flc $(DESTDIR)$(DEFAULTFONTDIR) + +dist: + rm -Rf $(DIST) $(DIST).tar.gz + mkdir $(DIST)/ + cp $(DFILES) $(DIST)/ + mkdir $(DIST)/fonts + cp fonts/*.fl[fc] $(DIST)/fonts + mkdir $(DIST)/tests + cp tests/*txt tests/emboss.tlf $(DIST)/tests + tar cvf - $(DIST) | gzip -9c > $(DIST).tar.gz + rm -Rf $(DIST) + tar xf $(DIST).tar.gz + (cd $(DIST); make all check vercheck) + @rm -Rf $(DIST) + @echo + @ls -l $(DIST).tar.gz + +check: + @echo "Run tests in `pwd`" + @./run-tests.sh fonts + @echo + +vercheck: + @printf "Infocode: "; ./figlet -I1 + @./figlet -v|sed -n '/Version/s/.*\(Version\)/\1/p' + @printf "README: "; head -1 < README|sed 's/.*) //' + @printf "FAQ: "; grep latest FAQ|sed 's/ and can.*//' + @grep -h "^\.TH" *.6 + +$(OBJS) chkfont.o getopt.o: Makefile +chkfont.o: chkfont.c +crc.o: crc.c crc.h +figlet.o: figlet.c zipio.h +getopt.o: getopt.c +inflate.o: inflate.c inflate.h +zipio.o: zipio.c zipio.h inflate.h crc.h diff --git a/externals/figlet/Makefile.tc b/externals/figlet/Makefile.tc new file mode 100644 index 0000000000..435fc580c9 --- /dev/null +++ b/externals/figlet/Makefile.tc @@ -0,0 +1,42 @@ +# Turbo C makefile for figlet +# adapted from Makefile for figlet version 2.3.0 (11 Jan 2011) +# adapted from Makefile for figlet version 2.2.2 (05 July 2005) +# adapted from Makefile for figlet version 2.2 (15 Oct 1996) +# Copyright 1993, 1994,1995 Glenn Chappell and Ian Chai +# Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan +# Copyright 2002 Christiaan Keet +# Copyright 2011 Claudio Matsuoka + +# The C compiler and linker to use +CC = tcc +CFLAGS = -mc -I\tc\include +LD = tcc +LDFLAGS = -mc -L\tc\lib + +# Use this definition if you can't put things in /usr/local/share/figlet +DEFAULTFONTDIR = fonts + +# The filename of the font to be used if no other is specified +# (standard.flf is recommended, but any other can be used). +# This font file should reside in the directory specified by +# DEFAULTFONTDIR. +DEFAULTFONTFILE = standard.flf + +## +## END OF CONFIGURATION SECTION +## + +OBJS = figlet.obj zipio.obj crc.obj inflate.obj getopt.obj +BINS = figlet.exe chkfont.exe + +.c.obj: + $(CC) -c $(CFLAGS) -DDEFAULTFONTDIR="$(DEFAULTFONTDIR)" \ + -DDEFAULTFONTFILE="$(DEFAULTFONTFILE)" -o$*.obj $< + +all: $(BINS) + +figlet.exe: $(OBJS) + $(LD) $(LDFLAGS) -o$@ $(OBJS) + +chkfont.exe: chkfont.obj + $(LD) $(LDFLAGS) -o$@ chkfont.obj diff --git a/externals/figlet/README b/externals/figlet/README new file mode 100644 index 0000000000..f6f2c752d0 --- /dev/null +++ b/externals/figlet/README @@ -0,0 +1,242 @@ +About FIGlet (Frank, Ian & Glenn's Letters) release 2.2.5, 31 May 2012 +-------------------------------------------------------------------------- +FIGlet is a program that creates large characters out of ordinary +screen characters + _ _ _ _ _ _ +| (_) | _____ | |_| |__ (_)___ +| | | |/ / _ \ | __| '_ \| / __| +| | | < __/ | |_| | | | \__ \_ +|_|_|_|\_\___| \__|_| |_|_|___(_) + +(This is meant to be viewed in a monospaced font.) FIGlet can create +characters in many different styles and can kern and "smush" these +characters together in various ways. FIGlet output is generally +reminiscent of the sort of "signatures" many people like to put at the +end of e-mail and UseNet messages. + +If you like FIGlet (hey, even if you *hate* FIGlet), please send an +e-mail message to + +The official FIGlet web page: http://www.figlet.org/ + +Files -- Unix version +--------------------- + +README -- This file. +figlet.c -- The FIGlet source code. +zipio.h, -- A package for reading ZIP archives +zipio.c, +inflate.c, +crc.c +utf8.h, -- A package to convert strings between UTF-8 and UCS-4. +utf8.c +getopt.c -- Source for the standard "getopt" routine, in case you + don't have it in your C library. Not used by default. +Makefile -- The FIGlet makefile. Used by the make command. +figlet.6 -- The FIGlet man(ual) page. +figlist -- Script that lists available fonts and control files. +showfigfonts -- Script that gives a sample of each available font. +chkfont.c -- Source code for chkfont: a program that checks FIGlet + fonts for formatting errors. You can ignore this file + unless you intend to design or edit fonts. +figfont.txt -- Text file that explains the format of FIGlet fonts. + You can ignore this file unless you intend to design + or edit fonts. +fonts -- Directory containing fonts and control files. +.flf -- All files ending in ".flf" are FIGlet font files. +.flc -- All files ending in ".flc" are FIGlet control files. + +Files -- DOS version +-------------------- + +README -- This file +figlet.exe -- The FIGlet program. +figlet.man -- The FIGlet man(ual) page. +showall.bat -- Batch file that lists available fonts and samples of each. +chkfont.exe -- A program that checks FIGlet fonts for formatting errors. + You can ignore this file unless you intend to design + or edit fonts. +figfont.txt -- Text file that explains the format of FIGlet fonts. + You can ignore this file unless you intend to design + or edit fonts. +fonts -- Directory containing fonts and control files. +.flf -- All files ending in ".flf" are FIGlet font files. +.flc -- All files ending in ".flc" are FIGlet control files. + + +Installing FIGlet --- Unix version +---------------------------------- + +First decide in which directories FIGlet and the FIGlet font files +(the ".flf" files) will be stored (we recommend "/usr/games" and +"/usr/games/lib/figlet.dir", respectively) and which will be the +default font (we recommend "standard.flf"). + +Edit "Makefile", and set the variables DEFAULTFONTDIR and +DEFAULTFONTFILE to the appropriate values. Set DEFAULTFONTDIR to be +the full pathname of the directory in which you will keep the FIGlet +font files. Set DEFAULTFONTFILE to be the filename of the default +font. + +At this point, you have two choices: + +(1) Just compile FIGlet. To go this, go into the directory containing +the FIGlet source, and type "make figlet". Then copy the various files +to the proper locations. The executable (figlet), along with figlist +and showfigfonts, goes wherever you keep your executables. The fonts +(.flf) and control files (.flc) go in the default font +directory. The man page (figlet.6) goes in section 6 (usually +/usr/man/man6). If you cannot, or do not want to, install the man page, +you can probably still read it using + + nroff -man figlet.6 | more + +(2) Do a complete installation. To do the this, set the variables +BINDIR and MANDIR in Makefile to the appropriate values. BINDIR +should be the full pathname of the directory in which the executable +files should be put (we recommend "/usr/games"); MANDIR should be the +full pathname of the directory in which the figlet man page should be +put, generally "/usr/man/man6". Once DEFAULTFONTDIR, DEFAULTFONTFILE, +BINDIR and MANDIR have been set, in the directory containing the FIGlet +source, type "make install". + +If space is a problem, the only files you absolutely must have to run +figlet are "figlet" (the executable) and at least one font (preferably +the one you chose to be the default font). + +Installing FIGlet -- DOS version +-------------------------------- + +Unpack the ZIPfile using PKUNZIP, Info-Zip UNZIP, WinUnzip, or any other +ZIP-compatible program. Be sure to use the -d option with PKUNZIP +in order to preserve the directory structure. We recommend that you +unpack the archive into C:\FIGLET, but any directory will do. + +If you unpack the archive on top of an older version of FIGlet, be +sure to delete the file FIGLET.COM. The executable program in this +release is named FIGLET.EXE. You can keep your old fonts by putting +them in a FONTS subdirectory before unpacking. (There are upgraded +versions of the standard fonts in the archive.) + +Using FIGlet +------------ + +(Note: FIGlet needs a good thorough tutorial. Currently I don't have +the time to write one, but if anyone wants to do so, go right ahead. +I'd be glad to help out a little. Write us at if +you're interested. -GGC-) + +At the shell prompt, type "figlet". Then type, say, "Hello, world!" +and press return. "Hello, world!" in nice, big, designer characters +should appear on your screen. If you chose standard.flf to be the +default font, you should see + _ _ _ _ _ _ _ +| | | | ___| | | ___ __ _____ _ __| | __| | | +| |_| |/ _ \ | |/ _ \ \ \ /\ / / _ \| '__| |/ _` | | +| _ | __/ | | (_) | \ V V / (_) | | | | (_| |_| +|_| |_|\___|_|_|\___( ) \_/\_/ \___/|_| |_|\__,_(_) + |/ +Then type something else, or type an EOF (typically control-D) to quit +FIGlet. + +Now you can send the output of figlet to a file (e.g., "figlet > file") +and e-mail it to your friends (who will probably say, "Wow! It must +have taken you hours to put that together!") + +To use other fonts, use the "-f" command line option. For example, if +you had said "figlet -f smslant" above, you would have seen + __ __ ____ __ ____ + / // /__ / / /__ _ _____ ____/ /__/ / / + / _ / -_) / / _ \_ | |/|/ / _ \/ __/ / _ /_/ +/_//_/\__/_/_/\___( ) |__,__/\___/_/ /_/\_,_(_) + |/ + +Here are some other useful command line options: + +-c center -- centers the output of FIGlet. +-k tells FIGlet to kern characters without smushing them together. +-t terminal -- FIGlet asks your terminal how wide it is, and uses + this to determine when to break lines. Normally, FIGlet assumes + 80 columns so that people with wide terminals won't annoy the + people they e-mail FIGlet output to. +-p paragraph mode -- eliminates some spurious line breaks when piping + a multi-line file through FIGlet. +-v version -- prints information about your copy of FIGlet. + +For in-depth explanations of these and other options, see the man page. +DOS users, see figlet.man. + + +Other Fonts & Mailing List +-------------------------- + +A good number of FIGlet fonts have been developed, most of which are +not included in the standard FIGlet package. Many of these can be +obtained from http://www.figlet.org/ Some non-Roman fonts are +available at this site. As of this writing, we have Hebrew, Cyrillic +(Russian) and Greek. + +There are 3 mailing lists available for FIGlet: + figlet@figlet.org General discussion of FIGlet + figletfonts@figlet.org Announcements about fonts + figletsoftware@figlet.org Announcements about software + (The last two lists are moderated) + +To subscribe or unsubscribe from the FIGlet mailing lists, please visit +the corresponding URL: + http://www.figlet.org/mailman/listinfo/figlet + http://www.figlet.org/mailman/listinfo/figletfonts + http://www.figlet.org/mailman/listinfo/figletsoftware + +Also, for those who maintain archives of figlet fonts, please note that +all of the standard fonts have been changed, as of release 2.1, to +include non-ASCII characters. These fonts are the following: + +big.flf (also contains Greek) +banner.flf (also contains Cyrillic and Japanese katakana) +block.flf +bubble.flf +digital.flf +ivrit.flf (right-to-left, also contains Hebrew) +lean.flf +mini.flf +script.flf +shadow.flf +slant.flf +small.flf +smscript.flf +smshadow.flf +smslant.dld +standard.flf +term.flf + +The new versions of these fonts can be identified by the words "figlet +release 2.1" somewhere in the first few lines. + + +Other Stuff +----------- + +FIGlet is available for operating systems other than Unix. +Please see ftp://ftp.figlet.org/program/ + +Although you don't have to design your own fonts to use FIGlet, we'd +certainly like it if lots of people did make up new FIGlet fonts. If +you feel like giving it a try, see the "FONT FILE FORMAT" section of +the man page. If you do design a font, please let us know by mailing us +at + +See "Other Things to Try" in the EXAMPLES section of the man page +for... well... other things to try. + + +Authors +------- + +FIGlet was written mostly by Glenn Chappell . The +author not being an e-mail fanatic, most correspondence (bug reports, rave +reviews, etc.) used to be handled to his secretary (who is definitely +an e-mail fanatic), Ian Chai and has since moved on to +another FIGlet enthusiast, Christiaan Keet . Current +maintenance is conducted by Claudio Matsuoka . + diff --git a/externals/figlet/chkfont.6 b/externals/figlet/chkfont.6 new file mode 100644 index 0000000000..681d6ad556 --- /dev/null +++ b/externals/figlet/chkfont.6 @@ -0,0 +1,52 @@ +.\" chkfont +.\" By Glenn Chappell +.\" +.\" This program checks figlet 2.0/2.1 font files for format errors. +.\" It also looks for signs of common problems and gives warnings. +.\" chkfont does not modify font files. +.\" +.\" Usage: chkfont fontfile ... +.\" +.\" Note: This is very much a spare-time project. It's probably +.\" full o' bugs. +.\" +.\" Manual page by Jonathon Abbott, for the Debian Project +.\" slightly modified by Francesco Tapparo, for the Debian Project +.TH CHKFONT 6 "31 May 2012" "v2.2.5" + +.SH NAME +chkfont \- checks figlet 2.0 and up font files for format errors + +.SH SYNOPSIS +.B chkfont +[ +.I fontfile +] + +.SH DESCRIPTION +This program checks figlet 2.0 and up font files for format errors. +It also looks for signs of common problems and gives warnings. +chkfont does not modify font files. + +.SH EXAMPLES +To use +.B chkfont +on the "big" font +.RS + +.B example% chkfont /usr/share/figlet/big.flf + +.RE + +.SH BUGS +Doesn't work on compressed font files. + +.SH AUTHORS +chkfont was written by Glenn Chappell + +This manual page was written by Jonathon Abbott for the Debian Project. + +.SH "SEE ALSO" +.BR figlet (6), +.BR showfigfonts (6), +.BR figlist (6) diff --git a/externals/figlet/chkfont.c b/externals/figlet/chkfont.c new file mode 100644 index 0000000000..63bf381b31 --- /dev/null +++ b/externals/figlet/chkfont.c @@ -0,0 +1,476 @@ +#include +#include +#include +#ifdef __STDC__ +#include +#endif + +#define DATE "20 Feb 1996" +#define VERSION "2.2" + +/* + chkfont + By Glenn Chappell + + This program checks figlet 2.0/2.1 font files for format errors. + It also looks for signs of common problems and gives warnings. + chkfont does not modify font files. + + Usage: chkfont fontfile ... + + Note: This is very much a spare-time project. It's probably + full o' bugs .... +*/ + +/* #define CHECKBLANKS */ +#define FONTFILESUFFIX ".flf" +#define FONTFILEMAGICNUMBER "flf2" +char posshardblanks[9] = { '!', '@', '#', '$', '%', '&', '*', 0x7f, 0 }; + +char *myname,*fontfilename; +FILE *fontfile; +char hardblank; +int charheight,upheight,maxlen=0,old_layout; +int spectagcnt; +char *fileline; +int maxlinelength=0,currline; +int ec,wc; + +int incon_endmarkwarn,endmark_countwarn,nonincrwarn; +int bigcodetagwarn,deutschcodetagwarn,asciicodetagwarn; +int codetagcnt; +int gone; + +void weregone(really) +int really; +{ +if (!really && 2*ec+wc<=40) { + return; + } +if (ec+wc>0) printf("*******************************************************************************\n"); +if (!really) { + printf("%s: Too many errors/warnings.\n",fontfilename); + } +printf("%s: Errors: %d, Warnings: %d\n",fontfilename,ec,wc); +if (currline>1 && maxlen!=maxlinelength) { + printf("%s: maxlen: %d, actual max line length: %d\n", + fontfilename,maxlen,maxlinelength); + if (codetagcnt>0 && spectagcnt==-1) { + printf("%s: Code-tagged characters: %d\n",fontfilename,codetagcnt); + } + } +printf("-------------------------------------------------------------------------------\n"); +gone=1; +} + +char *my_alloc(size) +int size; +{ +char *ptr; + +ptr=(char *)malloc(size); +if (ptr==NULL) { + fprintf(stderr,"%s: Out of memory\n",myname); + exit(1); + } +return(ptr); +} + +int badsuffix(path,suffix) +char *path; +char *suffix; +{ + char ucsuffix[10]; + char *s; + + strcpy(ucsuffix,suffix); + for (s = ucsuffix; *s; s++) { + *s = toupper(*s); + } + + if (strlen(path)\n"); +fprintf(stderr,"Version: %s, date: %s\n",VERSION,DATE); +fprintf(stderr,"Checks figlet 2.0/2.1 font files for format errors.\n"); +fprintf(stderr,"(Does not modify font files.)\n"); +fprintf(stderr,"Usage: %s fontfile ...\n",myname); +exit(1); +} + +void readchar() +{ +int i,expected_width,k,len,newlen,diff,l; +char endmark,expected_endmark; +int leadblanks,minleadblanks,trailblanks,mintrailblanks; +char *ret; + +expected_width = expected_endmark = 0; /* prevent compiler warning */ +for (i=0;imaxlinelength) { + maxlinelength=len; + } + if (len>maxlen) { + printf("%s: ERROR- Line length > maxlen in line %d.\n", + fontfilename,currline); + ec++; + weregone(0); if (gone) return; + } + k=len; + endmark=k<0?'\0':(k==0||fileline[k]!='\n')?fileline[k]:fileline[k-1]; + for(;k>=0?(fileline[k]=='\n' || fileline[k]==endmark):0;k--) { + fileline[k]='\0'; + } + newlen=strlen(fileline); + for (l=0;l=0 ? fileline[l]==' ' : 0;l--) ; + trailblanks = newlen-1-l; + if (i==0) { + expected_endmark = endmark; + expected_width = newlen; + minleadblanks = leadblanks; + mintrailblanks = trailblanks; + if (endmark==' ') { + printf("%s: Warning- Blank endmark in line %d.\n", + fontfilename,currline); + wc++; + weregone(0); if (gone) return; + } + } + else { + if (leadblanks2) { + printf("%s: ERROR- Too many endmarks in line %d.\n", + fontfilename,currline); + ec++; + weregone(0); if (gone) return; + } + else if (charheight>1 && (diff!=(i==charheight-1)+1)) { + if (!endmark_countwarn) { + printf("%s: Warning- Endchar count convention violated in line %d.\n", + fontfilename,currline); + printf("%s: (Above warning will only be printed once.)\n", + fontfilename); + endmark_countwarn = 1; + wc++; + weregone(0); if (gone) return; + } + } + } +#ifdef CHECKBLANKS +if (minleadblanks+mintrailblanks>0 && old_layout>=0) { + printf("%s: Warning- Leading/trailing blanks in char. ending at line %d.\n", + fontfilename,currline); + printf("%s: (Above warning only given when old_layout > -1.)\n", + fontfilename); + wc++; + weregone(0); if (gone) return; + } +#endif /* #ifdef CHECKBLANKS */ +} + + +void checkit() +{ +int i,k,cmtcount,numsread,ffrighttoleft,have_layout,layout; +char magicnum[5],cha; +long oldord,theord; +int tmpcnt,len; + +ec=0;wc=0; +incon_endmarkwarn=0; endmark_countwarn=0; nonincrwarn=0; +bigcodetagwarn=0; deutschcodetagwarn=0; +asciicodetagwarn=0; +codetagcnt=0; +gone=0; +if (!strcmp(fontfilename,"-")) { + fontfilename="(stdin)"; + fontfile=stdin; + } +else { + fontfile=fopen(fontfilename,"r"); + if (fontfile == NULL) { + fprintf(stderr,"%s: Could not open file '%s'\n",myname,fontfilename); + exit(1); + } + } + +if (fontfile!=stdin) { + if (badsuffix(fontfilename,FONTFILESUFFIX)) { + printf("%s: ERROR- Filename does not end with '%s'.\n", + fontfilename,FONTFILESUFFIX); + ec++; + weregone(0); if (gone) return; + } + } +numsread=fscanf(fontfile,"%4s",magicnum); +if (numsread == EOF) { + printf("%s: ERROR- can't read magic number.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (strcmp(magicnum,FONTFILEMAGICNUMBER)) { + printf("%s: ERROR- Incorrect magic number.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +cha=getc(fontfile); +if (cha!='a') { + printf("%s: Warning- Sub-version character is not 'a'.\n",fontfilename); + wc++; + weregone(0); if (gone) return; + } +fileline=(char*)my_alloc(sizeof(char)*(1001)); +if (fgets(fileline,1001,fontfile)==NULL) { + fileline[0] = '\0'; + } +if (strlen(fileline)>0 ? fileline[strlen(fileline)-1]!='\n' : 0) { + while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */ + } +numsread=sscanf(fileline,"%c %d %d %d %d %d %d %d %d", + &hardblank,&charheight,&upheight,&maxlen,&old_layout,&cmtcount, + &ffrighttoleft,&layout,&spectagcnt); +free(fileline); +fileline = NULL; +if (numsread<7) { + ffrighttoleft=0; + } +if (numsread<9) { + spectagcnt=-1; + } +have_layout = (numsread>=8); +if (6>numsread) { + printf("%s: ERROR (fatal)- First line improperly formatted.\n",fontfilename); + ec++; + weregone(1); if (gone) return; + } +if (!strchr(posshardblanks,hardblank)) { + printf("%s: Warning- Unusual hardblank.\n",fontfilename); + wc++; + weregone(0); if (gone) return; + } +if (charheight<1) { + printf("%s: ERROR (fatal)- charheight not positive.\n",fontfilename); + ec++; + weregone(1); if (gone) return; + } +if (upheight>charheight || upheight<1) { + printf("%s: ERROR- up_height out of bounds.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (maxlen<1) { + printf("%s: ERROR (fatal)- maxlen not positive.\n",fontfilename); + ec++; + weregone(1); if (gone) return; + } +if (old_layout<-1) { + printf("%s: ERROR- old_layout < -1.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (old_layout>63) { + printf("%s: ERROR- old_layout > 63.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (have_layout && layout<0) { + printf("%s: ERROR- layout < 0.\n", fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (have_layout &&layout>32767) { + printf("%s: ERROR- layout > 32767.\n", fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (have_layout && old_layout == -1 && (layout & 192)) { + printf("%s: ERROR- layout %d is inconsistent with old_layout -1.\n", + fontfilename,layout); + ec++; + weregone(0); if (gone) return; + } +if (have_layout && old_layout == 0 && (layout & 192) != 64 && + (layout & 255) != 128) { + printf("%s: ERROR- layout %d is inconsistent with old_layout 0.\n", + fontfilename,layout); + ec++; + weregone(0); if (gone) return; + } +if (have_layout && old_layout > 0 && + (!(layout & 128) || old_layout != (layout & 63))) { + printf("%s: ERROR- layout %d is inconsistent with old_layout %d.\n", + fontfilename,layout,old_layout); + ec++; + weregone(0); if (gone) return; + } +if (cmtcount<0) { + printf("%s: ERROR- cmt_count is negative.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } +if (ffrighttoleft<0 || ffrighttoleft>1) { + printf("%s: ERROR- rtol out of bounds.\n",fontfilename); + ec++; + weregone(0); if (gone) return; + } + +for (i=1;i<=cmtcount;i++) { + while(k=getc(fontfile),k!='\n'&&k!=EOF) ; /* Advance to end of line */ + } + +maxlinelength = 0; +currline=cmtcount+1; +fileline=(char*)my_alloc(sizeof(char)*(maxlen+1001)); +for (i=0;i<102;i++) { + readchar(); + if (gone) return; + } + +oldord=0; +while(fgets(fileline,maxlen+1000,fontfile)!=NULL) { + currline++; + len=strlen(fileline)-1; + if (len-100>maxlinelength) { + maxlinelength=len-100; + } + if (len>maxlen+100) { + printf("%s: ERROR- Code tag line way too long in line %d.\n", + fontfilename,currline); + ec++; + weregone(0); if (gone) return; + } + tmpcnt=sscanf(fileline,"%li",&theord); + if (tmpcnt<1) { + printf("%s: Warning- Extra chars after font in line %d.\n", + fontfilename,currline); + wc++; + weregone(0); if (gone) return; + break; + } + codetagcnt++; + if (theord>65535 && !bigcodetagwarn) { + printf("%s: Warning- Code tag > 65535 in line %d.\n", + fontfilename,currline); + printf("%s: (Above warning will only be printed once.)\n", + fontfilename); + bigcodetagwarn = 1; + wc++; + weregone(0); if (gone) return; + } + if (theord==-1) { + printf("%s: ERROR- Code tag -1 (unusable) in line %d.\n", + fontfilename,currline); + ec++; + weregone(0); if (gone) return; + break; + } + if (theord>=-255 && theord<=-249 &&!deutschcodetagwarn) { + printf("%s: Warning- Code tag in old Deutsch area in line %d.\n", + fontfilename,currline); + printf("%s: (Above warning will only be printed once.)\n", + fontfilename); + deutschcodetagwarn = 1; + wc++; + weregone(0); if (gone) return; + } + if (theord<127 && theord>31 && !asciicodetagwarn) { + printf("%s: Warning- Code tag in ASCII range in line %d.\n", + fontfilename,currline); + printf("%s: (Above warning will only be printed once.)\n", + fontfilename); + asciicodetagwarn = 1; + wc++; + weregone(0); if (gone) return; + } + else if (theord<=oldord && theord>=0 && oldord>=0 && !nonincrwarn) { + printf("%s: Warning- Non-increasing code tag in line %d.\n", + fontfilename,currline); + printf("%s: (Above warning will only be printed once.)\n", + fontfilename); + nonincrwarn = 1; + wc++; + weregone(0); if (gone) return; + } + oldord=theord; + readchar(); + if (gone) return; + } + +if (spectagcnt!=-1 && spectagcnt!=codetagcnt) { + printf("%s: ERROR- Inconsistent Codetag_Cnt value %d\n", + fontfilename, spectagcnt); + ec++; + weregone(0); if (gone) return; + } + +if (fontfile!=stdin) fclose(fontfile); + +weregone(1); if (gone) return; +} + + +int main(argc,argv) +int argc; +char *argv[]; +{ +int arg; + +if ((myname=strrchr(argv[0],'/'))!=NULL) { + myname++; + } +else { + myname = argv[0]; + } +if (argc<2) { + usageerr(); + } +for (arg=1;arg> 8); + } + + return crc; +} diff --git a/externals/figlet/crc.h b/externals/figlet/crc.h new file mode 100644 index 0000000000..bd7c5361f8 --- /dev/null +++ b/externals/figlet/crc.h @@ -0,0 +1,62 @@ +/* + * crc.h - CRC calculation routine + * + * Version 1.0.1 + */ + +/* + * Copyright (C) 1995, Edward B. Hamrick + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the copyright holders + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. The copyright + * holders makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Changes from 1.0 to 1.0.1: + * Relicensed under the MIT license, with consent of the copyright holders. + * Claudio Matsuoka (Jan 11 2011) + */ + +/* + * This CRC algorithm is the same as that used in zip. Normally it + * should be initialized with 0xffffffff, and the final CRC stored + * should be crc ^ 0xffffffff. + * + * It implements the polynomial: + * + * x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1 + */ + +#ifndef __CRC_H +#define __CRC_H + +#ifdef __cplusplus +extern "C" { +#endif + +unsigned long CrcUpdate( /* returns updated crc */ + unsigned long crc, /* starting crc */ + unsigned char *buffer, /* buffer to use to update crc */ + long length /* length of buffer */ +); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/externals/figlet/figfont.txt b/externals/figlet/figfont.txt new file mode 100644 index 0000000000..8cbe6ea7b5 --- /dev/null +++ b/externals/figlet/figfont.txt @@ -0,0 +1,1695 @@ + _____ ___ ____ __ _ + | ___||_ _|/ ___| / _| ___ _ __ | |_ ___ _ + | |_ | || | _ | |_ / _ \ | '_ \ | __|/ __|(_) + | _| | || |_| || _|| (_) || | | || |_ \__ \ _ + |_| |___|\____||_| \___/ |_| |_| \__||___/(_) + + The FIGfont Version 2 FIGfont and FIGdriver Standard + === ======= ======= = ======= === ========= ======== + Draft 2.0 Copyright 1996, 1997 + by John Cowan and Paul Burton + Portions Copyright 1991, 1993, 1994 + by Glenn Chappell and Ian Chai + May be freely copied and distributed. + + Figlet lives at: http://www.figlet.org/ + + _____ __ __ + / ___/__ ___ / /____ ___ / /____ +/ /__/ _ \/ _ \/ __/ -_) _ \/ __(_-< +\___/\___/_//_/\__/\__/_//_/\__/___/ + + INTRODUCTION + BASIC DEFINITIONS AND CONCEPTS + "FIGfont" + "FIGcharacters" and "Sub-characters" + "FIGdriver" + "FIGure" + "FIG" + "Layout Modes" + "Smushing Rules" + "Hardblanks" + CREATING FIGFONTS + The Header Line + Interpretation of Layout Parameters + Setting Layout Parameters Step-by-Step + FIGfont Comments + FIGcharacter Data + - Basic Data Structure + - Character Codes + - Required FIGcharacters + - Code Tagged FIGcharacters + NOTES - AVOIDING ERRORS AND GENERAL ADVICE + CONTROL FILES + Standard Format + Extended Commands + STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS + CHART OF CAPABILITIES OF FIGLET 2.2.2 AND FIGWIN 1.0 + + +INTRODUCTION +============ + +This document specifies the format of font files, and the associated control +files, used by the FIGlet and FIGWin programs (FIGdrivers). It is written +for designers who wish to build fonts (FIGfonts) usable by either program, +and also serves as a standard for development of future versions or similar +FIGdrivers. Some features explained here are not supported by both programs. +See separate documentation to learn how to use FIGlet or FIGWin. + +NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows +1.0, which is just that. It does not require a complete understanding of +this document to create FIGfonts. However it is a good idea to become +familiar with the "BASIC DEFINITIONS AND CONCEPTS" information before using +it. + +If you design a FIGfont, please send an e-mail announcement to +, the FIGlet fonts mailing list, and email a copy +to info@figlet.org for us to put it on the ftp site (ftp://ftp.figlet.org/) + +BASIC DEFINITIONS AND CONCEPTS +===== =========== === ======== + +"FIGfont" + +A FIGfont is a file which represents the graphical arrangement of characters +representing larger characters. Since a FIGfont file is a text file, it can +be created with any text editing program on any platform. The filename of a +FIGfont file must end with ".flf", which stands for "IGettering +ont". + + +"FIGcharacters" and "Sub-characters" + +Because FIGfonts describe large characters which consist of smaller +characters, confusion can result when descussing one or the other. +Therefore, the terms "FIGcharacter" and "sub-character" are used, +respectively. + + +"FIGdriver" + +The term FIGdriver is used in this document to encompass FIGlet, FIGWin, and +any future programs which use FIGfonts. + + +"FIGure" + +A FIGure (thusly capitalized) is an image created by a FIGdriver. + + +"FIG" + +A bit of history: + +In Spring 1991, inspired by the Email signature of a friend named Frank, and +goaded on by Ian Chai, Glenn Chappell wrote a nifty little 170-line "C" +program called "newban", which would create large letters out of ordinary +text characters. At the time, it was only compiled for UNIX. In hindsight, +we now call it "FIGlet 1.0". FIGlet stands for rank, an, and lenn's +ters. In various incarnations, newban circulated around the net for a +couple of years. It had one font, which included only lowercase letters. + +In early 1993, Ian decided newban was due for a few changes, so together Ian +and Glenn added the full ASCII character set, to start with. First, though, +Ian had to find a copy of the source, since Glenn had tossed it away as not +worth the disk space. Ian and Glenn discussed what could be done with it, +decided on a general re-write, and, 7 months later, ended up with 888 lines +of code, 13 FIGfonts and documentation. This was FIGlet 2.0, the first real +release. + +To their great surprise, FIGlet took the net by storm. They received floods +of "FIGlet is great!" messages and a new contributed FIGfont about once a +week. To handle all the traffic, Ian quickly set up a mailing list, Daniel +Simmons kindly offered space for an FTP site, several people volunteered to +port FIGlet to non-Unix operating systems, ...and bug reports poured in. + +Because of these, and the need to make FIGlet more "international", Ian and +Glenn released a new version of FIGlet which could handle non-ASCII character +sets and right-to-left printing. This was FIGlet 2.1, which, in a couple of +weeks, became figlet 2.1.1. This weighed in at 1314 lines, and there were +over 60 FIGfonts. + +By late 1996, FIGlet had quite a following of fans subscribing to its mailing +list. It had been ported to MS-DOS, Macintosh, Amiga, Apple II GS, Atari ST, +Acorn and OS/2. FIGlet had been further updated, and there were nearly 200 +FIGfonts. + +John Cowan and Paul Burton are two FIGlet fans who decided to create new +versions. While John wrote FIGlet version 2.2 using C, Paul wrote FIGWin +1.0, the first true GUI (Windows) implementation of FIGlet, using Visual +Basic. John and Paul worked together to add new features to FIGfont files +which could be read by both programs, and together wrote this document, which +we hope helps to establish consistency in FIGfonts and help with the creation +of future FIGdrivers. FIGlet 2.2 has about 4800 lines of code, of which +over half is a support library for reading compressed files. + +Three years later, in July 2005, FIGlet 2.2.2 was released under a new License +(the ``Academic Free License 2.1''). This version has proved to be very +stable, and persisted for more five years until minor bugfixes and another +license change resulted in the release of FIGlet 2.2.3 in January 2011. All +license concerns involving contributed code were solved and FIGlet is now +distributed under the ``New BSD License''. Contributed fonts amounted to more +than 400. + +FIGlet 2.2 and FIGWin 1.0 both allow greater flexibility by use of new +information which can be contained in FIGfont files without interfering with +the function of older FIGdrivers. + +NOTE: The Macintosh version of FIGlet is still command-line driven as of this +writing, and a GUI version is very much in demand. The FIGlet C code is +written to be easily plugged in to a GUI shell, so it will be a relatively +easy task for a Macintosh developer. + + + + +"Layout Modes" + +A FIGdriver may arrange FIGcharacters using one of three "layout modes", +which define the spacing between FIGcharacters. The layout mode for the +horizontal axis may differ from the layout mode for the vertical axis. A +default choice is defined for each axis by every FIGfont. + +The three layout modes are: + + Full Size (Separately called "Full Width" or "Full Height".) + + Represents each FIGcharacter occupying the full width or + height of its arrangement of sub-characters as designed. + + Fitting Only (Separately called "Kerning or "Vertical Fitting".) + + Moves FIGcharacters closer together until they touch. + Typographers use the term "kerning" for this phenomenon + when applied to the horizontal axis, but fitting also + includes this as a vertical behavior, for which there is + apparently no established typographical term. + + Smushing (Same term for both axes.) + + Moves FIGcharacters one step closer after they touch, so that + they partially occupy the same space. A FIGdriver must decide + what sub-character to display at each junction. There are two + ways of making these decisions: by controlled smushing or by + universal smushing. + + Controlled smushing uses a set of "smushing rules" selected by + the designer of a FIGfont. (See "Smushing Rules" below.) + Each rule is a comparison of the two sub-characters which must + be joined to yield what to display at the junction. + Controlled smushing will not always allow smushing to occur, + because the compared sub-characters may not correspond to any + active rule. Wherever smushing cannot occur, fitting occurs + instead. + + Universal smushing simply overrides the sub-character from the + earlier FIGcharacter with the sub-character from the later + FIGcharacter. This produces an "overlapping" effect with some + FIGfonts, wherin the latter FIGcharacter may appear to be "in + front". + + A FIGfont which does not specify any smushing rules for a + particular axis indicates that universal smushing is to occur + when smushing is requested. Therefore, it is not possible for + a FIGfont designer to "forbid" smushing. However there are + ways to ensure that smushing does not cause a FIGfont to be + illegible when smushed. This is especially important for + smaller FIGfonts. (See "Hardblanks" for details.) + +For vertical fitting or smushing, entire lines of output FIGcharacters are +"moved" as a unit. + +Not all FIGdrivers do vertical fitting or smushing. At present, FIGWin 1.0 +does, but FIGlet 2.2 does not. Further, while FIGlet 2.2 allows the user to +override the FIGfont designer's set of smushing rules, FIGWin 1.0 does not. + +NOTE: In the documentation of FIGlet versions prior to 2.2, the term +"smushmode" was used to mean the layout mode, and this term further included +the smushing rules (if any) to be applied. However, since the layout mode +may or may not involve smushing, we are straying from the use of this +somewhat misleading term. + + +"Smushing Rules" + +Again, smushing rules are for controlled smushing. If none are defined to be +active in a FIGfont, universal smushing occurs instead. + +Generally, if a FIGfont is "drawn at the borders" using sub-characters +"-_|/\[]{}()<>", you will want to use controlled smushing by selecting from +the rules below. Otherwise, if your FIGfont uses a lot of other +sub-characters, do not select any rules and universal smushing will occur +instead. (See "Hardblanks" below if your FIGfont is very small and would +become illegible if smushed.) Experimentation is the best way to make these +decisions. + +There are six possible horizontal smushing rules and five possible vertical +smushing rules. Below is a description of all of the rules. + +NOTE: Ignore the "code values" for now. They are explained later. + + The Six Horizontal Smushing Rules + + Rule 1: EQUAL CHARACTER SMUSHING (code value 1) + + Two sub-characters are smushed into a single sub-character + if they are the same. This rule does not smush + hardblanks. (See "Hardblanks" below.) + + Rule 2: UNDERSCORE SMUSHING (code value 2) + + An underscore ("_") will be replaced by any of: "|", "/", + "\", "[", "]", "{", "}", "(", ")", "<" or ">". + + Rule 3: HIERARCHY SMUSHING (code value 4) + + A hierarchy of six classes is used: "|", "/\", "[]", "{}", + "()", and "<>". When two smushing sub-characters are + from different classes, the one from the latter class + will be used. + + Rule 4: OPPOSITE PAIR SMUSHING (code value 8) + + Smushes opposing brackets ("[]" or "]["), braces ("{}" or + "}{") and parentheses ("()" or ")(") together, replacing + any such pair with a vertical bar ("|"). + + Rule 5: BIG X SMUSHING (code value 16) + + Smushes "/\" into "|", "\/" into "Y", and "><" into "X". + Note that "<>" is not smushed in any way by this rule. + The name "BIG X" is historical; originally all three pairs + were smushed into "X". + + Rule 6: HARDBLANK SMUSHING (code value 32) + + Smushes two hardblanks together, replacing them with a + single hardblank. (See "Hardblanks" below.) + + + The Five Vertical Smushing Rules + + Rule 1: EQUAL CHARACTER SMUSHING (code value 256) + + Same as horizontal smushing rule 1. + + Rule 2: UNDERSCORE SMUSHING (code value 512) + + Same as horizontal smushing rule 2. + + Rule 3: HIERARCHY SMUSHING (code value 1024) + + Same as horizontal smushing rule 3. + + Rule 4: HORIZONTAL LINE SMUSHING (code value 2048) + + Smushes stacked pairs of "-" and "_", replacing them with + a single "=" sub-character. It does not matter which is + found above the other. Note that vertical smushing rule 1 + will smush IDENTICAL pairs of horizontal lines, while this + rule smushes horizontal lines consisting of DIFFERENT + sub-characters. + + Rule 5: VERTICAL LINE SUPERSMUSHING (code value 4096) + + This one rule is different from all others, in that it + "supersmushes" vertical lines consisting of several + vertical bars ("|"). This creates the illusion that + FIGcharacters have slid vertically against each other. + Supersmushing continues until any sub-characters other + than "|" would have to be smushed. Supersmushing can + produce impressive results, but it is seldom possible, + since other sub-characters would usually have to be + considered for smushing as soon as any such stacked + vertical lines are encountered. + + +"Hardblanks" + +A hardblank is a special sub-character which is displayed as a blank (space) +in rendered FIGures, but is treated more like a "visible" sub-character when +fitting or smushing horizontally. Therefore, hardblanks keep adjacent +FIGcharacters a certain distance apart. + +NOTE: Hardblanks act the same as blanks for vertical operations. + +Hardblanks have three purposes: + + 1) Hardblanks are used to create the blank (space) FIGcharacter. + + Usually the space FIGcharacter is simply one or two vertical + columns of hardblanks. Some slanted FIGfonts as shown below + have a diagonal arrangement of hardblanks instead. + + 2) Hardblanks can prevent "unreasonable" fitting or smushing. + + Normally when fitting or smushing, the blank (space) + sub-character is considered "vacant space". In the following + example, a capital "C" FIGcharacter is smushed with a "minus" + FIGcharacter. + ______ ______ + / ____/ / ____/ + / / ____ >>-Becomes-> / / ____ + / /___ /___/ / /__/___/ + \____/ \____/ + + The FIGure above looks like a capital G. To prevent this, a + FIGfont designer might place a hardblank in the center of the + capital C. In the following example, the hardblank is + represented as a "$": + ______ ______ + / ____/ / ____/ + / / $ ____ >>-Becomes-> / / ____ + / /___ /___/ / /___/___/ + \____/ \____/ + + Using hardblanks in this manner ensures that FIGcharacters + with a lot of empty space will not be unreasonably "invaded" + by adjacent FIGcharacters. Generally, FIGcharacters such as + capital C, L or T, or small punctuation marks such as commas, + may contain hardblanks, since they may contain a lot of vacant + space which is "accessible" from either side. + + 3) Hardblanks can prevent smushing from making FIGfonts illegible. + + This legitimate purpose of hardblanks is often overused. If a + FIGfont designer is absolutely sure that smushing "visible" + sub-characters would make their FIGfont illegible, hardblanks + may be positioned at the end of each row of sub-characters, + against the visible sub-characters, creating a barrier. + + With older FIGdrivers, using hardblanks for this purpose meant + that FIGcharacters would have to be separated by at least one + blank in output FIGures, since only a hardblank could smush + with another hardblank. However with the advent of universal + smushing, this is no longer necessary. Hardblanks ARE + overriden by any visible sub-character when performing + universal smushing. Hardblanks still represent a "stopping + point", but only AFTER their locations are occupied. + + NOTE: Earlier it was stated that universal smushing overrides + the sub-character from the former FIGcharacter with the + sub-character from the latter FIGcharacter. Hardblanks (and + blanks or spaces) are the exception to this rule; they will + always be overriden by visible sub-characters, regardless of + which FIGcharacter contains the hardblank. This ensures that + no visible sub-characters "disappear". + + Therefore, one can design a FIGfont with a default behavior of + universal smushing, while the output FIGure would LOOK like + the effect of fitting, or even full size if additional + hardblanks are used. If a user "scales down" the layout mode + to fitting, the result would look like "extra spacing" between + FIGcharacters. + + Taking this concept further, a FIGcharacter may also include + extra blanks (spaces) on the left side of each FIGcharacter, + which would define the FIGcharacter's width as slightly larger + than required for the visible sub-characters and hardblanks. + With such a FIGfont, a user who further "scales down" the + layout mode to full size would see even greater spacing. + + These techniques prevent horizontal smushing from causing a + FIGfont to become illegible, while offering greater + flexibility of output to users. + + NOTE: These techniques cannot be used to prevent vertical + smushing of visible sub-characters, since hardblanks are not + respected in the vertical axis. Although it is possible to + select only one vertical smushing rule which involves only + sub-characters which are not used in your FIGfont, it is + recommend that you do NOT do so. In our opinion, most users + would prefer to get what they ask for, rather than being + told, in effect: "I, the FIGfont designer, have decided that + you wouldn't like the results of vertical smushing, so I have + prevented you from trying it." Instead, we recommend setting + the default behavior to either fitting or full height, and + either allowing universal smushing, or selecting vertical + smushing rules which seem most appropriate. A user of your + FIGfont will quickly see why you did not choose smushing as + the default vertical layout mode, and will agree with you. + + +"Character Sets" and "Character Codes" + +When you type using your keyboard, you are actually sending your computer a +series of numbers. Each number must be interpreted by your computer so that +it knows what character to display. The computer uses a list of definitions, +called a "character set". The numbers which represent each character are + called "character codes". + +There are many character sets, most of which are internationally accepted as +standards. By far, the most common character set is ASCII, which stands for +"American Standard Code for Information Interchange". ASCII identifies its +characters with codes ranging from 0 to 127. + +NOTE: The term "ASCII art" has become well-understood to mean artistic images +which consist of characters on your screen (such as FIGures). + +For a list of the printable ASCII characters with the corresponding codes, +see the section "REQUIRED CHARACTERS" below. The other ASCII codes in the +range of 0 through 31 are "control characters" such as carriage-return +(code 13), linefeed/newline (code 10), tab (code 9), backspace (code 8) or +null (code 0). Code 127 is a delete in ASCII. + +Getting more technical for just a moment: A byte consisting of 8 bits (eight + 1's or 0's) may represent a number from 0 to 255. Therefore, most computers +have DIRECT access to 256 characters at any given time. A character set +which includes 256 characters is called an 8-bit character set. + +For Latin-based languages, ASCII is almost always the first half of a larger +8-bit character set. Latin-1 is the most common example of an 8-bit +character set. Latin-1 includes all of ASCII, and adds characters with codes +from 128 to 255 which include umlauted ("double-dotted") letters and +characters with various other accents. In the United States, Windows and +most Unix systems have Latin-1 directly available. + +Most modern systems allow the possibility of changing 8-bit character sets. +On Windows systems, character sets are referred to as "code pages". There +are many other character sets which are not mentioned here. DOS has its own +character set (which also has international variants) that includes graphics +characters for drawing lines. It is also an extension of ASCII. + +For some languages, 8-bit character sets are insufficient, particularly on +East Asian systems. Therefore, some systems allow 2 bytes for each +character, which multiplies the 256 possibilties by 256, resulting in 65536 +possible characters. (Much more than the world will ever need.) + +Unicode is a character set standard which is intended to fulfill the +worldwide need for a single character set which includes all characters used +worldwide. Unicode includes character codes from 0 to 65535, although at +present, only about 22,000 characters have been officially assigned and named +by the Unicode Consortium. The alphabets and other writing systems +representable with Unicode include all Latin-alphabet systems, Greek, +Russian and other Cyrillic-alphabet systems, Hebrew, Arabic, the various +languages of India, Chinese, Japanese, Korean, and others. The existing +Unicode symbols include chess pieces, astrological signs, gaming symbols, +telephones, pointing fingers, etc. --- just about any type of FIGcharacter +you may wish to create. Unicode is constantly (but slowly) being extended +to handle new writing systems and symbols. Information on Unicode is +available at http://www.unicode.org and at ftp://unicode.org . + +Unicode, Latin-1, and ASCII all specify the same meanings for overlapping +character codes: ASCII 65 = Latin-1 65 = Unicode 65 = "A", formally known +as "LATIN CAPITAL LETTER A". + +Since a keyboard usually has only about 100 keys, your computer may contain +a program called a "keyboard map", which will interpret certain keystrokes +or combinations of keystrokes as different character codes. Keyboard maps +use "mapping tables" to make these determinations. The appropriate keyboard +activity for a given character code may involve several keystrokes. Almost +all systems are capable of handling at least 8-bit character sets (containing +256 characters), so there is always an active keyboard map, at least for +those characters which are not actually painted on the keys. (United States +users may not even know that their computer can interpret special keystrokes. +Such keystrokes may be something similar to holding down the ALT key while +typing a character code on the numeric keypad. Try it!) + +Below are characters 160 through 255, AS REPRESENTED ON YOUR SYSTEM. + + ������������������������������������������������ + ������������������������������������������������ + +IMPORTANT NOTE: Depending on which character set is active on your system, +you may see different characters. This document (like all computer +documents) does not contains characters per se, only bytes. What you see +above is your particular computer's representation of these byte values. +In other words, your active character set. However, if it is Latin-1, the +first visible character is an inverted "!", and the last is an umlauted "y". +Although we can safely assume your computer has ASCII, it does not +necessarily have the Latin-1 character set active. + +What does all this have to do with FIGfonts??? + +First, it should be evident that it is best to use only ASCII characters for +sub-characters when possible. This will ensure portability to different +platforms. + +FIGlet has gained international popularity, but early versions were made to +handle only FIGcharacters with assigned character codes corresponding to +ASCII. So, over the years there have been four methods used to create +"virtual mapping tables" within the program itself: + + The first method was simply to create FIGcharacters which do not + look like the ASCII character set implies. For example, a + FIGfont might contain Greek letters, and within its comments, it + may say, "If you type A, you'll get a Greek Alpha" etc. With + the advent of newer features, it is preferable not to use this + method. Instead, when possible, add new FIGcharacters to + existing FIGfonts or create new FIGfonts with FIGcharacters coded + to match the expectations of ASCII/Latin-1/Unicode, and create an + appropriate control file. (See "CONTROL FILES" below.) Remember + that Unicode includes almost any character for which you may want + to create a FIGcharacter. + + The second method was very specific, to accommodate the German + audience. A special option was added to the FIGlet program + which would re-route input characters "[", "\", and "]" to + umlauted A, O and U, while "{", "|", and "}" would become the + respective lowercase versions of these. Also, "~" was made to + become the s-z character when this special option was used. This + was called "the -D option." The addition of this feature meant + that all compatible FIGfonts must contain these Deutsch (German) + FIGcharacters, in addition to the ASCII FIGcharacters. Although + this option is still available in the most recent version, it is + no longer necessary, as the same result can be achieved by the + newer features described below. However, the requirement for + Deutsch FIGcharacters remains for backward compatibility. (Or at + least zero-width FIGcharacters in their place.) + + Later, FIGlet was made to accept control files, which are quite + literally a form of mapping table. (See "CONTROL FILES" below.) + This was a significant advance for internationalization. + + FIGlet 2.2 can now accept specially encoded formats of input + text which imply more than one byte per character. + + +CREATING FIGFONTS +======== ======== + +NOTE: FIGWin 1.0 is packaged with a program called FIGfont Editor for Windows +1.0, which is just that. There is no need to read further if you intend to +use it. However, the section "CONTROL FILES" below is still relevant. + +Since a FIGfont file is a text file, it can be created with any text editing +program on any platform, and will still be compatible with FIGdrivers on all +operating systems, except that the bytes used to indicate the end of each +text line may vary. (PC's use carriage return and linefeed at the end of +each line, Macintosh uses carriage return only, and UNIX uses linefeed only.) + +This minor difference among operating systems is handled easily by setting +your FTP program to ASCII mode during upload or download. So there is no +need to be concerned about this as long as you remember to do this during +file transfer. + +The filename of a FIGfont file must end with ".flf", which stands for +"IGettering ont". The first part of the filename should contain +only letters, and should be lowercase on operating systems which permit case +sensitive filenames. The filename should be unique in the first 8 +characters, since some older file systems truncate longer filenames. + +It is easier to modify an existing FIGfont than it is to create a new one +from scratch. The first step is to read and understand this document. +You may want to load "standard.flf" or another FIGfont into a text editor as +an example while you read. + +A FIGfont file contains three portions: a header line, comments, and +FIGcharacter data. + + +THE HEADER LINE + +The header line gives information about the FIGfont. Here is an example +showing the names of all parameters: + + flf2a$ 6 5 20 15 3 0 143 229 NOTE: The first five characters in + | | | | | | | | | | the entire file must be "flf2a". + / / | | | | | | | \ + Signature / / | | | | | \ Codetag_Count + Hardblank / / | | | \ Full_Layout* + Height / | | \ Print_Direction + Baseline / \ Comment_Lines + Max_Length Old_Layout* + + * The two layout parameters are closely related and fairly complex. + (See "INTERPRETATION OF LAYOUT PARAMETERS".) + +For those desiring a quick explanation, the above line indicates that this +FIGfont uses "$" to represent the hardblank in FIGcharacter data, it has +FIGcharacters which are 6 lines tall, 5 of which are above the baseline, no +line in the FIGfont data is more than 20 columns wide, the default horizontal +layout is represented by the number 15, there are 3 comment lines, the +default print direction for this FIGfont is left-to-right, a complete +description of default and possible horizontal and vertical layouts is +represented by the number 143, and there are 229 code-tagged characters. + +The first seven parameters are required. The last three (Direction, +Full_Layout, and Codetag_Count, are not. This allows for backward +compatibility with older FIGfonts, but a FIGfont without these parameters would +force a FIGdriver to "guess" (by means not described in this document) the +information it would expect to find in Full_Layout. For this reason, inclusion +of all parameters is strongly recommended. + +Future versions of this standard may add more parameters after Codetag_Count. + +A description of each parameter follows: + + Signature + +The signature is the first five characters: "flf2a". The first four +characters "flf2" identify the file as compatible with FIGlet version 2.0 or +later (and FIGWin 1.0). The "a" is currently ignored, but cannot be omitted. +Different characters in the "a" location may mean something in future +versions of this standard. If so, you can be sure your FIGfonts will still +work if this character is "a". + + Hardblank + +Immediately following the signature is the hardblank character. The +hardblank character in the header line defines which sub-character will be +used to represent hardblanks in the FIGcharacter data. + +By convention, the usual hardblank is a "$", but it can be any character +except a blank (space), a carriage-return, a newline (linefeed) or a null +character. If you want the entire printable ASCII set available to use, make +the hardblank a "delete" character (character code 127). With the exception +of delete, it is inadvisable to use non-printable characters as a hardblank. + + Height + +The Height parameter specifies the consistent height of every FIGcharacter, +measured in sub-characters. Note that ALL FIGcharacters in a given FIGfont +have the same height, since this includes any empty space above or below. +This is a measurement from the top of the tallest FIGcharacter to the bottom +of the lowest hanging FIGcharacter, such as a lowercase g. + + Baseline + +The Baseline parameter is the number of lines of sub-characters from the +baseline of a FIGcharacter to the top of the tallest FIGcharacter. The +baseline of a FIGfont is an imaginary line on top of which capital letters +would rest, while the tails of lowercase g, j, p, q, and y may hang below. +In other words, Baseline is the height of a FIGcharacter, ignoring any +descenders. + +This parameter does not affect the output of FIGlet 2.2 or FIGWin 1.0, but +future versions or other future FIGdrivers may use it. The Baseline +parameter should be correctly set to reflect the true baseline as described +above. It is an error for Baseline to be less than 1 or greater than the +Height parameter. + + Max_Length + +The Max_Length parameter is the maximum length of any line describing a +FIGcharacter. This is usually the width of the widest FIGcharacter, plus 2 +(to accommodate endmarks as described later.) However, you can (and probably +should) set Max_Length slightly larger than this as a safety measure in case +your FIGfont is edited to include wider FIGcharacters. FIGlet (but not +FIGWin 1.0) uses this number to minimize the memory taken up by a FIGfont, +which is important in the case of FIGfonts with many FIGcharacters. + + Old_Layout + +(See "INTERPRETATION OF LAYOUT PARAMETERS" below.) + + Comment_Lines + +Between the first line and the actual FIGcharacters of the FIGfont are the +comment lines. The Comment_Lines parameter specifies how many lines there +are. Comments are optional, but recommended to properly document the origin +of a FIGfont. + + Print_Direction + +The Print_Direction parameter tells which direction the font is to be +printed by default. A value of 0 means left-to-right, and 1 means +right-to-left. If this parameter is absent, 0 (left-to-right) is assumed. +Print_Direction may not specify vertical print, although FIGdrivers are +capable of vertical print. Versions of FIGlet prior to 2.1 ignore this +parameter. + + Full_Layout + +(See "INTERPRETATION OF LAYOUT PARAMETERS" just below.) + + Codetag_Count + +Indicates the number of code-tagged (non-required) FIGcharacters in this +FIGfont. This is always equal to the total number of FIGcharacters in the font +minus 102. This parameter is typically ignored by FIGdrivers, but can be +used to verify that no characters are missing from the end of the FIGfont. +The chkfont program will display the number of codetagged characters +in the FIGfont on which it is run, making it easy to insert this parameter +after a FIGfont is written. + + +INTERPRETATION OF LAYOUT PARAMETERS + +Full_Layout describes ALL information about horizontal and vertical layout: +the default layout modes and potential smushing rules, even when smushing is +not a default layout mode. + +Old_Layout does not include all of the information desired by the most +recent FIGdrivers, which is the inspiration for the creation of the new +Full_Layout parameter. Old_Layout is still required for backward +compatibility, and FIGdrivers must be able to interpret FIGfonts which do not +have the Full_Layout parameter. (See "STANDARDIZED CAPABILITIES OF CURRENT +AND FUTURE FIGDRIVERS".) + +Versions of FIGlet prior to 2.2 do not recognize the Full_Layout parameter. +Documentation accompanying FIGlet versions prior to 2.2 refer to Old_Layout +as "smushmode", which is somewhat misleading since it can indicate layout +modes other than smushing. + +Old_Layout and Full_Layout must contain some redundant information. + +Setting the layout parameters is a matter of adding numbers together ("code +values"). What follows is a chart of the meanings of all code values. +(You may skip down to "SETTING LAYOUT PARAMETERS STEP BY STEP" if you prefer, +or if you find this portion confusing.) + +Full_Layout: (Legal values 0 to 32767) + + 1 Apply horizontal smushing rule 1 when smushing + 2 Apply horizontal smushing rule 2 when smushing + 4 Apply horizontal smushing rule 3 when smushing + 8 Apply horizontal smushing rule 4 when smushing + 16 Apply horizontal smushing rule 5 when smushing + 32 Apply horizontal smushing rule 6 when smushing + 64 Horizontal fitting (kerning) by default + 128 Horizontal smushing by default (Overrides 64) + 256 Apply vertical smushing rule 1 when smushing + 512 Apply vertical smushing rule 2 when smushing + 1024 Apply vertical smushing rule 3 when smushing + 2048 Apply vertical smushing rule 4 when smushing + 4096 Apply vertical smushing rule 5 when smushing + 8192 Vertical fitting by default + 16384 Vertical smushing by default (Overrides 8192) + +When no smushing rules are included in Full_Layout for a given axis, the +meaning is that universal smushing shall occur, either by default or when +requested. + +Old_Layout: (Legal values -1 to 63) + + -1 Full-width layout by default + 0 Horizontal fitting (kerning) layout by default* + 1 Apply horizontal smushing rule 1 by default + 2 Apply horizontal smushing rule 2 by default + 4 Apply horizontal smushing rule 3 by default + 8 Apply horizontal smushing rule 4 by default + 16 Apply horizontal smushing rule 5 by default + 32 Apply horizontal smushing rule 6 by default + +* When Full_Layout indicates UNIVERSAL smushing as a horizontal default +(i.e., when none of the code values of horizontal smushing rules are included +and code value 128 is included in Full_Layout) Old_Layout must be set to 0 +(zero). Older FIGdrivers which cannot read the Full_Layout parameter are +also incapable of universal smushing. Therefore they would be directed to +the "next best thing", which is horizontal fitting (kerning). + +NOTE: You should NOT add the -1 value to any positive code value for +Old_Layout. This would be a logical contradiction. + +See "STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS" for the +behavior of a FIGdriver when the Full_Layout parameter is absent (presumably +in an older FIGfont). + +The following rules establish consistency between Old_Layout and Full_Layout. + + If full width is to be the horizontal default: + Old_Layout must be -1. + Full_Layout must NOT include code values 64 nor 128. + + If horizontal fitting (kerning) is to be default: + Old_Layout must be 0. + Full_Layout must include code value 64. + Full_Layout must NOT include code value 128. + + If CONTROLLED smushing is to be the horizontal default: + Old_Layout must be a positive number, represented by the added + code values of all desired horizontal smushing rules. + Full_Layout must include the code values for the SAME set of + horizontal smushing rules as included in Old_Layout. + Full_Layout must include code value 128. + + If UNIVERSAL smushing is to be the horizontal default: + Old_Layout must be 0. + Full_Layout must include code value 128. + Full_Layout must NOT include any code value under 64. + +In general terms, if Old_Layout specifies horizontal smushing rules, +Full_Layout must specify the same set of horizontal rules, and both must +indicate the same horizontal default layout mode. + + +SETTING LAYOUT PARAMETERS STEP-BY-STEP + +The following step-by-step process will yield correct and consistent values +for the two layout parameters. You may skip this if you find the +explanations above easier to use. + +Step 1: Start with 0 for both numbers. + + Write "Old_Layout" and "Full_Layout" on a piece of paper. + Write the number 0 next to each. + The number 0 may be crossed out and changed several times below. + Go to step 2. + +Step 2: Set the DEFAULT HORIZONTAL LAYOUT MODE. + + If you want to use FULL WIDTH as the default + Make Old_Layout -1 + Go to step 3. + If you want to use HORIZONTAL FITTING (kerning) as the default + Make Full_Layout 64 + Go to step 3. + If you want to use HORIZONTAL SMUSHING as the default + Make Full_Layout 128 + Go to step 3. + +Step 3: Specify HOW TO SMUSH HORIZONTALLY WHEN SMUSHING. + + If you want to use UNIVERSAL smushing for the horizontal axis + Go to step 4. + If you want to use CONTROLLED smushing for the horizontal axis + Add together the code values for all the horizontal smushing + rules you want from the list below to get the horizontal + smushing rules total. + + EQUAL CHARACTER SMUSHING 1 + UNDERSCORE SMUSHING 2 + HIERARCHY SMUSHING 4 + OPPOSITE PAIR SMUSHING 8 + BIG X SMUSHING 16 + HARDBLANK SMUSHING 32 + + Horizontal smushing rules total: ___ + + If Full_Layout is currently 128 + Change Old_Layout to the horizontal smushing rules total. + Increase Full_Layout by the horizontal smushing rules total. + Go to Step 4. + If Full_Layout is currently 0 or 64 + Increase Full_Layout by the horizontal smusing rules total. + Go to Step 4. + +Step 4: Set the DEFAULT VERTICAL LAYOUT MODE. + + If you want to use FULL HEIGHT as the default + Go to step 5. + If you want to use VERTICAL FITTING as the default + Increase Full_Layout by 8192. + Go to step 5. + If you want to use VERTICAL SMUSHING as the default + Increase Full_Layout by 16384. + Go to step 5. + +Step 5: Specify HOW TO SMUSH VERTICALLY WHEN SMUSHING. + + If you want to use UNIVERSAL smushing for the vertical axis + Go to step 6. + If you want to use CONTROLLED smushing for the vertical axis + Add together the code values for all the vertical smushing + rules you want from the list below to get the vertical + smushing rules total. + + EQUAL CHARACTER SMUSHING 256 + UNDERSCORE SMUSHING 512 + HIERARCHY SMUSHING 1024 + HORIZONTAL LINE SMUSHING 2048 + VERTICAL LINE SUPERSMUSHING 4096 + + Vertical smushing rules total: ____ + + Increase Full_Layout by the vertical smushing rules total. + Go to step 6. + +Step 6: You're done. + +The resulting value of Old_Layout will be a number from -1 to 63. +The resulting value of Full_Layout will be a number from 0 and 32767. + + +FIGFONT COMMENTS + +After the header line are FIGfont comments. The comments can be as many +lines as you like, but should at least include your name and Email address. +Here is an example which also shows the header line. + + flf2a$ 6 5 20 15 3 0 143 + Example by Glenn Chappell 8/94 + Permission is hereby given to modify this font, as long as the + modifier's name is placed on a comment line. + +Comments are not required, but they are appreciated. Please comment your +FIGfonts. + +Remember to adjust the Comment_Lines parameter as you add lines to your +comments. Don't forget that blank lines DO count. + + +FIGCHARACTER DATA +============ ==== + +The FIGcharacter data begins on the next line after the comments and +continues to the end of the file. + +BASIC DATA STRUCTURE + +The sub-characters in the file are given exactly as they should be output, +with two exceptions: + + 1) Hardblanks should be the hardblank character specified in the + header line, not a blank (space). + + 2) Every line has one or two endmark characters, whose column + locations define the width of each FIGcharacter. + +In most FIGfonts, the endmark character is either "@" or "#". The FIGdriver +will eliminate the last block of consecutive equal characters from each line +of sub-characters when the font is read in. By convention, the last line of +a FIGcharacter has two endmarks, while all the rest have one. This makes it +easy to see where FIGcharacters begin and end. No line should have more +than two endmarks. + +Below is an example of the first few FIGcharacters, taken from small.flf. + +NOTE: The line drawn below consisting of "|" represents the left margin of +your editor. It is NOT part of the FIGfont. Also note that hardblanks are +represented as "$" in this FIGfont, as would be described in the header line. + + |$@ + |$@ + blank/space |$@ + |$@ + |$@@ + | _ @ + || |@ + exclamation point ||_|@ + |(_)@ + | @@ + | _ _ @ + |( | )@ + double quote | V V @ + | $ @ + | @@ + | _ _ @ + | _| | |_ @ + number sign ||_ . _|@ + ||_ _|@ + | |_|_| @@ + | @ + | ||_@ + dollar sign |(_-<@ + |/ _/@ + | || @@ + +Notice that each FIGcharacter occupies the same number of lines (6 lines, in +this case), which must also be expressed in the header line as the Height +parameter. + +Also notice that for every FIGcharacter, there must be a consistent width +(length) for each line once the endmarks are removed. To do otherwise would +be an error. + +Be aware of the vertical alignment of each FIGcharacter within its height, +so that all FIGcharacters will be properly lined up when printed. + +If one of the last sub-characters in a particular FIGcharacter is "@", you +should use another character for the endmark in that FIGcharacter so that +the intended "@" is not interpreted as an endmark. "#" is a common +alternative. + +Load a few existing FIGfonts into your favorite text editor for other +examples. + + +REQUIRED FIGCHARACTERS + +Some FIGcharacters are required, and must be represented in a specific order. +Specifically: all of the printable character codes from ASCII shown in the +table below, in order, plus character codes 196, 214, 220, 228, 246, 252, +and 223, in that order. In Latin-1, these extra 7 characters represent the +following German characters: umlauted "A", "O", "U", "a", "o" and "u"; and +also "ess-zed". + + Printable portion of the ASCII character set: + + 32 (blank/space) 64 @ 96 ` + 33 ! 65 A 97 a + 34 " 66 B 98 b + 35 # 67 C 99 c + 36 $ 68 D 100 d + 37 % 69 E 101 e + 38 & 70 F 102 f + 39 ' 71 G 103 g + 40 ( 72 H 104 h + 41 ) 73 I 105 i + 42 * 74 J 106 j + 43 + 75 K 107 k + 44 , 76 L 108 l + 45 - 77 M 109 m + 46 . 78 N 110 n + 47 / 79 O 111 o + 48 0 80 P 112 p + 49 1 81 Q 113 q + 50 2 82 R 114 r + 51 3 83 S 115 s + 52 4 84 T 116 t + 53 5 85 U 117 u + 54 6 86 V 118 v + 55 7 87 W 119 w + 56 8 88 X 120 x + 57 9 89 Y 121 y + 58 : 90 Z 122 z + 59 ; 91 [ 123 { + 60 < 92 \ 124 | + 61 = 93 ] 125 } + 62 > 94 ^ 126 ~ + 63 ? 95 _ + + Additional required Deutsch FIGcharacters, in order: + + 196 (umlauted "A" -- two dots over letter "A") + 214 (umlauted "O" -- two dots over letter "O") + 220 (umlauted "U" -- two dots over letter "U") + 228 (umlauted "a" -- two dots over letter "a") + 246 (umlauted "o" -- two dots over letter "o") + 252 (umlauted "u" -- two dots over letter "u") + 223 ("ess-zed" -- see FIGcharacter illustration below) + ___ + / _ \ + | |/ / + Ess-zed >>---> | |\ \ + | ||_/ + |_| + +If you do not wish to define FIGcharacters for all of those required above, +you MAY create "empty" FIGcharacters in their place by placing endmarks flush +with the left margin. The Deutsch FIGcharacters are commonly created as +empty. If your FIGfont includes only capital letters, please copy them to +the appropriate lowercase locations, rather than leaving lowercase letters +empty. A FIGfont which does not include at least all ASCII letters, a space, +and a few basic punctuation marks will probably frustrate some users. (For +example "@" is more frequently desired as a FIGcharacter than you may think, +since Email addresses may be written as FIGures.) + + +CODE TAGGED FIGCHARACTERS + +After the required FIGcharacters, you may create FIGcharacters with any +character code in the range of -2147483648 to +2147483647. (Over four +billion possibilities, which is "virtual infinity" for this purpose.) +One exception: character code -1 is NOT allowed for technical reasons. +It is advisable to assign character codes such that the appearance of your +FIGcharacters matches the expectations of ASCII/Latin-1/Unicode, with a few +exceptions: + + 1) If a FIGcharacter with code 0 is present, it is treated + specially. It is a FIGfont's "missing character". Whenever + the FIGdriver is told to print a character which doesn't exist + in the current FIGfont, it will print FIGcharacter 0. If there + is no FIGcharacter 0, nothing will be printed. + + 2) If a FIGfont contains a non-Latin alphabet in character codes + in the ASCII range 32-126 (which is discouraged), we have found + it helpful to include a human-readable translation table as one + of the FIGcharacters instead of a "glyph". Typically, the "~" + would contain this table. The translation table FIGcharacter + would contain a list of all the special characters in the + FIGfont, along with the ASCII characters to which they + correspond. Keep this table no more than 79 columns wide. + (Thanks to Gedaliah Friedenberg for this idea.) + + 3) In more extensive Unicode fonts, you can assign a negative + character code (other than -1) to one or more translation + tables, similar to #2 above. (All Unicode character codes are + positive.) And, you will most likely suggest within the + comments that a user access one of several control files (See + "CONTROL FILES" below) to gain access to Latin-2, Latin-3, or + other 8-bit standardized character sets. The control files may + redirect the "~" character to one of the negative character codes so + that the translation table would display the table when "~" is + given for input. Doing this allows you to still have a "~" + FIGcharacter for those who do not use a control file. + +Those FIGcharacters which are not required must have an explicit character +code in a separate line preceding them, called a "code tag". A code tag +contains the value of the character code, followed by whitespace (a few +spaces), and perhaps an optional comment. The comment is usually the name of +the FIGcharacter. The Unicode Consortium has assigned formal names to all +officially accepted characters, and these may be used. An entire code tag, +including the comment, should not occupy more than 95 columns. (Over 100 +characters here may make older versions of FIGlet crash.) + +Here is an example, showing two code tagged FIGcharacters after the last two +required Deutsch FIGcharacters. Again, the line drawn below consisting of +"|" represents the left margin of your editor, and is NOT part of the FIGfont. + + | _ _ @ + |(_) (_)@ + || | | |@ + || |_| |@ + | \__,_|@ + | @@ + | ___ @ + | / _ \@ + || |/ /@ + || |\ \@ + || ||_/@ + ||_| @@ + |161 INVERTED EXCLAMATION MARK + | _ @ + |(_)@ + || |@ + || |@ + ||_|@ + | @@ + |162 CENT SIGN + | _ @ + | | | @ + | / __)@ + || (__ @ + | \ )@ + | |_| @@ + + +A character code may be expressed in decimal (as shown above, numbers we're +all familiar with), or in Octal (seldom used) or in hexadecimal. + +Character codes expressed in octal must be preceded by "0" (zero), and if +negative, "-" (minus) must precede the "0". There are eight octal digits: +01234567. You may recall octal numbers from school as "base 8 numbers". + +Character codes expressed in hexadecimal must be preceded by "0x" or "0X". +(That's also a zero.) If negative, the "-" must precede the "0x". There are +16 hexadecimal digits: 01234567890ABCDEF. (The "letter-digits" may also be +lowercase.) Hexadecimal is "base 16". + +It is common to express character codes less than 256 (in the range of an +8-bit character set) as decimal, while FIGfonts which extend into the Unicode +range would have character codes expressed in hexadecimal. This is because +the Unicode Standard expresses character codes in hexadecimal, which is +helpful for programmers. + +The code tagged FIGcharacters may be listed in any order, but simple +sequential order is recommended. + +If two or more FIGcharacters have the same character code, the last one in +the FIGfont is the one used. It is common for the Deutsch FIGcharacters to +be given twice in a FIGfont, just to maintain a consistent order for the +Latin-1 range (128 to 255). + +It is not advisable to assign character codes in the range of 1 to 31, since +this range includes control characters in ASCII. Character code 127 is a +delete in ASCII, and is also not advised. Character codes 128 to 159 are +additional control characters in Latin-1, and they too should not be used. +All of the above are legal, technically, but are not part of what is legal +for input, so they could only be accessed by use of a control file. +(See "CONTROL FILES" below.) If you are still tempted to use them, consider +negative character codes instead, which are meaningless in all standardized +character sets. + +Again, the character code -1 is illegal for technical reasons. + + +NOTES - AVOIDING ERRORS AND GENERAL ADVICE +===== ======== ====== === ======= ====== + +It is very important that every character in a font has the same height, and, +once the endmarks are removed, that all the lines constituting a single +FIGcharacter have the same length. Be careful also that no lines in the font +file have trailing blanks (spaces), as the FIGdriver will take these to be +the endmarks. (FIGWin 1.0 will not consider blanks to be endmarks.) + +Errors in a FIGfont can be detected by using the "chkfont" program, +part of the standard FIGlet package, and also available, as of this +writing from http://www.figlet.org/ +� +For FIGWin users, the FIGWin program will report errors when a FIGfont is +read in; it is less forgiving than FIGlet, which can produce nonsense if the +FIGfont is incorrectly formatted. + +Remember that sub-characters outside of the ASCII range will not necessarily +display the same way on your system as on others. + +The blank (space) FIGcharacter should usually consist of one or two columns +of hardblanks and nothing else; slanted fonts are an exception to this rule. +If the space FIGcharacter does not contain any hardblanks, it will disappear +when horizontal fitting (kerning) or smushing occurs. + +Again, if you design a FIGfont, please let us know! + + +CONTROL FILES +======= ===== + +A FIGfont control file is a separate text file, associated with one or more +FIGfonts, that indicates how to map input characters into FIGfont character +codes. By default, FIGdrivers read single bytes from the input source and +interpret them as Latin-1 FIGcharacters. + +FIGlet version 2.2 (and later) can optionally interpret its input as DBCS or +UTF-8 characters, making it possible to access FIGcharacters with codes +outside the Latin-1 range (greater than 255). + +In addition, though, all versions of FIGlet can use control files to +transform specific character codes (or ranges of codes) as other codes +(or ranges). Multiple control files can be specified, in which case multiple +stages of transformation are performed. + +The filename of a control file always ends with ".flc". + +CONTROL FILE FORMAT + +Control files contain several kinds of lines. Lines beginning with "#", as +well as blank lines, are comment lines and are ignored. All other lines are +command lines, with one of the following formats: + + t inchar outchar + t inchar1-inchar2 outchar1-outchar2 + number number + f + h + j + b + u + g{0|1|2|3} {94|96|94x94} [char] + g{L|R} {0|1|2|3} + +where "inchar", "outchar", and "char" are either Latin-1 characters +representing their own codes, or else are numeric character codes preceded by +a "\" character; and "number" is a numeric character code with no preceding +"\" character. + +Thus "A" represents the code 65, as does "\65", and "\0x100" represents the +code 256 (100 in hexadecimal). In addition, "\ " (backslash followed by a +space) represents the code 32 (space), and the following backslash sequences +are also understood: + + \a code 7 (a bell/alert) + \b code 8 (a backspace) + \e code 27 (an ESC character) + \f code 12 (a form feed) + \n code 10 (a newline/line feed) + \r code 13 (a carriage return) + \t code 9 (a horizontal tab) + \v code 11 (a vertical tab) + \\ code 92 (a backslash) + +All of these combinations except perhaps "\\" are very unlikely to be used, +but they are provided just in case they are needed. + +Whitespace characters are used between "t" and "inchar" and between "inchar" +and "outchar", but not around the "-" characters used in the second type of +"t" command. + +The term "string" refers to any number of characters represented in the +format given above. The characters begin after the whitespace following the +letter "s", and continue to the end of the line. + +Anything following the first letter of an "f", "h", "j", or "u" command is +ignored. + +The first type of "t" command transforms characters with the code "inchar" +into characters with the code "outchar". The second type of "t" command +transforms characters in the range "inchar1" to "inchar2" as the +corresponding codes in the range "outchar1" to "outchar2". Both ranges must +be of the same size. The form "number number" is equivalent to a "t" +command of the first type, and is provided for compatibility with the mapping +tables issued by the Unicode Consortium. + +Multiple transformation stages can be encoded in a single control file by +using "f" commands to separate the stages. + +Versions of FIGlet before 2.1 required that the first line of a control file +consist of the signature string "flc2a". This signature line is still +permitted in FIGlet 2.2 and later versions, but is no longer required. + +Here is an example of a control file. The blanks at the beginning of each +line are for readability only, and are not part of the file. + +The following control file: + + flc2a + t # $ + t A-Z a-z + +will map the "#" character to "$", and will also convert uppercase ASCII to +lowercase ASCII. + +If a number of consecutive "t" commands are given, then for each character +processed, only the first applicable command (if any) will be executed. +Consider this control file: + + t A B + t B A + +It will swap the characters "A" and "B". If the FIGdriver reads an "A", the +first command will change "A" to "B", in which case the second will not be +executed. If the FIGdriver reads a "B", the first command will have no +effect, and the second command will change "B" to "A". Here is another +control file: + + t A B + t A C + +In this example, the second line is never executed. In short, a sequence of +"t" lines "does what it ought to". + +More complex files, in which a single character is acted upon by several "t" +commands, can be set up using an "f" command. For example: + + flc2a + t a-z A-Z + f + t Q ~ + +This control file specifies two transformation stages. In the first stage, +lowercase ASCII letters are changed to their uppercase equivalents. The +second stage maps any Q (whether original or a converted "q") into the "~" +character. If the "f" command were omitted, "q" characters would remain "Q" +and not be converted to "~". + +EXTENDED COMMANDS + +The "h", "j", "b", "u", and "g" commands are only understood by FIGlet +version 2.2 or later. They control how a FIGdriver interprets bytes in the +input. By default, the FIGdriver interprets each byte of input as a distinct +character. This mode is suitable for most character encodings. All these +commands are logically acted on before any other control file commands, no +matter where in the sequence of control files they appear. They are also +mutually exclusive; if more than one of these commands is found, only the +last is acted on. Multiple "g" commands are permitted, however. + +The "h" command forces the input to be interpreted in HZ mode, which is used +for the HZ character encoding of Chinese text. In this mode, the sequence +"~{" (which is removed from the input) signals that all following characters +are two bytes long until the sequence "~}" is detected. In addition, the +sequence "~~" is changed to just "~", and all other two-byte sequences +beginning with "~" are removed from the input. The character code +corresponding to a two-byte character is: + + first character * 256 + second character + +The "j" command forces the input to be interpreted in Shift-JIS mode (also +called "MS-Kanji mode"). Input bytes in the ranges 128-159 and 224-239 are +read as the high-order byte of a two-byte character; all other bytes are +interpreted as one-byte characters. The value of a two-byte character is +determined in the same way as in HZ mode. + +The "b" command forces the input to be interpreted in DBCS mode, which is +suitable for processing HZ or Shift-GB Chinese text or Korean text. Input +bytes in the ranges 128-255 are read as the high-order byte of a two-byte +character; all other bytes are interpreted as one-byte characters. The +value of a two-byte character is determined in the same way as in HZ mode. + +The "u" command forces the input to be interpreted in UTF-8 mode, which +causes any input byte in the range 0x80 to 0xFF to be interpreted as the +first byte of a multi-byte Unicode (ISO 10646) character. UTF-8 characters +can be from 1 to 6 bytes long. An incorrectly formatted sequence is +interpreted as the character 128 (normally an unused control character). + +Otherwise, the input is allowed to contain ISO 2022 escape sequences, which +are decoded to generate appropriate character codes. These character codes +are *not* a subset of Unicode, but may be more useful in processing East +Asian text. A brief explanation of ISO 2022 is given here in order to +clarify how a FIGdriver should interpret it. The "g" command provides +information for the ISO 2022 interpreter, and is explained below. + +ISO 2022 text is specified using a mixture of registered character sets. +At any time, up to four character sets may be available. Character sets +have one of three sizes: single-byte character sets with 94 characters +(e.g. ASCII), single-byte character sets with 96 characters (e.g. the top +halves of ISO Latin-1 to Latin-5), or double-byte character sets with +94 x 94 characters (e.g. JIS 0208X-1983). Each registered character set has +a standard designating byte in the range 48 to 125; the bytes are unique withi +n character set sizes, but may be reused across sizes. For example, byte 66 +designates the 94-character set ASCII, the 96-character set ISO Latin-2 (top +half), and the 94 x 94 Japanese character set JIS 0208X-1983. In this +document, the designating byte of a character set will be represented by . + +The four available character sets are labeled G0, G1, G2, and G3. Initially, +G0 is the 94-character set ASCII, and G1 is the 96-character set ISO Latin-1 +(top half). The other character sets are unassigned. The following escape +sequences (where ESC = the byte 27) specify changes to the available +character sets: + + ESC ( Set G0 to the 94-character set + ESC ) Set G1 to the 94-character set + ESC * Set G2 to the 94-character set + ESC + Set G3 to the 94-character set + ESC - Set G1 to the 96-character set + ESC . Set G2 to the 96-character set + ESC / Set G3 to the 96-character set + ESC $ Set G0 to the 94 x 94 character set + ESC $ ( Set G0 to the 94 x 94 character set + ESC $ ) Set G1 to the 94 x 94 character set + ESC $ * Set G2 to the 94 x 94 character set + ESC $ + Set G3 to the 94 x 94 character set + + +Note that G0 may not be a 96-character set, and that there are two ways to +specify a 94 x 94 character set in G0, of which the first is deprecated. + +ISO 2022 decoding affects input bytes in the ranges 33 to 126 and 160 to 255, +known as "the left half" and "the right half" respectively. All other bytes, +unless they belong to a control sequence shown in this document, remain +unchanged. Initially, the left half is interpreted as character set G0, +and the right half as character set G1. This can be changed by the following +control sequences: + + SI (byte 15) Interpret the left half as G1 characters + SO (byte 14) Interpret the left half as G0 characters + ESC n Interpret the left half as G2 characters + ESC o Interpret the left half as G3 characters + ESC ~ Interpret the right half as G1 characters + ESC } Interpret the right half as G2 characters + ESC | Interpret the right half as G3 characters + SS2 (byte 142) Interpret next character only as G2 + ESC N Interpret next character only as G2 + SS3 (byte 143) Interpret next character only as G3 + ESC O Interpret next character only as G3 + + +This rich schema may be used in various ways. In ISO-2022-JP, the Japanese +flavor of ISO 2022, only the bytes 33-126 and the G0 character set is used, +and escape sequences are used to switch between ASCII, ISO-646-JP (the +Japanese national variant of ASCII), and JIS 0208X-1983. In other versions, +the G1 character set has 94 x 94 size, and so any byte in the range 160-255 +is automatically the first byte of a double-byte character. + +FIGdrivers that support ISO 2022 do so in the following way. Each character i +is decoded and assigned to a character set . + + If the character belongs to a 94-bit character set, + then if its value exceeds 128, it is reduced by 128, + and the value 65536 * is added to it, + unless is 66 (ASCII). + If the character belongs to a 96-bit character set, + then if its value is less than 128, it is increased by 128, + and the value 65536 * is added to it, + unless is 65 (ISO Latin-1). + If the character belongs to a 94 x 94 character set, + then the value is the sum of: + the first byte * 256, + plus the second byte, + plus the value 65536 * . + + +Thus, the character code 65 ("A") in ASCII remains 65, the character code +196 in ISO Latin-1 ("A-umlaut") remains 196, the character code 65 (0x41) +in ISO-646-JP (whose is 74 = 0x4A) becomes 0x4A0041 =4849729, and the +two-byte sequence 33 33 (0x21 0x21) in JIS 0208X-1983 (whose is +65 = 0x41) becomes 0x412121 = 4268321. These codes may be used in compiling +FIGfonts suitable for use with ISO 2022 encoded text. + +The initial settings of G0 through G3 and their assignments to the left half +and the right half can be altered in a control file by using "g" commands, +as follows: + + g {0|1|2|3} {94|96|94x94} [] + +specifies that one of G0-G3 is a 94, 96, or 94x94 character set with +designating character . If no designating character is specified, then a + value of zero is assumed. + +For example, the list of control commands: + + g 0 94 B + g 1 96 A + +sets the G0 character set to ASCII (94-character set "B") and the G1 +character set to the top half of Latin-1 (96-character set "A"). (This is the +default setting). + +To change the initial assignments of G0 to the left half and G1 to the right +half, "g" commands of the form + + g {L|R} {0|1|2|3} + +For example, the command: + + g R 2 + +causes right-half bytes (in the range 160-255) to be interpreted as G2. +Whether these bytes are interpreted singly or in pairs depends on the type +of character set that is currently available as G2. + +Spaces may be freely used or omitted in "g" commands. + +The standard FIGlet distribution contains mapping tables for Latin-2 (ISO 8859-2), +Latin-3 (ISO 8859-3), Latin-4 (ISO 8859-4), and Latin-5 (ISO 8859-9). They +can be used with the font "standard.flf", which contains all the characters +used in these standards. + + +STANDARDIZED CAPABILITIES OF CURRENT AND FUTURE FIGDRIVERS +============ ============ == ======= === ====== ========== + +We assert the following as the "Law" of our intentions: + +PROFIT + +All future FIGdrivers shall be FREE OF CHARGE to the general public via the +Internet. Any advertisements of other works by the author must be in +documentation only, and limited to ONE "screenful", and shall not appear by +normal program behavior, nor interfere with normal behavior. No FIGdriver +shall disable itself after a set period of time or request "donations". +No FIGdriver shall offer any other FIGdriver with improved capability for +creating FIGures in exchange for money. + +REQUIRED FEATURES OF FUTURE VERSIONS + +Future FIGdrivers must read and process FIGfont files as described in this +document, but are not necessarily expected to process control files, smush, +perform fitting or kerning, perform vertical operations, or even produce +multiple lines in output FIGures. + +FIGDRIVER NAMES + +Future FIGdrivers must be named to include capitalized "FIG" and shall have +an incremental version number specific to its own platform. + +BACKWARDS COMPATIBILITY OF FUTURE VERSIONS + +Any future FIGdriver created for the same platform as an existing FIGdriver, +and using the same name as the existing FIGdriver, shall be considered a new +version of the preceding FIGdriver, and shall contain all historical comments +of updates to past versions on the same platform, and shall have full +capability of the preceding versions. If the source code is not provided to +the general public, it shall be at least provided to any potential developers +of later versions, and such comments relating to past versions shall be +accessible to any user by other means or documentation. If a new program is +created on a platform that already has an existing FIGdriver, it must be +given a new and distinct name. This allows multiple FIGdrivers to exist for +the same platform with different capabilities. + +The format of FIGfonts may not be modified to be non-backwards compatible +UNLESS: + + 1) The new format is easily editable as an ASCII text file, + beginning with the characters "flf" followed by a sequential + number. + + 2) At least all of the same information can be derived from the + new format as the prior format (currently "flf2"). This + includes the main comments which give credit to the FIGfont + designer. + + 3) Individuals are found who are willing and have the ability to + either port or develop versions for at least UNIX, DOS, + Windows, and Amiga which will read both the new formats AND the + prior format (currently "flf2"), and retain the capability of + past versions. It is intended that this will be expanded to + include Macintosh if a GUI version exists. This list of + required operating systems may be reduced if an operating + system falls out of popularity or increased if a new operating + system for which there is a FIGdriver comes into greater + popularity, according to the consensus of opinions of past + developers for the most popular operating systems. + + 4) A C, Java, or other version must always exist which can + receive input and instructions either from a command line, a + file, or directly over the internet so that FIGures can be + obtained from internet-based services without the need to + download any FIGdriver. + + 5) All existing FIGfonts available from the "official" point of + distribution (http://www.figlet.org/), + must be converted to the new format, and offered for download + alongsidethe new versions. + +THE FUNCTION OF WORD WRAPPING + +All future FIGdrivers should duplicate these behaviors, unless a version is +only capable of outputting one-line FIGures, which is acceptable as long no +preceding versions exist for its platform which can output multiple-line +FIGures. + +FIGdrivers which perform word wrapping do so by watching for blanks (spaces) +in input text, making sure that the FIGure is no more wide than the maximum +width allowed. + +Input text may also include linebreaks, so that a user may specify where +lines begin or end instead of relying on the word wrapping of the FIGdriver. +(Linebreaks are represented by different bytes on different platforms, so +each FIGdriver must watch for the appropriate linebreaks for its particular +platform.) + +When a FIGdriver word wraps and there are several consecutive blanks in input +text where the wrapping occurred, the FIGdriver will disregard all blanks +until the next non-blank input character is encountered. However, if blanks +in input text immediately follow a linebreak, or if blanks are the first +characters in the input text, the blanks will be "printed", moving any +visible FIGcharacters which follow on the same output line to the right. +Similarly, if an image is right-aligned, and blanks immediately precede +linebreaks or the end of input text, a FIGdriver will move an entire line of +output FIGcharacters to the left to make room for the blank FIGcharacters +until the left margin is encountered. (If the print direction is +right-to-left, everything stated in this paragraph is reversed.) + +Word processing programs or text editors usually behave similarly in all +regards to word wrapping. + +GENERAL INTENT FOR CROSS-PLATFORM PORTABILITY + +Currently, all versions of FIGlet are compiled from C code, while FIGWin 1.0 +is written in Visual Basic. Over time it is intended that a later version of +FIGWin will be created using a GUI C programming language, and that the +FIGlet C code shall continue to be written to be easily "plugged in" to a +GUI shell. It is preferable for developers of FIGdrivers for new platforms +to use C or a GUI version of C, so that when the core rendering engine of +FIGlet is updated, it will be portable to other platforms. + +CONTROL FILE COMMANDS + +New control file commands may be added to later versions of this standard. +However, the commands "c", "d", and "s" are permanently reserved and may +never be given a meaning. + +FILE COMPRESSION + +FIGfonts (and control files) are often quite long, especially if many +FIGcharacters are included, or if the FIGcharacters are large. Therefore, +some FIGdrivers (at present, only FIGlet version 2.2 or later) allow +compressed FIGfonts and control files. + +The standard for FIG compression is to place the FIGfont or control file into +a ZIP archive. ZIP archives can be created by the proprietary program PKZIP +on DOS and Windows platforms, or by the free program Info-ZIP ZIP on almost +all platforms. More information on ZIP can be obtained at +http://www.cdrom.com/pub/infozip/Info-Zip.html . + +The ZIP archive must contain only a single file. Any files in the archive +after the first are ignored by FIGdrivers. In addition, the standard +extension ".zip" of the archive must be changed to ".flf" or ".flc" as +appropriate. It does not matter what the name of the file within the +archive is. + + + +CHART OF CAPABILITIES OF FIGLET 2.2 AND FIGWIN 1.0 +===== == ============ == ====== === === ====== === + +The following chart lists all capabilities which are either new with the +release of both FIGdrivers, or is not a common capability among both. + + FIGlet 2.2 FIGWIN 1.0 + Interpreting the Full_Layout parameter: Yes Yes + Universal smushing: Yes Yes + Supporting multi-byte input text formats: Yes No + Processing control files: Yes No + Changing default smushing rules: Yes No + Bundled with a GUI editor of FIGfonts: No Yes + Vertical fitting and smushing: No Yes + + ___________ __ _ + \_ _____/ ____ |__| ____ ___ __ | | + | __)_ / \ | |/ _ < | || | + | \ | \ | ( <_> )___ | \| + /_______ /___| /\__| |\____// ____| __ + \/ \/\______| \/ \/ diff --git a/externals/figlet/figlet.6 b/externals/figlet/figlet.6 new file mode 100644 index 0000000000..ff2231140e --- /dev/null +++ b/externals/figlet/figlet.6 @@ -0,0 +1,1102 @@ +.\" FIGlet +.\" Copyright (C) 1991, 1993, 1994 Glenn Chappell and Ian Chai +.\" Internet: +.\" Portions Copyright 1996, 1997, 1998, 1999, 2000, 2001 by John Cowan +.\" Portions Copyright 2002 by Christiaan Keet +.\" Portions Copyright 2011, 2012 by Claudio Matsuoka +.\" FIGlet, along with the various FIGlet fonts and documentation, may +.\" be freely copied and distributed. +.\" If you use FIGlet, please send an e-mail message to +.\" +.\" +.TH FIGLET 6 "31 May 2012" "v2.2.5" + +.SH NAME +FIGlet \- display large characters made up of ordinary screen characters + +.SH SYNOPSIS +.B figlet +[ +.B \-cklnoprstvxDELNRSWX +] +[ +.B \-d +.I fontdirectory +] +.PD 0 +.IP +.PD +[ +.B \-f +.I fontfile +] +[ +.B \-m +.I layoutmode +] +.PD 0 +.IP +.PD +[ +.B \-w +.IR outputwidth +] +[ +.B \-C +.I controlfile +] +.PD 0 +.IP +.PD +[ +.B \-I +.I infocode +] +[ +.I message +] + +.SH DESCRIPTION +.B FIGlet +prints its input using large characters +(called ``FIGcharacters'')made up of ordinary +screen characters +(called ``sub-characters''). +.B FIGlet +output is generally reminiscent of the +sort of ``signatures'' many people like to put at the end of e-mail +and UseNet messages. It is also reminiscent of the output of some banner +programs, although it is oriented normally, not sideways. + +.B FIGlet +can print in a variety of fonts, both left-to-right and right-to-left, +with adjacent FIGcharacters kerned and ``smushed'' together in various ways. +.B FIGlet +fonts are stored in +separate files, which can be identified by the suffix +.RB `` .flf ''. +In systems with UTF-8 support +.B FIGlet +may also support TOIlet +.RB `` .tlf '' +fonts. Most +.B FIGlet +font files will be stored in +.B FIGlet's +default font directory. + +.B FIGlet +can also use ``control files'', which tell it to map certain input +characters to certain other characters, similar to the Unix +.B tr +command. Control files can be identified by the suffix +.RB `` .flc ''. +Most +.B FIGlet +control files will be stored in +.B FIGlet's +default font directory. + +You can store +.B FIGlet +fonts and control files +in compressed form. +See +.BR "COMPRESSED FONTS" . + +.SH USAGE +Just start up +.B FIGlet +(type +.RB `` figlet '') +and then type whatever you want. +Alternatively, pipe a file or the output of another command through +.BR FIGlet , +or put input on the command line +after the options. +See +.B EXAMPLES +for other things to do. + +.SH OPTIONS +.B FIGlet +reads command line options from left to right, and only the last +option that affects a parameter has any effect. Almost every option +has an inverse, so that, for example, if +.B FIGlet +is customized with a shell +.BR alias , +all the options are usually still available. + +Commonly-used options are +.BR \-f , +.BR \-c , +.BR \-k , +.BR \-t , +.B \-p +and +.BR \-v . + +.TP +.BI \-f \ fontfile +Select the font. The +.B .flf +suffix may be left off of +.IR fontfile , +in which case +.B FIGlet +automatically appends it. +.B FIGlet +looks for the file first in the default font directory and then +in the current directory, or, if +.I fontfile +was given as a full pathname, in the given directory. +If the +.B \-f +option is not specified, +.B FIGlet +uses the font that was specified +when it was compiled. To find out which font this is, use the +.B \-I3 +option. + +.TP +.BI \-d \ fontdirectory +Change the default font directory. +.B FIGlet +looks for fonts first in the +default directory and then in the current directory. +If the +.B \-d +option is not specified, +.B FIGlet +uses the directory that was specified +when it was compiled. To find out which directory this is, use the +.B \-I2 +option. + +.TP +.B \-c +.PD 0 +.TP +.B \-l +.PD 0 +.TP +.B \-r +.PD 0 +.TP +.B \-x +.PD +These options handle the justification of +.B FIGlet +output. +.B \-c +centers the output horizontally. +.B \-l +makes the output flush-left. +.B \-r +makes it flush-right. +.B \-x +(default) sets the justification according to whether left-to-right or +right-to-left text is selected. Left-to-right text will be flush-left, +while right-to-left text will be flush-right. (Left-to-right versus +right-to-left text is controlled by +.BR \-L , +.B \-R +and +.BR \-X .) + +.TP +.B \-t +.PD 0 +.TP +.BI \-w \ outputwidth +.PD +These options control the +.IR outputwidth , +or the screen width +.B FIGlet +assumes when formatting its output. +.B FIGlet +uses the +.I outputwidth +to determine when to break lines and how to center +the output. Normally, +.B FIGlet +assumes 80 columns so that people with wide terminals +won't annoy the people they e-mail +.B FIGlet +output to. +.B \-t +sets the +.I outputwidth +to the terminal width. If the terminal width cannot be determined, +the previous +.I outputwidth +is retained. +.B \-w +sets the +.I outputwidth +to the given integer. An +.I outputwidth +of 1 is a special value that tells +.B FIGlet +to print each non-space FIGcharacter, in its entirety, on a separate line, +no matter how wide it is. + +.TP +.B \-p +.PD 0 +.TP +.B \-n +.PD +These options control how +.B FIGlet +handles newlines. +.B \-p +puts +.B FIGlet +into ``paragraph mode'', which eliminates some unnecessary line +breaks when piping a multi-line file through +.BR FIGlet . +In paragraph mode, +.B FIGlet +treats line breaks within a paragraph as if they were merely blanks +between words. (Specifically, +.B \-p +causes +.B FIGlet +to convert any newline which is not preceded by a newline and not +followed by a space character into a blank.) +.B \-n +(default) puts +.B FIGlet +back to normal, in which every newline +.B FIGlet +reads causes it to produce a line break. + +.TP +.B \-D +.PD 0 +.TP +.B \-E +.PD +.B \-D +switches to the German (ISO 646-DE) character set. Turns `[', `\e' +and `]' into umlauted A, O and U, respectively. `{', `|' and `}' turn +into the respective lower case versions of these. `~' turns into s-z. +.B \-E +turns off +.B \-D +processing. +These options are deprecated, +which means they probably will not appear +in the next version of +.BR FIGlet . + +.TP +.BI \-C \ controlfile +.PD 0 +.TP +.B \-N +.PD +These options deal with +.B FIGlet +.IR controlfiles . +A +.I controlfile +is a file containing a list of commands that +.B FIGlet +executes each time it reads a character. These commands can map certain +input characters to other characters, similar to the Unix +.B tr +command or the +.B FIGlet +.B \-D +option. +.B FIGlet +maintains a list of +.IR controlfiles , +which is empty when +.B FIGlet +starts up. +.B \-C +adds the given +.I controlfile +to the list. +.B \-N +clears the +.I controlfile +list, cancelling the effect of any previous +.BR \-C . +.B FIGlet +executes the commands in all +.I controlfiles +in the list. See +the file +.IR figfont.txt , +provided with FIGlet, +for details on how to write a +.IR controlfile . + +.TP +.B \-s +.PD 0 +.TP +.B \-S +.PD 0 +.TP +.B \-k +.PD 0 +.TP +.B \-W +.PD +.TP +.B \-o +.PD +These options control how +.B FIGlet +spaces the FIGcharacters that it outputs. +.B \-s +(default) and +.B \-S +cause ``smushing''. +The FIGcharacters are displayed +as close together as possible, +and overlapping sub-characters are removed. +Exactly which sub-characters count as ``overlapping'' +depends on the font's +.IR layoutmode , +which is defined by the font's author. +.B \-k +causes ``kerning''. As many blanks as possible are +removed between FIGcharacters, so that they +touch, but the FIGcharacters are not smushed. +.B \-W +makes +.B FIGlet +display all FIGcharacters at their full width, +which may be fixed or variable, depending on the font. + +The difference between +.B \-s +and +.B \-S +is that +.B \-s +will not smush a font whose author specified +kerning or full width as the default +.IR layoutmode , +whereas +.B \-S +will attempt to do so. + +If there is no information in the font +about how to smush, +or if the +.B \-o +option is specified, +then the FIGcharacters are ``overlapped''. +This means that after kerning, +the first subcharacter of +each FIGcharacter is removed. +(This is not done if a FIGcharacter +contains only one subcharacter.) + +.TP +.BI \-m \ layoutmode +Specifies an explicit +.I layoutmode +between +.B 1 +and +.BR 63 . +.I Smushmodes +are explained in +.IR figfont.txt , +which also provides complete information +on the format of a +.B FIGlet +font. +For the sake of backward compatibility +with versions of +.B FIGlet +before 2.2, +.B \-m0 +is equivalent to +.BR \-k , +.B \-m-1 +is equivalent to +.BR \-W , +and +.B \-m-2 +is equivalent to +.BR \-s . +The +.B \-m +switch is normally +used only by font designers testing the various +.I layoutmodes +with a new font. + +.TP +.B \-v +.PD 0 +.TP +.BI \-I \ infocode +.PD +These options print various information about +.BR FIGlet , +then exit. If several of these options are given on the command line, only +the last is executed, and only after +all other command-line options have been dealt with. + +.B \-v +prints version and copyright information, as well as a ``Usage: ...'' +line. +.B \-I +prints the information corresponding to the given +.I infocode +in a consistent, reliable (i.e., guaranteed to be the same in +future releases) format. +.B \-I +is primarily intended to be used by programs that use +.BR FIGlet . +.I infocode +can be any of the following. +.RS +.TP +.BR -1 " Normal operation (default)." +This +.I infocode +indicates that +.B FIGlet +should operate normally, not giving any informational printout, +printing its input in the selected font. +.TP +.BR 0 " Version and copyright." +This is identical to +.BR \-v . +.TP +.BR 1 " Version (integer)." +This will print the version of your copy of +.B FIGlet +as a decimal integer. The main version number is multiplied by 10000, +the sub-version number is multiplied by 100, and the sub-sub-version +number is multiplied by 1. These are added together, and the result is +printed out. For example, +.B FIGlet +2.2 will print +.RB `` 20200 '' +, version 2.2.1 will print +.RB `` 20201 ''. +Similarly, version 3.7.2 would print +.RB `` 30702 ''. +These numbers are guaranteed to be +ascending, with later versions having higher numbers. Note that +the first major release of +.BR FIGlet , +version 2.0, did not have the +.B \-I +option. +.TP +.BR 2 " Default font directory." +This will print the default font directory. It is affected by the +.B \-d +option. +.TP +.BR 3 " Font." +This will print the name of the font +.B FIGlet +would use. It is affected by +the +.B \-f +option. +This is not a filename; the +.RB `` .flf '' +suffix is not printed. +.TP +.BR 4 " Output width." +This will print the value +.B FIGlet +would use for +.IR outputwidth , +the number of columns wide +.B FIGlet +assumes the screen is. +It is affected by the +.B \-w +and +.B \-t +options. +.TP +.BR 5 " Supported font formats." +This will list font formats supported by +.B FIGlet . +Possible formats are +.RB `` flf2 '' +for FIGfont Version 2 +.B .flf +files and +.RB `` tlf2 '' +for TOIlet +.B .tlf +files. +.RE +.IP +If +.I infocode +is any other positive value, +.B FIGlet +will simply exit without printing anything. + +.TP +.B \-L +.PD 0 +.TP +.B \-R +.PD 0 +.TP +.B \-X +.PD +These options control whether +.B FIGlet +prints left-to-right or right-to-left. +.B \-L +selects left-to-right printing. +.B \-R +selects right-to-left printing. +.B \-X +(default) makes +.B FIGlet +use whichever is specified in the font file. + +Once the options are read, +if there are any remaining words on the command line, +they are used instead +of standard input as the source of text. +This feature +allows shell scripts to generate large letters without having to dummy +up standard input files. + +An empty argument, obtained by two sequential quotes, +results in a line break. + +.SH EXAMPLES +To use +.B FIGlet +with its default settings, simply type +.RS +.nf +.ft B + +example% figlet + +.ft R +.fi +.RE +and then type whatever you like. + +To change the font, use the +.B \-f +option, for example, +.RS +.nf +.ft B + +example% figlet \-f script + +.ft R +.fi +.RE + +Use the +.B \-c +option if you would prefer centered output: +.RS +.nf +.ft B + +example% figlet \-c + +.ft R +.fi +.RE + +We have found that the most common use of +.B FIGlet +is making up large text to be placed in e-mail messages. For this +reason, +.B FIGlet +defaults to 80 column output. If you are using a wider terminal, and +would like +.B FIGlet +to use the full width of your terminal, use the +.B \-t +option: +.RS +.nf +.ft B + +example% figlet \-t + +.ft R +.fi +.RE + +If you don't want +.B FIGlet +to smush FIGcharacters into each other, use the +.B \-k +option: +.RS +.nf +.ft B + +example% figlet \-k + +.ft R +.fi +.RE + +If +.B figlet +gets its input from a file, it is often a good idea to use +.BR \-p : +.RS +.nf +.ft B + +example% figlet \-p < myfile + +.ft R +.fi +.RE + +Of course, the above can be combined: +.RS +.nf +.ft B + +example% figlet \-ptk \-f shadow < anotherfile +example% figlet \-cf slant + +.ft R +.fi +.RE + +Finally, if you want to have +.B FIGlet +take the input from the command +line instead of a file: +.RS +.nf +.ft B + +example% figlet Hello world + +.ft R +.fi +.RE + +.SS Other Things to Try +On many systems nice effects can be obtained from the +.B lean +font by piping it through +.BR tr . +Some you might want to try are the following: + +.RS +.nf +.ft B +example% figlet \-f lean | tr ' _/' ' ()' +example% figlet \-f lean | tr ' _/' './\e\e' +example% figlet \-f lean | tr ' _/' ' //' +example% figlet \-f lean | tr ' _/' '/ ' +.ft R +.fi +.RE + +Similar things can be done with the +.B block +font and many of the other +.B FIGlet +fonts. + +.SH COMPRESSED FONTS +You can compress the fonts and controlfiles +using the +.B zip +archiving program. +Place only one font or controlfile in each archive, +and rename the archive file (which will have a name +ending in +.BR .zip ) +back to +.B .flf +or +.B .flc +as the case may be. +If you don't rename the file appropriately, +.B FIGlet +won't be able to find it. + +.B FIGlet +does not care what the filename within the +.B .zip +archive is, and will process only the first file. + +The +.B .zip +format was chosen because tools to create and manipulate it +are widely available for free +on many platforms. + +.SH THE STANDARD FONTS + +Here are a few notes about some of the fonts provided with +.IR FIGlet . +You can get many other font from the Web site +.br +http://www.figlet.org/ This location +should also contain the latest version of +.B FIGlet +and other related utilities. + +The font +.I standard +is the basic +.B FIGlet +font, used when no other font is specified. +(This default can be changed when +.B FIGlet +is compiled on your system.) +The +.I controlfiles +.IR 8859-2 , +.IR 8859-3 , +.IR 8859-4 , +and +.I 8859-9 +are provided for interpreting those character sets, +also known as ISO Latin-2 through Latin-5 respectively. +The character set 8859-1 (ISO Latin-1) is +.B FIGlet's +default and requires no special +.IR controlfile . + +Closely related are the fonts +.IR slant , +.IR shadow , +.IR small , +.I smslant +(both small and slanted), +.IR smshadow , +(both small and shadowed), +and +.IR big . +These fonts support only Latin-1, except that +.I big +supports Greek FIGcharacters as well; +the +.I controlfiles +.I frango +(for Greek text written in Latin characters, so-called +.RI `` frangovlakhika ''), +and +.I 8859-7 +(for mixed Latin/Greek text) +are provided. + +The +.I ivrit +font is a right-to-left font +including both Latin and Hebrew FIGcharacters; +the Latin characters are those of the +.I standard +font. +The available +.I controlfiles +are +.IR ilhebrew , +which maps the letters you get +by typing on a U.S. keyboard +as if it were a Hebrew keyboard; +.IR ushebrew , +which makes a reasonable mapping from +Latin letters to Hebrew ones; +and +.IR 8859-8 , +which supports mixed Latin/Hebrew text. +.B Warning: +.B FIGlet +doesn't support bidirectional text, +so everything will come out right-to-left, +even Latin letters. + +The fonts +.IR terminal , +.IR digital , +and +.I bubble +output the input character with some decoration around it +(or no decoration, +in the case of +.IR terminal ). +The characters coded 128 to 159, +which have varying interpretations, are output as-is. +You can use the appropriate +.I controlfiles +to process Latin-2, Latin-3, or Latin-4 (but not Latin-5) text, +provided your output device +has screen or printer fonts that +are appropriate for these character sets. + +Two script fonts are available: +.IR script , +which is larger than +.IR standard , +and +.IR smscript , +which is smaller. + +The font +.I lean +is made up solely of `/' and `_' sub-characters; +.I block +is a straight (non-leaning) version of it. + +The font +.I mini +is very small, and especially suitable for e-mail signatures. + +The font +.I banner +looks like the output of the +.B banner +program; +it is a capitals and small capitals font +that doesn't support the ISO Latin-1 extensions +to plain ASCII. +It does, however, support the Japanese +.I katakana +syllabary; +the +.I controlfile +.I uskata +maps the upper-case and lower-case Latin letters +into the 48 basic +.I katakana +characters, +and the +.I controlfile +.I jis0201 +handles JIS 0201X (JIS-Roman) +mixed Latin and +.I katakana +text. +Furthermore, the +.I banner +font also supports Cyrillic (Russian) +FIGcharacters; the +.I controlfile +.I 8859-5 +supports mixed Latin and Cyrillic text, +the +.I controlfile +.I koi8r +supports the popular KOI8-R mapping of mixed text, +and the +.I controlfile +.I moscow +supports a +sensible mapping from Latin to Cyrillic, +compatible with the +.I moscow +font (not supplied). + +The fonts +.I mnemonic +and +.I safemnem +support the mnemonic character set +documented in RFC 1345. +They implement a large subset of Unicode +(over 1800 characters) very crudely, +using ASCII-based mnemonic sequences, +and are good for getting a quick look +at UTF-8 unicode files, +using the controlfile +.IR utf8 . + +.SH ENVIRONMENT +.TP +.B FIGLET_FONTDIR +If +.RB $ FIGLET_FONTDIR +is set, its value is used as a path to search for font files. + +.SH FILES +.PD 0 +.TP 20 +.IB file .flf +.B FIGlet +font file +.TP 20 +.IB file .flc +.B FIGlet +control file +.PD + +.SH DIAGNOSTICS +.B FIGlet's +diagnostics are intended to be self-explanatory. Possible +messages are + +.RS +.nf +.ft B +Usage: ... +Out of memory +Unable to open font file +Not a FIGlet 2 font file +Unable to open control file +Not a FIGlet 2 control file +"\-t" is disabled, since ioctl is not fully implemented. +.ft R +.fi +.RE + +This last message is printed when the +.B \-t +option is given, but the operating system in use does not include +the system call +.B FIGlet +uses to determine the terminal width. + +.B FIGlet +also prints an explanatory message if the +.B \-F +option is given on the command line. +The earlier version of +.BR FIGlet , +version 2.0, listed the available fonts when the +.B \-F +option was given. This option has been removed from +.B FIGlet +2.1. It has been replaced by the +.B figlist +script, which is part of the standard +.B FIGlet +package. + +.SH ORIGIN +.RB `` FIGlet '' +stands for ``Frank, Ian and Glenn's LETters''. Inspired by Frank's .sig, +Glenn wrote (most of) it, and Ian helped. + +Most of the standard +.B FIGlet +fonts were inspired by signatures on various UseNet +articles. Since typically hundreds of people use the same style of +letters in their signatures, it was often not deemed necessary to give +credit to any one font designer. + +.SH BUGS +Very little error checking is done on font and control files. While +.B FIGlet +tries to be forgiving of errors, and should (hopefully) never actually +crash, using an improperly-formatted file with +.B FIGlet +will produce unpredictable output. + +.B FIGlet +does not handle format characters in a very intelligent way. +A tab character is converted to a blank, and vertical-tab, form-feed and +carriage-return are each converted to a newline. On many systems, tabs +can be handled better by piping files through +.B expand +before piping through +.BR FIGlet . + +.B FIGlet +output is quite ugly if it is displayed in a proportionally-spaced font. +I suppose this is to be expected. + +Please report any errors you find in this man page or the program to + +.SH WEBSITE AND MAILING LIST +You can get many fonts which are not in the basic +.B FIGlet +package from the Web site +http://www.figlet.org/ It +should also contain the latest version of +.B FIGlet +and other utilities related to +.BR FIGlet . + +There is a mailing list for +.B FIGlet +for general discussions about +.B FIGlet +and a place where you can ask questions or share ideas +with other +.B FIGlet +users. It is also the place where we will publish +news about new fonts, new software updates etc. + +To subscribe or unsubscribe from the +.B FIGlet +mailing list, +please send email to figlet-subscribe@figlet.org or figlet-unsubscribe@figlet.org or visit the +following web page: http://www.figlet.org/mailman/listinfo/figlet + +.SH AUTHORS +Glenn Chappell did most of the work. +You can e-mail him but he is not an e-mail fanatic; people who e-mail +Glenn will probably get answers, but if you e-mail his best friend: + +Ian Chai, who +.I is +an e-mail fanatic, you'll get answers, endless conversation about the +mysteries of life, invitations to join some 473 mailing lists and a +free toaster. (Well, ok, maybe not the free toaster.) + +Frank inspired this whole project with his .sig, but don't e-mail +him; he's decidedly an un-e-mail-fanatic. + +Gilbert "The Mad Programmer" Healton added the +.B \-A +option for version 2.1.1. This option specified input from +the command line; it is still allowed, +but has no effect. + +John Cowan added the +.BR \-o , +.BR \-s , +.BR \-k , +.BR \-S , +and +.B \-W +options, and +the support for Unicode mapping tables, +ISO 2022/HZ/Shift-JIS/UTF-8 input, +and compressed fonts +and control files. +He also revised this documentation, +with a lot of input from +Paul Burton. + +Claudio Matsuoka added the support for +.B .tlf +files for version 2.2.4 and performs random hacks and bugfixes. + +As a fan of FIGlet, Christiaan Keet revised the official FIGlet documentation +and set up the new FIGlet website at http://www.figlet.org/ (and the +corresponding ftp://ftp.figlet.org/pub/figlet/) + +.SH SEE ALSO +.BR figlist (6), +.BR chkfont (6), +.BR showfigfonts (6), +.BR toilet (1) diff --git a/externals/figlet/figlet.c b/externals/figlet/figlet.c new file mode 100644 index 0000000000..d34b19a8b8 --- /dev/null +++ b/externals/figlet/figlet.c @@ -0,0 +1,2131 @@ +/**************************************************************************** + + FIGlet Copyright 1991, 1993, 1994 Glenn Chappell and Ian Chai + FIGlet Copyright 1996, 1997, 1998, 1999, 2000, 2001 John Cowan + FIGlet Copyright 2002 Christiaan Keet + FIGlet Copyright 2011, 2012 Claudio Matsuoka + Portions written by Paul Burton and Christiaan Keet + Internet: + FIGlet, along with the various FIGlet fonts and documentation, is + copyrighted under the provisions of the New BSD License (3-clause) + (as listed in the file "LICENSE" which is included in this package) +****************************************************************************/ + +#define DATE "31 May 2012" +#define VERSION "2.2.5" +#define VERSION_INT 20205 + +/* FIGlet (Frank, Ian & Glenn's Letters) */ +/* by Glenn Chappell */ +/* Apr 1991 */ +/* Automatic file addition by Ian Chai May 1991 */ +/* Punctuation and numbers addition by Ian Chai Jan 1993 */ +/* Full ASCII by Glenn Chappell Feb 1993 */ +/* Line-breaking, general rewrite by Glenn Chappell Mar 1993 */ +/* Hard blanks by Glenn Chappell Apr 1993 */ +/* Release 2.0 5 Aug 1993 */ +/* Right-to-left printing, extended char set by Glenn Chappell Dec 1993 */ +/* Control files by Glenn Chappell Feb 1994 */ +/* Release 2.1 12 Aug 1994 */ +/* Release 2.1.1 25 Aug 1994 */ +/* Release 2.1.2 by Gilbert (Mad Programmer) Healton: Add -A command line + option. Sept 8, 1996 */ +/* Release 2.2 by John Cowan: multibyte inputs, compressed fonts, + mapping tables, kerning/smushing options. */ +/* Release 2.2.1 by Christiaan Keet: minor updates including readmes + FAQs and comments. 13 July 2002. The new official FIGlet website is + http://www.figlet.org/ */ +/* Release 2.2.2 by Christiaan Keet: License changed from "Artistic License" + to "Academic Free License" as agreed by FIGlet authors. 05 July 2005 */ +/* Release 2.2.3 by Claudio Matsuoka, 12 Jan 2011: BSD license, fixes */ +/* Release 2.2.4 by Claudio Matsuoka, 26 Jan 2011: tlf2 font support */ +/* Release 2.2.5 by Claudio Matsuoka, 31 May 2012: flc licensing, minor fixes */ + +/*--------------------------------------------------------------------------- + DEFAULTFONTDIR and DEFAULTFONTFILE should be defined in the Makefile. + DEFAULTFONTDIR is the full path name of the directory in which FIGlet + will search first for fonts (the ".flf" files). + DEFAULTFONTFILE is the filename of the font to be used if no other + is specified (standard.flf is recommended, but any other can be + used). This file should reside in the directory specified by + DEFAULTFONTDIR. +---------------------------------------------------------------------------*/ +#ifndef DEFAULTFONTDIR +#define DEFAULTFONTDIR "fonts" +#endif +#ifndef DEFAULTFONTFILE +#define DEFAULTFONTFILE "standard.flf" +#endif + +#include +#ifdef __STDC__ +#include +#endif +#include +#include +#include +#include /* Needed for get_columns */ + +#if defined(unix) || defined(__unix__) || defined(__APPLE__) +#include +#include /* Needed for get_columns */ +#endif + +#ifdef TLF_FONTS +#include +#include +#include "utf8.h" +#endif + +#include "zipio.h" /* Package for reading compressed files */ + +#define MYSTRLEN(x) ((int)strlen(x)) /* Eliminate ANSI problem */ + +#define DIRSEP '/' +#define DIRSEP2 '\\' +/* Leave alone for Unix and MS-DOS/Windows! +Note: '/' also used in filename in get_columns(). */ + +#define FONTFILESUFFIX ".flf" +#define FONTFILEMAGICNUMBER "flf2" +#define FSUFFIXLEN MYSTRLEN(FONTFILESUFFIX) +#define CONTROLFILESUFFIX ".flc" +#define CONTROLFILEMAGICNUMBER "flc2" /* no longer used in 2.2 */ +#define CSUFFIXLEN MYSTRLEN(CONTROLFILESUFFIX) +#define DEFAULTCOLUMNS 80 +#define MAXLEN 255 /* Maximum character width */ + +/* Add support for Sam Hocevar's TOIlet fonts */ +#ifdef TLF_FONTS +#define TOILETFILESUFFIX ".tlf" +#define TOILETFILEMAGICNUMBER "tlf2" +#define TSUFFIXLEN MYSTRLEN(TOILETFILESUFFIX) + +int toiletfont; /* true if font is a TOIlet TLF font */ +#endif + + +/**************************************************************************** + + Globals dealing with chars that are read + +****************************************************************************/ + +typedef long inchr; /* "char" read from stdin */ + +inchr *inchrline; /* Alloc'd inchr inchrline[inchrlinelenlimit+1]; */ + /* Note: not null-terminated. */ +int inchrlinelen,inchrlinelenlimit; +inchr deutsch[7] = {196, 214, 220, 228, 246, 252, 223}; + /* Latin-1 codes for German letters, respectively: + LATIN CAPITAL LETTER A WITH DIAERESIS = A-umlaut + LATIN CAPITAL LETTER O WITH DIAERESIS = O-umlaut + LATIN CAPITAL LETTER U WITH DIAERESIS = U-umlaut + LATIN SMALL LETTER A WITH DIAERESIS = a-umlaut + LATIN SMALL LETTER O WITH DIAERESIS = o-umlaut + LATIN SMALL LETTER U WITH DIAERESIS = u-umlaut + LATIN SMALL LETTER SHARP S = ess-zed + */ + +int hzmode; /* true if reading double-bytes in HZ mode */ +int gndbl[4]; /* gndbl[n] is true if Gn is double-byte */ +inchr gn[4]; /* Gn character sets: ASCII, Latin-1, none, none */ +int gl; /* 0-3 specifies left-half Gn character set */ +int gr; /* 0-3 specifies right-half Gn character set */ + +int Myargc; /* to avoid passing around argc and argv */ +char **Myargv; + +/**************************************************************************** + + Globals dealing with chars that are written + +****************************************************************************/ + +#ifdef TLF_FONTS +typedef wchar_t outchr; /* "char" written to stdout */ +#define STRLEN(x) wcslen(x) +#define STRCPY(x,y) wcscpy((x),(y)) +#define STRCAT(x,y) wcscat((x),(y)) +#define ISSPACE(x) iswspace(x) +#else +typedef char outchr; /* "char" written to stdout */ +#define STRLEN(x) MYSTRLEN(x) +#define STRCPY(x,y) strcpy((x),(y)) +#define STRCAT(x,y) strcat((x),(y)) +#define ISSPACE(x) isspace(x) +#endif + +typedef struct fc { + inchr ord; + outchr **thechar; /* Alloc'd char thechar[charheight][]; */ + struct fc *next; + } fcharnode; + +fcharnode *fcharlist; +outchr **currchar; +int currcharwidth; +int previouscharwidth; +outchr **outputline; /* Alloc'd char outputline[charheight][outlinelenlimit+1]; */ +int outlinelen; + + +/**************************************************************************** + + Globals dealing with command file storage + +****************************************************************************/ + +typedef struct cfn { + char *thename; + struct cfn *next; + } cfnamenode; + +cfnamenode *cfilelist,**cfilelistend; + +typedef struct cm { + int thecommand; + inchr rangelo; + inchr rangehi; + inchr offset; + struct cm *next; + } comnode; + +comnode *commandlist,**commandlistend; + +/**************************************************************************** + + Globals affected by command line options + +****************************************************************************/ + +int deutschflag,justification,paragraphflag,right2left,multibyte; +int cmdinput; + +#define SM_SMUSH 128 +#define SM_KERN 64 +#define SM_EQUAL 1 +#define SM_LOWLINE 2 +#define SM_HIERARCHY 4 +#define SM_PAIR 8 +#define SM_BIGX 16 +#define SM_HARDBLANK 32 + +int smushmode; + +#define SMO_NO 0 /* no command-line smushmode */ +#define SMO_YES 1 /* use command-line smushmode, ignore font smushmode */ +#define SMO_FORCE 2 /* logically OR command-line and font smushmodes */ + +int smushoverride; + +int outputwidth; +int outlinelenlimit; +char *fontdirname,*fontname; + + +/**************************************************************************** + + Globals read from font file + +****************************************************************************/ + +char hardblank; +int charheight; + + +/**************************************************************************** + + Name of program, used in error messages + +****************************************************************************/ + +char *myname; + + +#ifdef TIOCGWINSZ +/**************************************************************************** + + get_columns + + Determines the number of columns of /dev/tty. Returns the number of + columns, or -1 if error. May return 0 if columns unknown. + Requires include files and . + by Glenn Chappell & Ian Chai 14 Apr 1993 + +****************************************************************************/ + +int get_columns() +{ + struct winsize ws; + int fd,result; + + if ((fd = open("/dev/tty",O_WRONLY))<0) return -1; + result = ioctl(fd,TIOCGWINSZ,&ws); + close(fd); + return result?-1:ws.ws_col; +} +#endif /* ifdef TIOCGWINSZ */ + + +/**************************************************************************** + + myalloc + + Calls malloc. If malloc returns error, prints error message and + quits. + +****************************************************************************/ + +#ifdef __STDC__ +char *myalloc(size_t size) +#else +char *myalloc(size) +int size; +#endif +{ + char *ptr; +#ifndef __STDC__ + extern void *malloc(); +#endif + + if ((ptr = (char*)malloc(size))==NULL) { + fprintf(stderr,"%s: Out of memory\n",myname); + exit(1); + } + else { + return ptr; + } +} + + +/**************************************************************************** + + hasdirsep + + Returns true if s1 contains a DIRSEP or DIRSEP2 character. + +****************************************************************************/ + +int hasdirsep(s1) +char *s1; +{ + if (strchr(s1, DIRSEP)) return 1; + else if (strchr(s1, DIRSEP2)) return 1; + else return 0; +} + +/**************************************************************************** + + suffixcmp + + Returns true if s2 is a suffix of s1; uses case-blind comparison. + +****************************************************************************/ + +int suffixcmp(s1, s2) +char *s1; +char *s2; +{ + int len1, len2; + + len1 = MYSTRLEN(s1); + len2 = MYSTRLEN(s2); + if (len2 > len1) return 0; + s1 += len1 - len2; + while (*s1) { + if (tolower(*s1) != tolower(*s2)) return 0; + s1++; + s2++; + } + return 1; +} + +/**************************************************************************** + + skiptoeol + + Skips to the end of a line, given a stream. Handles \r, \n, or \r\n. + +****************************************************************************/ + +void skiptoeol(fp) +ZFILE *fp; +{ + int dummy; + + while (dummy=Zgetc(fp),dummy!=EOF) { + if (dummy == '\n') return; + if (dummy == '\r') { + dummy = Zgetc(fp); + if (dummy != EOF && dummy != '\n') Zungetc(dummy,fp); + return; + } + } +} + + +/**************************************************************************** + + myfgets + + Local version of fgets. Handles \r, \n, and \r\n terminators. + +****************************************************************************/ + +char *myfgets(line,maxlen,fp) +char *line; +int maxlen; +ZFILE *fp; +{ + int c = 0; + char *p; + + p = line; + while((c=Zgetc(fp))!=EOF&&maxlen) { + *p++ = c; + maxlen--; + if (c=='\n') break; + if (c=='\r') { + c = Zgetc(fp); + if (c != EOF && c != '\n') Zungetc(c,fp); + *(p-1) = '\n'; + break; + } + } + *p = 0; + return (c==EOF) ? NULL : line; +} + + +/**************************************************************************** + + usageerr + + Prints "Usage: ...." line to the given stream. + +****************************************************************************/ + +void printusage(out) +FILE *out; +{ + fprintf(out, + "Usage: %s [ -cklnoprstvxDELNRSWX ] [ -d fontdirectory ]\n", + myname); + fprintf(out, + " [ -f fontfile ] [ -m smushmode ] [ -w outputwidth ]\n"); + fprintf(out, + " [ -C controlfile ] [ -I infocode ] [ message ]\n"); +} + + +/**************************************************************************** + + printinfo + + Prints version and copyright message, or utility information. + +****************************************************************************/ + +void printinfo(infonum) +int infonum; +{ + switch (infonum) { + case 0: /* Copyright message */ + printf("FIGlet Copyright (C) 1991-2012 Glenn Chappell, Ian Chai, "); + printf("John Cowan,\nChristiaan Keet and Claudio Matsuoka\n"); + printf("Internet: "); + printf("Version: %s, date: %s\n\n",VERSION,DATE); + printf("FIGlet, along with the various FIGlet fonts"); + printf(" and documentation, may be\n"); + printf("freely copied and distributed.\n\n"); + printf("If you use FIGlet, please send an"); + printf(" e-mail message to .\n\n"); + printf("The latest version of FIGlet is available from the"); + printf(" web site,\n\thttp://www.figlet.org/\n\n"); + printusage(stdout); + break; + case 1: /* Version (integer) */ + printf("%d\n",VERSION_INT); + break; + case 2: /* Font directory */ + printf("%s\n",fontdirname); + break; + case 3: /* Font */ + printf("%s\n",fontname); + break; + case 4: /* Outputwidth */ + printf("%d\n",outputwidth); + break; + case 5: /* Font formats */ + printf("%s", FONTFILEMAGICNUMBER); +#ifdef TLF_FONTS + printf(" %s", TOILETFILEMAGICNUMBER); +#endif + printf("\n"); + } +} + + +/**************************************************************************** + + readmagic + + Reads a four-character magic string from a stream. + +****************************************************************************/ +void readmagic(fp,magic) +ZFILE *fp; +char *magic; +{ + int i; + + for (i=0;i<4;i++) { + magic[i] = Zgetc(fp); + } + magic[4] = 0; + } + +/**************************************************************************** + + skipws + + Skips whitespace characters from a stream. + +****************************************************************************/ +void skipws(fp) +ZFILE *fp; +{ + int c; + while (c=Zgetc(fp),isascii(c)&&isspace(c)) ; + Zungetc(c,fp); + } + +/**************************************************************************** + + readnum + + Reads a number from a stream. Accepts "0" prefix for octal and + "0x" or "0X" for hexadecimal. Ignores leading whitespace. + +****************************************************************************/ +void readnum(fp,nump) +ZFILE *fp; +inchr *nump; +{ + int acc = 0; + char *p; + int c; + int base; + int sign = 1; + char digits[] = "0123456789ABCDEF"; + + skipws(fp); + c = Zgetc(fp); + if (c=='-') { + sign = -1; + } + else { + Zungetc(c,fp); + } + c = Zgetc(fp); + if (c=='0') { + c = Zgetc(fp); + if (c=='x'||c=='X') { + base = 16; + } + else { + base = 8; + Zungetc(c,fp); + } + } + else { + base = 10; + Zungetc(c,fp); + } + + while((c=Zgetc(fp))!=EOF) { + c=toupper(c); + p=strchr(digits,c); + if (!p) { + Zungetc(c,fp); + *nump = acc * sign; + return; + } + acc = acc*base+(p-digits); + } + *nump = acc * sign; + } + +/**************************************************************************** + + readTchar + + Reads a control file "T" command character specification. + + Character is a single byte, an escape sequence, or + an escaped numeric. + +****************************************************************************/ + +inchr readTchar(fp) +ZFILE *fp; +{ + inchr thechar; + char next; + + thechar=Zgetc(fp); + if (thechar=='\n' || thechar=='\r') { /* Handle badly-formatted file */ + Zungetc(thechar,fp); + return '\0'; + } + if (thechar!='\\') return thechar; + next=Zgetc(fp); + switch(next) { + case 'a': + return 7; + case 'b': + return 8; + case 'e': + return 27; + case 'f': + return 12; + case 'n': + return 10; + case 'r': + return 13; + case 't': + return 9; + case 'v': + return 11; + default: + if (next=='-' || next=='x' || (next>='0' && next<='9')) { + Zungetc(next,fp); + readnum(fp,&thechar); + return thechar; + } + return next; + } +} + +/**************************************************************************** + + charsetname + + Get a Tchar representing a charset name, or 0 if none available. + Called in getcharset(). + +****************************************************************************/ + +inchr charsetname(fp) +ZFILE *fp; +{ + inchr result; + + result = readTchar(fp); + if (result == '\n' || result == '\r') { + result = 0; + Zungetc(result,fp); + } + return result; + } + +/**************************************************************************** + + charset + + Processes "g[0123]" character set specifier + Called in readcontrol(). + +****************************************************************************/ + +void charset(n, controlfile) +int n; +ZFILE *controlfile; +{ + int ch; + + skipws(controlfile); + if (Zgetc(controlfile) != '9') { + skiptoeol(controlfile); + return; + } + ch = Zgetc(controlfile); + if (ch == '6') { + gn[n] = 65536L * charsetname(controlfile) + 0x80; + gndbl[n] = 0; + skiptoeol(controlfile); + return; + } + if (ch != '4') { + skiptoeol(controlfile); + return; + } + ch = Zgetc(controlfile); + if (ch == 'x') { + if (Zgetc(controlfile) != '9') { + skiptoeol(controlfile); + return; + } + if (Zgetc(controlfile) != '4') { + skiptoeol(controlfile); + return; + } + skipws(controlfile); + gn[n] = 65536L * charsetname(controlfile); + gndbl[n] = 1; + skiptoeol(controlfile); + return; + } + Zungetc(ch, controlfile); + skipws(controlfile); + gn[n] = 65536L * charsetname(controlfile); + gndbl[n] = 0; + return; + } + +/**************************************************************************** + + FIGopen + + Given a FIGlet font or control file name and suffix, return the file + or NULL if not found + +****************************************************************************/ + +ZFILE *FIGopen(name,suffix) +char *name; +char *suffix; +{ + char *fontpath; + ZFILE *fontfile; + struct stat st; + int namelen; + + namelen = MYSTRLEN(fontdirname); + fontpath = (char*)alloca(sizeof(char)* + (namelen+MYSTRLEN(name)+MYSTRLEN(suffix)+2)); + fontfile = NULL; + if (!hasdirsep(name)) { /* not a full path name */ + strcpy(fontpath,fontdirname); + fontpath[namelen] = DIRSEP; + fontpath[namelen+1] = '\0'; + strcat(fontpath,name); + strcat(fontpath,suffix); + if(stat(fontpath,&st)==0) goto ok; + } + /* just append suffix */ + strcpy(fontpath,name); + strcat(fontpath,suffix); + if(stat(fontpath,&st)==0) goto ok; + + return NULL; + +ok: + fontfile = Zopen(fontpath,"rb"); + return fontfile; +} + +/**************************************************************************** + + readcontrol + + Allocates memory and reads in the given control file. + Called in readcontrolfiles(). + +****************************************************************************/ + +void readcontrol(controlname) +char *controlname; +{ + inchr firstch,lastch; + char dashcheck; + inchr offset; + int command; + ZFILE *controlfile; + + controlfile = FIGopen(controlname,CONTROLFILESUFFIX); + + if (controlfile==NULL) { + fprintf(stderr,"%s: %s: Unable to open control file\n",myname, + controlname); + exit(1); + } + + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); + (*commandlistend)->thecommand = 0; /* Begin with a freeze command */ + commandlistend = &(*commandlistend)->next; + (*commandlistend) = NULL; + + while(command=Zgetc(controlfile),command!=EOF) { + switch (command) { + case 't': /* Translate */ + skipws(controlfile); + firstch=readTchar(controlfile); + if ((dashcheck=Zgetc(controlfile))=='-') { + lastch=readTchar(controlfile); + } + else { + Zungetc(dashcheck,controlfile); + lastch=firstch; + } + skipws(controlfile); + offset=readTchar(controlfile)-firstch; + skiptoeol(controlfile); + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); + (*commandlistend)->thecommand = 1; + (*commandlistend)->rangelo = firstch; + (*commandlistend)->rangehi = lastch; + (*commandlistend)->offset = offset; + commandlistend = &(*commandlistend)->next; + (*commandlistend) = NULL; + break; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + case '-': + /* Mapping table entry */ + Zungetc(command,controlfile); + readnum(controlfile,&firstch); + skipws(controlfile); + readnum(controlfile,&lastch); + offset=lastch-firstch; + lastch=firstch; + skiptoeol(controlfile); + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); + (*commandlistend)->thecommand = 1; + (*commandlistend)->rangelo = firstch; + (*commandlistend)->rangehi = lastch; + (*commandlistend)->offset = offset; + commandlistend = &(*commandlistend)->next; + (*commandlistend) = NULL; + break; + case 'f': /* freeze */ + skiptoeol(controlfile); + (*commandlistend) = (comnode*)myalloc(sizeof(comnode)); + (*commandlistend)->thecommand = 0; + commandlistend = &(*commandlistend)->next; + (*commandlistend) = NULL; + break; + case 'b': /* DBCS input mode */ + multibyte = 1; + break; + case 'u': /* UTF-8 input mode */ + multibyte = 2; + break; + case 'h': /* HZ input mode */ + multibyte = 3; + break; + case 'j': /* Shift-JIS input mode */ + multibyte = 4; + break; + case 'g': /* ISO 2022 character set choices */ + multibyte = 0; + skipws(controlfile); + command=Zgetc(controlfile); + switch (command) { + case '0': /* define G0 charset */ + charset(0, controlfile); + break; + case '1': /* set G1 charset */ + charset(1, controlfile); + break; + case '2': /* set G2 charset */ + charset(2, controlfile); + break; + case '3': /* set G3 charset */ + charset(3, controlfile); + break; + case 'l': case 'L': /* define left half */ + skipws(controlfile); + gl = Zgetc(controlfile) - '0'; + skiptoeol(controlfile); + break; + case 'r': case 'R': /* define right half */ + skipws(controlfile); + gr = Zgetc(controlfile) - '0'; + skiptoeol(controlfile); + break; + default: /* meaningless "g" command */ + skiptoeol(controlfile); + } + case '\r': case '\n': /* blank line */ + break; + default: /* Includes '#' */ + skiptoeol(controlfile); + } + } + Zclose(controlfile); +} + + +/**************************************************************************** + + readcontrolfiles + + Reads in the controlfiles names in cfilelist. Uses readcontrol. + Called in main(). + +****************************************************************************/ + +void readcontrolfiles() +{ + cfnamenode *cfnptr; + + for (cfnptr=cfilelist;cfnptr!=NULL;cfnptr=cfnptr->next) { + readcontrol(cfnptr->thename); + } +} + + +/**************************************************************************** + + clearcfilelist + + Clears the control file list. Assumes thename does not need freeing. + +****************************************************************************/ + +void clearcfilelist() +{ + cfnamenode *cfnptr1,*cfnptr2; + + cfnptr1 = cfilelist; + while (cfnptr1 != NULL) { + cfnptr2 = cfnptr1->next; + free(cfnptr1); + cfnptr1 = cfnptr2; + } + cfilelist = NULL; + cfilelistend = &cfilelist; +} + + +/**************************************************************************** + + getparams + + Handles all command-line parameters. Puts all parameters within + bounds. + +****************************************************************************/ + +void getparams() +{ + extern char *optarg; + extern int optind; + int c; /* "Should" be a char -- need int for "!= -1" test*/ + int columns,infoprint; + char *controlname,*env; + + if ((myname = strrchr(Myargv[0],DIRSEP))!=NULL) { + myname++; + } + else { + myname = Myargv[0]; + } + fontdirname = DEFAULTFONTDIR; + env = getenv("FIGLET_FONTDIR"); + if (env!=NULL) { + fontdirname = env; + } + fontname = DEFAULTFONTFILE; + cfilelist = NULL; + cfilelistend = &cfilelist; + commandlist = NULL; + commandlistend = &commandlist; + smushoverride = SMO_NO; + deutschflag = 0; + justification = -1; + right2left = -1; + paragraphflag = 0; + infoprint = -1; + cmdinput = 0; + outputwidth = DEFAULTCOLUMNS; + gn[1] = 0x80; + gr = 1; + while ((c = getopt(Myargc,Myargv,"ADEXLRI:xlcrpntvm:w:d:f:C:NFskSWo"))!= -1) { + /* Note: -F is not a legal option -- prints a special err message. */ + switch (c) { + case 'A': + cmdinput = 1; + break; + case 'D': + deutschflag = 1; + break; + case 'E': + deutschflag = 0; + break; + case 'X': + right2left = -1; + break; + case 'L': + right2left = 0; + break; + case 'R': + right2left = 1; + break; + case 'x': + justification = -1; + break; + case 'l': + justification = 0; + break; + case 'c': + justification = 1; + break; + case 'r': + justification = 2; + break; + case 'p': + paragraphflag = 1; + break; + case 'n': + paragraphflag = 0; + break; + case 's': + smushoverride = SMO_NO; + break; + case 'k': + smushmode = SM_KERN; + smushoverride = SMO_YES; + break; + case 'S': + smushmode = SM_SMUSH; + smushoverride = SMO_FORCE; + break; + case 'o': + smushmode = SM_SMUSH; + smushoverride = SMO_YES; + break; + case 'W': + smushmode = 0; + smushoverride = SMO_YES; + break; + case 't': +#ifdef TIOCGWINSZ + columns = get_columns(); + if (columns>0) { + outputwidth = columns; + } +#else /* ifdef TIOCGWINSZ */ + fprintf(stderr, + "%s: \"-t\" is disabled, since ioctl is not fully implemented.\n", + myname); +#endif /* ifdef TIOCGWINSZ */ + break; + case 'v': + infoprint = 0; + break; + case 'I': + infoprint = atoi(optarg); + break; + case 'm': + smushmode = atoi(optarg); + if (smushmode < -1) { + smushoverride = SMO_NO; + break; + } + if (smushmode == 0) smushmode = SM_KERN; + else if (smushmode == -1) smushmode = 0; + else smushmode = (smushmode & 63) | SM_SMUSH; + smushoverride = SMO_YES; + break; + case 'w': + columns = atoi(optarg); + if (columns>0) { + outputwidth = columns; + } + break; + case 'd': + fontdirname = optarg; + break; + case 'f': + fontname = optarg; + if (suffixcmp(fontname,FONTFILESUFFIX)) { + fontname[MYSTRLEN(fontname)-FSUFFIXLEN] = '\0'; + } +#ifdef TLF_FONTS + else if (suffixcmp(fontname,TOILETFILESUFFIX)) { + fontname[MYSTRLEN(fontname)-TSUFFIXLEN] = '\0'; + } +#endif + break; + case 'C': + controlname = optarg; + if (suffixcmp(controlname, CONTROLFILESUFFIX)) { + controlname[MYSTRLEN(controlname)-CSUFFIXLEN] = '\0'; + } + (*cfilelistend) = (cfnamenode*)myalloc(sizeof(cfnamenode)); + (*cfilelistend)->thename = controlname; + cfilelistend = &(*cfilelistend)->next; + (*cfilelistend) = NULL; + break; + case 'N': + clearcfilelist(); + multibyte = 0; + gn[0] = 0; + gn[1] = 0x80; + gn[2] = gn[3] = 0; + gndbl[0] = gndbl[1] = gndbl[2] = gndbl[3] = 0; + gl = 0; + gr = 1; + break; + case 'F': /* Not a legal option */ + fprintf(stderr,"%s: illegal option -- F\n",myname); + printusage(stderr); + fprintf(stderr,"\nBecause of numerous incompatibilities, the"); + fprintf(stderr," \"-F\" option has been\n"); + fprintf(stderr,"removed. It has been replaced by the \"figlist\""); + fprintf(stderr," program, which is now\n"); + fprintf(stderr,"included in the basic FIGlet package. \"figlist\""); + fprintf(stderr," is also available\n"); + fprintf(stderr,"from http://www.figlet.org/"); + fprintf(stderr,"under UNIX utilities.\n"); + exit(1); + break; + default: + printusage(stderr); + exit(1); + } + } + if (optind!=Myargc) cmdinput = 1; /* force cmdinput if more arguments */ + outlinelenlimit = outputwidth-1; + if (infoprint>=0) { + printinfo(infoprint); + exit(0); + } +} + + +/**************************************************************************** + + clearline + + Clears both the input (inchrline) and output (outputline) storage. + +****************************************************************************/ + +void clearline() +{ + int i; + + for (i=0;iord = theord; + fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight); + fcharlist->next = fclsave; + + outline[0] = 0; + + for (row=0;row=0 && ISSPACE(outline[k])) { /* remove trailing spaces */ + k--; + } + if (k>=0) { + endchar = outline[k]; /* remove endmarks */ + while (k>=0 && outline[k]==endchar) { + k--; + } + } + outline[k+1] = '\0'; + fcharlist->thechar[row] = (outchr*)myalloc(sizeof(outchr)*(STRLEN(outline)+1)); + STRCPY(fcharlist->thechar[row],outline); + } +} + + +/**************************************************************************** + + readfont + + Allocates memory, initializes variables, and reads in the font. + Called near beginning of main(). + +****************************************************************************/ + +void readfont() +{ + int i,row,numsread; + inchr theord; + int maxlen,cmtlines,ffright2left; + int smush,smush2; + char fileline[MAXLEN+1],magicnum[5]; + ZFILE *fontfile; + + fontfile = FIGopen(fontname,FONTFILESUFFIX); +#ifdef TLF_FONTS + if (fontfile==NULL) { + fontfile = FIGopen(fontname,TOILETFILESUFFIX); + if(fontfile) toiletfont = 1; + } +#endif + + if (fontfile==NULL) { + fprintf(stderr,"%s: %s: Unable to open font file\n",myname,fontname); + exit(1); + } + + readmagic(fontfile,magicnum); + if (myfgets(fileline,MAXLEN,fontfile)==NULL) { + fileline[0] = '\0'; + } + if (MYSTRLEN(fileline)>0 ? fileline[MYSTRLEN(fileline)-1]!='\n' : 0) { + skiptoeol(fontfile); + } + numsread = sscanf(fileline,"%*c%c %d %*d %d %d %d %d %d", + &hardblank,&charheight,&maxlen,&smush,&cmtlines, + &ffright2left,&smush2); + + if (maxlen > MAXLEN) { + fprintf(stderr,"%s: %s: character is too wide\n",myname,fontname); + exit(1); + } +#ifdef TLF_FONTS + if ((!toiletfont && strcmp(magicnum,FONTFILEMAGICNUMBER)) || + (toiletfont && strcmp(magicnum,TOILETFILEMAGICNUMBER)) || numsread<5) { +#else + if (strcmp(magicnum,FONTFILEMAGICNUMBER) || numsread<5) { +#endif + fprintf(stderr,"%s: %s: Not a FIGlet 2 font file\n",myname,fontname); + exit(1); + } + for (i=1;i<=cmtlines;i++) { + skiptoeol(fontfile); + } + + if (numsread<6) { + ffright2left = 0; + } + + if (numsread<7) { /* if no smush2, decode smush into smush2 */ + if (smush == 0) smush2 = SM_KERN; + else if (smush < 0) smush2 = 0; + else smush2 = (smush & 31) | SM_SMUSH; + } + + if (charheight<1) { + charheight = 1; + } + + if (maxlen<1) { + maxlen = 1; + } + + maxlen += 100; /* Give ourselves some extra room */ + + if (smushoverride == SMO_NO) + smushmode = smush2; + else if (smushoverride == SMO_FORCE) + smushmode |= smush2; + + if (right2left<0) { + right2left = ffright2left; + } + + if (justification<0) { + justification = 2*right2left; + } + + /* Allocate "missing" character */ + fcharlist = (fcharnode*)myalloc(sizeof(fcharnode)); + fcharlist->ord = 0; + fcharlist->thechar = (outchr**)myalloc(sizeof(outchr*)*charheight); + fcharlist->next = NULL; + for (row=0;rowthechar[row] = (outchr*)myalloc(sizeof(outchr)); + fcharlist->thechar[row][0] = '\0'; + } + for (theord=' ';theord<='~';theord++) { + readfontchar(fontfile,theord); + } + for (theord=0;theord<=6;theord++) { + readfontchar(fontfile,deutsch[theord]); + } + while (myfgets(fileline,maxlen+1,fontfile)==NULL?0: + sscanf(fileline,"%li",&theord)==1) { + readfontchar(fontfile,theord); + } + Zclose(fontfile); +} + + +/**************************************************************************** + + linealloc + + Allocates & clears outputline, inchrline. Sets inchrlinelenlimit. + Called near beginning of main(). + +****************************************************************************/ + +void linealloc() +{ + int row; + + outputline = (outchr**)myalloc(sizeof(outchr*)*charheight); + for (row=0;roword!=c; + charptr=charptr->next) ; + if (charptr!=NULL) { + currchar = charptr->thechar; + } + else { + for (charptr=fcharlist;charptr==NULL?0:charptr->ord!=0; + charptr=charptr->next) ; + currchar = charptr->thechar; + } + previouscharwidth = currcharwidth; + currcharwidth = STRLEN(currchar[0]); +} + + +/**************************************************************************** + + smushem + + Given 2 characters, attempts to smush them into 1, according to + smushmode. Returns smushed character or '\0' if no smushing can be + done. + + smushmode values are sum of following (all values smush blanks): + 1: Smush equal chars (not hardblanks) + 2: Smush '_' with any char in hierarchy below + 4: hierarchy: "|", "/\", "[]", "{}", "()", "<>" + Each class in hier. can be replaced by later class. + 8: [ + ] -> |, { + } -> |, ( + ) -> | + 16: / + \ -> X, > + < -> X (only in that order) + 32: hardblank + hardblank -> hardblank + +****************************************************************************/ + +outchr smushem(lch,rch) +outchr lch,rch; +{ + if (lch==' ') return rch; + if (rch==' ') return lch; + + if (previouscharwidth<2 || currcharwidth<2) return '\0'; + /* Disallows overlapping if the previous character */ + /* or the current character has a width of 1 or zero. */ + + if ((smushmode & SM_SMUSH) == 0) return '\0'; /* kerning */ + + if ((smushmode & 63) == 0) { + /* This is smushing by universal overlapping. */ + if (lch==' ') return rch; + if (rch==' ') return lch; + if (lch==hardblank) return rch; + if (rch==hardblank) return lch; + /* Above four lines ensure overlapping preference to */ + /* visible characters. */ + if (right2left==1) return lch; + /* Above line ensures that the dominant (foreground) */ + /* fig-character for overlapping is the latter in the */ + /* user's text, not necessarily the rightmost character. */ + return rch; + /* Occurs in the absence of above exceptions. */ + } + + if (smushmode & SM_HARDBLANK) { + if (lch==hardblank && rch==hardblank) return lch; + } + + if (lch==hardblank || rch==hardblank) return '\0'; + + if (smushmode & SM_EQUAL) { + if (lch==rch) return lch; + } + + if (smushmode & SM_LOWLINE) { + if (lch=='_' && strchr("|/\\[]{}()<>",rch)) return rch; + if (rch=='_' && strchr("|/\\[]{}()<>",lch)) return lch; + } + + if (smushmode & SM_HIERARCHY) { + if (lch=='|' && strchr("/\\[]{}()<>",rch)) return rch; + if (rch=='|' && strchr("/\\[]{}()<>",lch)) return lch; + if (strchr("/\\",lch) && strchr("[]{}()<>",rch)) return rch; + if (strchr("/\\",rch) && strchr("[]{}()<>",lch)) return lch; + if (strchr("[]",lch) && strchr("{}()<>",rch)) return rch; + if (strchr("[]",rch) && strchr("{}()<>",lch)) return lch; + if (strchr("{}",lch) && strchr("()<>",rch)) return rch; + if (strchr("{}",rch) && strchr("()<>",lch)) return lch; + if (strchr("()",lch) && strchr("<>",rch)) return rch; + if (strchr("()",rch) && strchr("<>",lch)) return lch; + } + + if (smushmode & SM_PAIR) { + if (lch=='[' && rch==']') return '|'; + if (rch=='[' && lch==']') return '|'; + if (lch=='{' && rch=='}') return '|'; + if (rch=='{' && lch=='}') return '|'; + if (lch=='(' && rch==')') return '|'; + if (rch=='(' && lch==')') return '|'; + } + + if (smushmode & SM_BIGX) { + if (lch=='/' && rch=='\\') return '|'; + if (rch=='/' && lch=='\\') return 'Y'; + if (lch=='>' && rch=='<') return 'X'; + /* Don't want the reverse of above to give 'X'. */ + } + + return '\0'; +} + + +/**************************************************************************** + + smushamt + + Returns the maximum amount that the current character can be smushed + into the current line. + +****************************************************************************/ + +int smushamt() +{ + int maxsmush,amt; + int row,linebd,charbd; + outchr ch1,ch2; + + if ((smushmode & (SM_SMUSH | SM_KERN)) == 0) { + return 0; + } + maxsmush = currcharwidth; + for (row=0;rowSTRLEN(outputline[row])) { + maxsmush=STRLEN(outputline[row]); + } + for (charbd=STRLEN(currchar[row]); + ch1=currchar[row][charbd],(charbd>0&&(!ch1||ch1==' '));charbd--) ; + for (linebd=0;ch2=outputline[row][linebd],ch2==' ';linebd++) ; + amt = linebd+currcharwidth-1-charbd; + } + else { + for (linebd=STRLEN(outputline[row]); + ch1 = outputline[row][linebd],(linebd>0&&(!ch1||ch1==' '));linebd--) ; + for (charbd=0;ch2=currchar[row][charbd],ch2==' ';charbd++) ; + amt = charbd+outlinelen-1-linebd; + } + if (!ch1||ch1==' ') { + amt++; + } + else if (ch2) { + if (smushem(ch1,ch2)!='\0') { + amt++; + } + } + if (amtoutlinelenlimit + ||inchrlinelen+1>inchrlinelenlimit) { + return 0; + } + + templine = (outchr*)myalloc(sizeof(outchr)*(outlinelenlimit+1)); + for (row=0;row1) { + if (len>outputwidth-1) { + len = outputwidth-1; + } + if (justification>0) { + for (i=1;(3-justification)*i+len+justification-2=0;i--) { + if (!gotspace && inchrline[i]==' ') { + gotspace = 1; + lastspace = i; + } + if (gotspace && inchrline[i]!=' ') { + break; + } + } + len1 = i+1; + len2 = inchrlinelen-lastspace-1; + for (i=0;ithecommand ? + (c >= cmptr->rangelo && c <= cmptr->rangehi) : 0) { + c += cmptr->offset; + while(cmptr!=NULL ? cmptr->thecommand : 0) { + cmptr=cmptr->next; + } + } + else { + cmptr=cmptr->next; + } + } + return c; +} + +/**************************************************************************** + + Agetchar + + Replacement to getchar(). + Acts exactly like getchar if -A is NOT specified, + else obtains input from All remaining command line words. + +****************************************************************************/ + +int Agetchar() +{ + extern int optind; /* current argv[] element under study */ + static int AgetMode = 0; /* >= 0 for displacement into argv[n], <0 EOF */ + char *arg; /* pointer to active character */ + int c; /* current character */ + + if ( ! cmdinput ) /* is -A active? */ + return( getchar() ); /* no: return stdin character */ + + if ( AgetMode < 0 || optind >= Myargc ) /* EOF is sticky: */ + return( EOF ); /* **ensure it now and forever more */ + + /* find next character */ + arg = Myargv[optind]; /* pointer to active arg */ + c = arg[AgetMode++]&0xFF; /* get appropriate char of arg */ + + if ( ! c ) /* at '\0' that terminates word? */ + { /* at end of word: return ' ' if normal word, '\n' if empty */ + c = ' '; /* suppose normal word and return blank */ + if ( AgetMode == 1 ) /* if ran out in very 1st char, force \n */ + c = '\n'; /* (allows "hello '' world" to do \n at '') */ + AgetMode = 0; /* return to char 0 in NEXT word */ + if ( ++optind >= Myargc ) /* run up word count and check if at "EOF" */ + { /* just ran out of arguments */ + c = EOF; /* return EOF */ + AgetMode = -1; /* ensure all future returns return EOF */ + } + } + + return( c ); /* return appropriate character */ + +} /* end: Agetchar() */ + + +/**************************************************************************** + + iso2022 + + Called by getinchr. Interprets ISO 2022 sequences + +******************************************************************************/ + +inchr iso2022() +{ + inchr ch; + inchr ch2; + int save_gl; + int save_gr; + + ch = Agetchar(); + if (ch == EOF) return ch; + if (ch == 27) ch = Agetchar() + 0x100; /* ESC x */ + if (ch == 0x100 + '$') ch = Agetchar() + 0x200; /* ESC $ x */ + switch (ch) { + case 14: /* invoke G1 into GL */ + gl = 1; + return iso2022(); + case 15: /* invoke G0 into GL */ + gl = 0; + return iso2022(); + case 142: case 'N' + 0x100: /* invoke G2 into GL for next char */ + save_gl = gl; save_gr = gr; + gl = gr = 2; + ch = iso2022(); + gl = save_gl; gr = save_gr; + return ch; + case 143: case 'O' + 0x100: /* invoke G3 into GL for next char */ + save_gl = gl; save_gr = gr; + gl = gr = 3; + ch = iso2022(); + gl = save_gl; gr = save_gr; + return ch; + case 'n' + 0x100: /* invoke G2 into GL */ + gl = 2; + return iso2022(); + case 'o' + 0x100: /* invoke G3 into GL */ + gl = 3; + return iso2022(); + case '~' + 0x100: /* invoke G1 into GR */ + gr = 1; + return iso2022(); + case '}' + 0x100: /* invoke G2 into GR */ + gr = 2; + return iso2022(); + case '|' + 0x100: /* invoke G3 into GR */ + gr = 3; + return iso2022(); + case '(' + 0x100: /* set G0 to 94-char set */ + ch = Agetchar(); + if (ch == 'B') ch = 0; /* ASCII */ + gn[0] = ch << 16; + gndbl[0] = 0; + return iso2022(); + case ')' + 0x100: /* set G1 to 94-char set */ + ch = Agetchar(); + if (ch == 'B') ch = 0; + gn[1] = ch << 16; + gndbl[1] = 0; + return iso2022(); + case '*' + 0x100: /* set G2 to 94-char set */ + ch = Agetchar(); + if (ch == 'B') ch = 0; + gn[2] = ch << 16; + gndbl[2] = 0; + return iso2022(); + case '+' + 0x100: /* set G3 to 94-char set */ + ch = Agetchar(); + if (ch == 'B') ch = 0; + gn[3] = ch << 16; + gndbl[3] = 0; + return iso2022(); + case '-' + 0x100: /* set G1 to 96-char set */ + ch = Agetchar(); + if (ch == 'A') ch = 0; /* Latin-1 top half */ + gn[1] = (ch << 16) | 0x80; + gndbl[1] = 0; + return iso2022(); + case '.' + 0x100: /* set G2 to 96-char set */ + ch = Agetchar(); + if (ch == 'A') ch = 0; + gn[2] = (ch << 16) | 0x80; + gndbl[2] = 0; + return iso2022(); + case '/' + 0x100: /* set G3 to 96-char set */ + ch = Agetchar(); + if (ch == 'A') ch = 0; + gn[3] = (ch << 16) | 0x80; + gndbl[3] = 0; + return iso2022(); + case '(' + 0x200: /* set G0 to 94 x 94 char set */ + ch = Agetchar(); + gn[0] = ch << 16; + gndbl[0] = 1; + return iso2022(); + case ')' + 0x200: /* set G1 to 94 x 94 char set */ + ch = Agetchar(); + gn[1] = ch << 16; + gndbl[1] = 1; + return iso2022(); + case '*' + 0x200: /* set G2 to 94 x 94 char set */ + ch = Agetchar(); + gn[2] = ch << 16; + gndbl[2] = 1; + return iso2022(); + case '+' + 0x200: /* set G3 to 94 x 94 char set */ + ch = Agetchar(); + gn[3] = ch << 16; + gndbl[3] = 1; + return iso2022(); + default: + if (ch & 0x200) { /* set G0 to 94 x 94 char set (deprecated) */ + gn[0] = (ch & ~0x200) << 16; + gndbl[0] = 1; + return iso2022(); + } + } + + if (ch >= 0x21 && ch <= 0x7E) { /* process GL */ + if (gndbl[gl]) { + ch2 = Agetchar(); + return gn[gl] | (ch << 8) | ch2; + } + else return gn[gl] | ch; + } + else if (ch >= 0xA0 && ch <= 0xFF) { /* process GR */ + if (gndbl[gr]) { + ch2 = Agetchar(); + return gn[gr] | (ch << 8) | ch2; + } + else return gn[gr] | (ch & ~0x80); + } + else return ch; + } + +/**************************************************************************** + + ungetinchr + + Called by main. Pushes back an "inchr" to be read by getinchr + on the next call. + +******************************************************************************/ +inchr getinchr_buffer; +int getinchr_flag; + +inchr ungetinchr(c) +inchr c; +{ + getinchr_buffer = c; + getinchr_flag = 1; + return c; +} + +/***************************************************************************** + + getinchr + + Called by main. Processes multibyte characters. Invokes Agetchar. + If multibyte = 0, ISO 2022 mode (see iso2022 routine). + If multibyte = 1, double-byte mode (0x00-0x7f bytes are characters, + 0x80-0xFF bytes are first byte of a double-byte character). + If multibyte = 2, Unicode UTF-8 mode (0x00-0x7F bytes are characters, + 0x80-0xBF bytes are nonfirst byte of a multibyte character, + 0xC0-0xFD bytes are first byte of a multibyte character, + 0xFE-0xFF bytes are errors (all errors return code 0x0080)). + If multibyte = 3, HZ mode ("~{" starts double-byte mode, "}~" ends it, + "~~" is a tilde, "~x" for all other x is ignored). + If multibyte = 4, Shift-JIS mode (0x80-0x9F and 0xE0-0xEF are first byte + of a double-byte character, all other bytes are characters). + + +*****************************************************************************/ + +inchr getinchr() +{ + int ch, ch2, ch3, ch4, ch5, ch6; + + if (getinchr_flag) { + getinchr_flag = 0; + return getinchr_buffer; + } + + switch(multibyte) { + case 0: /* single-byte */ + return iso2022(); + case 1: /* DBCS */ + ch = Agetchar(); + if ((ch >= 0x80 && ch <= 0x9F) || + (ch >= 0xE0 && ch <= 0xEF)) { + ch = (ch << 8) + Agetchar(); + } + return ch; + case 2: /* UTF-8 */ + ch = Agetchar(); + if (ch < 0x80) return ch; /* handles EOF, too */ + if (ch < 0xC0 || ch > 0xFD) + return 0x0080; /* illegal first character */ + ch2 = Agetchar() & 0x3F; + if (ch < 0xE0) return ((ch & 0x1F) << 6) + ch2; + ch3 = Agetchar() & 0x3F; + if (ch < 0xF0) + return ((ch & 0x0F) << 12) + (ch2 << 6) + ch3; + ch4 = Agetchar() & 0x3F; + if (ch < 0xF8) + return ((ch & 0x07) << 18) + (ch2 << 12) + (ch3 << 6) + ch4; + ch5 = Agetchar() & 0x3F; + if (ch < 0xFC) + return ((ch & 0x03) << 24) + (ch2 << 18) + (ch3 << 12) + + (ch4 << 6) + ch5; + ch6 = Agetchar() & 0x3F; + return ((ch & 0x01) << 30) + (ch2 << 24) + (ch3 << 18) + + (ch4 << 12) + (ch5 << 6) + ch6; + case 3: /* HZ */ + ch = Agetchar(); + if (ch == EOF) return ch; + if (hzmode) { + ch = (ch << 8) + Agetchar(); + if (ch == ('}' << 8) + '~') { + hzmode = 0; + return getinchr(); + } + return ch; + } + else if (ch == '~') { + ch = Agetchar(); + if (ch == '{') { + hzmode = 1; + return getinchr(); + } + else if (ch == '~') { + return ch; + } + else { + return getinchr(); + } + } + else return ch; + case 4: /* Shift-JIS */ + ch = Agetchar(); + if ((ch >= 0x80 && ch <= 0x9F) || + (ch >= 0xE0 && ch <= 0xEF)) { + ch = (ch << 8) + Agetchar(); + } + return ch; + default: + return 0x80; + } + } + +/**************************************************************************** + + main + + The main program, of course. + Reads characters 1 by 1 from stdin, and makes lines out of them using + addchar. Handles line breaking, (which accounts for most of the + complexity in this function). + +****************************************************************************/ + +int main(argc,argv) +int argc; +char *argv[]; +{ + inchr c,c2; + int i; + int last_was_eol_flag; +/*--------------------------------------------------------------------------- + wordbreakmode: + -1: /^$/ and blanks are to be absorbed (when line break was forced + by a blank or character larger than outlinelenlimit) + 0: /^ *$/ and blanks are not to be absorbed + 1: /[^ ]$/ no word break yet + 2: /[^ ] *$/ + 3: /[^ ]$/ had a word break +---------------------------------------------------------------------------*/ + int wordbreakmode; + int char_not_added; + + Myargc = argc; + Myargv = argv; + getparams(); + readcontrolfiles(); + readfont(); + linealloc(); + + wordbreakmode = 0; + last_was_eol_flag = 0; + +#ifdef TLF_FONTS + toiletfont = 0; +#endif + + while ((c = getinchr())!=EOF) { + + if (c=='\n'&¶graphflag&&!last_was_eol_flag) { + ungetinchr(c2 = getinchr()); + c = ((isascii(c2)&&isspace(c2))?'\n':' '); + } + last_was_eol_flag = (isascii(c)&&isspace(c)&&c!='\t'&&c!=' '); + + if (deutschflag) { + if (c>='[' && c<=']') { + c = deutsch[c-'[']; + } + else if (c >='{' && c <= '~') { + c = deutsch[c-'{'+3]; + } + } + + c = handlemapping(c); + + if (isascii(c)&&isspace(c)) { + c = (c=='\t'||c==' ') ? ' ' : '\n'; + } + + if ((c>'\0' && c<' ' && c!='\n') || c==127) continue; + +/* + Note: The following code is complex and thoroughly tested. + Be careful when modifying! +*/ + + do { + char_not_added = 0; + + if (wordbreakmode== -1) { + if (c==' ') { + break; + } + else if (c=='\n') { + wordbreakmode = 0; + break; + } + wordbreakmode = 0; + } + + if (c=='\n') { + printline(); + wordbreakmode = 0; + } + + else if (addchar(c)) { + if (c!=' ') { + wordbreakmode = (wordbreakmode>=2)?3:1; + } + else { + wordbreakmode = (wordbreakmode>0)?2:0; + } + } + + else if (outlinelen==0) { + for (i=0;i1) { + putstring(currchar[i]+STRLEN(currchar[i])-outlinelenlimit); + } + else { + putstring(currchar[i]); + } + } + wordbreakmode = -1; + } + + else if (c==' ') { + if (wordbreakmode==2) { + splitline(); + } + else { + printline(); + } + wordbreakmode = -1; + } + + else { + if (wordbreakmode>=2) { + splitline(); + } + else { + printline(); + } + wordbreakmode = (wordbreakmode==3)?1:0; + char_not_added = 1; + } + + } while (char_not_added); + } + + if (outlinelen!=0) { + printline(); + } + return 0; +} diff --git a/externals/figlet/figlist b/externals/figlet/figlist new file mode 100755 index 0000000000..6dea3b2cf8 --- /dev/null +++ b/externals/figlet/figlist @@ -0,0 +1,64 @@ +#!/bin/sh - +# figlist by Glenn Chappell +# figlet release 2.1.1 -- 25 Aug 1994 +# +# Lists all fonts and control files in figlet's default font directory. +# Replaces "figlet -F", which was removed from figlet version 2.1. +# +# Usage: figlist [ -d directory ] + +DIR=`dirname $0` +FIGLET=$DIR/figlet + +# Get figlet version +FIGLETVERSION=`$FIGLET -I1 2>/dev/null` +if [ -z "$FIGLETVERSION" ]; then + FIGLETVERSION=20000 +fi + +USAGE="Usage: `basename $0` [ -d directory ]" + +if [ "$1" = "-d" ]; then + FONTDIROPT="-d $2" + if [ $# -ne 2 ]; then + echo "$USAGE" + exit 1 + fi +else + FONTDIROPT="" + if [ $# -ne 0 ]; then + echo "$USAGE" + exit 1 + fi +fi + +if [ "$FIGLETVERSION" -lt 20100 ]; then + # figlet 2.0 + $FIGLET $FONTDIROPT -F + exit +fi + +# From here on we may assume figlet 2.1 or later + +FONTDIR=`$FIGLET $FONTDIROPT -I2` +FONT=`$FIGLET -I3` +echo "Default font: $FONT" +echo "Font directory: $FONTDIR" + +if [ -d "$FONTDIR" ] && [ -r "$FONTDIR" ]; then + cd "$FONTDIR" + if ls *.flf >/dev/null 2>&1 ; then + echo "Figlet fonts in this directory:" + ls *.flf 2>/dev/null | sed s/\.flf$// + else + echo 'No figlet fonts in this directory' + fi + if ls *.flc >/dev/null 2>&1 ; then + echo "Figlet control files in this directory:" + ls *.flc 2>/dev/null | sed s/\.flc$// + else + echo 'No figlet control files in this directory' + fi +else + echo 'Unable to open directory' +fi diff --git a/externals/figlet/figlist.6 b/externals/figlet/figlist.6 new file mode 100644 index 0000000000..c8b7cae5c9 --- /dev/null +++ b/externals/figlet/figlist.6 @@ -0,0 +1,52 @@ +.\" figlist by Glenn Chappell +.\" figlet release 2.1.1 -- 25 Aug 1994 +.\" +.\" Lists all fonts and control files in figlet's default font directory. +.\" Replaces "figlet -F", which was removed from figlet version 2.1. +.\" +.\" Usage: figlist [ -d directory ] +.\" +.\" Manual page by Jonathon Abbott, for the Debian Project +.\" slightly modified by Francesco Tapparo, for the Debian Project +.TH FIGLIST 6 "31 May 2012" "v2.2.5" + +.SH NAME +figlist \- lists figlet fonts and control files + +.SH SYNOPSIS +.B figlist +[ +.B \-d +.I directory +] + +.SH DESCRIPTION +Lists all fonts and control files in figlet's default font directory. +Replaces "figlet \-F", which was removed from figlet version 2.1. + +.SH EXAMPLES +To use +.B figlist +with its default settings, simply type +.RS + +.B example% figlist + +.RE + +To list all the font and control files in /usr/share/fonts/figlet +.RS + +.B example% figlist \-d /usr/share/fonts/figlet + +.RE + +.SH AUTHORS +figlist was written by Glenn Chappell + +This manual page was written by Jonathon Abbott for the Debian Project. + +.SH "SEE ALSO" +.BR figlet (6), +.BR chkfont (6), +.BR showfigfonts (6) diff --git a/externals/figlet/figmagic b/externals/figlet/figmagic new file mode 100644 index 0000000000..5e9a01a0de --- /dev/null +++ b/externals/figlet/figmagic @@ -0,0 +1,6 @@ +# Append this file to your /etc/magic or /usr/share/misc/magic file +# to enable the ``file'' command to report on FIGlet fonts and controlfiles. +0 string flf FIGlet font +>3 string >2a version %-2.2s +0 string flc FIGlet controlfile +>3 string >2a version %-2.2s diff --git a/externals/figlet/fonts/646-ca.flc b/externals/figlet/fonts/646-ca.flc new file mode 100644 index 0000000000..b5f3071183 --- /dev/null +++ b/externals/figlet/fonts/646-ca.flc @@ -0,0 +1,157 @@ +# +# Name: CSA_Z243.4-1985-1 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# CSA_Z243.4-1985-1 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the CSA_Z243.4-1985-1 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in CSA_Z243.4-1985-1 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-121 +# &g0esc x2877 &g1esc x2977 &g2esc x2a77 &g3esc x2b77 +# &alias ISO646-CA +# &alias csa7-1 +# &alias ca +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x5E 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0x5F 0x005F # LOW LINE +0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-ca2.flc b/externals/figlet/fonts/646-ca2.flc new file mode 100644 index 0000000000..a7be02f68c --- /dev/null +++ b/externals/figlet/fonts/646-ca2.flc @@ -0,0 +1,156 @@ +# +# Name: CSA_Z243.4-1985-2 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# CSA_Z243.4-1985-2 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the CSA_Z243.4-1985-2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in CSA_Z243.4-1985-2 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-122 +# &alias ISO646-CA2 +# &g0esc x2878 &g1esc x2978 &g2esc x2a78 &g3esc x2b78 +# &alias csa7-2 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x5D 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0x5E 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x5F 0x005F # LOW LINE +0x60 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x7E 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-cn.flc b/externals/figlet/fonts/646-cn.flc new file mode 100644 index 0000000000..fc42581b87 --- /dev/null +++ b/externals/figlet/fonts/646-cn.flc @@ -0,0 +1,156 @@ +# +# Name: GB_1988-80 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# GB_1988-80 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the GB_1988-80 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in GB_1988-80 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-57 +# &g0esc x2854 &g1esc x2954 &g2esc x2a54 &g3esc x2b54 +# &alias cn +# &alias ISO646-CN +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A5 # YEN SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-cu.flc b/externals/figlet/fonts/646-cu.flc new file mode 100644 index 0000000000..a9cd5fdb03 --- /dev/null +++ b/externals/figlet/fonts/646-cu.flc @@ -0,0 +1,156 @@ +# +# Name: NC_NC00-10:81 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# NC_NC00-10:81 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the NC_NC00-10:81 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in NC_NC00-10:81 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias cuba +# &alias iso-ir-151 +# &alias ISO646-CU +# &g0esc x282141 &g1esc x292141 &g2esc x2a2141 &g3esc x2b2141 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A4 # CURRENCY SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00A1 # INVERTED EXCLAMATION MARK +0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x00BF # INVERTED QUESTION MARK +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00B4 # ACUTE ACCENT +0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x7D 0x005B # LEFT SQUARE BRACKET +0x7E 0x00A8 # DIAERESIS +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-de.flc b/externals/figlet/fonts/646-de.flc new file mode 100644 index 0000000000..716a42ffbf --- /dev/null +++ b/externals/figlet/fonts/646-de.flc @@ -0,0 +1,156 @@ +# +# Name: DIN_66003 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# DIN_66003 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the DIN_66003 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in DIN_66003 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-21 +# &g0esc x284b &g1esc x294b &g2esc x2a4b &g3esc x2b4b +# &alias de +# &alias ISO646-DE +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00A7 # SECTION SIGN +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0x7E 0x00DF # LATIN SMALL LETTER SHARP S (German) +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-dk.flc b/externals/figlet/fonts/646-dk.flc new file mode 100644 index 0000000000..3d9ddae013 --- /dev/null +++ b/externals/figlet/fonts/646-dk.flc @@ -0,0 +1,155 @@ +# +# Name: DS_2089 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# DS_2089 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the DS_2089 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in DS_2089 order +# +# Any comments or problems, contact +# +# &rem source: Danish Standard, DS 2089, February 1974 +# &alias DS2089 +# &alias ISO646-DK +# &alias dk +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C6 # LATIN CAPITAL LETTER AE +0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E6 # LATIN SMALL LETTER AE +0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-es.flc b/externals/figlet/fonts/646-es.flc new file mode 100644 index 0000000000..b996d786b3 --- /dev/null +++ b/externals/figlet/fonts/646-es.flc @@ -0,0 +1,155 @@ +# +# Name: ES to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# ES characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ES code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ES order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-17 +# &alias ISO646-ES +# &g0esc x285a &g1esc x295a &g2esc x2a5a &g3esc x2b5a +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x00A3 # POUND SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00A7 # SECTION SIGN +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00A1 # INVERTED EXCLAMATION MARK +0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x5D 0x00BF # INVERTED QUESTION MARK +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00B0 # DEGREE SIGN +0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-es2.flc b/externals/figlet/fonts/646-es2.flc new file mode 100644 index 0000000000..1f282ceb78 --- /dev/null +++ b/externals/figlet/fonts/646-es2.flc @@ -0,0 +1,155 @@ +# +# Name: ES2 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# ES2 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ES2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ES2 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-85 +# &alias ISO646-ES2 +# &g0esc x2868 &g1esc x2968 &g2esc x2a68 &g3esc x2b68 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x2219 # BULLET OPERATOR +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00A1 # INVERTED EXCLAMATION MARK +0x5C 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0x5D 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x5E 0x00BF # INVERTED QUESTION MARK +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00B4 # ACUTE ACCENT +0x7C 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0x7D 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x7E 0x00A8 # DIAERESIS +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-fr.flc b/externals/figlet/fonts/646-fr.flc new file mode 100644 index 0000000000..225b2fb8e6 --- /dev/null +++ b/externals/figlet/fonts/646-fr.flc @@ -0,0 +1,156 @@ +# +# Name: NF_Z_62-010 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# NF_Z_62-010 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the NF_Z_62-010 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in NF_Z_62-010 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-69 +# &alias ISO646-FR +# &g0esc x2866 &g1esc x2966 &g2esc x2a66 &g3esc x2b66 +# &alias fr +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x00A3 # POUND SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00B0 # DEGREE SIGN +0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x5D 0x00A7 # SECTION SIGN +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x00B5 # MICRO SIGN +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x7C 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x7E 0x00A8 # DIAERESIS +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-gb.flc b/externals/figlet/fonts/646-gb.flc new file mode 100644 index 0000000000..4e9d648c9b --- /dev/null +++ b/externals/figlet/fonts/646-gb.flc @@ -0,0 +1,157 @@ +# +# Name: BS_4730 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# BS_4730 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the BS_4730 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in BS_4730 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-4 +# &alias ISO646-GB +# &g0esc x2841 &g1esc x2941 &g2esc x2a41 &g3esc x2b41 +# &alias gb +# &alias uk +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x00A3 # POUND SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-hu.flc b/externals/figlet/fonts/646-hu.flc new file mode 100644 index 0000000000..9ad58c31e7 --- /dev/null +++ b/externals/figlet/fonts/646-hu.flc @@ -0,0 +1,156 @@ +# +# Name: MSZ_7795.3 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# MSZ_7795.3 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the MSZ_7795.3 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in MSZ_7795.3 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-86 +# &alias ISO646-HU +# &g0esc x2869 &g1esc x2969 &g2esc x2a69 &g3esc x2b69 +# &alias hu +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A4 # CURRENCY SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x5D 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x7D 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0x7E 0x02DD # DOUBLE ACUTE ACCENT +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-irv.flc b/externals/figlet/fonts/646-irv.flc new file mode 100644 index 0000000000..caf629229c --- /dev/null +++ b/externals/figlet/fonts/646-irv.flc @@ -0,0 +1,155 @@ +# +# Name: ISO_646.irv:1983 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# ISO_646.irv:1983 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO_646.irv:1983 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO_646.irv:1983 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-2 +# &alias irv +# &g0esc x2840 &g1esc x2940 &g2esc x2a40 &g3esc x2b40 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A4 # CURRENCY SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-it.flc b/externals/figlet/fonts/646-it.flc new file mode 100644 index 0000000000..657125bd85 --- /dev/null +++ b/externals/figlet/fonts/646-it.flc @@ -0,0 +1,155 @@ +# +# Name: IT to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# IT characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the IT code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in IT order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-15 +# &alias ISO646-IT +# &g0esc x2859 &g1esc x2959 &g2esc x2a59 &g3esc x2b59 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x00A3 # POUND SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00A7 # SECTION SIGN +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00B0 # DEGREE SIGN +0x5C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x5D 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0x7C 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0x7D 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0x7E 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-jp.flc b/externals/figlet/fonts/646-jp.flc new file mode 100644 index 0000000000..a3bc3513d6 --- /dev/null +++ b/externals/figlet/fonts/646-jp.flc @@ -0,0 +1,156 @@ +# +# Name: JIS_C6220-1969-ro to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# JIS_C6220-1969-ro characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the JIS_C6220-1969-ro code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in JIS_C6220-1969-ro order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-14 +# &g0esc x284a &g1esc x294a &g2esc x2a4a &g3esc x2b4a +# &alias jp +# &alias ISO646-JP +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x00A5 # YEN SIGN +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-kr.flc b/externals/figlet/fonts/646-kr.flc new file mode 100644 index 0000000000..6966895e56 --- /dev/null +++ b/externals/figlet/fonts/646-kr.flc @@ -0,0 +1,152 @@ +# +# Name: KSC5636 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# KSC5636 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the KSC5636 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in KSC5636 order +# +# Any comments or problems, contact +# +# &alias ISO646-KR +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x20A9 # WON SIGN +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-no.flc b/externals/figlet/fonts/646-no.flc new file mode 100644 index 0000000000..3f4776656f --- /dev/null +++ b/externals/figlet/fonts/646-no.flc @@ -0,0 +1,156 @@ +# +# Name: NS_4551-1 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# NS_4551-1 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the NS_4551-1 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in NS_4551-1 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-60 +# &alias ISO646-NO +# &g0esc x2860 &g1esc x2960 &g2esc x2a60 &g3esc x2b60 +# &alias no +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C6 # LATIN CAPITAL LETTER AE +0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E6 # LATIN SMALL LETTER AE +0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-no2.flc b/externals/figlet/fonts/646-no2.flc new file mode 100644 index 0000000000..c5ca075a2c --- /dev/null +++ b/externals/figlet/fonts/646-no2.flc @@ -0,0 +1,156 @@ +# +# Name: NS_4551-2 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# NS_4551-2 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the NS_4551-2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in NS_4551-2 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias ISO646-NO2 +# &alias iso-ir-61 +# &g0esc x2861 &g1esc x2961 &g2esc x2a61 &g3esc x2b61 +# &alias no2 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x00B6 # PILCROW SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C6 # LATIN CAPITAL LETTER AE +0x5C 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E6 # LATIN SMALL LETTER AE +0x7C 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x7E 0x007C # VERTICAL LINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-pt.flc b/externals/figlet/fonts/646-pt.flc new file mode 100644 index 0000000000..37571886c9 --- /dev/null +++ b/externals/figlet/fonts/646-pt.flc @@ -0,0 +1,155 @@ +# +# Name: PT to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# PT characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the PT code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in PT order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-16 +# &alias ISO646-PT +# &g0esc x284c &g1esc x294c &g2esc x2a4c &g3esc x2b4c +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00A7 # SECTION SIGN +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x7E 0x00B0 # DEGREE SIGN +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-pt2.flc b/externals/figlet/fonts/646-pt2.flc new file mode 100644 index 0000000000..8a00e61ec8 --- /dev/null +++ b/externals/figlet/fonts/646-pt2.flc @@ -0,0 +1,155 @@ +# +# Name: PT2 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# PT2 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the PT2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in PT2 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-84 +# &alias ISO646-PT2 +# &g0esc x2867 &g1esc x2967 &g2esc x2a67 &g3esc x2b67 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00B4 # ACUTE ACCENT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0x5C 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0x5D 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0x7C 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0x7D 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-se.flc b/externals/figlet/fonts/646-se.flc new file mode 100644 index 0000000000..424e886a01 --- /dev/null +++ b/externals/figlet/fonts/646-se.flc @@ -0,0 +1,158 @@ +# +# Name: SEN_850200_B to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# SEN_850200_B characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the SEN_850200_B code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in SEN_850200_B order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-10 +# &alias FI +# &alias ISO646-FI +# &alias ISO646-SE +# &alias se +# &g0esc x2847 &g1esc x2947 &g2esc x2a47 &g3esc x2b47 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A4 # CURRENCY SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x7E 0x203E # OVERLINE +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-se2.flc b/externals/figlet/fonts/646-se2.flc new file mode 100644 index 0000000000..38c86cd37c --- /dev/null +++ b/externals/figlet/fonts/646-se2.flc @@ -0,0 +1,156 @@ +# +# Name: SEN_850200_C to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# SEN_850200_C characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the SEN_850200_C code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in SEN_850200_C order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-11 +# &alias ISO646-SE2 +# &g0esc x2848 &g1esc x2948 &g2esc x2a48 &g3esc x2b48 +# &alias se2 +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x00A4 # CURRENCY SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0x5C 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0x5D 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0x5E 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0x5F 0x005F # LOW LINE +0x60 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0x7C 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0x7D 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0x7E 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/646-yu.flc b/externals/figlet/fonts/646-yu.flc new file mode 100644 index 0000000000..6307a6aff4 --- /dev/null +++ b/externals/figlet/fonts/646-yu.flc @@ -0,0 +1,157 @@ +# +# Name: JUS_I.B1.002 to Unicode +# Unicode version: 2.0 +# Table version: 0.1 +# Table format: Format A +# Date: 0097-01-24 +# Authors: John Cowan (conversion) +# Keld Simonsen (RFC 1345) +# +# General notes: +# +# This table contains data obtained from RFC 1345 on how +# JUS_I.B1.002 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the JUS_I.B1.002 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in JUS_I.B1.002 order +# +# Any comments or problems, contact +# +# &rem source: ECMA registry +# &alias iso-ir-141 +# &g0esc x287a &g1esc x297a &g2esc x2a7a &g3esc x2b7a +# &alias ISO646-YU +# &alias js +# &alias yu +0x00 0x0000 # NULL (NUL) +0x01 0x0001 # START OF HEADING (SOH) +0x02 0x0002 # START OF TEXT (STX) +0x03 0x0003 # END OF TEXT (ETX) +0x04 0x0004 # END OF TRANSMISSION (EOT) +0x05 0x0005 # ENQUIRY (ENQ) +0x06 0x0006 # ACKNOWLEDGE (ACK) +0x07 0x0007 # BELL (BEL) +0x08 0x0008 # BACKSPACE (BS) +0x09 0x0009 # CHARACTER TABULATION (HT) +0x0A 0x000A # LINE FEED (LF) +0x0B 0x000B # LINE TABULATION (VT) +0x0C 0x000C # FORM FEED (FF) +0x0D 0x000D # CARRIAGE RETURN (CR) +0x0E 0x000E # SHIFT OUT (SO) +0x0F 0x000F # SHIFT IN (SI) +0x10 0x0010 # DATALINK ESCAPE (DLE) +0x11 0x0011 # DEVICE CONTROL ONE (DC1) +0x12 0x0012 # DEVICE CONTROL TWO (DC2) +0x13 0x0013 # DEVICE CONTROL THREE (DC3) +0x14 0x0014 # DEVICE CONTROL FOUR (DC4) +0x15 0x0015 # NEGATIVE ACKNOWLEDGE (NAK) +0x16 0x0016 # SYNCRONOUS IDLE (SYN) +0x17 0x0017 # END OF TRANSMISSION BLOCK (ETB) +0x18 0x0018 # CANCEL (CAN) +0x19 0x0019 # END OF MEDIUM (EM) +0x1A 0x001A # SUBSTITUTE (SUB) +0x1B 0x001B # ESCAPE (ESC) +0x1C 0x001C # FILE SEPARATOR (IS4) +0x1D 0x001D # GROUP SEPARATOR (IS3) +0x1E 0x001E # RECORD SEPARATOR (IS2) +0x1F 0x001F # UNIT SEPARATOR (IS1) +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0x5C 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0x5D 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0x5E 0x010C # LATIN CAPITAL LETTER C WITH CARON +0x5F 0x005F # LOW LINE +0x60 0x017E # LATIN SMALL LETTER Z WITH CARON +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x0161 # LATIN SMALL LETTER S WITH CARON +0x7C 0x0111 # LATIN SMALL LETTER D WITH STROKE +0x7D 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0x7E 0x010D # LATIN SMALL LETTER C WITH CARON +0x7F 0x007F # DELETE (DEL) diff --git a/externals/figlet/fonts/8859-2.flc b/externals/figlet/fonts/8859-2.flc new file mode 100644 index 0000000000..e45df25eb8 --- /dev/null +++ b/externals/figlet/fonts/8859-2.flc @@ -0,0 +1,303 @@ +# +# Name: ISO 8859-2:1999 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-2:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-2 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x02D8 # BREVE +0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON +0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON +0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xB2 0x02DB # OGONEK +0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x013E # LATIN SMALL LETTER L WITH CARON +0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE +0xB7 0x02C7 # CARON +0xB8 0x00B8 # CEDILLA +0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON +0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE +0xBD 0x02DD # DOUBLE ACUTE ACCENT +0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE +0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE +0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON +0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE +0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE +0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x011B # LATIN SMALL LETTER E WITH CARON +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x010F # LATIN SMALL LETTER D WITH CARON +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE +0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON +0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE +0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA +0xFF 0x02D9 # DOT ABOVE diff --git a/externals/figlet/fonts/8859-3.flc b/externals/figlet/fonts/8859-3.flc new file mode 100644 index 0000000000..9b6ac69dd8 --- /dev/null +++ b/externals/figlet/fonts/8859-3.flc @@ -0,0 +1,296 @@ +# +# Name: ISO/IEC 8859-3:1999 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-3:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-3 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE +0xA2 0x02D8 # BREVE +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE +0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE +0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0xAD 0x00AD # SOFT HYPHEN +0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I +0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE +0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE +0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE +0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE +0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX +0xFF 0x02D9 # DOT ABOVE diff --git a/externals/figlet/fonts/8859-4.flc b/externals/figlet/fonts/8859-4.flc new file mode 100644 index 0000000000..662e698ab2 --- /dev/null +++ b/externals/figlet/fonts/8859-4.flc @@ -0,0 +1,303 @@ +# +# Name: ISO/IEC 8859-4:1998 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-4:1998 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-4 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK +0xA2 0x0138 # LATIN SMALL LETTER KRA +0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE +0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON +0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON +0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA +0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK +0xB2 0x02DB # OGONEK +0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE +0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA +0xB7 0x02C7 # CARON +0xB8 0x00B8 # CEDILLA +0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON +0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON +0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA +0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE +0xBD 0x014A # LATIN CAPITAL LETTER ENG +0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON +0xBF 0x014B # LATIN SMALL LETTER ENG +0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK +0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON +0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE +0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA +0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON +0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE +0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK +0xE8 0x010D # LATIN SMALL LETTER C WITH CARON +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON +0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE +0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA +0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON +0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE +0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON +0xFF 0x02D9 # DOT ABOVE diff --git a/externals/figlet/fonts/8859-5.flc b/externals/figlet/fonts/8859-5.flc new file mode 100644 index 0000000000..a7ed1ce2ab --- /dev/null +++ b/externals/figlet/fonts/8859-5.flc @@ -0,0 +1,303 @@ +# +# Name: ISO 8859-5:1999 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-5:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-5 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO +0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE +0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE +0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE +0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI +0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE +0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE +0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE +0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE +0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U +0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE +0xB0 0x0410 # CYRILLIC CAPITAL LETTER A +0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE +0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE +0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE +0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE +0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE +0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE +0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE +0xB8 0x0418 # CYRILLIC CAPITAL LETTER I +0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I +0xBA 0x041A # CYRILLIC CAPITAL LETTER KA +0xBB 0x041B # CYRILLIC CAPITAL LETTER EL +0xBC 0x041C # CYRILLIC CAPITAL LETTER EM +0xBD 0x041D # CYRILLIC CAPITAL LETTER EN +0xBE 0x041E # CYRILLIC CAPITAL LETTER O +0xBF 0x041F # CYRILLIC CAPITAL LETTER PE +0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER +0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES +0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE +0xC3 0x0423 # CYRILLIC CAPITAL LETTER U +0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF +0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA +0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE +0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE +0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA +0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA +0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN +0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU +0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN +0xCD 0x042D # CYRILLIC CAPITAL LETTER E +0xCE 0x042E # CYRILLIC CAPITAL LETTER YU +0xCF 0x042F # CYRILLIC CAPITAL LETTER YA +0xD0 0x0430 # CYRILLIC SMALL LETTER A +0xD1 0x0431 # CYRILLIC SMALL LETTER BE +0xD2 0x0432 # CYRILLIC SMALL LETTER VE +0xD3 0x0433 # CYRILLIC SMALL LETTER GHE +0xD4 0x0434 # CYRILLIC SMALL LETTER DE +0xD5 0x0435 # CYRILLIC SMALL LETTER IE +0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE +0xD7 0x0437 # CYRILLIC SMALL LETTER ZE +0xD8 0x0438 # CYRILLIC SMALL LETTER I +0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I +0xDA 0x043A # CYRILLIC SMALL LETTER KA +0xDB 0x043B # CYRILLIC SMALL LETTER EL +0xDC 0x043C # CYRILLIC SMALL LETTER EM +0xDD 0x043D # CYRILLIC SMALL LETTER EN +0xDE 0x043E # CYRILLIC SMALL LETTER O +0xDF 0x043F # CYRILLIC SMALL LETTER PE +0xE0 0x0440 # CYRILLIC SMALL LETTER ER +0xE1 0x0441 # CYRILLIC SMALL LETTER ES +0xE2 0x0442 # CYRILLIC SMALL LETTER TE +0xE3 0x0443 # CYRILLIC SMALL LETTER U +0xE4 0x0444 # CYRILLIC SMALL LETTER EF +0xE5 0x0445 # CYRILLIC SMALL LETTER HA +0xE6 0x0446 # CYRILLIC SMALL LETTER TSE +0xE7 0x0447 # CYRILLIC SMALL LETTER CHE +0xE8 0x0448 # CYRILLIC SMALL LETTER SHA +0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA +0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN +0xEB 0x044B # CYRILLIC SMALL LETTER YERU +0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN +0xED 0x044D # CYRILLIC SMALL LETTER E +0xEE 0x044E # CYRILLIC SMALL LETTER YU +0xEF 0x044F # CYRILLIC SMALL LETTER YA +0xF0 0x2116 # NUMERO SIGN +0xF1 0x0451 # CYRILLIC SMALL LETTER IO +0xF2 0x0452 # CYRILLIC SMALL LETTER DJE +0xF3 0x0453 # CYRILLIC SMALL LETTER GJE +0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE +0xF5 0x0455 # CYRILLIC SMALL LETTER DZE +0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0xF7 0x0457 # CYRILLIC SMALL LETTER YI +0xF8 0x0458 # CYRILLIC SMALL LETTER JE +0xF9 0x0459 # CYRILLIC SMALL LETTER LJE +0xFA 0x045A # CYRILLIC SMALL LETTER NJE +0xFB 0x045B # CYRILLIC SMALL LETTER TSHE +0xFC 0x045C # CYRILLIC SMALL LETTER KJE +0xFD 0x00A7 # SECTION SIGN +0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U +0xFF 0x045F # CYRILLIC SMALL LETTER DZHE diff --git a/externals/figlet/fonts/8859-7.flc b/externals/figlet/fonts/8859-7.flc new file mode 100644 index 0000000000..bc46b74719 --- /dev/null +++ b/externals/figlet/fonts/8859-7.flc @@ -0,0 +1,308 @@ +# +# Name: ISO 8859-7:2003 to Unicode +# Unicode version: 4.0 +# Table version: 2.0 +# Table format: Format A +# Date: 2003-Nov-12 +# Authors: Ken Whistler +# +# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO 8859-7:2003 characters map into Unicode. +# +# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928, +# and ECMA 118. ISO 8859-7:2003 adds two currency signs +# and one other character not in the earlier standard. +# +# Format: Three tab-separated columns +# Column #1 is the ISO 8859-7 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO 8859-7 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7 +# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7 +# +# 2.0 version updates 1.0 version by adding mappings for the +# three newly added characters 0xA4, 0xA5, 0xAA. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact the Unicode Consortium at: +# +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x2018 # LEFT SINGLE QUOTATION MARK +0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK +0xA3 0x00A3 # POUND SIGN +0xA4 0x20AC # EURO SIGN +0xA5 0x20AF # DRACHMA SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x037A # GREEK YPOGEGRAMMENI +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAF 0x2015 # HORIZONTAL BAR +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x0384 # GREEK TONOS +0xB5 0x0385 # GREEK DIALYTIKA TONOS +0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS +0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS +0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS +0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS +0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA +0xC2 0x0392 # GREEK CAPITAL LETTER BETA +0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA +0xC4 0x0394 # GREEK CAPITAL LETTER DELTA +0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON +0xC6 0x0396 # GREEK CAPITAL LETTER ZETA +0xC7 0x0397 # GREEK CAPITAL LETTER ETA +0xC8 0x0398 # GREEK CAPITAL LETTER THETA +0xC9 0x0399 # GREEK CAPITAL LETTER IOTA +0xCA 0x039A # GREEK CAPITAL LETTER KAPPA +0xCB 0x039B # GREEK CAPITAL LETTER LAMDA +0xCC 0x039C # GREEK CAPITAL LETTER MU +0xCD 0x039D # GREEK CAPITAL LETTER NU +0xCE 0x039E # GREEK CAPITAL LETTER XI +0xCF 0x039F # GREEK CAPITAL LETTER OMICRON +0xD0 0x03A0 # GREEK CAPITAL LETTER PI +0xD1 0x03A1 # GREEK CAPITAL LETTER RHO +0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA +0xD4 0x03A4 # GREEK CAPITAL LETTER TAU +0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON +0xD6 0x03A6 # GREEK CAPITAL LETTER PHI +0xD7 0x03A7 # GREEK CAPITAL LETTER CHI +0xD8 0x03A8 # GREEK CAPITAL LETTER PSI +0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA +0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS +0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS +0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS +0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS +0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +0xE1 0x03B1 # GREEK SMALL LETTER ALPHA +0xE2 0x03B2 # GREEK SMALL LETTER BETA +0xE3 0x03B3 # GREEK SMALL LETTER GAMMA +0xE4 0x03B4 # GREEK SMALL LETTER DELTA +0xE5 0x03B5 # GREEK SMALL LETTER EPSILON +0xE6 0x03B6 # GREEK SMALL LETTER ZETA +0xE7 0x03B7 # GREEK SMALL LETTER ETA +0xE8 0x03B8 # GREEK SMALL LETTER THETA +0xE9 0x03B9 # GREEK SMALL LETTER IOTA +0xEA 0x03BA # GREEK SMALL LETTER KAPPA +0xEB 0x03BB # GREEK SMALL LETTER LAMDA +0xEC 0x03BC # GREEK SMALL LETTER MU +0xED 0x03BD # GREEK SMALL LETTER NU +0xEE 0x03BE # GREEK SMALL LETTER XI +0xEF 0x03BF # GREEK SMALL LETTER OMICRON +0xF0 0x03C0 # GREEK SMALL LETTER PI +0xF1 0x03C1 # GREEK SMALL LETTER RHO +0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA +0xF3 0x03C3 # GREEK SMALL LETTER SIGMA +0xF4 0x03C4 # GREEK SMALL LETTER TAU +0xF5 0x03C5 # GREEK SMALL LETTER UPSILON +0xF6 0x03C6 # GREEK SMALL LETTER PHI +0xF7 0x03C7 # GREEK SMALL LETTER CHI +0xF8 0x03C8 # GREEK SMALL LETTER PSI +0xF9 0x03C9 # GREEK SMALL LETTER OMEGA +0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA +0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS +0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS +0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS diff --git a/externals/figlet/fonts/8859-8.flc b/externals/figlet/fonts/8859-8.flc new file mode 100644 index 0000000000..bc8da4c7fd --- /dev/null +++ b/externals/figlet/fonts/8859-8.flc @@ -0,0 +1,270 @@ +# +# Name: ISO/IEC 8859-8:1999 to Unicode +# Unicode version: 3.0 +# Table version: 1.1 +# Table format: Format A +# Date: 2000-Jan-03 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on optical media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-8:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-8 order. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# 1.1 version updates to the published 8859-8:1999, correcting +# the mapping of 0xAF and adding mappings for LRM and RLM. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00D7 # MULTIPLICATION SIGN +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00F7 # DIVISION SIGN +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xDF 0x2017 # DOUBLE LOW LINE +0xE0 0x05D0 # HEBREW LETTER ALEF +0xE1 0x05D1 # HEBREW LETTER BET +0xE2 0x05D2 # HEBREW LETTER GIMEL +0xE3 0x05D3 # HEBREW LETTER DALET +0xE4 0x05D4 # HEBREW LETTER HE +0xE5 0x05D5 # HEBREW LETTER VAV +0xE6 0x05D6 # HEBREW LETTER ZAYIN +0xE7 0x05D7 # HEBREW LETTER HET +0xE8 0x05D8 # HEBREW LETTER TET +0xE9 0x05D9 # HEBREW LETTER YOD +0xEA 0x05DA # HEBREW LETTER FINAL KAF +0xEB 0x05DB # HEBREW LETTER KAF +0xEC 0x05DC # HEBREW LETTER LAMED +0xED 0x05DD # HEBREW LETTER FINAL MEM +0xEE 0x05DE # HEBREW LETTER MEM +0xEF 0x05DF # HEBREW LETTER FINAL NUN +0xF0 0x05E0 # HEBREW LETTER NUN +0xF1 0x05E1 # HEBREW LETTER SAMEKH +0xF2 0x05E2 # HEBREW LETTER AYIN +0xF3 0x05E3 # HEBREW LETTER FINAL PE +0xF4 0x05E4 # HEBREW LETTER PE +0xF5 0x05E5 # HEBREW LETTER FINAL TSADI +0xF6 0x05E6 # HEBREW LETTER TSADI +0xF7 0x05E7 # HEBREW LETTER QOF +0xF8 0x05E8 # HEBREW LETTER RESH +0xF9 0x05E9 # HEBREW LETTER SHIN +0xFA 0x05EA # HEBREW LETTER TAV +0xFD 0x200E # LEFT-TO-RIGHT MARK +0xFE 0x200F # RIGHT-TO-LEFT MARK + diff --git a/externals/figlet/fonts/8859-9.flc b/externals/figlet/fonts/8859-9.flc new file mode 100644 index 0000000000..22901f1077 --- /dev/null +++ b/externals/figlet/fonts/8859-9.flc @@ -0,0 +1,307 @@ +# +# Name: ISO/IEC 8859-9:1999 to Unicode +# Unicode version: 3.0 +# Table version: 1.0 +# Table format: Format A +# Date: 1999 July 27 +# Authors: Ken Whistler +# +# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved. +# +# This file is provided as-is by Unicode, Inc. (The Unicode Consortium). +# No claims are made as to fitness for any particular purpose. No +# warranties of any kind are expressed or implied. The recipient +# agrees to determine applicability of information provided. If this +# file has been provided on magnetic media by Unicode, Inc., the sole +# remedy for any claim will be exchange of defective media within 90 +# days of receipt. +# +# Unicode, Inc. hereby grants the right to freely use the information +# supplied in this file in the creation of products supporting the +# Unicode Standard, and to make copies of this file in any form for +# internal or external distribution as long as this notice remains +# attached. +# +# General notes: +# +# This table contains the data the Unicode Consortium has on how +# ISO/IEC 8859-9:1999 characters map into Unicode. +# +# Format: Three tab-separated columns +# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX) +# Column #2 is the Unicode (in hex as 0xXXXX) +# Column #3 the Unicode name (follows a comment sign, '#') +# +# The entries are in ISO/IEC 8859-9 order. +# +# ISO/IEC 8859-9 is also equivalent to ISO-IR-148. +# +# Version history +# 1.0 version updates 0.1 version by adding mappings for all +# control characters. +# +# Updated versions of this file may be found in: +# +# +# Any comments or problems, contact +# Please note that is an archival address; +# notices will be checked, but do not expect an immediate response. +# +0x00 0x0000 # NULL +0x01 0x0001 # START OF HEADING +0x02 0x0002 # START OF TEXT +0x03 0x0003 # END OF TEXT +0x04 0x0004 # END OF TRANSMISSION +0x05 0x0005 # ENQUIRY +0x06 0x0006 # ACKNOWLEDGE +0x07 0x0007 # BELL +0x08 0x0008 # BACKSPACE +0x09 0x0009 # HORIZONTAL TABULATION +0x0A 0x000A # LINE FEED +0x0B 0x000B # VERTICAL TABULATION +0x0C 0x000C # FORM FEED +0x0D 0x000D # CARRIAGE RETURN +0x0E 0x000E # SHIFT OUT +0x0F 0x000F # SHIFT IN +0x10 0x0010 # DATA LINK ESCAPE +0x11 0x0011 # DEVICE CONTROL ONE +0x12 0x0012 # DEVICE CONTROL TWO +0x13 0x0013 # DEVICE CONTROL THREE +0x14 0x0014 # DEVICE CONTROL FOUR +0x15 0x0015 # NEGATIVE ACKNOWLEDGE +0x16 0x0016 # SYNCHRONOUS IDLE +0x17 0x0017 # END OF TRANSMISSION BLOCK +0x18 0x0018 # CANCEL +0x19 0x0019 # END OF MEDIUM +0x1A 0x001A # SUBSTITUTE +0x1B 0x001B # ESCAPE +0x1C 0x001C # FILE SEPARATOR +0x1D 0x001D # GROUP SEPARATOR +0x1E 0x001E # RECORD SEPARATOR +0x1F 0x001F # UNIT SEPARATOR +0x20 0x0020 # SPACE +0x21 0x0021 # EXCLAMATION MARK +0x22 0x0022 # QUOTATION MARK +0x23 0x0023 # NUMBER SIGN +0x24 0x0024 # DOLLAR SIGN +0x25 0x0025 # PERCENT SIGN +0x26 0x0026 # AMPERSAND +0x27 0x0027 # APOSTROPHE +0x28 0x0028 # LEFT PARENTHESIS +0x29 0x0029 # RIGHT PARENTHESIS +0x2A 0x002A # ASTERISK +0x2B 0x002B # PLUS SIGN +0x2C 0x002C # COMMA +0x2D 0x002D # HYPHEN-MINUS +0x2E 0x002E # FULL STOP +0x2F 0x002F # SOLIDUS +0x30 0x0030 # DIGIT ZERO +0x31 0x0031 # DIGIT ONE +0x32 0x0032 # DIGIT TWO +0x33 0x0033 # DIGIT THREE +0x34 0x0034 # DIGIT FOUR +0x35 0x0035 # DIGIT FIVE +0x36 0x0036 # DIGIT SIX +0x37 0x0037 # DIGIT SEVEN +0x38 0x0038 # DIGIT EIGHT +0x39 0x0039 # DIGIT NINE +0x3A 0x003A # COLON +0x3B 0x003B # SEMICOLON +0x3C 0x003C # LESS-THAN SIGN +0x3D 0x003D # EQUALS SIGN +0x3E 0x003E # GREATER-THAN SIGN +0x3F 0x003F # QUESTION MARK +0x40 0x0040 # COMMERCIAL AT +0x41 0x0041 # LATIN CAPITAL LETTER A +0x42 0x0042 # LATIN CAPITAL LETTER B +0x43 0x0043 # LATIN CAPITAL LETTER C +0x44 0x0044 # LATIN CAPITAL LETTER D +0x45 0x0045 # LATIN CAPITAL LETTER E +0x46 0x0046 # LATIN CAPITAL LETTER F +0x47 0x0047 # LATIN CAPITAL LETTER G +0x48 0x0048 # LATIN CAPITAL LETTER H +0x49 0x0049 # LATIN CAPITAL LETTER I +0x4A 0x004A # LATIN CAPITAL LETTER J +0x4B 0x004B # LATIN CAPITAL LETTER K +0x4C 0x004C # LATIN CAPITAL LETTER L +0x4D 0x004D # LATIN CAPITAL LETTER M +0x4E 0x004E # LATIN CAPITAL LETTER N +0x4F 0x004F # LATIN CAPITAL LETTER O +0x50 0x0050 # LATIN CAPITAL LETTER P +0x51 0x0051 # LATIN CAPITAL LETTER Q +0x52 0x0052 # LATIN CAPITAL LETTER R +0x53 0x0053 # LATIN CAPITAL LETTER S +0x54 0x0054 # LATIN CAPITAL LETTER T +0x55 0x0055 # LATIN CAPITAL LETTER U +0x56 0x0056 # LATIN CAPITAL LETTER V +0x57 0x0057 # LATIN CAPITAL LETTER W +0x58 0x0058 # LATIN CAPITAL LETTER X +0x59 0x0059 # LATIN CAPITAL LETTER Y +0x5A 0x005A # LATIN CAPITAL LETTER Z +0x5B 0x005B # LEFT SQUARE BRACKET +0x5C 0x005C # REVERSE SOLIDUS +0x5D 0x005D # RIGHT SQUARE BRACKET +0x5E 0x005E # CIRCUMFLEX ACCENT +0x5F 0x005F # LOW LINE +0x60 0x0060 # GRAVE ACCENT +0x61 0x0061 # LATIN SMALL LETTER A +0x62 0x0062 # LATIN SMALL LETTER B +0x63 0x0063 # LATIN SMALL LETTER C +0x64 0x0064 # LATIN SMALL LETTER D +0x65 0x0065 # LATIN SMALL LETTER E +0x66 0x0066 # LATIN SMALL LETTER F +0x67 0x0067 # LATIN SMALL LETTER G +0x68 0x0068 # LATIN SMALL LETTER H +0x69 0x0069 # LATIN SMALL LETTER I +0x6A 0x006A # LATIN SMALL LETTER J +0x6B 0x006B # LATIN SMALL LETTER K +0x6C 0x006C # LATIN SMALL LETTER L +0x6D 0x006D # LATIN SMALL LETTER M +0x6E 0x006E # LATIN SMALL LETTER N +0x6F 0x006F # LATIN SMALL LETTER O +0x70 0x0070 # LATIN SMALL LETTER P +0x71 0x0071 # LATIN SMALL LETTER Q +0x72 0x0072 # LATIN SMALL LETTER R +0x73 0x0073 # LATIN SMALL LETTER S +0x74 0x0074 # LATIN SMALL LETTER T +0x75 0x0075 # LATIN SMALL LETTER U +0x76 0x0076 # LATIN SMALL LETTER V +0x77 0x0077 # LATIN SMALL LETTER W +0x78 0x0078 # LATIN SMALL LETTER X +0x79 0x0079 # LATIN SMALL LETTER Y +0x7A 0x007A # LATIN SMALL LETTER Z +0x7B 0x007B # LEFT CURLY BRACKET +0x7C 0x007C # VERTICAL LINE +0x7D 0x007D # RIGHT CURLY BRACKET +0x7E 0x007E # TILDE +0x7F 0x007F # DELETE +0x80 0x0080 # +0x81 0x0081 # +0x82 0x0082 # +0x83 0x0083 # +0x84 0x0084 # +0x85 0x0085 # +0x86 0x0086 # +0x87 0x0087 # +0x88 0x0088 # +0x89 0x0089 # +0x8A 0x008A # +0x8B 0x008B # +0x8C 0x008C # +0x8D 0x008D # +0x8E 0x008E # +0x8F 0x008F # +0x90 0x0090 # +0x91 0x0091 # +0x92 0x0092 # +0x93 0x0093 # +0x94 0x0094 # +0x95 0x0095 # +0x96 0x0096 # +0x97 0x0097 # +0x98 0x0098 # +0x99 0x0099 # +0x9A 0x009A # +0x9B 0x009B # +0x9C 0x009C # +0x9D 0x009D # +0x9E 0x009E # +0x9F 0x009F # +0xA0 0x00A0 # NO-BREAK SPACE +0xA1 0x00A1 # INVERTED EXCLAMATION MARK +0xA2 0x00A2 # CENT SIGN +0xA3 0x00A3 # POUND SIGN +0xA4 0x00A4 # CURRENCY SIGN +0xA5 0x00A5 # YEN SIGN +0xA6 0x00A6 # BROKEN BAR +0xA7 0x00A7 # SECTION SIGN +0xA8 0x00A8 # DIAERESIS +0xA9 0x00A9 # COPYRIGHT SIGN +0xAA 0x00AA # FEMININE ORDINAL INDICATOR +0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +0xAC 0x00AC # NOT SIGN +0xAD 0x00AD # SOFT HYPHEN +0xAE 0x00AE # REGISTERED SIGN +0xAF 0x00AF # MACRON +0xB0 0x00B0 # DEGREE SIGN +0xB1 0x00B1 # PLUS-MINUS SIGN +0xB2 0x00B2 # SUPERSCRIPT TWO +0xB3 0x00B3 # SUPERSCRIPT THREE +0xB4 0x00B4 # ACUTE ACCENT +0xB5 0x00B5 # MICRO SIGN +0xB6 0x00B6 # PILCROW SIGN +0xB7 0x00B7 # MIDDLE DOT +0xB8 0x00B8 # CEDILLA +0xB9 0x00B9 # SUPERSCRIPT ONE +0xBA 0x00BA # MASCULINE ORDINAL INDICATOR +0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +0xBC 0x00BC # VULGAR FRACTION ONE QUARTER +0xBD 0x00BD # VULGAR FRACTION ONE HALF +0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS +0xBF 0x00BF # INVERTED QUESTION MARK +0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE +0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE +0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE +0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +0xC6 0x00C6 # LATIN CAPITAL LETTER AE +0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE +0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE +0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE +0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE +0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE +0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE +0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE +0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE +0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE +0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +0xD7 0x00D7 # MULTIPLICATION SIGN +0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE +0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE +0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE +0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE +0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA +0xDF 0x00DF # LATIN SMALL LETTER SHARP S +0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE +0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE +0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE +0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS +0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE +0xE6 0x00E6 # LATIN SMALL LETTER AE +0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA +0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE +0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE +0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS +0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE +0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE +0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS +0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE +0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE +0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE +0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE +0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE +0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS +0xF7 0x00F7 # DIVISION SIGN +0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE +0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE +0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE +0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS +0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I +0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA +0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS + + diff --git a/externals/figlet/fonts/banner.flf b/externals/figlet/fonts/banner.flf new file mode 100644 index 0000000000..8fc3489f20 --- /dev/null +++ b/externals/figlet/fonts/banner.flf @@ -0,0 +1,2494 @@ +flf2a$ 8 7 54 0 12 0 64 185 +banner.flf version 2 by Ryan Youck (youck@cs.uregina.ca) +(From a unix program called banner) +I am not responsible for use of this font +Thanks to Glenn Chappell for his help +Katakana characters by Vinney Thai +Cyrillic characters from "koi8x8" BDF font. +Date: August 11, 1994 + +Merged by John Cowan +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@@ + ###$@ + ###$@ + ###$@ + # $@ + $@ + ###$@ + ###$@ + $@@ + ### ###$@ + ### ###$@ + # # $@ + $ $@ + $ $@ + $@ + $@ + $@@ + # # $@ + # # $@ + #######$@ + # # $@ + #######$@ + # # $@ + # # $@ + $@@ + ##### $@ + # # #$@ + # # $@ + ##### $@ + # #$@ + # # #$@ + ##### $@ + $@@ + ### #$@ + # # # $@ + ### # $@ + # $@ + # ###$@ + # # #$@ + # ###$@ + $@@ + ## $@ + # # $@ + ## $@ + ### $@ + # # #$@ + # # $@ + ### #$@ + $@@ + ###$@ + ###$@ + # $@ + # $@ + $@ + $@ + $@ + $@@ + ##$@ + # $@ + # $@ + # $@ + # $@ + # $@ + ##$@ + $@@ + ## $@ + # $@ + #$@ + #$@ + #$@ + # $@ + ## $@ + $@@ + $@ + # # $@ + # # $@ + #######$@ + # # $@ + # # $@ + $@ + $@@ + $@ + # $@ + # $@ + #####$@ + # $@ + # $@ + $@ + $@@ + $@ + $@ + $@ + $@ + ###$@ + ###$@ + # $@ + # $@@ + $@ + $@ + $@ + #####$@ + $@ + $@ + $@ + $@@ + $@ + $@ + $@ + $@ + ###$@ + ###$@ + ###$@ + $@@ + #$@ + # $@ + # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + ### $@ + # # $@ + # #$@ + # #$@ + # #$@ + # # $@ + ### $@ + $@@ + # $@ + ## $@ + # # $@ + # $@ + # $@ + # $@ + #####$@ + $@@ + ##### $@ + # #$@ + #$@ + ##### $@ + # $@ + # $@ + #######$@ + $@@ + ##### $@ + # #$@ + #$@ + ##### $@ + #$@ + # #$@ + ##### $@ + $@@ + # $@ + # # $@ + # # $@ + # # $@ + #######$@ + # $@ + # $@ + $@@ + #######$@ + # $@ + # $@ + ###### $@ + #$@ + # #$@ + ##### $@ + $@@ + ##### $@ + # #$@ + # $@ + ###### $@ + # #$@ + # #$@ + ##### $@ + $@@ + #######$@ + # # $@ + # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + ##### $@ + # #$@ + # #$@ + ##### $@ + # #$@ + # #$@ + ##### $@ + $@@ + ##### $@ + # #$@ + # #$@ + ######$@ + #$@ + # #$@ + ##### $@ + $@@ + # $@ + ###$@ + # $@ + $@ + # $@ + ###$@ + # $@ + $@@ + $@ + ###$@ + ###$@ + $@ + ###$@ + ###$@ + # $@ + # $@@ + #$@ + # $@ + # $@ + # $@ + # $@ + # $@ + #$@ + $@@ + $@ + $@ + #####$@ + $@ + #####$@ + $@ + $@ + $@@ + # $@ + # $@ + # $@ + #$@ + # $@ + # $@ + # $@ + $@@ + ##### $@ + # #$@ + #$@ + ### $@ + # $@ + $@ + # $@ + $@@ + ##### $@ + # #$@ + # ### #$@ + # ### #$@ + # #### $@ + # $@ + ##### $@ + $@@ + # $@ + # # $@ + # # $@ + # #$@ + #######$@ + # #$@ + # #$@ + $@@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # #$@ + # #$@ + ###### $@ + $@@ + ##### $@ + # #$@ + # $@ + # $@ + # $@ + # #$@ + ##### $@ + $@@ + ###### $@ + # #$@ + # #$@ + # #$@ + # #$@ + # #$@ + ###### $@ + $@@ + #######$@ + # $@ + # $@ + ##### $@ + # $@ + # $@ + #######$@ + $@@ + #######$@ + # $@ + # $@ + ##### $@ + # $@ + # $@ + # $@ + $@@ + ##### $@ + # #$@ + # $@ + # ####$@ + # #$@ + # #$@ + ##### $@ + $@@ + # #$@ + # #$@ + # #$@ + #######$@ + # #$@ + # #$@ + # #$@ + $@@ + ###$@ + # $@ + # $@ + # $@ + # $@ + # $@ + ###$@ + $@@ + #$@ + #$@ + #$@ + #$@ + # #$@ + # #$@ + ##### $@ + $@@ + # #$@ + # # $@ + # # $@ + ### $@ + # # $@ + # # $@ + # #$@ + $@@ + # $@ + # $@ + # $@ + # $@ + # $@ + # $@ + #######$@ + $@@ + # #$@ + ## ##$@ + # # # #$@ + # # #$@ + # #$@ + # #$@ + # #$@ + $@@ + # #$@ + ## #$@ + # # #$@ + # # #$@ + # # #$@ + # ##$@ + # #$@ + $@@ + #######$@ + # #$@ + # #$@ + # #$@ + # #$@ + # #$@ + #######$@ + $@@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # $@ + # $@ + # $@ + $@@ + ##### $@ + # #$@ + # #$@ + # #$@ + # # #$@ + # # $@ + #### #$@ + $@@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # # $@ + # # $@ + # #$@ + $@@ + ##### $@ + # #$@ + # $@ + ##### $@ + #$@ + # #$@ + ##### $@ + $@@ + #######$@ + # $@ + # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + # #$@ + # #$@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ + # #$@ + # #$@ + # #$@ + # #$@ + # # $@ + # # $@ + # $@ + $@@ + # #$@ + # # #$@ + # # #$@ + # # #$@ + # # #$@ + # # #$@ + ## ## $@ + $@@ + # #$@ + # # $@ + # # $@ + # $@ + # # $@ + # # $@ + # #$@ + $@@ + # #$@ + # # $@ + # # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + #######$@ + # $@ + # $@ + # $@ + # $@ + # $@ + #######$@ + $@@ + #####$@ + # $@ + # $@ + # $@ + # $@ + # $@ + #####$@ + $@@ + # $@ + # $@ + # $@ + # $@ + # $@ + # $@ + #$@ + $@@ + #####$@ + #$@ + #$@ + #$@ + #$@ + #$@ + #####$@ + $@@ + # $@ + # # $@ + # #$@ + $@ + $@ + $@ + $@ + $@@ + $@ + $@ + $@ + $@ + $@ + $@ + $@ + #######$@@ + ###$@ + ###$@ + # $@ + #$@ + $@ + $@ + $@ + $@@ + $@ + ## $@ + # # $@ + # #$@ + ######$@ + # #$@ + # #$@ + $@@ + $@ + ##### $@ + # #$@ + ##### $@ + # #$@ + # #$@ + ##### $@ + $@@ + $@ + #### $@ + # #$@ + # $@ + # $@ + # #$@ + #### $@ + $@@ + $@ + ##### $@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ + $@ + ######$@ + # $@ + ##### $@ + # $@ + # $@ + ######$@ + $@@ + $@ + ######$@ + # $@ + ##### $@ + # $@ + # $@ + # $@ + $@@ + $@ + #### $@ + # #$@ + # $@ + # ###$@ + # #$@ + #### $@ + $@@ + $@ + # #$@ + # #$@ + ######$@ + # #$@ + # #$@ + # #$@ + $@@ + $@ + #$@ + #$@ + #$@ + #$@ + #$@ + #$@ + $@@ + $@ + #$@ + #$@ + #$@ + #$@ + # #$@ + #### $@ + $@@ + $@ + # #$@ + # # $@ + #### $@ + # # $@ + # # $@ + # #$@ + $@@ + $@ + # $@ + # $@ + # $@ + # $@ + # $@ + ######$@ + $@@ + $@ + # #$@ + ## ##$@ + # ## #$@ + # #$@ + # #$@ + # #$@ + $@@ + $@ + # #$@ + ## #$@ + # # #$@ + # # #$@ + # ##$@ + # #$@ + $@@ + $@ + #### $@ + # #$@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ + $@ + ##### $@ + # #$@ + # #$@ + ##### $@ + # $@ + # $@ + $@@ + $@ + #### $@ + # #$@ + # #$@ + # # #$@ + # # $@ + ### #$@ + $@@ + $@ + ##### $@ + # #$@ + # #$@ + ##### $@ + # # $@ + # #$@ + $@@ + $@ + #### $@ + # $@ + #### $@ + #$@ + # #$@ + #### $@ + $@@ + $@ + #####$@ + # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + $@ + # #$@ + # #$@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ + $@ + # #$@ + # #$@ + # #$@ + # #$@ + # # $@ + ## $@ + $@@ + $@ + # #$@ + # #$@ + # #$@ + # ## #$@ + ## ##$@ + # #$@ + $@@ + $@ + # #$@ + # # $@ + ## $@ + ## $@ + # # $@ + # #$@ + $@@ + $@ + # #$@ + # # $@ + # $@ + # $@ + # $@ + # $@ + $@@ + $@ + ######$@ + # $@ + # $@ + # $@ + # $@ + ######$@ + $@@ + ###$@ + # $@ + # $@ + ## $@ + # $@ + # $@ + ###$@ + $@@ + #$@ + #$@ + #$@ + $@ + #$@ + #$@ + #$@ + $@@ + ### $@ + # $@ + # $@ + ##$@ + # $@ + # $@ + ### $@ + $@@ + ## $@ + # # #$@ + ## $@ + $@ + $@ + $@ + $@ + $@@ + # # #$@ + # # $@ + # # $@ + # #$@ + #######$@ + # #$@ + # #$@ + $@@ + # #$@ + ##### $@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ + # #$@ + $@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ + $@ + # #$@ + #### $@ + # #$@ + ######$@ + # #$@ + # #$@ + $@@ + $@ + # #$@ + #### $@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ + $@ + # #$@ + $@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # $@@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + ########$@ + ## $@ + ## $@ + ## $@@ +169 COPYRIGHT SIGN + $@ + $@ + $@ + $@ + $@ + $@ + $@ + $@@ +176 DEGREE SIGN + $@ + $@ + $@ + $@ + ########$@ + $@ + $@ + $@@ +178 SUPERSCRIPT TWO + ## $@ + ## $@ + ## $@ + ## $@ + ########$@ + ## $@ + ## $@ + ## $@@ +183 MIDDLE DOT + ## $@ + ## $@ + #####$@ + ## $@ + #####$@ + ## $@ + ## $@ + ## $@@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + # # #$@ + # # $@ + # # $@ + # #$@ + #######$@ + # #$@ + # #$@ + $@@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + # #$@ + ##### $@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + # #$@ + $@ + # #$@ + # #$@ + # #$@ + # #$@ + ##### $@ + $@@ +223 LATIN SMALL LETTER SHARP S + ###### $@ + # #$@ + # #$@ + ###### $@ + # #$@ + # #$@ + ###### $@ + # $@@ +228 LATIN SMALL LETTER A WITH DIAERESIS + $@ + # #$@ + #### $@ + # #$@ + ######$@ + # #$@ + # #$@ + $@@ +246 LATIN SMALL LETTER O WITH DIAERESIS + $@ + # #$@ + #### $@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ +247 DIVISION SIGN + #### $@ + #### $@ + #### $@ + #### $@ + #####$@ + #### $@ + #### $@ + #### $@@ +252 LATIN SMALL LETTER U WITH DIAERESIS + $@ + # #$@ + $@ + # #$@ + # #$@ + # #$@ + #### $@ + $@@ +0x0401 CYRILLIC CAPITAL LETTER IO + ########$@ + ########$@ + ########$@ + ########$@ + ########$@ + ########$@ + ########$@ + ########$@@ +0x0410 CYRILLIC CAPITAL LETTER A + ####$@ + ## ##$@ + ## ##$@ + ## ##$@ + #######$@ + ## ##$@ + ## ##$@ + $@@ +0x0411 CYRILLIC CAPITAL LETTER BE + #######$@ + ## $@ + ## $@ + ###### $@ + ## ##$@ + ## ##$@ + ###### $@ + $@@ +0x0412 CYRILLIC CAPITAL LETTER VE + ###### $@ + ## ##$@ + ## ##$@ + ###### $@ + ## ##$@ + ## ##$@ + ###### $@ + $@@ +0x0413 CYRILLIC CAPITAL LETTER GHE + #######$@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x0414 CYRILLIC CAPITAL LETTER DE + #### $@ + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + #######$@ + ## ##$@ + $@@ +0x0415 CYRILLIC CAPITAL LETTER IE + #######$@ + ## $@ + ## $@ + ###### $@ + ## $@ + ## $@ + #######$@ + $@@ +0x0416 CYRILLIC CAPITAL LETTER ZHE + ## # ##$@ + # # # $@ + ### $@ + ### $@ + # # # $@ + # # # $@ + ## # ##$@ + $@@ +0x0417 CYRILLIC CAPITAL LETTER ZE + ##### $@ + ## ##$@ + ##$@ + ## $@ + ##$@ + ## ##$@ + ##### $@ + $@@ +0x0418 CYRILLIC CAPITAL LETTER I + ## ##$@ + ## ###$@ + ## ###$@ + ## # ##$@ + ### ##$@ + ## ##$@ + ## ##$@ + $@@ +0x0419 CYRILLIC CAPITAL LETTER SHORT I + ## ## #$@ + ## ##$@ + ## ###$@ + ## # ##$@ + ### ##$@ + ## ##$@ + ## ##$@ + $@@ +0x041A CYRILLIC CAPITAL LETTER KA + ## ##$@ + ## ## $@ + ## ## $@ + ##### $@ + ## ## $@ + ## ##$@ + ## ##$@ + $@@ +0x041B CYRILLIC CAPITAL LETTER EL + #####$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x041C CYRILLIC CAPITAL LETTER EM + ## ##$@ + ## ##$@ + ### ###$@ + ## # ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x041D CYRILLIC CAPITAL LETTER EN + ## ##$@ + ## ##$@ + ## ##$@ + #######$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x041E CYRILLIC CAPITAL LETTER O + ##### $@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ##### $@ + $@@ +0x041F CYRILLIC CAPITAL LETTER PE + #######$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x0420 CYRILLIC CAPITAL LETTER ER + ###### $@ + ## ##$@ + ## ##$@ + ###### $@ + ## $@ + ## $@ + ## $@ + $@@ +0x0421 CYRILLIC CAPITAL LETTER ES + ##### $@ + ## ##$@ + ## $@ + ## $@ + ## $@ + ## ##$@ + ##### $@ + $@@ +0x0422 CYRILLIC CAPITAL LETTER TE + ###### $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x0423 CYRILLIC CAPITAL LETTER U + ## ##$@ + ## ##$@ + ## ##$@ + ######$@ + ##$@ + ## ##$@ + ##### $@ + $@@ +0x0424 CYRILLIC CAPITAL LETTER EF + # $@ + ##### $@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ##### $@ + # $@ + $@@ +0x0425 CYRILLIC CAPITAL LETTER HA + ## ##$@ + ## ## $@ + ### $@ + ### $@ + ### $@ + ## ## $@ + ## ##$@ + $@@ +0x0426 CYRILLIC CAPITAL LETTER TSE + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + #######$@ + #$@@ +0x0427 CYRILLIC CAPITAL LETTER CHE + ## ##$@ + ## ##$@ + ## ##$@ + ######$@ + ##$@ + ##$@ + ##$@ + $@@ +0x0428 CYRILLIC CAPITAL LETTER SHA + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + #######$@ + $@@ +0x0429 CYRILLIC CAPITAL LETTER SHCHA + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + #######$@ + #$@@ +0x042A CYRILLIC CAPITAL LETTER HARD SIGN + ### $@ + ### $@ + ## $@ + ##### $@ + ## ##$@ + ## ##$@ + ##### $@ + $@@ +0x042B CYRILLIC CAPITAL LETTER YERU + ## ##$@ + ## ##$@ + ## ##$@ + #### #$@ + ## # #$@ + ## # #$@ + #### #$@ + $@@ +0x042C CYRILLIC CAPITAL LETTER SOFT SIGN + ## $@ + ## $@ + ## $@ + ###### $@ + ## ##$@ + ## ##$@ + ###### $@ + $@@ +0x042D CYRILLIC CAPITAL LETTER E + ##### $@ + ## ##$@ + ##$@ + #####$@ + ##$@ + ## ##$@ + ##### $@ + $@@ +0x042E CYRILLIC CAPITAL LETTER YU + ## ## $@ + ## # ##$@ + ## # ##$@ + #### ##$@ + ## # ##$@ + ## # ##$@ + ## ## $@ + $@@ +0x042F CYRILLIC CAPITAL LETTER YA + #####$@ + ## ##$@ + ## ##$@ + #####$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x0430 CYRILLIC SMALL LETTER A + $@ + $@ + #### $@ + ## $@ + ##### $@ + ## ## $@ + ######$@ + $@@ +0x0431 CYRILLIC SMALL LETTER BE + $@ + ## $@ + #### $@ + ## $@ + ###### $@ + ## ##$@ + ##### $@ + $@@ +0x0432 CYRILLIC SMALL LETTER VE + $@ + $@ + ##### $@ + ## ## $@ + ###### $@ + ## ##$@ + ###### $@ + $@@ +0x0433 CYRILLIC SMALL LETTER GHE + $@ + $@ + ##### $@ + ##$@ + ##### $@ + ## $@ + ######$@ + $@@ +0x0434 CYRILLIC SMALL LETTER DE + $@ + #### $@ + ##$@ + #####$@ + ## ##$@ + ## ##$@ + ##### $@ + $@@ +0x0435 CYRILLIC SMALL LETTER IE + $@ + $@ + ##### $@ + ## ##$@ + ###### $@ + ## $@ + ##### $@ + $@@ +0x0436 CYRILLIC SMALL LETTER ZHE + $@ + $@ + ## # ##$@ + # # # $@ + ### $@ + # # # $@ + ## # ##$@ + $@@ +0x0437 CYRILLIC SMALL LETTER ZE + $@ + $@ + ##### $@ + ## ##$@ + ### $@ + ## ##$@ + ##### $@ + $@@ +0x0438 CYRILLIC SMALL LETTER I + $@ + $@ + ## ##$@ + ## ###$@ + ## # ##$@ + ### ##$@ + ## ##$@ + $@@ +0x0439 CYRILLIC SMALL LETTER SHORT I + $@ + ## $@ + ## ##$@ + ## ###$@ + ## # ##$@ + ### ##$@ + ## ##$@ + $@@ +0x043A CYRILLIC SMALL LETTER KA + $@ + $@ + ## ##$@ + ## ## $@ + ##### $@ + ## ## $@ + ## ##$@ + $@@ +0x043B CYRILLIC SMALL LETTER EL + $@ + $@ + #####$@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x043C CYRILLIC SMALL LETTER EM + $@ + $@ + ## ##$@ + ### ###$@ + ## # ##$@ + ## ##$@ + ## ##$@ + $@@ +0x043D CYRILLIC SMALL LETTER EN + $@ + $@ + ## ##$@ + ## ##$@ + #######$@ + ## ##$@ + ## ##$@ + $@@ +0x043E CYRILLIC SMALL LETTER O + $@ + $@ + ##### $@ + ## ##$@ + ## ##$@ + ## ##$@ + ##### $@ + $@@ +0x043F CYRILLIC SMALL LETTER PE + $@ + $@ + ###### $@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + $@@ +0x0440 CYRILLIC SMALL LETTER ER + $@ + $@ + ###### $@ + ## ##$@ + ###### $@ + ## $@ + ## $@ + $@@ +0x0441 CYRILLIC SMALL LETTER ES + $@ + $@ + ##### $@ + ## $@ + ## $@ + ## $@ + ##### $@ + $@@ +0x0442 CYRILLIC SMALL LETTER TE + $@ + $@ + ###### $@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x0443 CYRILLIC SMALL LETTER U + $@ + $@ + ## ##$@ + ## ##$@ + ## ##$@ + ######$@ + ##$@ + ##### $@@ +0x0444 CYRILLIC SMALL LETTER EF + $@ + # $@ + ##### $@ + ## # ##$@ + ## # ##$@ + ##### $@ + # $@ + $@@ +0x0445 CYRILLIC SMALL LETTER HA + $@ + $@ + ## ##$@ + ## ## $@ + ### $@ + ## ## $@ + ## ##$@ + $@@ +0x0446 CYRILLIC SMALL LETTER TSE + $@ + $@ + ## ##$@ + ## ##$@ + ## ##$@ + ## ## $@ + ### ##$@ + #$@@ +0x0447 CYRILLIC SMALL LETTER CHE + $@ + $@ + ## ##$@ + ## ##$@ + ######$@ + ##$@ + ##$@ + $@@ +0x0448 CYRILLIC SMALL LETTER SHA + $@ + $@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + #######$@ + $@@ +0x0449 CYRILLIC SMALL LETTER SHCHA + $@ + $@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + ## # ##$@ + #######$@ + #$@@ +0x044A CYRILLIC SMALL LETTER HARD SIGN + $@ + $@ + ### $@ + ## $@ + ##### $@ + ## ##$@ + ##### $@ + $@@ +0x044B CYRILLIC SMALL LETTER YERU + $@ + $@ + ## ##$@ + ## ##$@ + #### #$@ + ## # #$@ + #### #$@ + $@@ +0x044C CYRILLIC SMALL LETTER SOFT SIGN + $@ + $@ + ## $@ + ## $@ + ###### $@ + ## ##$@ + ###### $@ + $@@ +0x044D CYRILLIC SMALL LETTER E + $@ + $@ + ###### $@ + ##$@ + #####$@ + ##$@ + ###### $@ + $@@ +0x044E CYRILLIC SMALL LETTER YU + $@ + $@ + # ### $@ + # ## ##$@ + #### ##$@ + # ## ##$@ + # ### $@ + $@@ +0x044F CYRILLIC SMALL LETTER YA + $@ + $@ + #####$@ + ## ##$@ + #####$@ + ## ##$@ + ## ##$@ + $@@ +0x0451 CYRILLIC SMALL LETTER IO + $@ + $@ + ########$@ + $@ + #### ###$@ + ## ## $@ + ## ## $@ + ## ## $@@ +0x2219 BULLET OPERATOR + ## ##$@ + ## ##$@ + ## ##$@ + ## ##$@ + #######$@ + $@ + $@ + $@@ +0x221A SQUARE ROOT + ## $@ + ## $@ + ##### $@ + ## $@ + ##### $@ + $@ + $@ + $@@ +0x2248 ALMOST EQUAL TO + $@ + $@ + $@ + $@ + ##### $@ + ## $@ + ## $@ + ## $@@ +0x2264 LESS-THAN OR EQUAL TO + ## $@ + ## $@ + ## $@ + ## $@ + #####$@ + $@ + $@ + $@@ +0x2265 GREATER-THAN OR EQUAL TO + ## $@ + ## $@ + ## $@ + ## $@ + ########$@ + $@ + $@ + $@@ +0x2320 TOP HALF INTEGRAL + $@ + $@ + #######$@ + ##$@ + #### ##$@ + ## ##$@ + ## ##$@ + ## ##$@@ +0x2321 BOTTOM HALF INTEGRAL + ## $@ + ## $@ + ## $@ + ## $@ + #####$@ + ## $@ + ## $@ + ## $@@ +0x2500 BOX DRAWINGS LIGHT HORIZONTAL + ## $@ + $@ + ## $@ + ## $@ + ## $@ + ## ##$@ + #### $@ + $@@ +0x2502 BOX DRAWINGS LIGHT VERTICAL + $@ + $@ + $@ + ######$@ + ## $@ + ## $@ + $@ + $@@ +0x250C BOX DRAWINGS LIGHT DOWN AND RIGHT + $@ + $@ + $@ + ######$@ + ##$@ + ##$@ + $@ + $@@ +0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT + ## ##$@ + ## ## $@ + ## ## $@ + ## #### $@ + ## ##$@ + ## ## $@ + ## ## $@ + ####$@@ +0x2514 BOX DRAWINGS LIGHT UP AND RIGHT + ## ##$@ + ## ## $@ + ## ## $@ + ## ## ##$@ + ## ###$@ + ## ####$@ + ## ####$@ + ##$@@ +0x2518 BOX DRAWINGS LIGHT UP AND LEFT + ## $@ + ## $@ + $@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x251C BOX DRAWINGS LIGHT VERTICAL AND RIGHT + $@ + ## ##$@ + ## ## $@ + ## ## $@ + ## ## $@ + ## ##$@ + $@ + $@@ +0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT + $@ + ## ## $@ + ## ## $@ + ## ##$@ + ## ## $@ + ## ## $@ + $@ + $@@ +0x252C BOX DRAWINGS LIGHT DOWN AND HORIZONTAL + # #$@ + # # $@ + # #$@ + # # $@ + # #$@ + # # $@ + # #$@ + # # $@@ +0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL + # # # #$@ + # # # # $@ + # # # #$@ + # # # # $@ + # # # #$@ + # # # # $@ + # # # #$@ + # # # # $@@ +0x253C BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL + ## ## ##$@ + ### ###$@ + ## ## ##$@ + ### ### $@ + ## ## ##$@ + ### ###$@ + ## ## ##$@ + ### ### $@@ +0x2550 BOX DRAWINGS DOUBLE HORIZONTAL + ## ## $@ + ## ## $@ + ## ###$@ + ## $@ + ######$@ + $@ + $@ + $@@ +0x2551 BOX DRAWINGS DOUBLE VERTICAL + $@ + $@ + ######$@ + ## $@ + ## ###$@ + ## ## $@ + ## ## $@ + ## ## $@@ +0x2552 BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE + ## ## $@ + ## ## $@ + #### ###$@ + $@ + ########$@ + $@ + $@ + $@@ +0x2553 BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE + #### $@ + #### $@ + #####$@ + ## $@ + #####$@ + #### $@ + #### $@ + #### $@@ +0x2554 BOX DRAWINGS DOUBLE DOWN AND RIGHT + $@ + $@ + ########$@ + $@ + ########$@ + $@ + $@ + $@@ +0x2555 BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE + #### $@ + #### $@ + #######$@ + $@ + #######$@ + #### $@ + #### $@ + #### $@@ +0x2556 BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE + ## $@ + ## $@ + ########$@ + $@ + ########$@ + $@ + $@ + $@@ +0x2557 BOX DRAWINGS DOUBLE DOWN AND LEFT + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + ########$@ + $@ + $@ + $@@ +0x2558 BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE + $@ + $@ + ########$@ + $@ + ########$@ + ## $@ + ## $@ + ## $@@ +0x2559 BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE + $@ + $@ + $@ + $@ + ########$@ + ## ## $@ + ## ## $@ + ## ## $@@ +0x255A BOX DRAWINGS DOUBLE UP AND RIGHT + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + ######$@ + $@ + $@ + $@@ +0x255B BOX DRAWINGS UP SINGLE AND LEFT DOUBLE + ## $@ + ## $@ + #####$@ + ## $@ + #####$@ + $@ + $@ + $@@ +0x255C BOX DRAWINGS UP DOUBLE AND LEFT SINGLE + $@ + $@ + #####$@ + ## $@ + #####$@ + ## $@ + ## $@ + ## $@@ +0x255D BOX DRAWINGS DOUBLE UP AND LEFT + $@ + $@ + $@ + $@ + ######$@ + ## ## $@ + ## ## $@ + ## ## $@@ +0x255E BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + ########$@ + ## ## $@ + ## ## $@ + ## ## $@@ +0x255F BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE + ## $@ + ## $@ + ########$@ + ## $@ + ########$@ + ## $@ + ## $@ + ## $@@ +0x2560 BOX DRAWINGS DOUBLE VERTICAL AND RIGHT + ## $@ + ## $@ + ## $@ + ## $@ + ##### $@ + $@ + $@ + $@@ +0x2561 BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE + $@ + $@ + $@ + $@ + #####$@ + ## $@ + ## $@ + ## $@@ +0x2562 BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE + $@ + $@ + $@ + $@ + ########$@ + ########$@ + ########$@ + ########$@@ +0x2563 BOX DRAWINGS DOUBLE VERTICAL AND LEFT + #### $@ + #### $@ + #### $@ + #### $@ + #### $@ + #### $@ + #### $@ + #### $@@ +0x2564 BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@@ +0x2565 BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE + ########$@ + ########$@ + ########$@ + ########$@ + $@ + $@ + $@ + $@@ +0x2566 BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL + ### $@ + ## ## $@ + ## ## $@ + ### $@ + $@ + $@ + $@ + $@@ +0x2567 BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE + $@ + $@ + $@ + ## $@ + ## $@ + $@ + $@ + $@@ +0x2568 BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE + $@ + $@ + $@ + $@ + ## $@ + $@ + $@ + $@@ +0x2569 BOX DRAWINGS DOUBLE UP AND HORIZONTAL + ####$@ + ## $@ + ## $@ + ## $@ + ### ## $@ + ## ## $@ + #### $@ + ### $@@ +0x256A BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE + #### $@ + ## ## $@ + ## ## $@ + ## ## $@ + ## ## $@ + $@ + $@ + $@@ +0x256B BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE + ### $@ + ## $@ + ## $@ + ## $@ + #### $@ + $@ + $@ + $@@ +0x256C BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL + $@ + $@ + #### $@ + #### $@ + #### $@ + #### $@ + $@ + $@@ +0x2580 UPPER HALF BLOCK + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@ + ## $@@ +0x2584 LOWER HALF BLOCK + ## $@ + ## $@ + ## $@ + ## $@ + ##### $@ + ## $@ + ## $@ + ## $@@ +0x2588 FULL BLOCK + ## $@ + ## $@ + ##### $@ + ## $@ + ##### $@ + ## $@ + ## $@ + ## $@@ +0x258C LEFT HALF BLOCK + ####$@ + ####$@ + ####$@ + ####$@ + ######$@ + ####$@ + ####$@ + ####$@@ +0x2590 RIGHT HALF BLOCK + $@ + $@ + $@ + $@ + #######$@ + ## ##$@ + ## ##$@ + ## ##$@@ +0x2591 LIGHT SHADE + $@ + $@ + ##### $@ + ## $@ + ##### $@ + ## $@ + ## $@ + ## $@@ +0x2592 MEDIUM SHADE + ####$@ + ####$@ + ######$@ + ##$@ + ######$@ + ####$@ + ####$@ + ####$@@ +0x2593 DARK SHADE + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@ + ####$@@ +0x25A0 BLACK SQUARE + ## ##$@ + ## ##$@ + #### ##$@ + ##$@ + #######$@ + $@ + $@ + $@@ +0x30A2 A + ##########$@ + ### $@ + # $@ + # $@ + # $@ + # $@ + # $@ + $@@ +0x30A4 I + ##$@ + ## $@ + ## # $@ + ## # $@ + # $@ + # $@ + # $@ + $@@ +0x30A6 U + # $@ + ##########$@ + # #$@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30A8 E + $@ + ####### $@ + # $@ + # $@ + # $@ + # $@ + ##########$@ + $@@ +0x30AA O + # $@ + ##########$@ + ## $@ + ## # $@ + ## # $@ + ## ## $@ + # $@ + $@@ +0x30AB KA + # $@ + ##########$@ + # #$@ + # #$@ + # #$@ + # # # $@ + # # $@ + $@@ +0x30AD KI + # # $@ + # # $@ + # # # $@ + # $@ + # # $@ + # # $@ + #$@ + $@@ +0x30AF KU + # $@ + ########$@ + # #$@ + # ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30B1 KE + # $@ + ########$@ + # # $@ + # # $@ + # $@ + # $@ + # $@ + $@@ +0x30B3 KO + $@ + ##########$@ + #$@ + #$@ + #$@ + #$@ + ######### $@ + $@@ +0x30B5 SA + # # $@ + ##########$@ + # # $@ + # $@ + # $@ + # $@ + # $@ + $@@ +0x30B7 SI (SHI) + # #$@ + # # # $@ + # # $@ + ## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30B9 SU + ########$@ + #$@ + # $@ + ## $@ + ## # $@ + ## # $@ + # #$@ + $@@ +0x30BB SE + # $@ + # $@ + ##########$@ + # # $@ + # $@ + # $@ + ###### $@ + $@@ +0x30BD SO + # #$@ + # #$@ + # $@ + # $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30BF TA + # $@ + #######$@ + # # $@ + # # # $@ + ### $@ + ## $@ + ## $@ + $@@ +0x30C1 TI (CHI) + ## $@ + ###### $@ + # $@ + ##########$@ + # $@ + # $@ + ## $@ + $@@ +0x30C4 TU (TSU) + # # #$@ + # # #$@ + # $@ + # $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30C6 TE + ###### $@ + $@ + ##########$@ + # $@ + # $@ + # $@ + ## $@ + $@@ +0x30C8 TO + # $@ + # $@ + ## $@ + # # $@ + # #$@ + # $@ + # $@ + $@@ +0x30CA NA + # $@ + ##########$@ + # $@ + # $@ + # $@ + # $@ + ## $@ + $@@ +0x30CB NI + $@ + $@ + ###### $@ + $@ + $@ + ##########$@ + $@ + $@@ +0x30CC NU + ##########$@ + #$@ + # # $@ + # ## $@ + ## $@ + ## # $@ + ## # $@ + $@@ +0x30CD NE + # $@ + ##########$@ + # $@ + ### $@ + ###### $@ + ## # ##$@ + # $@ + $@@ +0x30CE NO + #$@ + #$@ + # $@ + # $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30CF HA + $@ + $@ + # # $@ + # # $@ + # #$@ + # $@ + $@ + $@@ +0x30D2 HI + # $@ + # ### $@ + #### $@ + # $@ + # $@ + # $@ + #######$@ + $@@ +0x30D5 HU (FU) + ########$@ + #$@ + #$@ + # $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30D8 HE + $@ + $@ + ## $@ + # ## $@ + # ## $@ + ##$@ + $@ + $@@ +0x30DB HO + # $@ + ##########$@ + # $@ + # # # $@ + # # # $@ + # ## #$@ + # $@ + $@@ +0x30DE MA + $@ + ##########$@ + # $@ + # $@ + # # $@ + # $@ + # $@ + $@@ +0x30DF MI + #### $@ + ##$@ + ### $@ + ###$@ + $@ + ### $@ + ###$@ + $@@ +0x30E0 MU + # $@ + # $@ + # $@ + # $@ + # # $@ + ######### $@ + #$@ + $@@ +0x30E1 ME + #$@ + # $@ + # # $@ + # # $@ + # $@ + ## # $@ + ## # $@ + $@@ +0x30E2 MO + ###### $@ + # $@ + ##########$@ + # $@ + # $@ + # $@ + #### $@ + $@@ +0x30E4 YA + # ## $@ + # ## # $@ + ### $@ + # # $@ + # $@ + # $@ + # $@ + $@@ +0x30E6 YU + $@ + ###### $@ + # $@ + # $@ + # $@ + ##########$@ + $@ + $@@ +0x30E8 YO + $@ + ###### $@ + # $@ + # $@ + # $@ + ##########$@ + $@ + $@@ +0x30E9 RA + ###### $@ + $@ + ##########$@ + # #$@ + ## $@ + ## $@ + ## $@ + $@@ +0x30EA RI + # #$@ + # #$@ + # #$@ + # #$@ + # $@ + # $@ + ## $@ + $@@ +0x30EB RU + # # $@ + # # $@ + # # $@ + # # #$@ + # # # $@ + # # # $@ + # ## $@ + $@@ +0x30EC RE + # $@ + # $@ + # $@ + # ##$@ + # ## $@ + # ## $@ + ## $@ + $@@ +0x30ED RO + $@ + #########$@ + # #$@ + # #$@ + # #$@ + #########$@ + $@ + $@@ +0x30EF WA + ##########$@ + # #$@ + # $@ + # $@ + # $@ + ## $@ + ## $@ + $@@ +0x30F0 WI + # $@ + ####### $@ + # # $@ + # # $@ + ##########$@ + # $@ + # $@ + $@@ +0x30F1 WE + #########$@ + #$@ + #$@ + ######## $@ + # $@ + # $@ + ######## $@ + $@@ +0x30F2 WO + ##########$@ + #$@ + # $@ + ######## $@ + ## $@ + ## $@ + ## $@ + $@@ +0x30F3 N + #$@ + # #$@ + # # $@ + # $@ + ## $@ + ## $@ + ## $@ + $@@ +-0x0004 KATAMAP + @ +a-A i-B u-C e-D o-E ka-F ki-G ku-H ke-I ko-J @ +sa-K shi-L su-M se-N so-O ta-P chi-Q tsu-R te-S to-T@ +na-U ni-V nu-W ne-X no-Y ha-Z hi-a fu-b he-c ho-d @ +ma-e mi-f mu-g me-h mo-i ya-j yu-k we-l yo-m @ +ra-n ri-o ru-p re-q ro-r wa-s wi-t wo-u @ +n-v @ + @@ +-0x0006 MOSCOWMAP +a-a, b-b, v-v, g-g, d-d, e-e, zh-j, z-z, i-i@ +short i->, k-k, l-l, m-m, n-n, o-o, p-p, r-r@ +s-s, t-t, u-u, f-f, kh-h, ts-q, ch-c, sh-w @ +shch-x, hard-\, yeru-|, soft-/, reverse e-~ @ +yu-`, ya-y @ +Capitals use Latin capital letters, except: @ +Reverse E-<, Yu-@ @ +No caps for short i, hard, yeru, soft. @@ diff --git a/externals/figlet/fonts/big.flf b/externals/figlet/fonts/big.flf new file mode 100644 index 0000000000..07c468c9e5 --- /dev/null +++ b/externals/figlet/fonts/big.flf @@ -0,0 +1,2204 @@ +flf2a$ 8 6 59 15 10 0 24463 153 +Big by Glenn Chappell 4/93 -- based on Standard +Includes ISO Latin-1 +Greek characters by Bruce Jakeway +figlet release 2.2 -- November 1996 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + $@ + $@ + $@ + $@ + $@ + $@ + $@ + $@@ + _ @ + | |@ + | |@ + | |@ + |_|@ + (_)@ + @ + @@ + _ _ @ + ( | )@ + V V @ + $ @ + $ @ + $ @ + @ + @@ + _ _ @ + _| || |_ @ + |_ __ _|@ + _| || |_ @ + |_ __ _|@ + |_||_| @ + @ + @@ + _ @ + | | @ + / __)@ + \__ \@ + ( /@ + |_| @ + @ + @@ + _ __@ + (_) / /@ + / / @ + / / @ + / / _ @ + /_/ (_)@ + @ + @@ + @ + ___ @ + ( _ ) @ + / _ \/\@ + | (_> <@ + \___/\/@ + @ + @@ + _ @ + ( )@ + |/ @ + $ @ + $ @ + $ @ + @ + @@ + __@ + / /@ + | | @ + | | @ + | | @ + | | @ + \_\@ + @@ + __ @ + \ \ @ + | |@ + | |@ + | |@ + | |@ + /_/ @ + @@ + _ @ + /\| |/\ @ + \ ` ' / @ + |_ _|@ + / , . \ @ + \/|_|\/ @ + @ + @@ + @ + _ @ + _| |_ @ + |_ _|@ + |_| @ + $ @ + @ + @@ + @ + @ + @ + @ + _ @ + ( )@ + |/ @ + @@ + @ + @ + ______ @ + |______|@ + $ @ + $ @ + @ + @@ + @ + @ + @ + @ + _ @ + (_)@ + @ + @@ + __@ + / /@ + / / @ + / / @ + / / @ + /_/ @ + @ + @@ + ___ @ + / _ \ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ + __ @ + /_ |@ + | |@ + | |@ + | |@ + |_|@ + @ + @@ + ___ @ + |__ \ @ + $) |@ + / / @ + / /_ @ + |____|@ + @ + @@ + ____ @ + |___ \ @ + __) |@ + |__ < @ + ___) |@ + |____/ @ + @ + @@ + _ _ @ + | || | @ + | || |_ @ + |__ _|@ + | | @ + |_| @ + @ + @@ + _____ @ + | ____|@ + | |__ @ + |___ \ @ + ___) |@ + |____/ @ + @ + @@ + __ @ + / / @ + / /_ @ + | '_ \ @ + | (_) |@ + \___/ @ + @ + @@ + ______ @ + |____ |@ + $/ / @ + / / @ + / / @ + /_/ @ + @ + @@ + ___ @ + / _ \ @ + | (_) |@ + > _ < @ + | (_) |@ + \___/ @ + @ + @@ + ___ @ + / _ \ @ + | (_) |@ + \__, |@ + / / @ + /_/ @ + @ + @@ + @ + _ @ + (_)@ + $ @ + _ @ + (_)@ + @ + @@ + @ + _ @ + (_)@ + $ @ + _ @ + ( )@ + |/ @ + @@ + __@ + / /@ + / / @ + < < @ + \ \ @ + \_\@ + @ + @@ + @ + ______ @ + |______|@ + ______ @ + |______|@ + @ + @ + @@ + __ @ + \ \ @ + \ \ @ + > >@ + / / @ + /_/ @ + @ + @@ + ___ @ + |__ \ @ + ) |@ + / / @ + |_| @ + (_) @ + @ + @@ + @ + ____ @ + / __ \ @ + / / _` |@ + | | (_| |@ + \ \__,_|@ + \____/ @ + @@ + @ + /\ @ + / \ @ + / /\ \ @ + / ____ \ @ + /_/ \_\@ + @ + @@ + ____ @ + | _ \ @ + | |_) |@ + | _ < @ + | |_) |@ + |____/ @ + @ + @@ + _____ @ + / ____|@ + | | $ @ + | | $ @ + | |____ @ + \_____|@ + @ + @@ + _____ @ + | __ \ @ + | | | |@ + | | | |@ + | |__| |@ + |_____/ @ + @ + @@ + ______ @ + | ____|@ + | |__ @ + | __| @ + | |____ @ + |______|@ + @ + @@ + ______ @ + | ____|@ + | |__ @ + | __| @ + | | @ + |_| @ + @ + @@ + _____ @ + / ____|@ + | | __ @ + | | |_ |@ + | |__| |@ + \_____|@ + @ + @@ + _ _ @ + | | | |@ + | |__| |@ + | __ |@ + | | | |@ + |_| |_|@ + @ + @@ + _____ @ + |_ _|@ + | | @ + | | @ + _| |_ @ + |_____|@ + @ + @@ + _ @ + | |@ + | |@ + _ | |@ + | |__| |@ + \____/ @ + @ + @@ + _ __@ + | |/ /@ + | ' / @ + | < @ + | . \ @ + |_|\_\@ + @ + @@ + _ @ + | | @ + | | @ + | | @ + | |____ @ + |______|@ + @ + @@ + __ __ @ + | \/ |@ + | \ / |@ + | |\/| |@ + | | | |@ + |_| |_|@ + @ + @@ + _ _ @ + | \ | |@ + | \| |@ + | . ` |@ + | |\ |@ + |_| \_|@ + @ + @@ + ____ @ + / __ \ @ + | | | |@ + | | | |@ + | |__| |@ + \____/ @ + @ + @@ + _____ @ + | __ \ @ + | |__) |@ + | ___/ @ + | | @ + |_| @ + @ + @@ + ____ @ + / __ \ @ + | | | |@ + | | | |@ + | |__| |@ + \___\_\@ + @ + @@ + _____ @ + | __ \ @ + | |__) |@ + | _ / @ + | | \ \ @ + |_| \_\@ + @ + @@ + _____ @ + / ____|@ + | (___ @ + \___ \ @ + ____) |@ + |_____/ @ + @ + @@ + _______ @ + |__ __|@ + | | @ + | | @ + | | @ + |_| @ + @ + @@ + _ _ @ + | | | |@ + | | | |@ + | | | |@ + | |__| |@ + \____/ @ + @ + @@ + __ __@ + \ \ / /@ + \ \ / / @ + \ \/ / @ + \ / @ + \/ @ + @ + @@ + __ __@ + \ \ / /@ + \ \ /\ / / @ + \ \/ \/ / @ + \ /\ / @ + \/ \/ @ + @ + @@ + __ __@ + \ \ / /@ + \ V / @ + > < @ + / . \ @ + /_/ \_\@ + @ + @@ + __ __@ + \ \ / /@ + \ \_/ / @ + \ / @ + | | @ + |_| @ + @ + @@ + ______@ + |___ /@ + $/ / @ + / / @ + / /__ @ + /_____|@ + @ + @@ + ___ @ + | _|@ + | | @ + | | @ + | | @ + | |_ @ + |___|@ + @@ + __ @ + \ \ @ + \ \ @ + \ \ @ + \ \ @ + \_\@ + @ + @@ + ___ @ + |_ |@ + | |@ + | |@ + | |@ + _| |@ + |___|@ + @@ + /\ @ + |/\|@ + $ @ + $ @ + $ @ + $ @ + @ + @@ + @ + @ + @ + @ + @ + $ @ + ______ @ + |______|@@ + _ @ + ( )@ + \|@ + $ @ + $ @ + $ @ + @ + @@ + @ + @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ + _ @ + | | @ + | |__ @ + | '_ \ @ + | |_) |@ + |_.__/ @ + @ + @@ + @ + @ + ___ @ + / __|@ + | (__ @ + \___|@ + @ + @@ + _ @ + | |@ + __| |@ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ + @ + @ + ___ @ + / _ \@ + | __/@ + \___|@ + @ + @@ + __ @ + / _|@ + | |_ @ + | _|@ + | | @ + |_| @ + @ + @@ + @ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + __/ |@ + |___/ @@ + _ @ + | | @ + | |__ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @ + @@ + _ @ + (_)@ + _ @ + | |@ + | |@ + |_|@ + @ + @@ + _ @ + (_)@ + _ @ + | |@ + | |@ + | |@ + _/ |@ + |__/ @@ + _ @ + | | @ + | | __@ + | |/ /@ + | < @ + |_|\_\@ + @ + @@ + _ @ + | |@ + | |@ + | |@ + | |@ + |_|@ + @ + @@ + @ + @ + _ __ ___ @ + | '_ ` _ \ @ + | | | | | |@ + |_| |_| |_|@ + @ + @@ + @ + @ + _ __ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @ + @@ + @ + @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ + @ + @ + _ __ @ + | '_ \ @ + | |_) |@ + | .__/ @ + | | @ + |_| @@ + @ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + | |@ + |_|@@ + @ + @ + _ __ @ + | '__|@ + | | @ + |_| @ + @ + @@ + @ + @ + ___ @ + / __|@ + \__ \@ + |___/@ + @ + @@ + _ @ + | | @ + | |_ @ + | __|@ + | |_ @ + \__|@ + @ + @@ + @ + @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ + @ + @ + __ __@ + \ \ / /@ + \ V / @ + \_/ @ + @ + @@ + @ + @ + __ __@ + \ \ /\ / /@ + \ V V / @ + \_/\_/ @ + @ + @@ + @ + @ + __ __@ + \ \/ /@ + > < @ + /_/\_\@ + @ + @@ + @ + @ + _ _ @ + | | | |@ + | |_| |@ + \__, |@ + __/ |@ + |___/ @@ + @ + @ + ____@ + |_ /@ + / / @ + /___|@ + @ + @@ + __@ + / /@ + | | @ + / / @ + \ \ @ + | | @ + \_\@ + @@ + _ @ + | |@ + | |@ + | |@ + | |@ + | |@ + | |@ + |_|@@ + __ @ + \ \ @ + | | @ + \ \@ + / /@ + | | @ + /_/ @ + @@ + /\/|@ + |/\/ @ + $ @ + $ @ + $ @ + $ @ + @ + @@ + _ _ @ + (_)_(_) @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ + _ _ @ + (_) (_)@ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ + _ _ @ + (_) (_)@ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ + _ _ @ + (_) (_)@ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ + _ _ @ + (_) (_)@ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ + ___ @ + / _ \ @ + | | ) |@ + | |< < @ + | | ) |@ + | ||_/ @ + |_| @ + @@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + $@ + $@ + $@ + $@@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + | |@ + | |@ + | |@ + |_|@ + @ + @@ +162 CENT SIGN + @ + _ @ + | | @ + / __)@ + | (__ @ + \ )@ + |_| @ + @@ +163 POUND SIGN + ___ @ + / ,_\ @ + _| |_ @ + |__ __| @ + | |____ @ + (_,_____|@ + @ + @@ +164 CURRENCY SIGN + @ + /\___/\@ + \ _ /@ + | (_) |@ + / ___ \@ + \/ \/@ + @ + @@ +165 YEN SIGN + __ __ @ + \ \ / / @ + _\ V /_ @ + |___ ___|@ + |___ ___|@ + |_| @ + @ + @@ +166 BROKEN BAR + _ @ + | |@ + | |@ + |_|@ + _ @ + | |@ + | |@ + |_|@@ +167 SECTION SIGN + __ @ + _/ _)@ + / \ \ @ + \ \\ \@ + \ \_/@ + (__/ @ + @ + @@ +168 DIAERESIS + _ _ @ + (_) (_)@ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + @ + @@ +169 COPYRIGHT SIGN + ________ @ + / ____ \ @ + / / ___| \ @ + | | | |@ + | | |___ |@ + \ \____| / @ + \________/ @ + @@ +170 FEMININE ORDINAL INDICATOR + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + |_____|@ + $ @ + @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ + / / / @ + < < < @ + \ \ \ @ + \_\_\@ + @ + @@ +172 NOT SIGN + @ + @ + ______ @ + |____ |@ + |_|@ + $ @ + @ + @@ +173 SOFT HYPHEN + @ + @ + _____ @ + |_____|@ + $ @ + $ @ + @ + @@ +174 REGISTERED SIGN + ________ @ + / ____ \ @ + / | _ \ \ @ + | | |_) | |@ + | | _ < |@ + \ |_| \_\ / @ + \________/ @ + @@ +175 MACRON + ______ @ + |______|@ + $ @ + $ @ + $ @ + $ @ + @ + @@ +176 DEGREE SIGN + __ @ + / \ @ + | () |@ + \__/ @ + $ @ + $ @ + @ + @@ +177 PLUS-MINUS SIGN + _ @ + _| |_ @ + |_ _|@ + |_| @ + _____ @ + |_____|@ + @ + @@ +178 SUPERSCRIPT TWO + ___ @ + |_ )@ + / / @ + /___|@ + $ @ + $ @ + @ + @@ +179 SUPERSCRIPT THREE + ____@ + |__ /@ + |_ \@ + |___/@ + $ @ + $ @ + @ + @@ +180 ACUTE ACCENT + __@ + /_/@ + $ @ + $ @ + $ @ + $ @ + @ + @@ +181 MICRO SIGN + @ + @ + _ _ @ + | | | |@ + | |_| |@ + | ._,_|@ + | | @ + |_| @@ +182 PILCROW SIGN + ______ @ + / |@ + | (| || |@ + \__ || |@ + | || |@ + |_||_|@ + @ + @@ +183 MIDDLE DOT + @ + @ + _ @ + (_)@ + $ @ + $ @ + @ + @@ +184 CEDILLA + @ + @ + @ + @ + @ + _ @ + )_)@ + @@ +185 SUPERSCRIPT ONE + _ @ + / |@ + | |@ + |_|@ + $ @ + $ @ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + |_____|@ + $ @ + @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + ____ @ + \ \ \ @ + \ \ \ @ + > > >@ + / / / @ + /_/_/ @ + @ + @@ +188 VULGAR FRACTION ONE QUARTER + _ __ @ + / | / / @ + | |/ / _ @ + |_/ / | | @ + / /|_ _|@ + /_/ |_| @ + @ + @@ +189 VULGAR FRACTION ONE HALF + _ __ @ + / | / / @ + | |/ /__ @ + |_/ /_ )@ + / / / / @ + /_/ /___|@ + @ + @@ +190 VULGAR FRACTION THREE QUARTERS + ____ __ @ + |__ / / / @ + |_ \/ / _ @ + |___/ / | | @ + / /|_ _|@ + /_/ |_| @ + @ + @@ +191 INVERTED QUESTION MARK + _ @ + (_) @ + | | @ + / / @ + | (__ @ + \___|@ + @ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + \_\ @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __ @ + /_/ @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + //\ @ + |/_\| @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/| @ + |/\/ @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_) @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _ @ + (o) @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @ + @@ +198 LATIN CAPITAL LETTER AE + _______ @ + / ____|@ + / |__ @ + / /| __| @ + / ___ |____ @ + /_/ |______|@ + @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + _____ @ + / ____|@ + | | $ @ + | | $ @ + | |____ @ + \_____|@ + )_) @ + @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + _\_\_ @ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __ @ + _/_/_ @ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + //\ @ + |/ \| @ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_) (_)@ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + \_\ @ + |_ _|@ + | | @ + | | @ + |___|@ + @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __ @ + /_/ @ + |_ _|@ + | | @ + | | @ + |___|@ + @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //\ @ + |/_\|@ + |_ _|@ + | | @ + | | @ + |___|@ + @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + |_ _| @ + | | @ + | | @ + |___| @ + @ + @@ +208 LATIN CAPITAL LETTER ETH + _____ @ + | __ \ @ + _| |_ | |@ + |__ __|| |@ + | |__| |@ + |_____/ @ + @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\/| @ + |/\/_ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + \_\ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __ @ + /_/ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + //\ @ + |/_\| @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/| @ + |/\/ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +215 MULTIPLICATION SIGN + @ + @ + /\/\@ + > <@ + \/\/@ + $ @ + @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _____ @ + / __// @ + | | // |@ + | |//| |@ + | //_| |@ + //___/ @ + @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + _\_\_ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __ @ + _/_/_ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //\ @ + |/ \| @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __ @ + __/_/__@ + \ \ / /@ + \ V / @ + | | @ + |_| @ + @ + @@ +222 LATIN CAPITAL LETTER THORN + _ @ + | |___ @ + | __ \ @ + | |__) |@ + | ___/ @ + |_| @ + @ + @@ +223 LATIN SMALL LETTER SHARP S + ___ @ + / _ \ @ + | | ) |@ + | |< < @ + | | ) |@ + | ||_/ @ + |_| @ + @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + \_\ @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __ @ + /_/ @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + //\ @ + |/ \| @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/| @ + |/\/ @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_) (_)@ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + (()) @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @ + @@ +230 LATIN SMALL LETTER AE + @ + @ + __ ____ @ + / _` _ \@ + | (_| __/@ + \__,____|@ + @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + @ + ___ @ + / __|@ + | (__ @ + \___|@ + )_) @ + @@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + \_\ @ + ___ @ + / _ \@ + | __/@ + \___|@ + @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __ @ + /_/ @ + ___ @ + / _ \@ + | __/@ + \___|@ + @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //\ @ + |/ \|@ + ___ @ + / _ \@ + | __/@ + \___|@ + @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ + (_) (_)@ + ___ @ + / _ \ @ + | __/ @ + \___| @ + @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + _ @ + | |@ + | |@ + |_|@ + @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + _ @ + | |@ + | |@ + |_|@ + @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //\ @ + |/ \|@ + _ @ + | | @ + | | @ + |_| @ + @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ + (_) (_)@ + _ @ + | | @ + | | @ + |_| @ + @ + @@ +240 LATIN SMALL LETTER ETH + /\/\ @ + > < @ + \/\ \ @ + / _` |@ + | (_) |@ + \___/ @ + @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/| @ + |/\/ @ + _ __ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + \_\ @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __ @ + /_/ @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //\ @ + |/ \| @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/| @ + |/\/ @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_) (_)@ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @ + @@ +247 DIVISION SIGN + _ @ + (_) @ + _______ @ + |_______|@ + _ @ + (_) @ + @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + @ + ____ @ + / _//\ @ + | (//) |@ + \//__/ @ + @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + \_\ @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __ @ + /_/ @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + //\ @ + |/ \| @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __ @ + /_/ @ + _ _ @ + | | | |@ + | |_| |@ + \__, |@ + __/ |@ + |___/ @@ +254 LATIN SMALL LETTER THORN + _ @ + | | @ + | |__ @ + | '_ \ @ + | |_) |@ + | .__/ @ + | | @ + |_| @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_) (_)@ + _ _ @ + | | | |@ + | |_| |@ + \__, |@ + __/ |@ + |___/ @@ +0x02BC MODIFIER LETTER APOSTROPHE + @ + @ + ))@ + @ + @ + @ + @ + @@ +0x02BD MODIFIER LETTER REVERSED COMMA + @ + @ + ((@ + @ + @ + @ + @ + @@ +0x037A GREEK YPOGEGRAMMENI + @ + @ + @ + @ + @ + @ + @ + ||@@ +0x0387 GREEK ANO TELEIA + @ + $ @ + _ @ + (_)@ + @ + $ @ + @ + @@ +0x0391 GREEK CAPITAL LETTER ALPHA + ___ @ + / _ \ @ + | |_| |@ + | _ |@ + | | | |@ + |_| |_|@ + @ + @@ +0x0392 GREEK CAPITAL LETTER BETA + ____ @ + | _ \ @ + | |_) )@ + | _ ( @ + | |_) )@ + |____/ @ + @ + @@ +0x0393 GREEK CAPITAL LETTER GAMMA + _____ @ + | ___)@ + | |$ @ + | |$ @ + | | @ + |_| @ + @ + @@ +0x0394 GREEK CAPITAL LETTER DELTA + @ + /\ @ + / \ @ + / /\ \ @ + / /__\ \ @ + /________\@ + @ + @@ +0x0395 GREEK CAPITAL LETTER EPSILON + _____ @ + | ___)@ + | |_ @ + | _) @ + | |___ @ + |_____)@ + @ + @@ +0x0396 GREEK CAPITAL LETTER ZETA + ______@ + (___ /@ + / / @ + / / @ + / /__ @ + /_____)@ + @ + @@ +0x0397 GREEK CAPITAL LETTER ETA + _ _ @ + | | | |@ + | |_| |@ + | _ |@ + | | | |@ + |_| |_|@ + @ + @@ +0x0398 GREEK CAPITAL LETTER THETA + ____ @ + / __ \ @ + | |__| |@ + | __ |@ + | |__| |@ + \____/ @ + @ + @@ +0x0399 GREEK CAPITAL LETTER IOTA + ___ @ + ( )@ + | | @ + | | @ + | | @ + (___)@ + @ + @@ +0x039A GREEK CAPITAL LETTER KAPPA + _ __@ + | | / /@ + | |/ / @ + | < @ + | |\ \ @ + |_| \_\@ + @ + @@ +0x039B GREEK CAPITAL LETTER LAMDA + @ + /\ @ + / \ @ + / /\ \ @ + / / \ \ @ + /_/ \_\@ + @ + @@ +0x039C GREEK CAPITAL LETTER MU + __ __ @ + | \ / |@ + | v |@ + | |\_/| |@ + | | | |@ + |_| |_|@ + @ + @@ +0x039D GREEK CAPITAL LETTER NU + _ _ @ + | \ | |@ + | \| |@ + | |@ + | |\ |@ + |_| \_|@ + @ + @@ +0x039E GREEK CAPITAL LETTER XI + _____ @ + (_____)@ + ___ @ + (___) @ + _____ @ + (_____)@ + @ + @@ +0x039F GREEK CAPITAL LETTER OMICRON + ___ @ + / _ \ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +0x03A0 GREEK CAPITAL LETTER PI + _______ @ + ( _ )@ + | | | | @ + | | | | @ + | | | | @ + |_| |_| @ + @ + @@ +0x03A1 GREEK CAPITAL LETTER RHO + ____ @ + | _ \ @ + | |_) )@ + | __/ @ + | | @ + |_| @ + @ + @@ +0x03A3 GREEK CAPITAL LETTER SIGMA + ______ @ + \ ___)@ + \ \ @ + > > @ + / /__ @ + /_____)@ + @ + @@ +0x03A4 GREEK CAPITAL LETTER TAU + _____ @ + (_ _)@ + | | @ + | | @ + | | @ + |_| @ + @ + @@ +0x03A5 GREEK CAPITAL LETTER UPSILON + __ __ @ + (_ \ / _)@ + \ v / @ + | | @ + | | @ + |_| @ + @ + @@ +0x03A6 GREEK CAPITAL LETTER PHI + _ @ + _| |_ @ + / \ @ + ( (| |) )@ + \_ _/ @ + |_| @ + @ + @@ +0x03A7 GREEK CAPITAL LETTER CHI + __ __@ + \ \ / /@ + \ v / @ + > < @ + / ^ \ @ + /_/ \_\@ + @ + @@ +0x03A8 GREEK CAPITAL LETTER PSI + _ _ _ @ + | || || |@ + | \| |/ |@ + \_ _/ @ + | | @ + |_| @ + @ + @@ +0x03A9 GREEK CAPITAL LETTER OMEGA + ____ @ + / __ \ @ + | | | | @ + | | | | @ + _\ \/ /_ @ + (___||___)@ + @ + @@ +0x03B1 GREEK SMALL LETTER ALPHA + @ + @ + __ __@ + / \/ /@ + ( () < @ + \__/\_\@ + @ + @@ +0x03B2 GREEK SMALL LETTER BETA + ___ @ + / _ \ @ + | |_) )@ + | _ < @ + | |_) )@ + | __/ @ + | | @ + |_| @@ +0x03B3 GREEK SMALL LETTER GAMMA + @ + @ + _ _ @ + ( \ / )@ + \ v / @ + | | @ + | | @ + |_| @@ +0x03B4 GREEK SMALL LETTER DELTA + __ @ + / _) @ + \ \ @ + / _ \ @ + ( (_) )@ + \___/ @ + @ + @@ +0x03B5 GREEK SMALL LETTER EPSILON + @ + @ + ___ @ + / __)@ + > _) @ + \___)@ + @ + @@ +0x03B6 GREEK SMALL LETTER ZETA + _____ @ + \__ ) @ + / / @ + / / @ + | |__ @ + \__ \ @ + ) )@ + (_/ @@ +0x03B7 GREEK SMALL LETTER ETA + @ + @ + _ __ @ + | '_ \ @ + | | | |@ + |_| | |@ + | |@ + |_|@@ +0x03B8 GREEK SMALL LETTER THETA + ___ @ + / _ \ @ + | |_| |@ + | _ |@ + | |_| |@ + \___/ @ + @ + @@ +0x03B9 GREEK SMALL LETTER IOTA + @ + @ + _ @ + | | @ + | | @ + \_)@ + @ + @@ +0x03BA GREEK SMALL LETTER KAPPA + @ + @ + _ __@ + | |/ /@ + | < @ + |_|\_\@ + @ + @@ +0x03BB GREEK SMALL LETTER LAMDA + __ @ + \ \ @ + \ \ @ + > \ @ + / ^ \ @ + /_/ \_\@ + @ + @@ +0x03BC GREEK SMALL LETTER MU + @ + @ + _ _ @ + | | | |@ + | |_| |@ + | ._,_|@ + | | @ + |_| @@ +0x03BD GREEK SMALL LETTER NU + @ + @ + _ __@ + | |/ /@ + | / / @ + |__/ @ + @ + @@ +0x03BE GREEK SMALL LETTER XI + \=\__ @ + > __) @ + ( (_ @ + > _) @ + ( (__ @ + \__ \ @ + ) )@ + (_/ @@ +0x03BF GREEK SMALL LETTER OMICRON + @ + @ + ___ @ + / _ \ @ + ( (_) )@ + \___/ @ + @ + @@ +0x03C0 GREEK SMALL LETTER PI + @ + @ + ______ @ + ( __ )@ + | || | @ + |_||_| @ + @ + @@ +0x03C1 GREEK SMALL LETTER RHO + @ + @ + ___ @ + / _ \ @ + | |_) )@ + | __/ @ + | | @ + |_| @@ +0x03C2 GREEK SMALL LETTER FINAL SIGMA + @ + @ + ____ @ + / ___)@ + ( (__ @ + \__ \ @ + _) )@ + (__/ @@ +0x03C3 GREEK SMALL LETTER SIGMA + @ + @ + ____ @ + / ._)@ + ( () ) @ + \__/ @ + @ + @@ +0x03C4 GREEK SMALL LETTER TAU + @ + @ + ___ @ + ( )@ + | | @ + \_)@ + @ + @@ +0x03C5 GREEK SMALL LETTER UPSILON + @ + @ + _ _ @ + | | | |@ + | |_| |@ + \___/ @ + @ + @@ +0x03C6 GREEK SMALL LETTER PHI + _ @ + | | @ + _| |_ @ + / \ @ + ( (| |) )@ + \_ _/ @ + | | @ + |_| @@ +0x03C7 GREEK SMALL LETTER CHI + @ + @ + __ __@ + \ \ / /@ + \ v / @ + > < @ + / ^ \ @ + /_/ \_\@@ +0x03C8 GREEK SMALL LETTER PSI + @ + @ + _ _ _ @ + | || || |@ + | \| |/ |@ + \_ _/ @ + | | @ + |_| @@ +0x03C9 GREEK SMALL LETTER OMEGA + @ + @ + __ __ @ + / / _ \ \ @ + | |_/ \_| |@ + \___^___/ @ + @ + @@ +0x03D1 GREEK THETA SYMBOL + ___ @ + / _ \ @ + ( (_| |_ @ + _ \ _ _)@ + | |___| | @ + \_____/ @ + @ + @@ +0x03D5 GREEK PHI SYMBOL + @ + @ + _ __ @ + | | / \ @ + | || || )@ + \_ _/ @ + | | @ + |_| @@ +0x03D6 GREEK PI SYMBOL + @ + @ + _________ @ + ( _____ )@ + | |_/ \_| |@ + \___^___/ @ + @ + @@ +-0x0005 +alpha = a, beta = b, gamma = g, delta = d, epsilon = e @ +zeta = z, eta = h, theta = q, iota = i, lamda = l, mu = m@ +nu = n, xi = x, omicron = o, pi = p, rho = r, sigma = s @ +phi = f, chi = c, psi = y, omega = w, final sigma = V @ + pi symbol = v, theta symbol = J, phi symbol = j @ + middle dot = :, ypogegrammeni = _ @ + rough breathing = (, smooth breathing = ) @ + acute accent = ', grave accent = `, dialytika = ^ @@ diff --git a/externals/figlet/fonts/block.flf b/externals/figlet/fonts/block.flf new file mode 100644 index 0000000000..b1172f049e --- /dev/null +++ b/externals/figlet/fonts/block.flf @@ -0,0 +1,1691 @@ +flf2a$ 8 6 27 0 10 0 576 96 +Block by Glenn Chappell 4/93 -- straight version of Lean +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + +$ $@ +$ $@ +$ $@ +$ $@ +$ $@ +$ $@ +$ $@ +$ $@@ + $$@ + _| $@ + _| $@ + _| $@ + $$@ + _| $@ + $$@ + @@ + _| _| $@ + _| _| $@ + $$@ + $$ @ + $$ @ + $$ @ + @ + @@ + $$ @ + _| _| $@ + _|_|_|_|_| $@ + _| _| $@ + _|_|_|_|_| $@ + _| _| $@ + $$ @ + @@ + $$ @ + _| $@ + _|_|_| $@ + _|_| $@ + _|_| $@ + _|_|_| $@ + _| $@ + $$ @@ + $$@ + _|_| _| $@ + _|_| _| $@ + _| $@ + _| _|_| $@ + _| _|_| $@ + $$@ + @@ + $$ @ + _| $ @ + _| _| $@ + _|_| _| $@ + _| _| $@ + _|_| _| $@ + $$@ + @@ + _| $@ + _| $@ + $$ @ + $$ @ + $$ @ + $$ @ + @ + @@ + _| $@ + _| $@ + _| $ @ + _| $ @ + _| $ @ + _| $@ + _| $@ + $$@@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + $$ @@ + $$@ + _| _| _| $@ + _|_|_| $@ + _|_|_|_|_| $@ + _|_|_| $@ + _| _| _| $@ + $$@ + @@ + $$ @ + _| $ @ + _| $@ + _|_|_|_|_| $@ + _| $@ + _| $ @ + $$ @ + @@ + @ + @ + @ + @ + $$@ + _| $@ + _| $@ + $$ @@ + @ + @ + $$@ + _|_|_|_|_| $@ + $$@ + @ + @ + @@ + @ + @ + @ + @ + $$@ + _| $@ + $$@ + @@ + $$@ + _| $@ + _| $@ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ + $$ @ + _| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| $@ + $$ @ + @@ + $$@ + _| $@ + _|_| $@ + _| $@ + _| $@ + _| $@ + $$@ + @@ + $$ @ + _|_| $@ + _| _| $@ + _| $@ + _| $@ + _|_|_|_| $@ + $$@ + @@ + $$ @ + _|_|_| $@ + _| $@ + _|_| $@ + _| $@ + _|_|_| $@ + $$ @ + @@ + $$ @ + _| _| $ @ + _| _| $@ + _|_|_|_| $@ + _| $@ + _| $ @ + $$ @ + @@ + $$@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + _| $@ + _|_|_| $@ + $$ @ + @@ + $$@ + _|_|_| $@ + _| $@ + _|_|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + $$@ + _|_|_|_|_| $@ + _| $@ + _| $@ + _| $ @ + _| $ @ + $$ @ + @@ + $$ @ + _|_| $@ + _| _| $@ + _|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + $$ @ + _|_| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _|_|_| $@ + $$ @ + @@ + @ + $$@ + _| $@ + $$@ + $$@ + _| $@ + $$@ + @@ + @ + $$@ + _| $@ + $$@ + $$@ + _| $@ + _| $@ + $$ @@ + $$@ + _| $@ + _| $@ + _| $ @ + _| $@ + _| $@ + $$@ + @@ + @ + $$@ + _|_|_|_|_| $@ + $$@ + _|_|_|_|_| $@ + $$@ + @ + @@ + $$ @ + _| $ @ + _| $@ + _| $@ + _| $@ + _| $ @ + $$ @ + @@ + $$ @ + _|_| $@ + _| $@ + _|_| $@ + $$ @ + _| $ @ + $$ @ + @@ + $$ @ + _|_|_|_|_| $@ + _| _| $@ + _| _|_|_| _| $@ + _| _| _| _| $@ + _| _|_|_|_| $@ + _| $@ + _|_|_|_|_|_| $@@ + $$ @ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + $$ @ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$ @ + @@ + $$@ + _|_|_| $@ + _| $@ + _| $ @ + _| $@ + _|_|_| $@ + $$@ + @@ + $$ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$ @ + @@ + $$@ + _|_|_|_| $@ + _| $@ + _|_|_| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ + $$@ + _|_|_|_| $@ + _| $@ + _|_|_| $ @ + _| $ @ + _| $ @ + $$ @ + @@ + $$@ + _|_|_| $@ + _| $@ + _| _|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + $$@ + _| _| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _|_|_| $@ + _| $@ + _| $ @ + _| $@ + _|_|_| $@ + $$@ + @@ + $$@ + _| $@ + _| $@ + _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + $$@ + _| _| $@ + _| _| $@ + _|_| $ @ + _| _| $@ + _| _| $@ + $$@ + @@ + $$ @ + _| $ @ + _| $ @ + _| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ + $$@ + _| _| $@ + _|_| _|_| $@ + _| _| _| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _| _| $@ + _|_| _| $@ + _| _| _| $@ + _| _|_| $@ + _| _| $@ + $$@ + @@ + $$ @ + _|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + $$ @ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + _| $ @ + _| $ @ + $$ @ + @@ + $$ @ + _|_| $ @ + _| _| $ @ + _| _|_| $ @ + _| _| $@ + _|_| _| $@ + $$@ + @@ + $$ @ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _|_|_| $@ + _| $@ + _|_| $@ + _| $@ + _|_|_| $@ + $$ @ + @@ + $$@ + _|_|_|_|_| $@ + _| $@ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| $ @ + $$ @ + @@ + $$@ + _| _| $@ + _| _| $@ + _| _| _| $@ + _| _| _| $@ + _| _| $ @ + $$ @ + @@ + $$@ + _| _| $@ + _| _| $@ + _| $ @ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _| _| $@ + _| _| $@ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ + $$@ + _|_|_|_|_| $@ + _| $@ + _| $ @ + _| $@ + _|_|_|_|_| $@ + $$@ + @@ + _|_| $@ + _| $@ + _| $ @ + _| $ @ + _| $ @ + _| $@ + _|_| $@ + $$@@ + $$ @ + _| $ @ + _| $ @ + _| $ @ + _| $@ + _| $@ + $$@ + @@ + _|_| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _|_| $@ + $$@@ + _| $@ + _| _| $@ + $$@ + $$ @ + $$ @ + $$ @ + @ + @@ + @ + @ + $$ @ + $$ @ + $$ @ + $$ @ + $$@ + _|_|_|_|_| $@@ + _| $@ + _| $@ + $$@ + $$ @ + $$ @ + $$ @ + @ + @@ + @ + $$@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + $$ @ + _| $ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$ @ + @@ + @ + $$@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @@ + $$@ + _| $@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + @ + $$ @ + _|_| $@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + $$@ + @@ + $$@ + _|_| $@ + _| $@ + _|_|_|_| $@ + _| $@ + _| $ @ + $$ @ + @@ + @ + $$@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _|_| $@@ + $$ @ + _| $ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _| $@ + $$@ + _| $@ + _| $@ + _| $@ + $$@ + @@ + $$@ + _| $@ + $$@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@@ + $$ @ + _| $ @ + _| _| $ @ + _|_| $ @ + _| _| $@ + _| _| $@ + $$@ + @@ + $$@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + $$@ + @@ + @ + $$ @ + _|_|_| _|_| $@ + _| _| _| $@ + _| _| _| $@ + _| _| _| $@ + $$@ + @@ + @ + $$ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + @ + $$ @ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + @ + $$ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $ @ + _| $ @@ + @ + $$@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _| $@@ + @ + $$@ + _| _|_| $@ + _|_| $@ + _| $ @ + _| $ @ + $$ @ + @@ + @ + $$@ + _|_|_| $@ + _|_| $@ + _|_| $@ + _|_|_| $@ + $$ @ + @@ + $$ @ + _| $@ + _|_|_|_| @ + _| $@ + _| $@ + _|_| $@ + $$@ + @@ + @ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + @ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _| $ @ + $$ @ + @@ + @ + $$@ + _| _| _| $@ + _| _| _| $@ + _| _| _| _| $@ + _| _| $ @ + $$ @ + @@ + @ + $$@ + _| _| $@ + _|_| $@ + _| _| $@ + _| _| $@ + $$@ + @@ + @ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _|_| $@@ + @ + $$@ + _|_|_|_| $@ + _| $@ + _| $@ + _|_|_|_| $@ + $$@ + @@ + _| $@ + _| $@ + _| $@ + _| $ @ + _| $@ + _| $@ + _| $@ + $$@@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@@ + _| $ @ + _| $@ + _| $@ + _| $@ + _| $@ + _| $@ + _| $ @ + $$ @@ + _| _| $@ + _| _| $@ + $$ @ + $$ @ + $$ @ + $$ @ + @ + @@ + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + _| _| $@ + $$@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ + $$ @ + _|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| $ @ + $$ @@ +160 NO-BREAK SPACE + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@ + $ $@@ +161 INVERTED EXCLAMATION MARK + $$@ + _| $@ + $$@ + _| $@ + _| $@ + _| $@ + $$@ + @@ +162 CENT SIGN + $$ @ + _| $@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + $$ @@ +163 POUND SIGN + $$ @ + _|_| $ @ + _| _| $ @ + _|_|_| $ @ + _| $@ + _|_|_| _| $@ + _|_| _|_| $@ + @@ +164 CURRENCY SIGN + $$@ + _| _| $@ + _|_|_|_| $@ + _| _| $ @ + _| _| $ @ + _|_|_|_| $@ + _| _| $@ + $$@@ +165 YEN SIGN + $$@ + _| _| $@ + _| _| $@ + _|_|_|_|_| $@ + _| $@ + _|_|_|_|_| $@ + _| $@ + $$ @@ +166 BROKEN BAR + _| $@ + _| $@ + _| $@ + $$@ + $$@ + _| $@ + _| $@ + _| $@@ +167 SECTION SIGN + _|_| $@ + _| $@ + _| $@ + _| _| $@ + _| $@ + _| $@ + _|_| $@ + $$ @@ +168 DIAERESIS + _| _| $@ + $$@ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + @ + @@ +169 COPYRIGHT SIGN + _|_|_|_| $ @ + _| _| $@ + _| _|_|_| _| $@ + _| _| _| $@ + _| _| _| $@ + _| _|_|_| _| $@ + _| _| $@ + _|_|_|_| $ @@ +170 FEMININE ORDINAL INDICATOR + $$@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + _|_|_|_| $@ + @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + $$@ + _| _| $@ + _| _| $@ + _| _| $ @ + _| _| $@ + _| _| $@ + $$@ + @@ +172 NOT SIGN + @ + @ + $$@ + _|_|_|_|_| $@ + _| $@ + $$@ + @ + @@ +173 SOFT HYPHEN + @ + @ + $$@ + _|_|_|_| $@ + $$@ + $$ @ + @ + @@ +174 REGISTERED SIGN + _|_|_|_| $ @ + _| _| $@ + _| _|_|_| _| $@ + _| _| _| _| $@ + _| _|_|_| _| $@ + _| _| _| _| $@ + _| _| $@ + _|_|_|_| $ @@ +175 MACRON + _|_|_|_|_| $@ + $$@ + $$ @ + $$ @ + $$ @ + $$ @ + @ + @@ +176 DEGREE SIGN + _| $@ + _| _| $@ + _| $@ + $$ @ + $$ @ + $$ @ + @ + @@ +177 PLUS-MINUS SIGN + $$ @ + _| $ @ + _| $@ + _|_|_|_|_| $@ + _| $@ + _|_|_|_|_| $@ + $$@ + @@ +178 SUPERSCRIPT TWO + $$ @ + _|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @ + @@ +179 SUPERSCRIPT THREE + $$@ + _|_|_| $@ + _| $@ + _| $@ + _|_| $@ + $$ @ + @ + @@ +180 ACUTE ACCENT + _| $@ + _| $@ + $$ @ + $$ @ + $$ @ + $$ @ + @ + @@ +181 MICRO SIGN + @ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_|_| $@ + _| $@ + _| $ @@ +182 PILCROW SIGN + $$@ + _|_|_|_| $@ + _|_|_| _| $@ + _|_| _| $@ + _| _| $@ + _| _| $@ + $$@ + @@ +183 MIDDLE DOT + @ + @ + $$@ + _| $@ + $$@ + $$ @ + @ + @@ +184 CEDILLA + @ + @ + @ + @ + @ + $$@ + _| $@ + _|_| $@@ +185 SUPERSCRIPT ONE + $$@ + _| $@ + _|_| $@ + _| $@ + _| $@ + $$@ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + $$ @ + _|_| $@ + _| _| $@ + _|_| $@ + $$@ + _|_|_|_| $@ + @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + $$ @ + _| _| $ @ + _| _| $@ + _| _| $@ + _| _| $@ + _| _| $ @ + $$ @ + @@ +188 VULGAR FRACTION ONE QUARTER + $$ @ + _| _| $ @ + _|_| _| _| _| $ @ + _| _| _| _| $@ + _| _| _|_|_|_| $@ + _| _| $@ + $$ @ + @@ +189 VULGAR FRACTION ONE HALF + $$ @ + _| _| $ @ + _|_| _| _|_| $@ + _| _| _| $@ + _| _| _| $@ + _| _|_|_| $@ + $$@ + @@ +190 VULGAR FRACTION THREE QUARTERS + $$ @ + _|_|_| _| $ @ + _| _| _| _| $ @ + _| _| _| _| $@ + _|_| _| _|_|_|_| $@ + _| _| $@ + $$ @ + @@ +191 INVERTED QUESTION MARK + $$@ + _| $@ + $$@ + _|_| $@ + _| $@ + _|_| $@ + $$@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + _| $ @ + _| $ @ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + _| $ @ + _| $ @ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + $$@ + _|_| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + _| _| $@ + _| _| $@ + $$ @ + _|_| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _|_| $@ + _| _| $@ + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _| _| $@ + $$@ + @@ +198 LATIN CAPITAL LETTER AE + $$@ + _|_|_|_|_|_| $@ + _| _| $@ + _|_|_|_|_|_| $ @ + _| _| $@ + _| _|_|_|_| $@ + $$@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + $$@ + _|_|_| $@ + _| $@ + _| $ @ + _| $@ + _|_|_| $@ + _| $@ + _|_| $ @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + _| $ @ + _| $@ + _|_|_|_| $@ + _|_|_| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _| $ @ + _| $@ + _|_|_|_| $@ + _|_|_| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + _|_|_|_| $@ + _|_|_| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _| _| $@ + $$@ + _|_|_|_| $@ + _|_|_| $ @ + _| $@ + _|_|_|_| $@ + $$@ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + _| $ @ + _| $@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + _| $@ + _| $@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _| _| $@ + $$@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +208 LATIN CAPITAL LETTER ETH + $$ @ + _|_|_| $@ + _| _| $@ + _|_|_| _| $@ + _| _| $@ + _|_|_| $@ + $$ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + _| _| $@ + _| _| $@ + _| _| $@ + _|_| _| $@ + _| _|_| $@ + _| _| $@ + $$@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + _| $ @ + _| $ @ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + _| $ @ + _| $ @ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + _| _| $@ + _| _| $@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +215 MULTIPLICATION SIGN + @ + $$@ + _| _| $@ + _| $@ + _| _| $@ + $$@ + @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + $$@ + _|_|_|_| $@ + _| _|_| $@ + _| _| _| $@ + _|_| _| $@ + _|_|_|_| $@ + $$ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + _| $ @ + _| $ @ + $$@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + _| $ @ + _| $ @ + $$@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + _| $ @ + _| $@ + _| _| $@ + _| _| $@ + _| $ @ + _| $ @ + $$ @ + @@ +222 LATIN CAPITAL LETTER THORN + $$ @ + _| $ @ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + _| $ @ + $$ @ + @@ +223 LATIN SMALL LETTER SHARP S + $$ @ + _|_| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| _| $@ + _| $ @ + $$ @@ +224 LATIN SMALL LETTER A WITH GRAVE + _| $ @ + _| $ @ + $$@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + _| $@ + _| $@ + $$@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + _| $@ + _| _| $@ + $$@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + _| _| $@ + _| _| $@ + $$@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _| _| $@ + $$@ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + _| $@ + _| _| $@ + _| $@ + _|_|_| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +230 LATIN SMALL LETTER AE + @ + $$ @ + _|_|_| _|_| $@ + _| _|_|_|_|_| $@ + _| _|_| $@ + _|_|_| _|_|_| $@ + $$@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + $$@ + _|_|_| $@ + _| $@ + _| $@ + _|_|_| $@ + _| $@ + _|_| $ @@ +232 LATIN SMALL LETTER E WITH GRAVE + _| $@ + _| $ @ + _|_| $@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + _| $@ + _| $@ + _|_| $@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + _|_| $@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _| _| $@ + $$@ + _|_| $@ + _|_|_|_| $@ + _| $@ + _|_|_| $@ + $$@ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + _| $@ + _| $@ + $$@ + _| $@ + _| $@ + _| $@ + $$@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + _| $@ + _| $@ + $$ @ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + _| $@ + _| _| $@ + $$@ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _| _| $@ + $$@ + _| $ @ + _| $ @ + _| $ @ + _| $ @ + $$ @ + @@ +240 LATIN SMALL LETTER ETH + _| _| $ @ + _| $ @ + _| _| $@ + _|_|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + _| _| $@ + _| _| $@ + $$ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + $$@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + _| $ @ + _| $ @ + $$ @ + _|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + _| $ @ + _| $ @ + $$ @ + _|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + _|_|_| $@ + _| _| $@ + $$ @ + _|_| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _| _| $@ + $$@ + _|_| $@ + _| _| $@ + _| _| $@ + _|_| $@ + $$ @ + @@ +247 DIVISION SIGN + $$ @ + _| $ @ + $$@ + _|_|_|_|_| $@ + $$@ + _| $ @ + $$ @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + $$@ + _|_|_| $@ + _| _|_| $@ + _|_| _| $@ + _|_|_| $@ + $$ @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + _| $ @ + _| $ @ + $$@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + _| $@ + _| $@ + $$@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + _|_| $@ + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + $$@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + _| $ @ + _| $ @ + $$@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _|_| $@@ +254 LATIN SMALL LETTER THORN + $$ @ + _| $ @ + _|_|_| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $ @ + _| $ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _| _| $@ + $$@ + _| _| $@ + _| _| $@ + _| _| $@ + _|_|_| $@ + _| $@ + _|_| $@@ diff --git a/externals/figlet/fonts/bubble.flf b/externals/figlet/fonts/bubble.flf new file mode 100644 index 0000000000..efd0a71964 --- /dev/null +++ b/externals/figlet/fonts/bubble.flf @@ -0,0 +1,1630 @@ +flf2a 4 3 8 15 11 0 10127 242 +Bubble by Glenn Chappell 4/93 +Includes characters 128-255 +Enhanced for Latin-2,3,4 by John Cowan +Latin character sets supported only if your screen font does +figlet release 2.2 -- November 1996 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + @ + @ + @ + @@ + _ @ + / \ @ + ( ! )@ + \_/ @@ + _ @ + / \ @ + ( " )@ + \_/ @@ + _ @ + / \ @ + ( # )@ + \_/ @@ + _ @ + / \ @ + ( $ )@ + \_/ @@ + _ @ + / \ @ + ( % )@ + \_/ @@ + _ @ + / \ @ + ( & )@ + \_/ @@ + _ @ + / \ @ + ( ' )@ + \_/ @@ + _ @ + / \ @ + ( ( )@ + \_/ @@ + _ @ + / \ @ + ( ) )@ + \_/ @@ + _ @ + / \ @ + ( * )@ + \_/ @@ + _ @ + / \ @ + ( + )@ + \_/ @@ + _ @ + / \ @ + ( , )@ + \_/ @@ + _ @ + / \ @ + ( - )@ + \_/ @@ + _ @ + / \ @ + ( . )@ + \_/ @@ + _ @ + / \ @ + ( / )@ + \_/ @@ + _ @ + / \ @ + ( 0 )@ + \_/ @@ + _ @ + / \ @ + ( 1 )@ + \_/ @@ + _ @ + / \ @ + ( 2 )@ + \_/ @@ + _ @ + / \ @ + ( 3 )@ + \_/ @@ + _ @ + / \ @ + ( 4 )@ + \_/ @@ + _ @ + / \ @ + ( 5 )@ + \_/ @@ + _ @ + / \ @ + ( 6 )@ + \_/ @@ + _ @ + / \ @ + ( 7 )@ + \_/ @@ + _ @ + / \ @ + ( 8 )@ + \_/ @@ + _ @ + / \ @ + ( 9 )@ + \_/ @@ + _ @ + / \ @ + ( : )@ + \_/ @@ + _ @ + / \ @ + ( ; )@ + \_/ @@ + _ @ + / \ @ + ( < )@ + \_/ @@ + _ @ + / \ @ + ( = )@ + \_/ @@ + _ @ + / \ @ + ( > )@ + \_/ @@ + _ @ + / \ @ + ( ? )@ + \_/ @@ + _ @ + / \ @ + ( @ )@ + \_/ @@ + _ @ + / \ @ + ( 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 )@ + \_/ @@ + _ @ + / \ @ + ( [ )@ + \_/ @@ + _ @ + / \ @ + ( \ )@ + \_/ @@ + _ @ + / \ @ + ( ] )@ + \_/ @@ + _ @ + / \ @ + ( ^ )@ + \_/ @@ + _ @ + / \ @ + ( _ )@ + \_/ @@ + _ @ + / \ @ + ( ` )@ + \_/ @@ + _ @ + / \ @ + ( 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 )@ + \_/ @@ + _ @ + / \ @ + ( { )@ + \_/ @@ + _ @ + / \ @ + ( | )@ + \_/ @@ + _ @ + / \ @ + ( } )@ + \_/ @@ + _ @ + / \ @ + ( ~ )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ + _ @ + / \ @ + ( � )@ + \_/ @@ +128 + _ @ + / \ @ + ( � )@ + \_/ @@ +129 + _ @ + / \ @ + ( � )@ + \_/ @@ +130 + _ @ + / \ @ + ( � )@ + \_/ @@ +131 + _ @ + / \ @ + ( � )@ + \_/ @@ +132 + _ @ + / \ @ + ( � )@ + \_/ @@ +133 + _ @ + / \ @ + ( � )@ + \_/ @@ +134 + _ @ + / \ @ + ( � )@ + \_/ @@ +135 + _ @ + / \ @ + ( � )@ + \_/ @@ +136 + _ @ + / \ @ + ( � )@ + \_/ @@ +137 + _ @ + / \ @ + ( � )@ + \_/ @@ +138 + _ @ + / \ @ + ( � )@ + \_/ @@ +139 + _ @ + / \ @ + ( � )@ + \_/ @@ +140 + _ @ + / \ @ + ( � )@ + \_/ @@ +141 + _ @ + / \ @ + ( � )@ + \_/ @@ +142 + _ @ + / \ @ + ( � )@ + \_/ @@ +143 + _ @ + / \ @ + ( � )@ + \_/ @@ +144 + _ @ + / \ @ + ( � )@ + \_/ @@ +145 + _ @ + / \ @ + ( � )@ + \_/ @@ +146 + _ @ + / \ @ + ( � )@ + \_/ @@ +147 + _ @ + / \ @ + ( � )@ + \_/ @@ +148 + _ @ + / \ @ + ( � )@ + \_/ @@ +149 + _ @ + / \ @ + ( � )@ + \_/ @@ +150 + _ @ + / \ @ + ( � )@ + \_/ @@ +151 + _ @ + / \ @ + ( � )@ + \_/ @@ +152 + _ @ + / \ @ + ( � )@ + \_/ @@ +153 + _ @ + / \ @ + ( � )@ + \_/ @@ +154 + _ @ + / \ @ + ( � )@ + \_/ @@ +155 + _ @ + / \ @ + ( � )@ + \_/ @@ +156 + _ @ + / \ @ + ( � )@ + \_/ @@ +157 + _ @ + / \ @ + ( � )@ + \_/ @@ +158 + _ @ + / \ @ + ( � )@ + \_/ @@ +159 + _ @ + / \ @ + ( � )@ + \_/ @@ +160 NO-BREAK SPACE + _ @ + / \ @ + ( � )@ + \_/ @@ +161 INVERTED EXCLAMATION MARK + _ @ + / \ @ + ( � )@ + \_/ @@ +162 CENT SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +163 POUND SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +164 CURRENCY SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +165 YEN SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +166 BROKEN BAR + _ @ + / \ @ + ( � )@ + \_/ @@ +167 SECTION SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +168 DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +169 COPYRIGHT SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +170 FEMININE ORDINAL INDICATOR + _ @ + / \ @ + ( � )@ + \_/ @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + _ @ + / \ @ + ( � )@ + \_/ @@ +172 NOT SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +173 SOFT HYPHEN + _ @ + / \ @ + ( � )@ + \_/ @@ +174 REGISTERED SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +175 MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +176 DEGREE SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +177 PLUS-MINUS SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +178 SUPERSCRIPT TWO + _ @ + / \ @ + ( � )@ + \_/ @@ +179 SUPERSCRIPT THREE + _ @ + / \ @ + ( � )@ + \_/ @@ +180 ACUTE ACCENT + _ @ + / \ @ + ( � )@ + \_/ @@ +181 MICRO SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +182 PILCROW SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +183 MIDDLE DOT + _ @ + / \ @ + ( � )@ + \_/ @@ +184 CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +185 SUPERSCRIPT ONE + _ @ + / \ @ + ( � )@ + \_/ @@ +186 MASCULINE ORDINAL INDICATOR + _ @ + / \ @ + ( � )@ + \_/ @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + _ @ + / \ @ + ( � )@ + \_/ @@ +188 VULGAR FRACTION ONE QUARTER + _ @ + / \ @ + ( � )@ + \_/ @@ +189 VULGAR FRACTION ONE HALF + _ @ + / \ @ + ( � )@ + \_/ @@ +190 VULGAR FRACTION THREE QUARTERS + _ @ + / \ @ + ( � )@ + \_/ @@ +191 INVERTED QUESTION MARK + _ @ + / \ @ + ( � )@ + \_/ @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +195 LATIN CAPITAL LETTER A WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +198 LATIN CAPITAL LETTER AE + _ @ + / \ @ + ( � )@ + \_/ @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +208 LATIN CAPITAL LETTER ETH + _ @ + / \ @ + ( � )@ + \_/ @@ +209 LATIN CAPITAL LETTER N WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +213 LATIN CAPITAL LETTER O WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +215 MULTIPLICATION SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +222 LATIN CAPITAL LETTER THORN + _ @ + / \ @ + ( � )@ + \_/ @@ +223 LATIN SMALL LETTER SHARP S + _ @ + / \ @ + ( � )@ + \_/ @@ +224 LATIN SMALL LETTER A WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +225 LATIN SMALL LETTER A WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +227 LATIN SMALL LETTER A WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +230 LATIN SMALL LETTER AE + _ @ + / \ @ + ( � )@ + \_/ @@ +231 LATIN SMALL LETTER C WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +232 LATIN SMALL LETTER E WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +233 LATIN SMALL LETTER E WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +236 LATIN SMALL LETTER I WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +237 LATIN SMALL LETTER I WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +240 LATIN SMALL LETTER ETH + _ @ + / \ @ + ( � )@ + \_/ @@ +241 LATIN SMALL LETTER N WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +242 LATIN SMALL LETTER O WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +243 LATIN SMALL LETTER O WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +245 LATIN SMALL LETTER O WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +247 DIVISION SIGN + _ @ + / \ @ + ( � )@ + \_/ @@ +248 LATIN SMALL LETTER O WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +249 LATIN SMALL LETTER U WITH GRAVE + _ @ + / \ @ + ( � )@ + \_/ @@ +250 LATIN SMALL LETTER U WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +253 LATIN SMALL LETTER Y WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +254 LATIN SMALL LETTER THORN + _ @ + / \ @ + ( � )@ + \_/ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0100 LATIN CAPITAL LETTER A WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0101 LATIN SMALL LETTER A WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0102 LATIN CAPITAL LETTER A WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0103 LATIN SMALL LETTER A WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0104 LATIN CAPITAL LETTER A WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0105 LATIN SMALL LETTER A WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0106 LATIN CAPITAL LETTER C WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0107 LATIN SMALL LETTER C WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010B LATIN SMALL LETTER C WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010C LATIN CAPITAL LETTER C WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010D LATIN SMALL LETTER C WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010E LATIN CAPITAL LETTER D WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x010F LATIN SMALL LETTER D WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0110 LATIN CAPITAL LETTER D WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0111 LATIN SMALL LETTER D WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0112 LATIN CAPITAL LETTER E WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0113 LATIN SMALL LETTER E WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0118 LATIN CAPITAL LETTER E WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0119 LATIN SMALL LETTER E WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011A LATIN CAPITAL LETTER E WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011B LATIN SMALL LETTER E WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011E LATIN CAPITAL LETTER G WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x011F LATIN SMALL LETTER G WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0123 LATIN SMALL LETTER G WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0126 LATIN CAPITAL LETTER H WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0127 LATIN SMALL LETTER H WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0128 LATIN CAPITAL LETTER I WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0129 LATIN SMALL LETTER I WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x012A LATIN CAPITAL LETTER I WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x012B LATIN SMALL LETTER I WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x012E LATIN CAPITAL LETTER I WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x012F LATIN SMALL LETTER I WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0131 LATIN SMALL LETTER DOTLESS I + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0137 LATIN SMALL LETTER K WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0138 LATIN SMALL LETTER KRA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0139 LATIN CAPITAL LETTER L WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x013A LATIN SMALL LETTER L WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x013B LATIN CAPITAL LETTER L WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x013C LATIN SMALL LETTER L WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x013D LATIN CAPITAL LETTER L WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x013E LATIN SMALL LETTER L WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0141 LATIN CAPITAL LETTER L WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0142 LATIN SMALL LETTER L WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0143 LATIN CAPITAL LETTER N WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0144 LATIN SMALL LETTER N WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0146 LATIN SMALL LETTER N WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0147 LATIN CAPITAL LETTER N WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0148 LATIN SMALL LETTER N WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x014A LATIN CAPITAL LETTER ENG + _ @ + / \ @ + ( � )@ + \_/ @@ +0x014B LATIN SMALL LETTER ENG + _ @ + / \ @ + ( � )@ + \_/ @@ +0x014C LATIN CAPITAL LETTER O WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x014D LATIN SMALL LETTER O WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0154 LATIN CAPITAL LETTER R WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0155 LATIN SMALL LETTER R WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0157 LATIN SMALL LETTER R WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0158 LATIN CAPITAL LETTER R WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0159 LATIN SMALL LETTER R WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015A LATIN CAPITAL LETTER S WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015B LATIN SMALL LETTER S WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015E LATIN CAPITAL LETTER S WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x015F LATIN SMALL LETTER S WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0160 LATIN CAPITAL LETTER S WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0161 LATIN SMALL LETTER S WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0163 LATIN SMALL LETTER T WITH CEDILLA + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0164 LATIN CAPITAL LETTER T WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0165 LATIN SMALL LETTER T WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0166 LATIN CAPITAL LETTER T WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0167 LATIN SMALL LETTER T WITH STROKE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0168 LATIN CAPITAL LETTER U WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0169 LATIN SMALL LETTER U WITH TILDE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016A LATIN CAPITAL LETTER U WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016B LATIN SMALL LETTER U WITH MACRON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016C LATIN CAPITAL LETTER U WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016D LATIN SMALL LETTER U WITH BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x016F LATIN SMALL LETTER U WITH RING ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0172 LATIN CAPITAL LETTER U WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0173 LATIN SMALL LETTER U WITH OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x017A LATIN SMALL LETTER Z WITH ACUTE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x017D LATIN CAPITAL LETTER Z WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x017E LATIN SMALL LETTER Z WITH CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x02C7 CARON + _ @ + / \ @ + ( � )@ + \_/ @@ +0x02D8 BREVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x02D9 DOT ABOVE + _ @ + / \ @ + ( � )@ + \_/ @@ +0x02DB OGONEK + _ @ + / \ @ + ( � )@ + \_/ @@ +0x02DD DOUBLE ACUTE ACCENT + _ @ + / \ @ + ( � )@ + \_/ @@ diff --git a/externals/figlet/fonts/digital.flf b/externals/figlet/fonts/digital.flf new file mode 100644 index 0000000000..6b7a1cabbf --- /dev/null +++ b/externals/figlet/fonts/digital.flf @@ -0,0 +1,1286 @@ +flf2a 3 2 6 1 11 0 16513 242 +Digital by Glenn Chappell 1/94 -- based on Bubble +Includes characters 128-255 +Enhanced for Latin-2,3,4 by John Cowan +Latin character sets supported only if your screen font does +figlet release 2.2 -- November 1996 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + @ + @ + @@ + +-+@ + |!|@ + +-+@@ + +-+@ + |"|@ + +-+@@ + +-+@ + |#|@ + +-+@@ + +-+@ + |$|@ + +-+@@ + +-+@ + |%|@ + +-+@@ + +-+@ + |&|@ + +-+@@ + +-+@ + |'|@ + +-+@@ + +-+@ + |(|@ + +-+@@ + +-+@ + |)|@ + +-+@@ + +-+@ + |*|@ + +-+@@ + +-+@ + |+|@ + +-+@@ + +-+@ + |,|@ + +-+@@ + +-+@ + |-|@ + +-+@@ + +-+@ + |.|@ + +-+@@ + +-+@ + |/|@ + +-+@@ + +-+@ + |0|@ + +-+@@ + +-+@ + |1|@ + +-+@@ + +-+@ + |2|@ + +-+@@ + +-+@ + |3|@ + +-+@@ + +-+@ + |4|@ + +-+@@ + +-+@ + |5|@ + +-+@@ + +-+@ + |6|@ + +-+@@ + +-+@ + |7|@ + +-+@@ + +-+@ + |8|@ + +-+@@ + +-+@ + |9|@ + +-+@@ + +-+@ + |:|@ + +-+@@ + +-+@ + |;|@ + +-+@@ + +-+@ + |<|@ + +-+@@ + +-+@ + |=|@ + +-+@@ + +-+@ + |>|@ + +-+@@ + +-+@ + |?|@ + +-+@@ + +-+@ + |@|@ + +-+@@ + +-+@ + |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|@ + +-+@@ + +-+@ + |[|@ + +-+@@ + +-+@ + |\|@ + +-+@@ + +-+@ + |]|@ + +-+@@ + +-+@ + |^|@ + +-+@@ + +-+@ + |_|@ + +-+@@ + +-+@ + |`|@ + +-+@@ + +-+@ + |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|@ + +-+@@ + +-+@ + |{|@ + +-+@@ + +-+@ + |||@ + +-+@@ + +-+@ + |}|@ + +-+@@ + +-+@ + |~|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ + +-+@ + |�|@ + +-+@@ +128 + +-+@ + |�|@ + +-+@@ +129 + +-+@ + |�|@ + +-+@@ +130 + +-+@ + |�|@ + +-+@@ +131 + +-+@ + |�|@ + +-+@@ +132 + +-+@ + |�|@ + +-+@@ +133 + +-+@ + |�|@ + +-+@@ +134 + +-+@ + |�|@ + +-+@@ +135 + +-+@ + |�|@ + +-+@@ +136 + +-+@ + |�|@ + +-+@@ +137 + +-+@ + |�|@ + +-+@@ +138 + +-+@ + |�|@ + +-+@@ +139 + +-+@ + |�|@ + +-+@@ +140 + +-+@ + |�|@ + +-+@@ +141 + +-+@ + |�|@ + +-+@@ +142 + +-+@ + |�|@ + +-+@@ +143 + +-+@ + |�|@ + +-+@@ +144 + +-+@ + |�|@ + +-+@@ +145 + +-+@ + |�|@ + +-+@@ +146 + +-+@ + |�|@ + +-+@@ +147 + +-+@ + |�|@ + +-+@@ +148 + +-+@ + |�|@ + +-+@@ +149 + +-+@ + |�|@ + +-+@@ +150 + +-+@ + |�|@ + +-+@@ +151 + +-+@ + |�|@ + +-+@@ +152 + +-+@ + |�|@ + +-+@@ +153 + +-+@ + |�|@ + +-+@@ +154 + +-+@ + |�|@ + +-+@@ +155 + +-+@ + |�|@ + +-+@@ +156 + +-+@ + |�|@ + +-+@@ +157 + +-+@ + |�|@ + +-+@@ +158 + +-+@ + |�|@ + +-+@@ +159 + +-+@ + |�|@ + +-+@@ +160 NO-BREAK SPACE + +-+@ + |�|@ + +-+@@ +161 INVERTED EXCLAMATION MARK + +-+@ + |�|@ + +-+@@ +162 CENT SIGN + +-+@ + |�|@ + +-+@@ +163 POUND SIGN + +-+@ + |�|@ + +-+@@ +164 CURRENCY SIGN + +-+@ + |�|@ + +-+@@ +165 YEN SIGN + +-+@ + |�|@ + +-+@@ +166 BROKEN BAR + +-+@ + |�|@ + +-+@@ +167 SECTION SIGN + +-+@ + |�|@ + +-+@@ +168 DIAERESIS + +-+@ + |�|@ + +-+@@ +169 COPYRIGHT SIGN + +-+@ + |�|@ + +-+@@ +170 FEMININE ORDINAL INDICATOR + +-+@ + |�|@ + +-+@@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + +-+@ + |�|@ + +-+@@ +172 NOT SIGN + +-+@ + |�|@ + +-+@@ +173 SOFT HYPHEN + +-+@ + |�|@ + +-+@@ +174 REGISTERED SIGN + +-+@ + |�|@ + +-+@@ +175 MACRON + +-+@ + |�|@ + +-+@@ +176 DEGREE SIGN + +-+@ + |�|@ + +-+@@ +177 PLUS-MINUS SIGN + +-+@ + |�|@ + +-+@@ +178 SUPERSCRIPT TWO + +-+@ + |�|@ + +-+@@ +179 SUPERSCRIPT THREE + +-+@ + |�|@ + +-+@@ +180 ACUTE ACCENT + +-+@ + |�|@ + +-+@@ +181 MICRO SIGN + +-+@ + |�|@ + +-+@@ +182 PILCROW SIGN + +-+@ + |�|@ + +-+@@ +183 MIDDLE DOT + +-+@ + |�|@ + +-+@@ +184 CEDILLA + +-+@ + |�|@ + +-+@@ +185 SUPERSCRIPT ONE + +-+@ + |�|@ + +-+@@ +186 MASCULINE ORDINAL INDICATOR + +-+@ + |�|@ + +-+@@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + +-+@ + |�|@ + +-+@@ +188 VULGAR FRACTION ONE QUARTER + +-+@ + |�|@ + +-+@@ +189 VULGAR FRACTION ONE HALF + +-+@ + |�|@ + +-+@@ +190 VULGAR FRACTION THREE QUARTERS + +-+@ + |�|@ + +-+@@ +191 INVERTED QUESTION MARK + +-+@ + |�|@ + +-+@@ +192 LATIN CAPITAL LETTER A WITH GRAVE + +-+@ + |�|@ + +-+@@ +193 LATIN CAPITAL LETTER A WITH ACUTE + +-+@ + |�|@ + +-+@@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +195 LATIN CAPITAL LETTER A WITH TILDE + +-+@ + |�|@ + +-+@@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + +-+@ + |�|@ + +-+@@ +198 LATIN CAPITAL LETTER AE + +-+@ + |�|@ + +-+@@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + +-+@ + |�|@ + +-+@@ +200 LATIN CAPITAL LETTER E WITH GRAVE + +-+@ + |�|@ + +-+@@ +201 LATIN CAPITAL LETTER E WITH ACUTE + +-+@ + |�|@ + +-+@@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +204 LATIN CAPITAL LETTER I WITH GRAVE + +-+@ + |�|@ + +-+@@ +205 LATIN CAPITAL LETTER I WITH ACUTE + +-+@ + |�|@ + +-+@@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +208 LATIN CAPITAL LETTER ETH + +-+@ + |�|@ + +-+@@ +209 LATIN CAPITAL LETTER N WITH TILDE + +-+@ + |�|@ + +-+@@ +210 LATIN CAPITAL LETTER O WITH GRAVE + +-+@ + |�|@ + +-+@@ +211 LATIN CAPITAL LETTER O WITH ACUTE + +-+@ + |�|@ + +-+@@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +213 LATIN CAPITAL LETTER O WITH TILDE + +-+@ + |�|@ + +-+@@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +215 MULTIPLICATION SIGN + +-+@ + |�|@ + +-+@@ +216 LATIN CAPITAL LETTER O WITH STROKE + +-+@ + |�|@ + +-+@@ +217 LATIN CAPITAL LETTER U WITH GRAVE + +-+@ + |�|@ + +-+@@ +218 LATIN CAPITAL LETTER U WITH ACUTE + +-+@ + |�|@ + +-+@@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + +-+@ + |�|@ + +-+@@ +222 LATIN CAPITAL LETTER THORN + +-+@ + |�|@ + +-+@@ +223 LATIN SMALL LETTER SHARP S + +-+@ + |�|@ + +-+@@ +224 LATIN SMALL LETTER A WITH GRAVE + +-+@ + |�|@ + +-+@@ +225 LATIN SMALL LETTER A WITH ACUTE + +-+@ + |�|@ + +-+@@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +227 LATIN SMALL LETTER A WITH TILDE + +-+@ + |�|@ + +-+@@ +228 LATIN SMALL LETTER A WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +229 LATIN SMALL LETTER A WITH RING ABOVE + +-+@ + |�|@ + +-+@@ +230 LATIN SMALL LETTER AE + +-+@ + |�|@ + +-+@@ +231 LATIN SMALL LETTER C WITH CEDILLA + +-+@ + |�|@ + +-+@@ +232 LATIN SMALL LETTER E WITH GRAVE + +-+@ + |�|@ + +-+@@ +233 LATIN SMALL LETTER E WITH ACUTE + +-+@ + |�|@ + +-+@@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +235 LATIN SMALL LETTER E WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +236 LATIN SMALL LETTER I WITH GRAVE + +-+@ + |�|@ + +-+@@ +237 LATIN SMALL LETTER I WITH ACUTE + +-+@ + |�|@ + +-+@@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +239 LATIN SMALL LETTER I WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +240 LATIN SMALL LETTER ETH + +-+@ + |�|@ + +-+@@ +241 LATIN SMALL LETTER N WITH TILDE + +-+@ + |�|@ + +-+@@ +242 LATIN SMALL LETTER O WITH GRAVE + +-+@ + |�|@ + +-+@@ +243 LATIN SMALL LETTER O WITH ACUTE + +-+@ + |�|@ + +-+@@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +245 LATIN SMALL LETTER O WITH TILDE + +-+@ + |�|@ + +-+@@ +246 LATIN SMALL LETTER O WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +247 DIVISION SIGN + +-+@ + |�|@ + +-+@@ +248 LATIN SMALL LETTER O WITH STROKE + +-+@ + |�|@ + +-+@@ +249 LATIN SMALL LETTER U WITH GRAVE + +-+@ + |�|@ + +-+@@ +250 LATIN SMALL LETTER U WITH ACUTE + +-+@ + |�|@ + +-+@@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +252 LATIN SMALL LETTER U WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +253 LATIN SMALL LETTER Y WITH ACUTE + +-+@ + |�|@ + +-+@@ +254 LATIN SMALL LETTER THORN + +-+@ + |�|@ + +-+@@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + +-+@ + |�|@ + +-+@@ +0x0100 LATIN CAPITAL LETTER A WITH MACRON + +-+@ + |�|@ + +-+@@ +0x0101 LATIN SMALL LETTER A WITH MACRON + +-+@ + |�|@ + +-+@@ +0x0102 LATIN CAPITAL LETTER A WITH BREVE + +-+@ + |�|@ + +-+@@ +0x0103 LATIN SMALL LETTER A WITH BREVE + +-+@ + |�|@ + +-+@@ +0x0104 LATIN CAPITAL LETTER A WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0105 LATIN SMALL LETTER A WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0106 LATIN CAPITAL LETTER C WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0107 LATIN SMALL LETTER C WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x010B LATIN SMALL LETTER C WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x010C LATIN CAPITAL LETTER C WITH CARON + +-+@ + |�|@ + +-+@@ +0x010D LATIN SMALL LETTER C WITH CARON + +-+@ + |�|@ + +-+@@ +0x010E LATIN CAPITAL LETTER D WITH CARON + +-+@ + |�|@ + +-+@@ +0x010F LATIN SMALL LETTER D WITH CARON + +-+@ + |�|@ + +-+@@ +0x0110 LATIN CAPITAL LETTER D WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0111 LATIN SMALL LETTER D WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0112 LATIN CAPITAL LETTER E WITH MACRON + +-+@ + |�|@ + +-+@@ +0x0113 LATIN SMALL LETTER E WITH MACRON + +-+@ + |�|@ + +-+@@ +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x0118 LATIN CAPITAL LETTER E WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0119 LATIN SMALL LETTER E WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x011A LATIN CAPITAL LETTER E WITH CARON + +-+@ + |�|@ + +-+@@ +0x011B LATIN SMALL LETTER E WITH CARON + +-+@ + |�|@ + +-+@@ +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x011E LATIN CAPITAL LETTER G WITH BREVE + +-+@ + |�|@ + +-+@@ +0x011F LATIN SMALL LETTER G WITH BREVE + +-+@ + |�|@ + +-+@@ +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0123 LATIN SMALL LETTER G WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x0126 LATIN CAPITAL LETTER H WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0127 LATIN SMALL LETTER H WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0128 LATIN CAPITAL LETTER I WITH TILDE + +-+@ + |�|@ + +-+@@ +0x0129 LATIN SMALL LETTER I WITH TILDE + +-+@ + |�|@ + +-+@@ +0x012A LATIN CAPITAL LETTER I WITH MACRON + +-+@ + |�|@ + +-+@@ +0x012B LATIN SMALL LETTER I WITH MACRON + +-+@ + |�|@ + +-+@@ +0x012E LATIN CAPITAL LETTER I WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x012F LATIN SMALL LETTER I WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x0131 LATIN SMALL LETTER DOTLESS I + +-+@ + |�|@ + +-+@@ +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0137 LATIN SMALL LETTER K WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0138 LATIN SMALL LETTER KRA + +-+@ + |�|@ + +-+@@ +0x0139 LATIN CAPITAL LETTER L WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x013A LATIN SMALL LETTER L WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x013B LATIN CAPITAL LETTER L WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x013C LATIN SMALL LETTER L WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x013D LATIN CAPITAL LETTER L WITH CARON + +-+@ + |�|@ + +-+@@ +0x013E LATIN SMALL LETTER L WITH CARON + +-+@ + |�|@ + +-+@@ +0x0141 LATIN CAPITAL LETTER L WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0142 LATIN SMALL LETTER L WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0143 LATIN CAPITAL LETTER N WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0144 LATIN SMALL LETTER N WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0146 LATIN SMALL LETTER N WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0147 LATIN CAPITAL LETTER N WITH CARON + +-+@ + |�|@ + +-+@@ +0x0148 LATIN SMALL LETTER N WITH CARON + +-+@ + |�|@ + +-+@@ +0x014A LATIN CAPITAL LETTER ENG + +-+@ + |�|@ + +-+@@ +0x014B LATIN SMALL LETTER ENG + +-+@ + |�|@ + +-+@@ +0x014C LATIN CAPITAL LETTER O WITH MACRON + +-+@ + |�|@ + +-+@@ +0x014D LATIN SMALL LETTER O WITH MACRON + +-+@ + |�|@ + +-+@@ +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + +-+@ + |�|@ + +-+@@ +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE + +-+@ + |�|@ + +-+@@ +0x0154 LATIN CAPITAL LETTER R WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0155 LATIN SMALL LETTER R WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0157 LATIN SMALL LETTER R WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0158 LATIN CAPITAL LETTER R WITH CARON + +-+@ + |�|@ + +-+@@ +0x0159 LATIN SMALL LETTER R WITH CARON + +-+@ + |�|@ + +-+@@ +0x015A LATIN CAPITAL LETTER S WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x015B LATIN SMALL LETTER S WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX + +-+@ + |�|@ + +-+@@ +0x015E LATIN CAPITAL LETTER S WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x015F LATIN SMALL LETTER S WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0160 LATIN CAPITAL LETTER S WITH CARON + +-+@ + |�|@ + +-+@@ +0x0161 LATIN SMALL LETTER S WITH CARON + +-+@ + |�|@ + +-+@@ +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0163 LATIN SMALL LETTER T WITH CEDILLA + +-+@ + |�|@ + +-+@@ +0x0164 LATIN CAPITAL LETTER T WITH CARON + +-+@ + |�|@ + +-+@@ +0x0165 LATIN SMALL LETTER T WITH CARON + +-+@ + |�|@ + +-+@@ +0x0166 LATIN CAPITAL LETTER T WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0167 LATIN SMALL LETTER T WITH STROKE + +-+@ + |�|@ + +-+@@ +0x0168 LATIN CAPITAL LETTER U WITH TILDE + +-+@ + |�|@ + +-+@@ +0x0169 LATIN SMALL LETTER U WITH TILDE + +-+@ + |�|@ + +-+@@ +0x016A LATIN CAPITAL LETTER U WITH MACRON + +-+@ + |�|@ + +-+@@ +0x016B LATIN SMALL LETTER U WITH MACRON + +-+@ + |�|@ + +-+@@ +0x016C LATIN CAPITAL LETTER U WITH BREVE + +-+@ + |�|@ + +-+@@ +0x016D LATIN SMALL LETTER U WITH BREVE + +-+@ + |�|@ + +-+@@ +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE + +-+@ + |�|@ + +-+@@ +0x016F LATIN SMALL LETTER U WITH RING ABOVE + +-+@ + |�|@ + +-+@@ +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + +-+@ + |�|@ + +-+@@ +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE + +-+@ + |�|@ + +-+@@ +0x0172 LATIN CAPITAL LETTER U WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0173 LATIN SMALL LETTER U WITH OGONEK + +-+@ + |�|@ + +-+@@ +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x017A LATIN SMALL LETTER Z WITH ACUTE + +-+@ + |�|@ + +-+@@ +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x017D LATIN CAPITAL LETTER Z WITH CARON + +-+@ + |�|@ + +-+@@ +0x017E LATIN SMALL LETTER Z WITH CARON + +-+@ + |�|@ + +-+@@ +0x02C7 CARON + +-+@ + |�|@ + +-+@@ +0x02D8 BREVE + +-+@ + |�|@ + +-+@@ +0x02D9 DOT ABOVE + +-+@ + |�|@ + +-+@@ +0x02DB OGONEK + +-+@ + |�|@ + +-+@@ +0x02DD DOUBLE ACUTE ACCENT + +-+@ + |�|@ + +-+@@ diff --git a/externals/figlet/fonts/frango.flc b/externals/figlet/fonts/frango.flc new file mode 100644 index 0000000000..0196230a2e --- /dev/null +++ b/externals/figlet/fonts/frango.flc @@ -0,0 +1,65 @@ +flc2a +# This file can be used with a Unicode-Greek FIGfont +# to convert "frangovlakhika" (Greek written in Latin +# letters) into real Greek. +# +# The mapping is the same as that used by the "ntgreek" FIGfont. + +t ( \0x02BD +t ) \0x02BC +t : \0x0387 +t A \0x0391 +t B \0x0392 +t C \0x03A7 +t D \0x0394 +t E \0x0395 +t F \0x03A6 +t G \0x0393 +t H \0x0397 +t I \0x0399 +t J \0x03D1 +t K \0x039A +t L \0x039B +t M \0x039C +t N \0x039D +t O \0x039F +t P \0x03A0 +t Q \0x0398 +t R \0x03A1 +t S \0x03A3 +t T \0x03A4 +t U \0x03A5 +t V \0x03C2 sigma +t W \0x03A9 +t X \0x039E +t Y \0x03A8 +t Z \0x0396 +t _ \0x037A +t a \0x03b1 +t b \0x03b2 +t c \0x03C7 +t d \0x03B4 +t e \0x03B5 +t f \0x03C6 +t g \0x03B3 +t h \0x03B7 +t i \0x03B9 +t j \0x03D5 +t k \0x03BA +t l \0x03BB +t m \0x03BC +t n \0x03BD +t o \0x03BF +t p \0x03C0 +t q \0x03B8 +t r \0x03C1 +t s \0x03C3 +t t \0x03C4 +t u \0x03C5 +t v \0x03D6 +t w \0x03C9 +t x \0x03BE +t y \0x03C8 +t z \0x03B6 +t ' \0x00A8 +t ~ \-5 diff --git a/externals/figlet/fonts/hz.flc b/externals/figlet/fonts/hz.flc new file mode 100644 index 0000000000..2d89e4bcf8 --- /dev/null +++ b/externals/figlet/fonts/hz.flc @@ -0,0 +1,4 @@ +flc2a +# Set HZ input mode (a 7-bit encoding of GB Chinese text) +# Meaningful only to FIGlet 2.2 beta 4 or better +h diff --git a/externals/figlet/fonts/ilhebrew.flc b/externals/figlet/fonts/ilhebrew.flc new file mode 100644 index 0000000000..1b46d79563 --- /dev/null +++ b/externals/figlet/fonts/ilhebrew.flc @@ -0,0 +1,38 @@ +flc2a +# implements a natural mapping from the Hebrew keyboard +# to Hebrew letters in the Ivrit font. +# Note that capital letters remain unchanged. + +t t \0x05d0 +t c \0x05d1 +t d \0x05d2 +t s \0x05d3 +t v \0x05d4 +t u \0x05d5 +t z \0x05d6 +t j \0x05d7 +t y \0x05d8 +t h \0x05d9 +t f \0x05db +t l \0x05da +t k \0x05dc +t n \0x05de +t o \0x05dd +t b \0x05e0 +t i \0x05df +t x \0x05e1 +t g \0x05e2 +t p \0x05e3 +t ; \0x05e4 +t m \0x05e6 +t . \0x05e5 +t e \0x05e7 +t r \0x05e8 +t a \0x05e9 +t , \0x05ea +t ' , +t / . +t ` ; +t q / +t w ' +t ~ \-2 diff --git a/externals/figlet/fonts/ivrit.flf b/externals/figlet/fonts/ivrit.flf new file mode 100644 index 0000000000..69f16d4948 --- /dev/null +++ b/externals/figlet/fonts/ivrit.flf @@ -0,0 +1,900 @@ +flf2a$ 6 5 76 15 14 1 16271 39 +Ivrit (Hebrew) Unicode font assembled by John Cowan +Latin chars from Standard by G. Chappell & Ian Chai +Hebrew chars from Jerusalem by Gedaliah Friedenberg + Use "ilhebrew.flc" for Hebrew keyboard mapping + Use "ushebrew.flc" for U.S.-style keyboard mapping ("febrew" script) + Use "8859-8.flc" for ISO 8859-8 text + Or use UTF-8 +WARNING! FIGfonts aren't bidirectional; this is strictly right-to-left + (by default) even for the Latin characters. +figlet release 2.2 -- November 1996 + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + $@ + $@ + $@ + $@ + $@ + $@@ + _ @ + | |@ + | |@ + |_|@ + (_)@ + @@ + _ _ @ + ( | )@ + V V @ + $ @ + $ @ + @@ + _ _ @ + _| || |_ @ + |_ .. _|@ + |_ _|@ + |_||_| @ + @@ + _ @ + | | @ + / __)@ + \__ \@ + ( /@ + |_| @@ + _ __@ + (_)/ /@ + / / @ + / /_ @ + /_/(_)@ + @@ + ___ @ + ( _ ) @ + / _ \/\@ + | (_> <@ + \___/\/@ + @@ + _ @ + ( )@ + |/ @ + $ @ + $ @ + @@ + __@ + / /@ + | | @ + | | @ + | | @ + \_\@@ + __ @ + \ \ @ + | |@ + | |@ + | |@ + /_/ @@ + @ + __/\__@ + \ /@ + /_ _\@ + \/ @ + @@ + @ + _ @ + _| |_ @ + |_ _|@ + |_| @ + @@ + @ + @ + @ + _ @ + ( )@ + |/ @@ + @ + @ + _____ @ + |_____|@ + $ @ + @@ + @ + @ + @ + _ @ + (_)@ + @@ + __@ + / /@ + / / @ + / / @ + /_/ @ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @@ + _ @ + / |@ + | |@ + | |@ + |_|@ + @@ + ____ @ + |___ \ @ + __) |@ + / __/ @ + |_____|@ + @@ + _____ @ + |___ / @ + |_ \ @ + ___) |@ + |____/ @ + @@ + _ _ @ + | || | @ + | || |_ @ + |__ _|@ + |_| @ + @@ + ____ @ + | ___| @ + |___ \ @ + ___) |@ + |____/ @ + @@ + __ @ + / /_ @ + | '_ \ @ + | (_) |@ + \___/ @ + @@ + _____ @ + |___ |@ + / / @ + / / @ + /_/ @ + @@ + ___ @ + ( _ ) @ + / _ \ @ + | (_) |@ + \___/ @ + @@ + ___ @ + / _ \ @ + | (_) |@ + \__, |@ + /_/ @ + @@ + @ + _ @ + (_)@ + _ @ + (_)@ + @@ + @ + _ @ + (_)@ + _ @ + ( )@ + |/ @@ + __@ + / /@ + / / @ + \ \ @ + \_\@ + @@ + @ + _____ @ + |_____|@ + |_____|@ + $ @ + @@ + __ @ + \ \ @ + \ \@ + / /@ + /_/ @ + @@ + ___ @ + |__ \@ + / /@ + |_| @ + (_) @ + @@ + ____ @ + / __ \ @ + / / _` |@ + | | (_| |@ + \ \__,_|@ + \____/ @@ + _ @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @@ + ____ @ + | __ ) @ + | _ \ @ + | |_) |@ + |____/ @ + @@ + ____ @ + / ___|@ + | | @ + | |___ @ + \____|@ + @@ + ____ @ + | _ \ @ + | | | |@ + | |_| |@ + |____/ @ + @@ + _____ @ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @@ + _____ @ + | ___|@ + | |_ @ + | _| @ + |_| @ + @@ + ____ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + @@ + _ _ @ + | | | |@ + | |_| |@ + | _ |@ + |_| |_|@ + @@ + ___ @ + |_ _|@ + | | @ + | | @ + |___|@ + @@ + _ @ + | |@ + _ | |@ + | |_| |@ + \___/ @ + @@ + _ __@ + | |/ /@ + | ' / @ + | . \ @ + |_|\_\@ + @@ + _ @ + | | @ + | | @ + | |___ @ + |_____|@ + @@ + __ __ @ + | \/ |@ + | |\/| |@ + | | | |@ + |_| |_|@ + @@ + _ _ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @@ + ____ @ + | _ \ @ + | |_) |@ + | __/ @ + |_| @ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \__\_\@ + @@ + ____ @ + | _ \ @ + | |_) |@ + | _ < @ + |_| \_\@ + @@ + ____ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + @@ + _____ @ + |_ _|@ + | | @ + | | @ + |_| @ + @@ + _ _ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @@ + __ __@ + \ \ / /@ + \ \ / / @ + \ V / @ + \_/ @ + @@ + __ __@ + \ \ / /@ + \ \ /\ / / @ + \ V V / @ + \_/\_/ @ + @@ + __ __@ + \ \/ /@ + \ / @ + / \ @ + /_/\_\@ + @@ + __ __@ + \ \ / /@ + \ V / @ + | | @ + |_| @ + @@ + _____@ + |__ /@ + / / @ + / /_ @ + /____|@ + @@ + __ @ + | _|@ + | | @ + | | @ + | | @ + |__|@@ + __ @ + \ \ @ + \ \ @ + \ \ @ + \_\@ + @@ + __ @ + |_ |@ + | |@ + | |@ + | |@ + |__|@@ + /\ @ + |/\|@ + $ @ + $ @ + $ @ + @@ + @ + @ + @ + @ + _____ @ + |_____|@@ + _ @ + ( )@ + \|@ + $ @ + $ @ + @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ + _ @ + | |__ @ + | '_ \ @ + | |_) |@ + |_.__/ @ + @@ + @ + ___ @ + / __|@ + | (__ @ + \___|@ + @@ + _ @ + __| |@ + / _` |@ + | (_| |@ + \__,_|@ + @@ + @ + ___ @ + / _ \@ + | __/@ + \___|@ + @@ + __ @ + / _|@ + | |_ @ + | _|@ + |_| @ + @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |___/ @@ + _ @ + | |__ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ + _ @ + (_)@ + | |@ + | |@ + |_|@ + @@ + _ @ + (_)@ + | |@ + | |@ + _/ |@ + |__/ @@ + _ @ + | | __@ + | |/ /@ + | < @ + |_|\_\@ + @@ + _ @ + | |@ + | |@ + | |@ + |_|@ + @@ + @ + _ __ ___ @ + | '_ ` _ \ @ + | | | | | |@ + |_| |_| |_|@ + @@ + @ + _ __ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ + @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ + @ + _ __ @ + | '_ \ @ + | |_) |@ + | .__/ @ + |_| @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |_|@@ + @ + _ __ @ + | '__|@ + | | @ + |_| @ + @@ + @ + ___ @ + / __|@ + \__ \@ + |___/@ + @@ + _ @ + | |_ @ + | __|@ + | |_ @ + \__|@ + @@ + @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ + @ + __ __@ + \ \ / /@ + \ V / @ + \_/ @ + @@ + @ + __ __@ + \ \ /\ / /@ + \ V V / @ + \_/\_/ @ + @@ + @ + __ __@ + \ \/ /@ + > < @ + /_/\_\@ + @@ + @ + _ _ @ + | | | |@ + | |_| |@ + \__, |@ + |___/ @@ + @ + ____@ + |_ /@ + / / @ + /___|@ + @@ + __@ + / /@ + | | @ + < < @ + | | @ + \_\@@ + _ @ + | |@ + | |@ + | |@ + | |@ + |_|@@ + __ @ + \ \ @ + | | @ + > >@ + | | @ + /_/ @@ + /\/|@ + |/\/ @ + $ @ + $ @ + $ @ + @@ + _ _ @ + (_)_(_)@ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + | |_| |@ + \___/ @ + @@ + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \___/ @ + @@ + _ _ @ + (_)_(_)@ + / _` |@ + | (_| |@ + \__,_|@ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + | (_) |@ + \___/ @ + @@ + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \__,_|@ + @@ + ___ @ + / _ \@ + | |/ /@ + | |\ \@ + | ||_/@ + |_| @@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + $@ + $@@ +173 SOFT HYPHEN + @ + @ + _____ @ + |_____|@ + $ @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_)@ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | |_| |@ + \___/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \___/ @ + @@ +223 LATIN SMALL LETTER SHARP S + ___ @ + / _ \@ + | |/ /@ + | |\ \@ + | ||_/@ + |_| @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _` |@ + | (_| |@ + \__,_|@ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | (_) |@ + \___/ @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x05D0 HEBREW LETTER ALEF + __ __@ + \ \ / /@ + | V / @ + | |\ \ @ + |_| \_\@ + @@ +0x05D1 HEBREW LETTER BET + ______ @ + |____ | @ + | | @ + _____| |_@ + /________/@ + @@ +0x05D2 HEBREW LETTER GIMEL + ____ @ + |__ | @ + | | @ + ____| | @ + /____/\_\@ + @@ +0x05D3 HEBREW LETTER DALET + _______ @ + |____ |@ + | | @ + | | @ + |_| @ + @@ +0x05D4 HEBREW LETTER HE + _______ @ + |_____ |@ + _ | |@ + | | | |@ + |_| |_|@ + @@ +0x05D5 HEBREW LETTER VAV + ___ @ + |_ |@ + | |@ + | |@ + |_|@ + @@ +0x05D6 HEBREW LETTER ZAYIN + ________ @ + \__ __\@ + | | @ + | | @ + |_| @ + @@ +0x05D7 HEBREW LETTER HET + _______ @ + |. __ |@ + | | | |@ + | | | |@ + |_| |_|@ + @@ +0x05D8 HEBREW LETTER TET + __ ___ @ + |. | /_ |@ + | | | |@ + | |___| |@ + |_______|@ + @@ +0x05D9 HEBREW LETTER YOD + ___ @ + |_ |@ + |_|@ + $ @ + $ @ + @@ +0x05DA HEBREW LETTER FINAL KAF + _______ @ + |____ .|@ + | | @ + | | @ + | | @ + |_| @@ +0x05DB HEBREW LETTER KAF + _____ @ + |____ \ @ + | |@ + ____| |@ + |_____/ @ + @@ +0x05DC HEBREW LETTER LAMED + |=|____ @ + |____ |@ + / / @ + / / @ + /_/ @ + @@ +0x05DD HEBREW LETTER FINAL MEM + ________ @ + |. ___ |@ + | | | |@ + | |___| |@ + |_______|@ + @@ +0x05DE HEBREW LETTER MEM + _______ @ + |. __ |@ + | | | |@ + | | _| |@ + |_||___|@ + @@ +0x05DF HEBREW LETTER FINAL NUN + ___ @ + |_ |@ + | |@ + | |@ + | |@ + |_|@@ +0x05E0 HEBREW LETTER NUN + ___ @ + |_ |@ + | |@ + __| |@ + |____|@ + @@ +0x05E1 HEBREW LETTER SAMEKH + _______ @ + |. __ |@ + | | | |@ + | |__/ |@ + |_____/ @ + @@ +0x05E2 HEBREW LETTER AYIN + __ _ @ + \ \ | |@ + \ \| |@ + __\ ` |@ + |______|@ + @@ +0x05E3 HEBREW LETTER FINAL PE + ______ @ + | __ |@ + | |_ | |@ + |___|| |@ + | |@ + |_|@@ +0x05E4 HEBREW LETTER PE + _______ @ + | ___ |@ + \_\ | |@ + _____| |@ + |_______|@ + @@ +0x05E5 HEBREW LETTER FINAL TSADI + __ _ @ + |. | | |@ + | | // @ + | |// @ + | | @ + |_| @@ +0x05E6 HEBREW LETTER TSADI + __ __.@ + \ \ / / @ + \ V / @ + ___\ \ @ + |______| @ + @@ +0x05E7 HEBREW LETTER QOF + ______ @ + |____ |@ + _ | |@ + | | |_|@ + | | @ + |_| @@ +0x05E8 HEBREW LETTER RESH + ______ @ + |____ |@ + | |@ + | |@ + |_|@ + @@ +0x05E9 HEBREW LETTER SHIN + _ _ _ @ + | | | | | |@ + | | | | | |@ + | |/ /_/ / @ + |_______/ @ + @@ +0x05EA HEBREW LETTER TAV + ______ @ + | __ |@ + | | | |@ + _| | | |@ + |___| |_|@ + @@ +0x2721 STAR OF DAVID + @ + __/\__@ + \ /@ + /_ _\@ + \/ @ + @@ +-0x0002 +aleph = t, bet/vet = c, gimel = d, dalet = s, he = v, vav = u, zayin = z @ +het = j, tet = y, yod = h, kaf/chaf = f, final kaf = l, lamed = k, mem = n@ +final mem = o, nun = b, final nun = i, samekh = x, ayin = g, pe/fe = p, @ +final pe = ;, tsadi = m, final tsadi = ., qof = e, resh = r, shin/sin = a @ +tav = , comma = ', period = /, semicolon = `, slash = q, apostrophe = w @ +Star of David = * @@ +-0x0003 +aleph = a, bet/vet = b, gimel = g, dalet = d, he = h, vav = v, zayin = z @ +het = c, tet = t, yod = y, kaf/chaf = k, final kaf = f, lamed = l, mem = m@ +final mem = o, nun = n, final nun = i, samekh = e, ayin = _, pe/fe = p, @ +final pe = u, tsadi = j, final tsadi = w, qof = q, resh = r, shin/sin = s @ +tav = x @ +Star of David = * @@ diff --git a/externals/figlet/fonts/jis0201.flc b/externals/figlet/fonts/jis0201.flc new file mode 100644 index 0000000000..6a32e62ef9 --- /dev/null +++ b/externals/figlet/fonts/jis0201.flc @@ -0,0 +1,249 @@ +# JIS X 0201 (1976) mappings for ISO 2022 usage. + +# Invoke JIS Roman in G0/GL, and JIS Katakana ("halfwidth" katakana, but +# we map it to fullwidth for compatibility with existing fonts) in +# G1/GR. +# +# This means that the Katakana is available in the high bytes, or you +# can use SHIFT OUT (0x1E) to cause the low-value bytes (in the ASCII +# code value range) to invoke Katakana characters (using SHIFT IN (0x1F) +# to switch back). Of course, this being ISO 2022, you can also use the +# escape sequences ESC ( I and ESC ( J to shift it in and out. + +g 0 94 J +g 1 94 I +g L 0 +g R 1 + +# JIS Roman: ISO 646 variant just like ASCII, but with for +# , and for . + +0x4A0020 0x20 +0x4A0021 0x21 +0x4A0022 0x22 +0x4A0023 0x23 +0x4A0024 0x24 +0x4A0025 0x25 +0x4A0026 0x26 +0x4A0027 0x27 +0x4A0028 0x28 +0x4A0029 0x29 +0x4A002A 0x2A +0x4A002B 0x2B +0x4A002C 0x2C +0x4A002D 0x2D +0x4A002E 0x2E +0x4A002F 0x2F +0x4A0030 0x30 +0x4A0031 0x31 +0x4A0032 0x32 +0x4A0033 0x33 +0x4A0034 0x34 +0x4A0035 0x35 +0x4A0036 0x36 +0x4A0037 0x37 +0x4A0038 0x38 +0x4A0039 0x39 +0x4A003A 0x3A +0x4A003B 0x3B +0x4A003C 0x3C +0x4A003D 0x3D +0x4A003E 0x3E +0x4A003F 0x3F +0x4A0040 0x40 +0x4A0041 0x41 +0x4A0042 0x42 +0x4A0043 0x43 +0x4A0044 0x44 +0x4A0045 0x45 +0x4A0046 0x46 +0x4A0047 0x47 +0x4A0048 0x48 +0x4A0049 0x49 +0x4A004A 0x4A +0x4A004B 0x4B +0x4A004C 0x4C +0x4A004D 0x4D +0x4A004E 0x4E +0x4A004F 0x4F +0x4A0050 0x50 +0x4A0051 0x51 +0x4A0052 0x52 +0x4A0053 0x53 +0x4A0054 0x54 +0x4A0055 0x55 +0x4A0056 0x56 +0x4A0057 0x57 +0x4A0058 0x58 +0x4A0059 0x59 +0x4A005A 0x5A +0x4A005B 0x5B +0x4A005C 0xA5 # \ -> Yen +0x4A005D 0x5D +0x4A005E 0x5E +0x4A005F 0x5F +0x4A0060 0x60 +0x4A0061 0x61 +0x4A0062 0x62 +0x4A0063 0x63 +0x4A0064 0x64 +0x4A0065 0x65 +0x4A0066 0x66 +0x4A0067 0x67 +0x4A0068 0x68 +0x4A0069 0x69 +0x4A006A 0x6A +0x4A006B 0x6B +0x4A006C 0x6C +0x4A006D 0x6D +0x4A006E 0x6E +0x4A006F 0x6F +0x4A0070 0x70 +0x4A0071 0x71 +0x4A0072 0x72 +0x4A0073 0x73 +0x4A0074 0x74 +0x4A0075 0x75 +0x4A0076 0x76 +0x4A0077 0x77 +0x4A0078 0x78 +0x4A0079 0x79 +0x4A007A 0x7A +0x4A007B 0x7B +0x4A007C 0x7C +0x4A007D 0x7D +0x4A007E 0x203E + + +# Mappings for JIS Katakana. + +0x490021 0x3002 +0x490022 0x300C +0x490023 0x300D +0x490024 0x3001 +0x490025 0x30FB +0x490026 0x30F2 +0x490027 0x30A1 +0x490028 0x30A3 +0x490029 0x30A5 +0x49002A 0x30A7 +0x49002B 0x30A9 +0x49002C 0x30E3 +0x49002D 0x30E5 +0x49002E 0x30E7 +0x49002F 0x30C3 +0x490030 0x30FC +0x490031 0x30A2 +0x490032 0x30A4 +0x490033 0x30A6 +0x490034 0x30A8 +0x490035 0x30AA +0x490036 0x30AB +0x490037 0x30AD +0x490038 0x30AF +0x490039 0x30B1 +0x49003A 0x30B3 +0x49003B 0x30B5 +0x49003C 0x30B7 +0x49003D 0x30B9 +0x49003E 0x30BB +0x49003F 0x30BD +0x490040 0x30BF +0x490041 0x30C1 +0x490042 0x30C4 +0x490043 0x30C6 +0x490044 0x30C8 +0x490045 0x30CA +0x490046 0x30CB +0x490047 0x30CC +0x490048 0x30CD +0x490049 0x30CE +0x49004A 0x30CF +0x49004B 0x30D2 +0x49004C 0x30D5 +0x49004D 0x30D8 +0x49004E 0x30DB +0x49004F 0x30DE +0x490050 0x30DF +0x490051 0x30E0 +0x490052 0x30E1 +0x490053 0x30E2 +0x490054 0x30E4 +0x490055 0x30E6 +0x490056 0x30E8 +0x490057 0x30E9 +0x490058 0x30EA +0x490059 0x30EB +0x49005A 0x30EC +0x49005B 0x30ED +0x49005C 0x30EF +0x49005D 0x30F3 +0x49005E 0x309B +0x49005F 0x309C + +# For reference, here's what they'd map to if we were mapping to +# halfwidth Katakana. +# +# 0x490021 0xFF61 +# 0x490022 0xFF62 +# 0x490023 0xFF63 +# 0x490024 0xFF64 +# 0x490025 0xFF65 +# 0x490026 0xFF66 +# 0x490027 0xFF67 +# 0x490028 0xFF68 +# 0x490029 0xFF69 +# 0x49002A 0xFF6A +# 0x49002B 0xFF6B +# 0x49002C 0xFF6C +# 0x49002D 0xFF6D +# 0x49002E 0xFF6E +# 0x49002F 0xFF6F +# 0x490030 0xFF70 +# 0x490031 0xFF71 +# 0x490032 0xFF72 +# 0x490033 0xFF73 +# 0x490034 0xFF74 +# 0x490035 0xFF75 +# 0x490036 0xFF76 +# 0x490037 0xFF77 +# 0x490038 0xFF78 +# 0x490039 0xFF79 +# 0x49003A 0xFF7A +# 0x49003B 0xFF7B +# 0x49003C 0xFF7C +# 0x49003D 0xFF7D +# 0x49003E 0xFF7E +# 0x49003F 0xFF7F +# 0x490040 0xFF80 +# 0x490041 0xFF81 +# 0x490042 0xFF82 +# 0x490043 0xFF83 +# 0x490044 0xFF84 +# 0x490045 0xFF85 +# 0x490046 0xFF86 +# 0x490047 0xFF87 +# 0x490048 0xFF88 +# 0x490049 0xFF89 +# 0x49004A 0xFF8A +# 0x49004B 0xFF8B +# 0x49004C 0xFF8C +# 0x49004D 0xFF8D +# 0x49004E 0xFF8E +# 0x49004F 0xFF8F +# 0x490050 0xFF90 +# 0x490051 0xFF91 +# 0x490052 0xFF92 +# 0x490053 0xFF93 +# 0x490054 0xFF94 +# 0x490055 0xFF95 +# 0x490056 0xFF96 +# 0x490057 0xFF97 +# 0x490058 0xFF98 +# 0x490059 0xFF99 +# 0x49005A 0xFF9A +# 0x49005B 0xFF9B +# 0x49005C 0xFF9C +# 0x49005D 0xFF9D +# 0x49005E 0xFF9E +# 0x49005F 0xFF9F diff --git a/externals/figlet/fonts/koi8r.flc b/externals/figlet/fonts/koi8r.flc new file mode 100644 index 0000000000..e324d8b049 --- /dev/null +++ b/externals/figlet/fonts/koi8r.flc @@ -0,0 +1,128 @@ +t \0x80 \0x2500 +t \0x81 \0x2502 +t \0x82 \0x250c +t \0x83 \0x2510 +t \0x84 \0x2514 +t \0x85 \0x2518 +t \0x86 \0x251c +t \0x87 \0x2524 +t \0x88 \0x252c +t \0x89 \0x2534 +t \0x8a \0x253c +t \0x8b \0x2580 +t \0x8c \0x2584 +t \0x8d \0x2588 +t \0x8e \0x258c +t \0x8f \0x2590 +t \0x90 \0x2591 +t \0x91 \0x2592 +t \0x92 \0x2593 +t \0x93 \0x2320 +t \0x94 \0x25a0 +t \0x95 \0x2219 +t \0x96 \0x221a +t \0x97 \0x2248 +t \0x98 \0x2264 +t \0x99 \0x2265 +t \0x9a \0x00a0 +t \0x9b \0x2321 +t \0x9c \0x00b0 +t \0x9d \0x00b2 +t \0x9e \0x00b7 +t \0x9f \0x00f7 +t \0xa0 \0x2550 +t \0xa1 \0x2551 +t \0xa2 \0x2552 +t \0xa3 \0x0451 +t \0xa4 \0x2553 +t \0xa5 \0x2554 +t \0xa6 \0x2555 +t \0xa7 \0x2556 +t \0xa8 \0x2557 +t \0xa9 \0x2558 +t \0xaa \0x2559 +t \0xab \0x255a +t \0xac \0x255b +t \0xad \0x255c +t \0xae \0x255d +t \0xaf \0x255e +t \0xb0 \0x255f +t \0xb1 \0x2560 +t \0xb2 \0x2561 +t \0xb3 \0x0401 +t \0xb4 \0x2562 +t \0xb5 \0x2563 +t \0xb6 \0x2564 +t \0xb7 \0x2565 +t \0xb8 \0x2566 +t \0xb9 \0x2567 +t \0xba \0x2568 +t \0xbb \0x2569 +t \0xbc \0x256a +t \0xbd \0x256b +t \0xbe \0x256c +t \0xbf \0x00a9 +t \0xc0 \0x044e +t \0xc1 \0x0430 +t \0xc2 \0x0431 +t \0xc3 \0x0446 +t \0xc4 \0x0434 +t \0xc5 \0x0435 +t \0xc6 \0x0444 +t \0xc7 \0x0433 +t \0xc8 \0x0445 +t \0xc9 \0x0438 +t \0xca \0x0439 +t \0xcb \0x043a +t \0xcc \0x043b +t \0xcd \0x043c +t \0xce \0x043d +t \0xcf \0x043e +t \0xd0 \0x043f +t \0xd1 \0x044f +t \0xd2 \0x0440 +t \0xd3 \0x0441 +t \0xd4 \0x0442 +t \0xd5 \0x0443 +t \0xd6 \0x0436 +t \0xd7 \0x0432 +t \0xd8 \0x044c +t \0xd9 \0x044b +t \0xda \0x0437 +t \0xdb \0x0448 +t \0xdc \0x044d +t \0xdd \0x0449 +t \0xde \0x0447 +t \0xdf \0x044a +t \0xe0 \0x042e +t \0xe1 \0x0410 +t \0xe2 \0x0411 +t \0xe3 \0x0426 +t \0xe4 \0x0414 +t \0xe5 \0x0415 +t \0xe6 \0x0424 +t \0xe7 \0x0413 +t \0xe8 \0x0425 +t \0xe9 \0x0418 +t \0xea \0x0419 +t \0xeb \0x041a +t \0xec \0x041b +t \0xed \0x041c +t \0xee \0x041d +t \0xef \0x041e +t \0xf0 \0x041f +t \0xf1 \0x042f +t \0xf2 \0x0420 +t \0xf3 \0x0421 +t \0xf4 \0x0422 +t \0xf5 \0x0423 +t \0xf6 \0x0416 +t \0xf7 \0x0412 +t \0xf8 \0x042c +t \0xf9 \0x042b +t \0xfa \0x0417 +t \0xfb \0x0428 +t \0xfc \0x042d +t \0xfd \0x0429 +t \0xfe \0x0427 +t \0xff \0x042a diff --git a/externals/figlet/fonts/lean.flf b/externals/figlet/fonts/lean.flf new file mode 100644 index 0000000000..7e53563c0a --- /dev/null +++ b/externals/figlet/fonts/lean.flf @@ -0,0 +1,1691 @@ +flf2a$ 8 6 27 0 10 0 576 96 +Lean by Glenn Chappell 4/93 -- based on various .sig's +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $ $@ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + $ $ @ +$ $ @@ + $$@ + _/ $ @ + _/ $ @ + _/ $ @ + $$ @ +_/ $ @ + $$ @ + @@ + _/ _/ $@ + _/ _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ + $$ @ + _/ _/ $@ + _/_/_/_/_/ $ @ + _/ _/ $ @ +_/_/_/_/_/ $ @ + _/ _/ $ @ + $$ @ + @@ + $$ @ + _/ $@ + _/_/_/ $ @ + _/_/ $ @ + _/_/ $ @ +_/_/_/ $ @ + _/ $ @ + $$ @@ + $$@ + _/_/ _/ $ @ + _/_/ _/ $ @ + _/ $ @ + _/ _/_/ $ @ +_/ _/_/ $ @ + $$ @ + @@ + $$ @ + _/ $ @ + _/ _/ $@ + _/_/ _/ $ @ +_/ _/ $ @ + _/_/ _/ $ @ + $$ @ + @@ + _/ $@ + _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ + _/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + _/ $ @ + $$ @@ + _/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @@ + $$@ + _/ _/ _/ $ @ + _/_/_/ $ @ + _/_/_/_/_/ $ @ + _/_/_/ $ @ +_/ _/ _/ $ @ + $$ @ + @@ + $$ @ + _/ $ @ + _/ $@ +_/_/_/_/_/ $ @ + _/ $ @ + _/ $ @ + $$ @ + @@ + @ + @ + @ + @ + $$@ + _/ $ @ +_/ $ @ + $$ @@ + @ + @ + $$@ +_/_/_/_/_/ $ @ + $$ @ + @ + @ + @@ + @ + @ + @ + @ + $$@ +_/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + _/_/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ + $$ @ + _/_/_/ $@ + _/ $ @ + _/_/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $@ +_/_/_/_/ $ @ + _/ $ @ + _/ $ @ + $$ @ + @@ + $$@ + _/_/_/_/ $ @ + _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ + _/_/_/ $ @ + _/ $ @ + _/_/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + $$@ + _/_/_/_/_/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + @ + $$@ + _/ $ @ + $$ @ + $$ @ +_/ $ @ + $$ @ + @@ + @ + $$@ + _/ $ @ + $$ @ + $$ @ + _/ $ @ +_/ $ @ + $$ @@ + $$@ + _/ $ @ + _/ $ @ +_/ $ @ + _/ $ @ + _/ $ @ + $$ @ + @@ + @ + $$@ + _/_/_/_/_/ $ @ + $$ @ +_/_/_/_/_/ $ @ + $$ @ + @ + @@ + $$ @ + _/ $ @ + _/ $@ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ $ @ + _/_/ $ @ + $$ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/_/_/_/_/ $@ + _/ _/ $ @ + _/ _/_/_/ _/ $ @ + _/ _/ _/ _/ $ @ +_/ _/_/_/_/ $ @ + _/ $ @ + _/_/_/_/_/_/ $ @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/_/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ + _/_/_/_/ $ @ + _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ + $$@ + _/_/_/_/ $ @ + _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$@ + _/_/_/ $ @ + _/ $ @ + _/ _/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + _/ $ @ + _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $@ +_/_/_/_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/_/ _/_/ $ @ + _/ _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/_/ _/ $ @ + _/ _/ _/ $ @ + _/ _/_/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/ _/_/ $ @ +_/ _/ $ @ + _/_/ _/ $ @ + $$ @ + @@ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ + _/_/_/ $ @ + _/ $ @ + _/_/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$@ +_/_/_/_/_/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/ _/ $ @ + _/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ _/ $ @ + _/ _/ _/ $ @ + _/ _/ $ @ + $$ @ + @@ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ +_/ _/ $ @ + _/ _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$@ + _/_/_/_/_/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/_/_/_/_/ $ @ + $$ @ + @@ + _/_/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/_/ $ @ + $$ @@ + $$ @ +_/ $ @ + _/ $ @ + _/ $ @ + _/ $@ + _/ $ @ + $$ @ + @@ + _/_/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/_/ $ @ + $$ @@ + _/ $@ + _/ _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ + @ + @ + @ + @ + @ + $$ @ + $$@ +_/_/_/_/_/ $ @@ + _/ $@ + _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ + @ + $$@ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$ @ + _/ $ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/_/_/ $ @ + $$ @ + @@ + @ + $$@ + _/_/_/ $ @ + _/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + @ + $$ @ + _/_/ $@ + _/_/_/_/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$@ + _/_/ $ @ + _/ $ @ +_/_/_/_/ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + @ + $$@ + _/_/_/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ + $$ @ + _/ $ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + $$ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @@ + $$ @ + _/ $@ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + $$@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + @ + $$ @ + _/_/_/ _/_/ $@ + _/ _/ _/ $ @ + _/ _/ _/ $ @ +_/ _/ _/ $ @ + $$ @ + @@ + @ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + @ + $$ @ + _/_/ $@ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + @ + $$ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/ $ @@ + @ + $$@ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + _/ $ @ + _/ $ @@ + @ + $$@ + _/ _/_/ $ @ + _/_/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ + @ + $$@ + _/_/_/ $ @ + _/_/ $ @ + _/_/ $ @ +_/_/_/ $ @ + $$ @ + @@ + $$ @ + _/ $@ +_/_/_/_/ @ + _/ $ @ +_/ $ @ + _/_/ $ @ + $$ @ + @@ + @ + $$@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + @ + $$@ + _/ _/ $ @ +_/ _/ $ @ + _/ _/ $ @ + _/ $ @ + $$ @ + @@ + @ + $$@ + _/ _/ _/ $ @ +_/ _/ _/ $ @ + _/ _/ _/ _/ $ @ + _/ _/ $ @ + $$ @ + @@ + @ + $$@ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ + @ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ + @ + $$@ + _/_/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ + _/ $@ + _/ $ @ + _/ $ @ +_/ $ @ + _/ $ @ +_/ $ @ + _/ $ @ + $$ @@ + _/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @@ + _/ $ @ + _/ $@ + _/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @@ + _/ _/ $@ +_/ _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + _/ _/ $@ + $$ @ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + _/ _/ $@ + $$ @ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ + _/ _/ $@ + $$ @ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ + $$ @ + _/_/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ +_/ $ @ + $$ @@ +160 NO-BREAK SPACE + $ $@ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + $ $ @ + $ $ @ +$ $ @@ +161 INVERTED EXCLAMATION MARK + $$@ + _/ $ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ +162 CENT SIGN + $$ @ + _/ $@ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + _/ $ @ + $$ @@ +163 POUND SIGN + $$ @ + _/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ + _/_/_/ _/ $ @ +_/_/ _/_/ $ @ + @@ +164 CURRENCY SIGN + $$@ + _/ _/ $ @ + _/_/_/_/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @@ +165 YEN SIGN + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/_/_/ $ @ + _/ $ @ +_/_/_/_/_/ $ @ + _/ $ @ + $$ @@ +166 BROKEN BAR + _/ $@ + _/ $ @ + _/ $ @ + $$ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @@ +167 SECTION SIGN + _/_/ $@ + _/ $ @ + _/ $ @ + _/ _/ $ @ + _/ $ @ + _/ $ @ +_/_/ $ @ + $$ @@ +168 DIAERESIS + _/ _/ $@ + $$ @ + $ $ @ + $ $ @ + $ $ @ +$ $ @ + @ + @@ +169 COPYRIGHT SIGN + _/_/_/_/ $ @ + _/ _/ $@ + _/ _/_/_/ _/ $ @ + _/ _/ _/ $ @ + _/ _/ _/ $ @ +_/ _/_/_/ _/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @@ +170 FEMININE ORDINAL INDICATOR + $$@ + _/_/_/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + $$ @ +_/_/_/_/ $ @ + @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + $$@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + $$ @ + @@ +172 NOT SIGN + @ + @ + $$@ +_/_/_/_/_/ $ @ + _/ $ @ + $$ @ + @ + @@ +173 SOFT HYPHEN + @ + @ + $$@ +_/_/_/_/ $ @ + $$ @ + $$ @ + @ + @@ +174 REGISTERED SIGN + _/_/_/_/ $ @ + _/ _/ $@ + _/ _/_/_/ _/ $ @ + _/ _/ _/ _/ $ @ + _/ _/_/_/ _/ $ @ +_/ _/ _/ _/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @@ +175 MACRON + _/_/_/_/_/ $@ + $$ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ +176 DEGREE SIGN + _/ $@ + _/ _/ $ @ + _/ $ @ + $$ @ + $$ @ +$$ @ + @ + @@ +177 PLUS-MINUS SIGN + $$ @ + _/ $ @ + _/ $@ + _/_/_/_/_/ $ @ + _/ $ @ +_/_/_/_/_/ $ @ + $$ @ + @@ +178 SUPERSCRIPT TWO + $$ @ + _/_/ $@ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @ + @@ +179 SUPERSCRIPT THREE + $$@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/ $ @ + $$ @ + @ + @@ +180 ACUTE ACCENT + _/ $@ + _/ $ @ + $$ @ + $$ @ + $$ @ +$$ @ + @ + @@ +181 MICRO SIGN + @ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ + _/ $ @ +_/ $ @@ +182 PILCROW SIGN + $$@ + _/_/_/_/ $ @ +_/_/_/ _/ $ @ + _/_/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + $$ @ + @@ +183 MIDDLE DOT + @ + @ + $$@ + _/ $ @ + $$ @ +$$ @ + @ + @@ +184 CEDILLA + @ + @ + @ + @ + @ + $$@ + _/ $ @ +_/_/ $ @@ +185 SUPERSCRIPT ONE + $$@ + _/ $ @ +_/_/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + $$ @ + _/_/ $@ + _/ _/ $ @ + _/_/ $ @ + $$ @ +_/_/_/_/ $ @ + @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + $$ @ + _/ _/ $ @ + _/ _/ $@ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ +188 VULGAR FRACTION ONE QUARTER + $$ @ + _/ _/ $@ +_/_/ _/ _/ _/ $ @ + _/ _/ _/ _/ $@ +_/ _/ _/_/_/_/ $ @ + _/ _/ $ @ + $$ @ + @@ +189 VULGAR FRACTION ONE HALF + $$ @ + _/ _/ $ @ +_/_/ _/ _/_/ $@ + _/ _/ _/ $ @ +_/ _/ _/ $ @ + _/ _/_/_/ $ @ + $$ @ + @@ +190 VULGAR FRACTION THREE QUARTERS + $$ @ + _/_/_/ _/ $@ + _/ _/ _/ _/ $ @ + _/ _/ _/ _/ $@ +_/_/ _/ _/_/_/_/ $ @ + _/ _/ $ @ + $$ @ + @@ +191 INVERTED QUESTION MARK + $$@ + _/ $ @ + $$ @ + _/_/ $ @ +_/ $ @ + _/_/ $ @ + $$ @ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + _/ $@ + _/ $ @ + _/_/ $@ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + _/ $@ + _/ $ @ + _/_/ $@ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + $$ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + _/ _/ $@ + _/ _/ $ @ + $$ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _/_/ $@ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ + _/_/_/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +198 LATIN CAPITAL LETTER AE + $$@ + _/_/_/_/_/_/ $ @ + _/ _/ $ @ + _/_/_/_/_/_/ $ @ + _/ _/ $ @ +_/ _/_/_/_/ $ @ + $$ @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + $$@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ + _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + _/ $ @ + _/ $@ + _/_/_/_/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _/ $ @ + _/ $@ + _/_/_/_/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + _/_/_/_/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/_/_/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + _/ $ @ + _/ $@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + _/ $@ + _/ $ @ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + _/ $@ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/_/ $ @ + _/ $ @ + _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +208 LATIN CAPITAL LETTER ETH + $$ @ + _/_/_/ $@ + _/ _/ $ @ +_/_/_/ _/ $ @ + _/ _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + _/ _/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/_/ _/ $ @ + _/ _/_/ $ @ +_/ _/ $ @ + $$ @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + _/ $@ + _/ $ @ + _/_/ $@ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + _/ $@ + _/ $ @ + _/_/ $@ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + _/ _/ $@ + _/ _/ $ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +215 MULTIPLICATION SIGN + @ + $$@ + _/ _/ $ @ + _/ $ @ +_/ _/ $ @ + $$ @ + @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + $$@ + _/_/_/_/ $ @ + _/ _/_/ $ @ + _/ _/ _/ $ @ + _/_/ _/ $ @ +_/_/_/_/ $ @ + $$ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + _/ $@ + _/ $ @ + $$@ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + _/ $@ + _/ $ @ + $$@ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + $$ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _/ _/ $@ + $$ @ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + _/ $ @ + _/ $@ +_/ _/ $ @ + _/ _/ $ @ + _/ $ @ + _/ $ @ + $$ @ + @@ +222 LATIN CAPITAL LETTER THORN + $$ @ + _/ $ @ + _/_/_/ $@ + _/ _/ $ @ + _/_/_/ $ @ +_/ $ @ + $$ @ + @@ +223 LATIN SMALL LETTER SHARP S + $$ @ + _/_/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ +_/ $ @ + $$ @@ +224 LATIN SMALL LETTER A WITH GRAVE + _/ $@ + _/ $ @ + $$@ + _/_/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + _/ $@ + _/ $ @ + $$ @ + _/_/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + _/ $@ + _/ _/ $ @ + $$ @ + _/_/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + _/ _/ $@ + _/ _/ $ @ + $$ @ + _/_/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + _/ $@ + _/ _/ $ @ + _/ $ @ + _/_/_/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +230 LATIN SMALL LETTER AE + @ + $$ @ + _/_/_/ _/_/ $@ + _/ _/_/_/_/_/ $ @ +_/ _/_/ $ @ + _/_/_/ _/_/_/ $ @ + $$ @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + $$@ + _/_/_/ $ @ + _/ $ @ + _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ +232 LATIN SMALL LETTER E WITH GRAVE + _/ $@ + _/ $ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + _/ $@ + _/ $ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/ $ @ + _/_/_/_/ $ @ +_/ $ @ + _/_/_/ $ @ + $$ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + _/ $@ + _/ $ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + _/ $@ + _/ $ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + _/ $@ + _/ _/ $ @ + $$ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _/ _/ $@ + $$ @ + _/ $ @ + _/ $ @ + _/ $ @ +_/ $ @ + $$ @ + @@ +240 LATIN SMALL LETTER ETH + _/ _/ $@ + _/ $ @ + _/ _/ $@ + _/_/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + _/ _/ $@ + _/ _/ $ @ + $$ @ + _/_/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + $$ @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + _/ $@ + _/ $ @ + $$ @ + _/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + _/ $@ + _/ $ @ + $$ @ + _/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + $$ @ + _/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + _/_/_/ $@ + _/ _/ $ @ + $$ @ + _/_/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _/ _/ $@ + $$ @ + _/_/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/ $ @ + $$ @ + @@ +247 DIVISION SIGN + $$ @ + _/ $ @ + $$@ +_/_/_/_/_/ $ @ + $$ @ + _/ $ @ + $$ @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + $$@ + _/_/_/ $ @ + _/ _/_/ $ @ + _/_/ _/ $ @ +_/_/_/ $ @ + $$ @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + _/ $ @ + _/ $ @ + $$@ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + _/ $@ + _/ $ @ + $$ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + _/_/ $@ + _/ _/ $ @ + $$ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _/ _/ $@ + $$ @ + _/ _/ $ @ + _/ _/ $ @ +_/ _/ $ @ + _/_/_/ $ @ + $$ @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + _/ $@ + _/ $ @ + $$@ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ +254 LATIN SMALL LETTER THORN + $$ @ + _/ $ @ + _/_/_/ $@ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/ $ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _/ _/ $@ + $$ @ + _/ _/ $ @ + _/ _/ $ @ + _/ _/ $ @ + _/_/_/ $ @ + _/ $ @ +_/_/ $ @@ diff --git a/externals/figlet/fonts/mini.flf b/externals/figlet/fonts/mini.flf new file mode 100644 index 0000000000..3b72606ca0 --- /dev/null +++ b/externals/figlet/fonts/mini.flf @@ -0,0 +1,899 @@ +flf2a$ 4 3 10 0 10 0 1920 96 +Mini by Glenn Chappell 4/93 +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + +$$@ +$$@ +$$@ +$$@@ + @ + |$@ + o$@ + @@ + @ + ||$@ + @ + @@ + @ + -|-|-$@ + -|-|-$@ + @@ + _$@ + (|$ @ + _|)$@ + @@ + @ + O/$@ + /O$@ + @@ + @ + ()$ @ + (_X$@ + @@ + @ + /$@ + @ + @@ + @ + /$@ + |$ @ + \$@@ + @ + \$ @ + |$@ + /$ @@ + @ + \|/$@ + /|\$@ + @@ + @ + _|_$@ + |$ @ + @@ + @ + @ + o$@ + /$@@ + @ + __$@ + @ + @@ + @ + @ + o$@ + @@ + @ + /$@ + /$ @ + @@ + _$ @ + / \$@ + \_/$@ + @@ + @ + /|$@ + |$@ + @@ + _$ @ + )$@ + /_$@ + @@ + _$ @ + _)$@ + _)$@ + @@ + @ + |_|_$@ + |$ @ + @@ + _$ @ + |_$ @ + _)$@ + @@ + _$ @ + |_$ @ + |_)$@ + @@ + __$@ + /$@ + /$ @ + @@ + _$ @ + (_)$@ + (_)$@ + @@ + _$ @ + (_|$@ + |$@ + @@ + @ + o$@ + o$@ + @@ + @ + o$@ + o$@ + /$@@ + @ + /$@ + \$@ + @@ + @ + --$@ + --$@ + @@ + @ + \$@ + /$@ + @@ + _$ @ + )$@ + o$ @ + @@ + __$ @ + / \$@ + | (|/$@ + \__$ @@ + @ + /\$ @ + /--\$@ + @@ + _$ @ + |_)$@ + |_)$@ + @@ + _$@ + /$ @ + \_$@ + @@ + _$ @ + | \$@ + |_/$@ + @@ + _$@ + |_$@ + |_$@ + @@ + _$@ + |_$@ + |$ @ + @@ + __$@ + /__$@ + \_|$@ + @@ + @ + |_|$@ + | |$@ + @@ + ___$@ + |$ @ + _|_$@ + @@ + @ + |$@ + \_|$@ + @@ + @ + |/$@ + |\$@ + @@ + @ + |$ @ + |_$@ + @@ + @ + |\/|$@ + | |$@ + @@ + @ + |\ |$@ + | \|$@ + @@ + _$ @ + / \$@ + \_/$@ + @@ + _$ @ + |_)$@ + |$ @ + @@ + _$ @ + / \$@ + \_X$@ + @@ + _$ @ + |_)$@ + | \$@ + @@ + __$@ + (_$ @ + __)$@ + @@ + ___$@ + |$ @ + |$ @ + @@ + @ + | |$@ + |_|$@ + @@ + @ + \ /$@ + \/$ @ + @@ + @ + \ /$@ + \/\/$ @ + @@ + @ + \/$@ + /\$@ + @@ + @ + \_/$@ + |$ @ + @@ + __$@ + /$@ + /_$@ + @@ + _$@ + |$ @ + |_$@ + @@ + @ + \$ @ + \$@ + @@ + _$ @ + |$@ + _|$@ + @@ + /\$@ + @ + @ + @@ + @ + @ + @ + __$@@ + @ + \$@ + @ + @@ + @ + _.$@ + (_|$@ + @@ + @ + |_$ @ + |_)$@ + @@ + @ + _$@ + (_$@ + @@ + @ + _|$@ + (_|$@ + @@ + @ + _$ @ + (/_$@ + @@ + _$@ + _|_$@ + |$ @ + @@ + @ + _$ @ + (_|$@ + _|$@@ + @ + |_$ @ + | |$@ + @@ + @ + o$@ + |$@ + @@ + @ + o$@ + |$@ + _|$@@ + @ + |$ @ + |<$@ + @@ + @ + |$@ + |$@ + @@ + @ + ._ _$ @ + | | |$@ + @@ + @ + ._$ @ + | |$@ + @@ + @ + _$ @ + (_)$@ + @@ + @ + ._$ @ + |_)$@ + |$ @@ + @ + _.$@ + (_|$@ + |$@@ + @ + ._$@ + |$ @ + @@ + @ + _$@ + _>$@ + @@ + @ + _|_$@ + |_$@ + @@ + @ + @ + |_|$@ + @@ + @ + @ + \/$@ + @@ + @ + @ + \/\/$@ + @@ + @ + @ + ><$@ + @@ + @ + @ + \/$@ + /$ @@ + @ + _$ @ + /_$@ + @@ + ,-$@ + _|$ @ + |$ @ + `-$@@ + |$@ + |$@ + |$@ + |$@@ + -.$ @ + |_$@ + |$ @ + -'$ @@ + /\/$@ + @ + @ + @@ + o o$@ + /\$ @ + /--\$@ + @@ + o_o$@ + / \$@ + \_/$@ + @@ + o o$@ + | |$@ + |_|$@ + @@ + o o$@ + _.$@ + (_|$@ + @@ + o o$@ + _$ @ + (_)$@ + @@ + o o$@ + @ + |_|$@ + @@ + _$ @ + | )$@ + | )$@ + |$ @@ +160 NO-BREAK SPACE + $$@ + $$@ + $$@ + $$@@ +161 INVERTED EXCLAMATION MARK + @ + o$@ + |$@ + @@ +162 CENT SIGN + @ + |_$@ + (__$@ + |$ @@ +163 POUND SIGN + _$ @ + _/_`$ @ + |___$@ + @@ +164 CURRENCY SIGN + @ + `o'$@ + ' `$@ + @@ +165 YEN SIGN + @ + _\_/_$@ + --|--$@ + @@ +166 BROKEN BAR + |$@ + |$@ + |$@ + |$@@ +167 SECTION SIGN + _$@ + ($ @ + ()$@ + _)$@@ +168 DIAERESIS + o o$@ + @ + @ + @@ +169 COPYRIGHT SIGN + _$ @ + |C|$@ + `-'$@ + @@ +170 FEMININE ORDINAL INDICATOR + _.$@ + (_|$@ + ---$@ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + //$@ + \\$@ + @@ +172 NOT SIGN + @ + __$ @ + |$@ + @@ +173 SOFT HYPHEN + @ + _$@ + @ + @@ +174 REGISTERED SIGN + _$ @ + |R|$@ + `-'$@ + @@ +175 MACRON + __$@ + @ + @ + @@ +176 DEGREE SIGN + O$@ + @ + @ + @@ +177 PLUS-MINUS SIGN + @ + _|_$@ + _|_$@ + @@ +178 SUPERSCRIPT TWO + 2$@ + @ + @ + @@ +179 SUPERSCRIPT THREE + 3$@ + @ + @ + @@ +180 ACUTE ACCENT + /$@ + @ + @ + @@ +181 MICRO SIGN + @ + @ + |_|$@ + |$ @@ +182 PILCROW SIGN + __$ @ + (| |$@ + | |$@ + @@ +183 MIDDLE DOT + @ + o$@ + @ + @@ +184 CEDILLA + @ + @ + @ + S$@@ +185 SUPERSCRIPT ONE + 1$@ + @ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + _$ @ + (_)$@ + ---$@ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + \\$@ + //$@ + @@ +188 VULGAR FRACTION ONE QUARTER + @ + 1/$@ + /4$@ + @@ +189 VULGAR FRACTION ONE HALF + @ + 1/$@ + /2$@ + @@ +190 VULGAR FRACTION THREE QUARTERS + @ + 3/$@ + /4$@ + @@ +191 INVERTED QUESTION MARK + @ + o$@ + (_$@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + \$ @ + /\$ @ + /--\$@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + /$ @ + /\$ @ + /--\$@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\$ @ + /\$ @ + /--\$@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/$@ + /\$ @ + /--\$@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + o o$@ + /\$ @ + /--\$@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + O$ @ + / \$ @ + /---\$@ + @@ +198 LATIN CAPITAL LETTER AE + _$@ + /|_$@ + /-|_$@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + _$@ + /$ @ + \_$@ + S$@@ +200 LATIN CAPITAL LETTER E WITH GRAVE + \_$@ + |_$@ + |_$@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _/$@ + |_$ @ + |_$ @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\$@ + |_$ @ + |_$ @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + o_o$@ + |_$ @ + |_$ @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + \__$@ + |$ @ + _|_$@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __/$@ + |$ @ + _|_$@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + /\$@ + ___$@ + _|_$@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + o_o$@ + |$ @ + _|_$@ + @@ +208 LATIN CAPITAL LETTER ETH + _$ @ + _|_\$@ + |_/$@ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\/$@ + |\ |$@ + | \|$@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + \$ @ + / \$@ + \_/$@ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + /$ @ + / \$@ + \_/$@ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\$@ + / \$@ + \_/$@ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/$@ + / \$@ + \_/$@ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + o_o$@ + / \$@ + \_/$@ + @@ +215 MULTIPLICATION SIGN + @ + @ + X$@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + __$ @ + / /\$@ + \/_/$@ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + \$ @ + | |$@ + |_|$@ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + /$ @ + | |$@ + |_|$@ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + /\$@ + | |$@ + |_|$@ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + o o$@ + | |$@ + |_|$@ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + /$ @ + \_/$@ + |$ @ + @@ +222 LATIN CAPITAL LETTER THORN + |_$ @ + |_)$@ + |$ @ + @@ +223 LATIN SMALL LETTER SHARP S + _$ @ + | )$@ + | )$@ + |$ @@ +224 LATIN SMALL LETTER A WITH GRAVE + \$ @ + _.$@ + (_|$@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + /$ @ + _.$@ + (_|$@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\$@ + _.$@ + (_|$@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/$@ + _.$@ + (_|$@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + o o$@ + _.$@ + (_|$@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + O$ @ + _.$@ + (_|$@ + @@ +230 LATIN SMALL LETTER AE + @ + ___$ @ + (_|/_$@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + _$@ + (_$@ + S$@@ +232 LATIN SMALL LETTER E WITH GRAVE + \$ @ + _$ @ + (/_$@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + /$ @ + _$ @ + (/_$@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + /\$@ + _$ @ + (/_$@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + o o$@ + _$ @ + (/_$@ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + \$@ + @ + |$@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + /$@ + @ + |$@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + /\$@ + @ + |$ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + o o$@ + @ + |$ @ + @@ +240 LATIN SMALL LETTER ETH + X$ @ + \$ @ + (_|$@ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/$@ + ._$ @ + | |$@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + \$ @ + _$ @ + (_)$@ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + /$ @ + _$ @ + (_)$@ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + /\$@ + _$ @ + (_)$@ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/$@ + _$ @ + (_)$@ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + o o$@ + _$ @ + (_)$@ + @@ +247 DIVISION SIGN + o$ @ + ---$@ + o$ @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + _$ @ + (/)$@ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + \$ @ + @ + |_|$@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + /$ @ + @ + |_|$@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\$@ + @ + |_|$@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + o o$@ + @ + |_|$@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + /$@ + @ + \/$@ + /$ @@ +254 LATIN SMALL LETTER THORN + @ + |_$ @ + |_)$@ + |$ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + oo$@ + @ + \/$@ + /$ @@ diff --git a/externals/figlet/fonts/mnemonic.flf b/externals/figlet/fonts/mnemonic.flf new file mode 100644 index 0000000000..03e4baa786 --- /dev/null +++ b/externals/figlet/fonts/mnemonic.flf @@ -0,0 +1,3702 @@ +flf2a$ 1 1 12 -1 5 0 0 1797 +mnemonic - a FIGfont by John Cowan +This font uses the mnemonics of RFC1345 +(http://ds.internic.net/rfc/rfc1345.txt) to implement a really large character +set rather crudely, but reversibly. Two-letter mnemonics +are prefixed by &; larger mnemonics are prefixed by &_ and followed by _. +&SP@@ +!@@ +"@@ +&Nb@@ +&DO@@ +%@@ +&@@ +'@@ +(@@ +)@@ +*@@ ++@@ +,@@ +-@@ +.@@ +/@@ +0@@ +1@@ +2@@ +3@@ +4@@ +5@@ +6@@ +7@@ +8@@ +9@@ +:@@ +;@@ +<@@ +=@@ +>@@ +?@@ +&At@@ +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@@ +&<(@@ +&//@@ +&)>@@ +&'>@@ +_@@ +&'!@@ +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@@ +&(!@@ +&!!@@ +&!)@@ +&'?@@ +&A:@@ +&O:@@ +&U:@@ +&a:@@ +&o:@@ +&u:@@ +&ss@@ +0x0001 START OF HEADING (SOH) +&SH@@ +0x0002 START OF TEXT (STX) +&SX@@ +0x0003 END OF TEXT (ETX) +&EX@@ +0x0004 END OF TRANSMISSION (EOT) +&ET@@ +0x0005 ENQUIRY (ENQ) +&EQ@@ +0x0006 ACKNOWLEDGE (ACK) +&AK@@ +0x0007 BELL (BEL) +&BL@@ +0x0008 BACKSPACE (BS) +&BS@@ +0x0009 CHARACTER TABULATION (HT) +&HT@@ +0x000a LINE FEED (LF) +&LF@@ +0x000b LINE TABULATION (VT) +&VT@@ +0x000c FORM FEED (FF) +&FF@@ +0x000d CARRIAGE RETURN (CR) +&CR@@ +0x000e SHIFT OUT (SO) +&SO@@ +0x000f SHIFT IN (SI) +&SI@@ +0x0010 DATALINK ESCAPE (DLE) +&DL@@ +0x0011 DEVICE CONTROL ONE (DC1) +&D1@@ +0x0012 DEVICE CONTROL TWO (DC2) +&D2@@ +0x0013 DEVICE CONTROL THREE (DC3) +&D3@@ +0x0014 DEVICE CONTROL FOUR (DC4) +&D4@@ +0x0015 NEGATIVE ACKNOWLEDGE (NAK) +&NK@@ +0x0016 SYNCRONOUS IDLE (SYN) +&SY@@ +0x0017 END OF TRANSMISSION BLOCK (ETB) +&EB@@ +0x0018 CANCEL (CAN) +&CN@@ +0x0019 END OF MEDIUM (EM) +&EM@@ +0x001a SUBSTITUTE (SUB) +&SB@@ +0x001b ESCAPE (ESC) +&EC@@ +0x001c FILE SEPARATOR (IS4) +&FS@@ +0x001d GROUP SEPARATOR (IS3) +&GS@@ +0x001e RECORD SEPARATOR (IS2) +&RS@@ +0x001f UNIT SEPARATOR (IS1) +&US@@ +0x007f DELETE (DEL) +&DT@@ +0x0080 PADDING CHARACTER (PAD) +&PA@@ +0x0081 HIGH OCTET PRESET (HOP) +&HO@@ +0x0082 BREAK PERMITTED HERE (BPH) +&BH@@ +0x0083 NO BREAK HERE (NBH) +&NH@@ +0x0084 INDEX (IND) +&IN@@ +0x0085 NEXT LINE (NEL) +&NL@@ +0x0086 START OF SELECTED AREA (SSA) +&SA@@ +0x0087 END OF SELECTED AREA (ESA) +&ES@@ +0x0088 CHARACTER TABULATION SET (HTS) +&HS@@ +0x0089 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) +&HJ@@ +0x008a LINE TABULATION SET (VTS) +&VS@@ +0x008b PARTIAL LINE FORWARD (PLD) +&PD@@ +0x008c PARTIAL LINE BACKWARD (PLU) +&PU@@ +0x008d REVERSE LINE FEED (RI) +&RI@@ +0x008e SINGLE-SHIFT TWO (SS2) +&S2@@ +0x008f SINGLE-SHIFT THREE (SS3) +&S3@@ +0x0090 DEVICE CONTROL STRING (DCS) +&DC@@ +0x0091 PRIVATE USE ONE (PU1) +&P1@@ +0x0092 PRIVATE USE TWO (PU2) +&P2@@ +0x0093 SET TRANSMIT STATE (STS) +&TS@@ +0x0094 CANCEL CHARACTER (CCH) +&CC@@ +0x0095 MESSAGE WAITING (MW) +&MW@@ +0x0096 START OF GUARDED AREA (SPA) +&SG@@ +0x0097 END OF GUARDED AREA (EPA) +&EG@@ +0x0098 START OF STRING (SOS) +&SS@@ +0x0099 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) +&GC@@ +0x009a SINGLE CHARACTER INTRODUCER (SCI) +&SC@@ +0x009b CONTROL SEQUENCE INTRODUCER (CSI) +&CI@@ +0x009c STRING TERMINATOR (ST) +&ST@@ +0x009d OPERATING SYSTEM COMMAND (OSC) +&OC@@ +0x009e PRIVACY MESSAGE (PM) +&PM@@ +0x009f APPLICATION PROGRAM COMMAND (APC) +&AC@@ +0x00a0 NO-BREAK SPACE +&NS@@ +0x00a1 INVERTED EXCLAMATION MARK +&!I@@ +0x00a2 CENT SIGN +&Ct@@ +0x00a3 POUND SIGN +&Pd@@ +0x00a4 CURRENCY SIGN +&Cu@@ +0x00a5 YEN SIGN +&Ye@@ +0x00a6 BROKEN BAR +&BB@@ +0x00a7 SECTION SIGN +&SE@@ +0x00a8 DIAERESIS +&':@@ +0x00a9 COPYRIGHT SIGN +&Co@@ +0x00aa FEMININE ORDINAL INDICATOR +&-a@@ +0x00ab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +&<<@@ +0x00ac NOT SIGN +&NO@@ +0x00ad SOFT HYPHEN +&--@@ +0x00ae REGISTERED SIGN +&Rg@@ +0x00af MACRON +&'m@@ +0x00b0 DEGREE SIGN +&DG@@ +0x00b1 PLUS-MINUS SIGN +&+-@@ +0x00b2 SUPERSCRIPT TWO +&2S@@ +0x00b3 SUPERSCRIPT THREE +&3S@@ +0x00b4 ACUTE ACCENT +&''@@ +0x00b5 MICRO SIGN +&My@@ +0x00b6 PILCROW SIGN +&PI@@ +0x00b7 MIDDLE DOT +&.M@@ +0x00b8 CEDILLA +&',@@ +0x00b9 SUPERSCRIPT ONE +&1S@@ +0x00ba MASCULINE ORDINAL INDICATOR +&-o@@ +0x00bb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +&>>@@ +0x00bc VULGAR FRACTION ONE QUARTER +&14@@ +0x00bd VULGAR FRACTION ONE HALF +&12@@ +0x00be VULGAR FRACTION THREE QUARTERS +&34@@ +0x00bf INVERTED QUESTION MARK +&?I@@ +0x00c0 LATIN CAPITAL LETTER A WITH GRAVE +&A!@@ +0x00c1 LATIN CAPITAL LETTER A WITH ACUTE +&A'@@ +0x00c2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +&A>@@ +0x00c3 LATIN CAPITAL LETTER A WITH TILDE +&A?@@ +0x00c4 LATIN CAPITAL LETTER A WITH DIAERESIS +&A:@@ +0x00c5 LATIN CAPITAL LETTER A WITH RING ABOVE +&AA@@ +0x00c6 LATIN CAPITAL LETTER AE +&AE@@ +0x00c7 LATIN CAPITAL LETTER C WITH CEDILLA +&C,@@ +0x00c8 LATIN CAPITAL LETTER E WITH GRAVE +&E!@@ +0x00c9 LATIN CAPITAL LETTER E WITH ACUTE +&E'@@ +0x00ca LATIN CAPITAL LETTER E WITH CIRCUMFLEX +&E>@@ +0x00cb LATIN CAPITAL LETTER E WITH DIAERESIS +&E:@@ +0x00cc LATIN CAPITAL LETTER I WITH GRAVE +&I!@@ +0x00cd LATIN CAPITAL LETTER I WITH ACUTE +&I'@@ +0x00ce LATIN CAPITAL LETTER I WITH CIRCUMFLEX +&I>@@ +0x00cf LATIN CAPITAL LETTER I WITH DIAERESIS +&I:@@ +0x00d0 LATIN CAPITAL LETTER ETH (Icelandic) +&D-@@ +0x00d1 LATIN CAPITAL LETTER N WITH TILDE +&N?@@ +0x00d2 LATIN CAPITAL LETTER O WITH GRAVE +&O!@@ +0x00d3 LATIN CAPITAL LETTER O WITH ACUTE +&O'@@ +0x00d4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +&O>@@ +0x00d5 LATIN CAPITAL LETTER O WITH TILDE +&O?@@ +0x00d6 LATIN CAPITAL LETTER O WITH DIAERESIS +&O:@@ +0x00d7 MULTIPLICATION SIGN +&*X@@ +0x00d8 LATIN CAPITAL LETTER O WITH STROKE +&O/@@ +0x00d9 LATIN CAPITAL LETTER U WITH GRAVE +&U!@@ +0x00da LATIN CAPITAL LETTER U WITH ACUTE +&U'@@ +0x00db LATIN CAPITAL LETTER U WITH CIRCUMFLEX +&U>@@ +0x00dc LATIN CAPITAL LETTER U WITH DIAERESIS +&U:@@ +0x00dd LATIN CAPITAL LETTER Y WITH ACUTE +&Y'@@ +0x00de LATIN CAPITAL LETTER THORN (Icelandic) +&TH@@ +0x00df LATIN SMALL LETTER SHARP S (German) +&ss@@ +0x00e0 LATIN SMALL LETTER A WITH GRAVE +&a!@@ +0x00e1 LATIN SMALL LETTER A WITH ACUTE +&a'@@ +0x00e2 LATIN SMALL LETTER A WITH CIRCUMFLEX +&a>@@ +0x00e3 LATIN SMALL LETTER A WITH TILDE +&a?@@ +0x00e4 LATIN SMALL LETTER A WITH DIAERESIS +&a:@@ +0x00e5 LATIN SMALL LETTER A WITH RING ABOVE +&aa@@ +0x00e6 LATIN SMALL LETTER AE +&ae@@ +0x00e7 LATIN SMALL LETTER C WITH CEDILLA +&c,@@ +0x00e8 LATIN SMALL LETTER E WITH GRAVE +&e!@@ +0x00e9 LATIN SMALL LETTER E WITH ACUTE +&e'@@ +0x00ea LATIN SMALL LETTER E WITH CIRCUMFLEX +&e>@@ +0x00eb LATIN SMALL LETTER E WITH DIAERESIS +&e:@@ +0x00ec LATIN SMALL LETTER I WITH GRAVE +&i!@@ +0x00ed LATIN SMALL LETTER I WITH ACUTE +&i'@@ +0x00ee LATIN SMALL LETTER I WITH CIRCUMFLEX +&i>@@ +0x00ef LATIN SMALL LETTER I WITH DIAERESIS +&i:@@ +0x00f0 LATIN SMALL LETTER ETH (Icelandic) +&d-@@ +0x00f1 LATIN SMALL LETTER N WITH TILDE +&n?@@ +0x00f2 LATIN SMALL LETTER O WITH GRAVE +&o!@@ +0x00f3 LATIN SMALL LETTER O WITH ACUTE +&o'@@ +0x00f4 LATIN SMALL LETTER O WITH CIRCUMFLEX +&o>@@ +0x00f5 LATIN SMALL LETTER O WITH TILDE +&o?@@ +0x00f6 LATIN SMALL LETTER O WITH DIAERESIS +&o:@@ +0x00f7 DIVISION SIGN +&-:@@ +0x00f8 LATIN SMALL LETTER O WITH STROKE +&o/@@ +0x00f9 LATIN SMALL LETTER U WITH GRAVE +&u!@@ +0x00fa LATIN SMALL LETTER U WITH ACUTE +&u'@@ +0x00fb LATIN SMALL LETTER U WITH CIRCUMFLEX +&u>@@ +0x00fc LATIN SMALL LETTER U WITH DIAERESIS +&u:@@ +0x00fd LATIN SMALL LETTER Y WITH ACUTE +&y'@@ +0x00fe LATIN SMALL LETTER THORN (Icelandic) +&th@@ +0x00ff LATIN SMALL LETTER Y WITH DIAERESIS +&y:@@ +0x0100 LATIN CAPITAL LETTER A WITH MACRON +&A-@@ +0x0101 LATIN SMALL LETTER A WITH MACRON +&a-@@ +0x0102 LATIN CAPITAL LETTER A WITH BREVE +&A(@@ +0x0103 LATIN SMALL LETTER A WITH BREVE +&a(@@ +0x0104 LATIN CAPITAL LETTER A WITH OGONEK +&A;@@ +0x0105 LATIN SMALL LETTER A WITH OGONEK +&a;@@ +0x0106 LATIN CAPITAL LETTER C WITH ACUTE +&C'@@ +0x0107 LATIN SMALL LETTER C WITH ACUTE +&c'@@ +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX +&C>@@ +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX +&c>@@ +0x010a LATIN CAPITAL LETTER C WITH DOT ABOVE +&C.@@ +0x010b LATIN SMALL LETTER C WITH DOT ABOVE +&c.@@ +0x010c LATIN CAPITAL LETTER C WITH CARON +&C<@@ +0x010d LATIN SMALL LETTER C WITH CARON +&c<@@ +0x010e LATIN CAPITAL LETTER D WITH CARON +&D<@@ +0x010f LATIN SMALL LETTER D WITH CARON +&d<@@ +0x0110 LATIN CAPITAL LETTER D WITH STROKE +&D/@@ +0x0111 LATIN SMALL LETTER D WITH STROKE +&d/@@ +0x0112 LATIN CAPITAL LETTER E WITH MACRON +&E-@@ +0x0113 LATIN SMALL LETTER E WITH MACRON +&e-@@ +0x0114 LATIN CAPITAL LETTER E WITH BREVE +&E(@@ +0x0115 LATIN SMALL LETTER E WITH BREVE +&e(@@ +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +&E.@@ +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE +&e.@@ +0x0118 LATIN CAPITAL LETTER E WITH OGONEK +&E;@@ +0x0119 LATIN SMALL LETTER E WITH OGONEK +&e;@@ +0x011a LATIN CAPITAL LETTER E WITH CARON +&E<@@ +0x011b LATIN SMALL LETTER E WITH CARON +&e<@@ +0x011c LATIN CAPITAL LETTER G WITH CIRCUMFLEX +&G>@@ +0x011d LATIN SMALL LETTER G WITH CIRCUMFLEX +&g>@@ +0x011e LATIN CAPITAL LETTER G WITH BREVE +&G(@@ +0x011f LATIN SMALL LETTER G WITH BREVE +&g(@@ +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE +&G.@@ +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE +&g.@@ +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA +&G,@@ +0x0123 LATIN SMALL LETTER G WITH CEDILLA +&g,@@ +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX +&H>@@ +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX +&h>@@ +0x0126 LATIN CAPITAL LETTER H WITH STROKE +&H/@@ +0x0127 LATIN SMALL LETTER H WITH STROKE +&h/@@ +0x0128 LATIN CAPITAL LETTER I WITH TILDE +&I?@@ +0x0129 LATIN SMALL LETTER I WITH TILDE +&i?@@ +0x012a LATIN CAPITAL LETTER I WITH MACRON +&I-@@ +0x012b LATIN SMALL LETTER I WITH MACRON +&i-@@ +0x012c LATIN CAPITAL LETTER I WITH BREVE +&I(@@ +0x012d LATIN SMALL LETTER I WITH BREVE +&i(@@ +0x012e LATIN CAPITAL LETTER I WITH OGONEK +&I;@@ +0x012f LATIN SMALL LETTER I WITH OGONEK +&i;@@ +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +&I.@@ +0x0131 LATIN SMALL LETTER I DOTLESS +&i.@@ +0x0132 LATIN CAPITAL LIGATURE IJ +&IJ@@ +0x0133 LATIN SMALL LIGATURE IJ +&ij@@ +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX +&J>@@ +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX +&j>@@ +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA +&K,@@ +0x0137 LATIN SMALL LETTER K WITH CEDILLA +&k,@@ +0x0138 LATIN SMALL LETTER KRA (Greenlandic) +&kk@@ +0x0139 LATIN CAPITAL LETTER L WITH ACUTE +&L'@@ +0x013a LATIN SMALL LETTER L WITH ACUTE +&l'@@ +0x013b LATIN CAPITAL LETTER L WITH CEDILLA +&L,@@ +0x013c LATIN SMALL LETTER L WITH CEDILLA +&l,@@ +0x013d LATIN CAPITAL LETTER L WITH CARON +&L<@@ +0x013e LATIN SMALL LETTER L WITH CARON +&l<@@ +0x013f LATIN CAPITAL LETTER L WITH MIDDLE DOT +&L.@@ +0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT +&l.@@ +0x0141 LATIN CAPITAL LETTER L WITH STROKE +&L/@@ +0x0142 LATIN SMALL LETTER L WITH STROKE +&l/@@ +0x0143 LATIN CAPITAL LETTER N WITH ACUTE +&N'@@ +0x0144 LATIN SMALL LETTER N WITH ACUTE +&n'@@ +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA +&N,@@ +0x0146 LATIN SMALL LETTER N WITH CEDILLA +&n,@@ +0x0147 LATIN CAPITAL LETTER N WITH CARON +&N<@@ +0x0148 LATIN SMALL LETTER N WITH CARON +&n<@@ +0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +&'n@@ +0x014a LATIN CAPITAL LETTER ENG (Lappish) +&NG@@ +0x014b LATIN SMALL LETTER ENG (Lappish) +&ng@@ +0x014c LATIN CAPITAL LETTER O WITH MACRON +&O-@@ +0x014d LATIN SMALL LETTER O WITH MACRON +&o-@@ +0x014e LATIN CAPITAL LETTER O WITH BREVE +&O(@@ +0x014f LATIN SMALL LETTER O WITH BREVE +&o(@@ +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +&O"@@ +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE +&o"@@ +0x0152 LATIN CAPITAL LIGATURE OE +&OE@@ +0x0153 LATIN SMALL LIGATURE OE +&oe@@ +0x0154 LATIN CAPITAL LETTER R WITH ACUTE +&R'@@ +0x0155 LATIN SMALL LETTER R WITH ACUTE +&r'@@ +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA +&R,@@ +0x0157 LATIN SMALL LETTER R WITH CEDILLA +&r,@@ +0x0158 LATIN CAPITAL LETTER R WITH CARON +&R<@@ +0x0159 LATIN SMALL LETTER R WITH CARON +&r<@@ +0x015a LATIN CAPITAL LETTER S WITH ACUTE +&S'@@ +0x015b LATIN SMALL LETTER S WITH ACUTE +&s'@@ +0x015c LATIN CAPITAL LETTER S WITH CIRCUMFLEX +&S>@@ +0x015d LATIN SMALL LETTER S WITH CIRCUMFLEX +&s>@@ +0x015e LATIN CAPITAL LETTER S WITH CEDILLA +&S,@@ +0x015f LATIN SMALL LETTER S WITH CEDILLA +&s,@@ +0x0160 LATIN CAPITAL LETTER S WITH CARON +&S<@@ +0x0161 LATIN SMALL LETTER S WITH CARON +&s<@@ +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA +&T,@@ +0x0163 LATIN SMALL LETTER T WITH CEDILLA +&t,@@ +0x0164 LATIN CAPITAL LETTER T WITH CARON +&T<@@ +0x0165 LATIN SMALL LETTER T WITH CARON +&t<@@ +0x0166 LATIN CAPITAL LETTER T WITH STROKE +&T/@@ +0x0167 LATIN SMALL LETTER T WITH STROKE +&t/@@ +0x0168 LATIN CAPITAL LETTER U WITH TILDE +&U?@@ +0x0169 LATIN SMALL LETTER U WITH TILDE +&u?@@ +0x016a LATIN CAPITAL LETTER U WITH MACRON +&U-@@ +0x016b LATIN SMALL LETTER U WITH MACRON +&u-@@ +0x016c LATIN CAPITAL LETTER U WITH BREVE +&U(@@ +0x016d LATIN SMALL LETTER U WITH BREVE +&u(@@ +0x016e LATIN CAPITAL LETTER U WITH RING ABOVE +&U0@@ +0x016f LATIN SMALL LETTER U WITH RING ABOVE +&u0@@ +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +&U"@@ +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +&u"@@ +0x0172 LATIN CAPITAL LETTER U WITH OGONEK +&U;@@ +0x0173 LATIN SMALL LETTER U WITH OGONEK +&u;@@ +0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX +&W>@@ +0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX +&w>@@ +0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +&Y>@@ +0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX +&y>@@ +0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS +&Y:@@ +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE +&Z'@@ +0x017a LATIN SMALL LETTER Z WITH ACUTE +&z'@@ +0x017b LATIN CAPITAL LETTER Z WITH DOT ABOVE +&Z.@@ +0x017c LATIN SMALL LETTER Z WITH DOT ABOVE +&z.@@ +0x017d LATIN CAPITAL LETTER Z WITH CARON +&Z<@@ +0x017e LATIN SMALL LETTER Z WITH CARON +&z<@@ +0x01a0 LATIN CAPITAL LETTER O WITH HORN +&O9@@ +0x01a1 LATIN SMALL LETTER O WITH HORN +&o9@@ +0x01a2 LATIN CAPITAL LETTER OI +&OI@@ +0x01a3 LATIN SMALL LETTER OI +&oi@@ +0x01a6 LATIN LETTER YR +&yr@@ +0x01af LATIN CAPITAL LETTER U WITH HORN +&U9@@ +0x01b0 LATIN SMALL LETTER U WITH HORN +&u9@@ +0x01b5 LATIN CAPITAL LETTER Z WITH STROKE +&Z/@@ +0x01b6 LATIN SMALL LETTER Z WITH STROKE +&z/@@ +0x01b7 LATIN CAPITAL LETTER EZH +&ED@@ +0x01cd LATIN CAPITAL LETTER A WITH CARON +&A<@@ +0x01ce LATIN SMALL LETTER A WITH CARON +&a<@@ +0x01cf LATIN CAPITAL LETTER I WITH CARON +&I<@@ +0x01d0 LATIN SMALL LETTER I WITH CARON +&i<@@ +0x01d1 LATIN CAPITAL LETTER O WITH CARON +&O<@@ +0x01d2 LATIN SMALL LETTER O WITH CARON +&o<@@ +0x01d3 LATIN CAPITAL LETTER U WITH CARON +&U<@@ +0x01d4 LATIN SMALL LETTER U WITH CARON +&u<@@ +0x01d5 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +&_U:-_@@ +0x01d6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +&_u:-_@@ +0x01d7 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +&_U:'_@@ +0x01d8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +&_u:'_@@ +0x01d9 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +&_U:<_@@ +0x01da LATIN SMALL LETTER U WITH DIAERESIS AND CARON +&_u:<_@@ +0x01db LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +&_U:!_@@ +0x01dc LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +&_u:!_@@ +0x01de LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +&A1@@ +0x01df LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +&a1@@ +0x01e0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +&A7@@ +0x01e1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +&a7@@ +0x01e2 LATIN CAPITAL LETTER AE WITH MACRON +&A3@@ +0x01e3 LATIN SMALL LETTER AE WITH MACRON +&a3@@ +0x01e4 LATIN CAPITAL LETTER G WITH STROKE +&G/@@ +0x01e5 LATIN SMALL LETTER G WITH STROKE +&g/@@ +0x01e6 LATIN CAPITAL LETTER G WITH CARON +&G<@@ +0x01e7 LATIN SMALL LETTER G WITH CARON +&g<@@ +0x01e8 LATIN CAPITAL LETTER K WITH CARON +&K<@@ +0x01e9 LATIN SMALL LETTER K WITH CARON +&k<@@ +0x01ea LATIN CAPITAL LETTER O WITH OGONEK +&O;@@ +0x01eb LATIN SMALL LETTER O WITH OGONEK +&o;@@ +0x01ec LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +&O1@@ +0x01ed LATIN SMALL LETTER O WITH OGONEK AND MACRON +&o1@@ +0x01ee LATIN CAPITAL LETTER EZH WITH CARON +&EZ@@ +0x01ef LATIN SMALL LETTER EZH WITH CARON +&ez@@ +0x01f0 LATIN SMALL LETTER J WITH CARON +&j<@@ +0x01f4 LATIN CAPITAL LETTER G WITH ACUTE +&G'@@ +0x01f5 LATIN SMALL LETTER G WITH ACUTE +&g'@@ +0x01fa LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +&_AA'_@@ +0x01fb LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +&_aa'_@@ +0x01fc LATIN CAPITAL LETTER AE WITH ACUTE +&_AE'_@@ +0x01fd LATIN SMALL LETTER AE WITH ACUTE +&_ae'_@@ +0x01fe LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +&_O/'_@@ +0x01ff LATIN SMALL LETTER O WITH STROKE AND ACUTE +&_o/'_@@ +0x02bf MODIFIER LETTER LEFT HALF RING +&;S@@ +0x02c7 CARON +&'<@@ +0x02d8 BREVE +&'(@@ +0x02d9 DOT ABOVE +&'.@@ +0x02da RING ABOVE +&'0@@ +0x02db OGONEK +&';@@ +0x02dd DOUBLE ACUTE ACCENT +&'"@@ +0x0386 GREEK CAPITAL LETTER ALPHA WITH ACUTE +&A%@@ +0x0388 GREEK CAPITAL LETTER EPSILON WITH ACUTE +&E%@@ +0x0389 GREEK CAPITAL LETTER ETA WITH ACUTE +&Y%@@ +0x038a GREEK CAPITAL LETTER IOTA WITH ACUTE +&I%@@ +0x038c GREEK CAPITAL LETTER OMICRON WITH ACUTE +&O%@@ +0x038e GREEK CAPITAL LETTER UPSILON WITH ACUTE +&U%@@ +0x038f GREEK CAPITAL LETTER OMEGA WITH ACUTE +&W%@@ +0x0390 GREEK SMALL LETTER IOTA WITH ACUTE AND DIAERESIS +&i3@@ +0x0391 GREEK CAPITAL LETTER ALPHA +&A*@@ +0x0392 GREEK CAPITAL LETTER BETA +&B*@@ +0x0393 GREEK CAPITAL LETTER GAMMA +&G*@@ +0x0394 GREEK CAPITAL LETTER DELTA +&D*@@ +0x0395 GREEK CAPITAL LETTER EPSILON +&E*@@ +0x0396 GREEK CAPITAL LETTER ZETA +&Z*@@ +0x0397 GREEK CAPITAL LETTER ETA +&Y*@@ +0x0398 GREEK CAPITAL LETTER THETA +&H*@@ +0x0399 GREEK CAPITAL LETTER IOTA +&I*@@ +0x039a GREEK CAPITAL LETTER KAPPA +&K*@@ +0x039b GREEK CAPITAL LETTER LAMDA +&L*@@ +0x039c GREEK CAPITAL LETTER MU +&M*@@ +0x039d GREEK CAPITAL LETTER NU +&N*@@ +0x039e GREEK CAPITAL LETTER XI +&C*@@ +0x039f GREEK CAPITAL LETTER OMICRON +&O*@@ +0x03a0 GREEK CAPITAL LETTER PI +&P*@@ +0x03a1 GREEK CAPITAL LETTER RHO +&R*@@ +0x03a3 GREEK CAPITAL LETTER SIGMA +&S*@@ +0x03a4 GREEK CAPITAL LETTER TAU +&T*@@ +0x03a5 GREEK CAPITAL LETTER UPSILON +&U*@@ +0x03a6 GREEK CAPITAL LETTER PHI +&F*@@ +0x03a7 GREEK CAPITAL LETTER CHI +&X*@@ +0x03a8 GREEK CAPITAL LETTER PSI +&Q*@@ +0x03a9 GREEK CAPITAL LETTER OMEGA +&W*@@ +0x03aa GREEK CAPITAL LETTER IOTA WITH DIAERESIS +&J*@@ +0x03ab GREEK CAPITAL LETTER UPSILON WITH DIAERESIS +&V*@@ +0x03ac GREEK SMALL LETTER ALPHA WITH ACUTE +&a%@@ +0x03ad GREEK SMALL LETTER EPSILON WITH ACUTE +&e%@@ +0x03ae GREEK SMALL LETTER ETA WITH ACUTE +&y%@@ +0x03af GREEK SMALL LETTER IOTA WITH ACUTE +&i%@@ +0x03b0 GREEK SMALL LETTER UPSILON WITH ACUTE AND DIAERESIS +&u3@@ +0x03b1 GREEK SMALL LETTER ALPHA +&a*@@ +0x03b2 GREEK SMALL LETTER BETA +&b*@@ +0x03b3 GREEK SMALL LETTER GAMMA +&g*@@ +0x03b4 GREEK SMALL LETTER DELTA +&d*@@ +0x03b5 GREEK SMALL LETTER EPSILON +&e*@@ +0x03b6 GREEK SMALL LETTER ZETA +&z*@@ +0x03b7 GREEK SMALL LETTER ETA +&y*@@ +0x03b8 GREEK SMALL LETTER THETA +&h*@@ +0x03b9 GREEK SMALL LETTER IOTA +&i*@@ +0x03ba GREEK SMALL LETTER KAPPA +&k*@@ +0x03bb GREEK SMALL LETTER LAMDA +&l*@@ +0x03bc GREEK SMALL LETTER MU +&m*@@ +0x03bd GREEK SMALL LETTER NU +&n*@@ +0x03be GREEK SMALL LETTER XI +&c*@@ +0x03bf GREEK SMALL LETTER OMICRON +&o*@@ +0x03c0 GREEK SMALL LETTER PI +&p*@@ +0x03c1 GREEK SMALL LETTER RHO +&r*@@ +0x03c2 GREEK SMALL LETTER FINAL SIGMA +&*s@@ +0x03c3 GREEK SMALL LETTER SIGMA +&s*@@ +0x03c4 GREEK SMALL LETTER TAU +&t*@@ +0x03c5 GREEK SMALL LETTER UPSILON +&u*@@ +0x03c6 GREEK SMALL LETTER PHI +&f*@@ +0x03c7 GREEK SMALL LETTER CHI +&x*@@ +0x03c8 GREEK SMALL LETTER PSI +&q*@@ +0x03c9 GREEK SMALL LETTER OMEGA +&w*@@ +0x03ca GREEK SMALL LETTER IOTA WITH DIAERESIS +&j*@@ +0x03cb GREEK SMALL LETTER UPSILON WITH DIAERESIS +&v*@@ +0x03cc GREEK SMALL LETTER OMICRON WITH ACUTE +&o%@@ +0x03cd GREEK SMALL LETTER UPSILON WITH ACUTE +&u%@@ +0x03ce GREEK SMALL LETTER OMEGA WITH ACUTE +&w%@@ +0x03d8 GREEK NUMERAL SIGN +&'G@@ +0x03d9 GREEK LOWER NUMERAL SIGN +&,G@@ +0x03da GREEK CAPITAL LETTER STIGMA +&T3@@ +0x03db GREEK SMALL LETTER STIGMA +&t3@@ +0x03dc GREEK CAPITAL LETTER DIGAMMA +&M3@@ +0x03dd GREEK SMALL LETTER DIGAMMA +&m3@@ +0x03de GREEK CAPITAL LETTER KOPPA +&K3@@ +0x03df GREEK SMALL LETTER KOPPA +&k3@@ +0x03e0 GREEK CAPITAL LETTER SAMPI +&P3@@ +0x03e1 GREEK SMALL LETTER SAMPI +&p3@@ +0x03f4 ACUTE ACCENT AND DIAERESIS (Tonos and Dialytika) +&'%@@ +0x03f5 GREEK IOTA BELOW +&j3@@ +0x0401 CYRILLIC CAPITAL LETTER IO +&IO@@ +0x0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) +&D%@@ +0x0403 CYRILLIC CAPITAL LETTER GJE (Macedonian) +&G%@@ +0x0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE +&IE@@ +0x0405 CYRILLIC CAPITAL LETTER DZE (Macedonian) +&DS@@ +0x0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +&II@@ +0x0407 CYRILLIC CAPITAL LETTER YI (Ukrainian) +&YI@@ +0x0408 CYRILLIC CAPITAL LETTER JE +&J%@@ +0x0409 CYRILLIC CAPITAL LETTER LJE +&LJ@@ +0x040a CYRILLIC CAPITAL LETTER NJE +&NJ@@ +0x040b CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) +&Ts@@ +0x040c CYRILLIC CAPITAL LETTER KJE (Macedonian) +&KJ@@ +0x040e CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) +&V%@@ +0x040f CYRILLIC CAPITAL LETTER DZHE +&DZ@@ +0x0410 CYRILLIC CAPITAL LETTER A +&A=@@ +0x0411 CYRILLIC CAPITAL LETTER BE +&B=@@ +0x0412 CYRILLIC CAPITAL LETTER VE +&V=@@ +0x0413 CYRILLIC CAPITAL LETTER GHE +&G=@@ +0x0414 CYRILLIC CAPITAL LETTER DE +&D=@@ +0x0415 CYRILLIC CAPITAL LETTER IE +&E=@@ +0x0416 CYRILLIC CAPITAL LETTER ZHE +&Z%@@ +0x0417 CYRILLIC CAPITAL LETTER ZE +&Z=@@ +0x0418 CYRILLIC CAPITAL LETTER I +&I=@@ +0x0419 CYRILLIC CAPITAL LETTER SHORT I +&J=@@ +0x041a CYRILLIC CAPITAL LETTER KA +&K=@@ +0x041b CYRILLIC CAPITAL LETTER EL +&L=@@ +0x041c CYRILLIC CAPITAL LETTER EM +&M=@@ +0x041d CYRILLIC CAPITAL LETTER EN +&N=@@ +0x041e CYRILLIC CAPITAL LETTER O +&O=@@ +0x041f CYRILLIC CAPITAL LETTER PE +&P=@@ +0x0420 CYRILLIC CAPITAL LETTER ER +&R=@@ +0x0421 CYRILLIC CAPITAL LETTER ES +&S=@@ +0x0422 CYRILLIC CAPITAL LETTER TE +&T=@@ +0x0423 CYRILLIC CAPITAL LETTER U +&U=@@ +0x0424 CYRILLIC CAPITAL LETTER EF +&F=@@ +0x0425 CYRILLIC CAPITAL LETTER HA +&H=@@ +0x0426 CYRILLIC CAPITAL LETTER TSE +&C=@@ +0x0427 CYRILLIC CAPITAL LETTER CHE +&C%@@ +0x0428 CYRILLIC CAPITAL LETTER SHA +&S%@@ +0x0429 CYRILLIC CAPITAL LETTER SHCHA +&Sc@@ +0x042a CYRILLIC CAPITAL LETTER HARD SIGN +&="@@ +0x042b CYRILLIC CAPITAL LETTER YERU +&Y=@@ +0x042c CYRILLIC CAPITAL LETTER SOFT SIGN +&%"@@ +0x042d CYRILLIC CAPITAL LETTER E +&JE@@ +0x042e CYRILLIC CAPITAL LETTER YU +&JU@@ +0x042f CYRILLIC CAPITAL LETTER YA +&JA@@ +0x0430 CYRILLIC SMALL LETTER A +&a=@@ +0x0431 CYRILLIC SMALL LETTER BE +&b=@@ +0x0432 CYRILLIC SMALL LETTER VE +&v=@@ +0x0433 CYRILLIC SMALL LETTER GHE +&g=@@ +0x0434 CYRILLIC SMALL LETTER DE +&d=@@ +0x0435 CYRILLIC SMALL LETTER IE +&e=@@ +0x0436 CYRILLIC SMALL LETTER ZHE +&z%@@ +0x0437 CYRILLIC SMALL LETTER ZE +&z=@@ +0x0438 CYRILLIC SMALL LETTER I +&i=@@ +0x0439 CYRILLIC SMALL LETTER SHORT I +&j=@@ +0x043a CYRILLIC SMALL LETTER KA +&k=@@ +0x043b CYRILLIC SMALL LETTER EL +&l=@@ +0x043c CYRILLIC SMALL LETTER EM +&m=@@ +0x043d CYRILLIC SMALL LETTER EN +&n=@@ +0x043e CYRILLIC SMALL LETTER O +&o=@@ +0x043f CYRILLIC SMALL LETTER PE +&p=@@ +0x0440 CYRILLIC SMALL LETTER ER +&r=@@ +0x0441 CYRILLIC SMALL LETTER ES +&s=@@ +0x0442 CYRILLIC SMALL LETTER TE +&t=@@ +0x0443 CYRILLIC SMALL LETTER U +&u=@@ +0x0444 CYRILLIC SMALL LETTER EF +&f=@@ +0x0445 CYRILLIC SMALL LETTER HA +&h=@@ +0x0446 CYRILLIC SMALL LETTER TSE +&c=@@ +0x0447 CYRILLIC SMALL LETTER CHE +&c%@@ +0x0448 CYRILLIC SMALL LETTER SHA +&s%@@ +0x0449 CYRILLIC SMALL LETTER SHCHA +&sc@@ +0x044a CYRILLIC SMALL LETTER HARD SIGN +&='@@ +0x044b CYRILLIC SMALL LETTER YERU +&y=@@ +0x044c CYRILLIC SMALL LETTER SOFT SIGN +&%'@@ +0x044d CYRILLIC SMALL LETTER E +&je@@ +0x044e CYRILLIC SMALL LETTER YU +&ju@@ +0x044f CYRILLIC SMALL LETTER YA +&ja@@ +0x0451 CYRILLIC SMALL LETTER IO +&io@@ +0x0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) +&d%@@ +0x0453 CYRILLIC SMALL LETTER GJE (Macedonian) +&g%@@ +0x0454 CYRILLIC SMALL LETTER UKRAINIAN IE +&ie@@ +0x0455 CYRILLIC SMALL LETTER DZE (Macedonian) +&ds@@ +0x0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +&ii@@ +0x0457 CYRILLIC SMALL LETTER YI (Ukrainian) +&yi@@ +0x0458 CYRILLIC SMALL LETTER JE +&j%@@ +0x0459 CYRILLIC SMALL LETTER LJE +&lj@@ +0x045a CYRILLIC SMALL LETTER NJE +&nj@@ +0x045b CYRILLIC SMALL LETTER TSHE (Serbocroatian) +&ts@@ +0x045c CYRILLIC SMALL LETTER KJE (Macedonian) +&kj@@ +0x045e CYRILLIC SMALL LETTER SHORT U (Byelorussian) +&v%@@ +0x045f CYRILLIC SMALL LETTER DZHE +&dz@@ +0x0462 CYRILLIC CAPITAL LETTER YAT +&Y3@@ +0x0463 CYRILLIC SMALL LETTER YAT +&y3@@ +0x046a CYRILLIC CAPITAL LETTER BIG YUS +&O3@@ +0x046b CYRILLIC SMALL LETTER BIG YUS +&o3@@ +0x0472 CYRILLIC CAPITAL LETTER FITA +&F3@@ +0x0473 CYRILLIC SMALL LETTER FITA +&f3@@ +0x0474 CYRILLIC CAPITAL LETTER IZHITSA +&V3@@ +0x0475 CYRILLIC SMALL LETTER IZHITSA +&v3@@ +0x0480 CYRILLIC CAPITAL LETTER KOPPA +&C3@@ +0x0481 CYRILLIC SMALL LETTER KOPPA +&c3@@ +0x0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN +&G3@@ +0x0491 CYRILLIC SMALL LETTER GHE WITH UPTURN +&g3@@ +0x05d0 HEBREW LETTER ALEF +&A+@@ +0x05d1 HEBREW LETTER BET +&B+@@ +0x05d2 HEBREW LETTER GIMEL +&G+@@ +0x05d3 HEBREW LETTER DALET +&D+@@ +0x05d4 HEBREW LETTER HE +&H+@@ +0x05d5 HEBREW LETTER VAV +&W+@@ +0x05d6 HEBREW LETTER ZAYIN +&Z+@@ +0x05d7 HEBREW LETTER HET +&X+@@ +0x05d8 HEBREW LETTER TET +&Tj@@ +0x05d9 HEBREW LETTER YOD +&J+@@ +0x05da HEBREW LETTER FINAL KAF +&K%@@ +0x05db HEBREW LETTER KAF +&K+@@ +0x05dc HEBREW LETTER LAMED +&L+@@ +0x05dd HEBREW LETTER FINAL MEM +&M%@@ +0x05de HEBREW LETTER MEM +&M+@@ +0x05df HEBREW LETTER FINAL NUN +&N%@@ +0x05e0 HEBREW LETTER NUN +&N+@@ +0x05e1 HEBREW LETTER SAMEKH +&S+@@ +0x05e2 HEBREW LETTER AYIN +&E+@@ +0x05e3 HEBREW LETTER FINAL PE +&P%@@ +0x05e4 HEBREW LETTER PE +&P+@@ +0x05e5 HEBREW LETTER FINAL TSADI +&Zj@@ +0x05e6 HEBREW LETTER TSADI +&ZJ@@ +0x05e7 HEBREW LETTER QOF +&Q+@@ +0x05e8 HEBREW LETTER RESH +&R+@@ +0x05e9 HEBREW LETTER SHIN +&Sh@@ +0x05ea HEBREW LETTER TAV +&T+@@ +0x060c ARABIC COMMA +&,+@@ +0x061b ARABIC SEMICOLON +&;+@@ +0x061f ARABIC QUESTION MARK +&?+@@ +0x0621 ARABIC LETTER HAMZA +&H'@@ +0x0622 ARABIC LETTER ALEF WITH MADDA ABOVE +&aM@@ +0x0623 ARABIC LETTER ALEF WITH HAMZA ABOVE +&aH@@ +0x0624 ARABIC LETTER WAW WITH HAMZA ABOVE +&wH@@ +0x0625 ARABIC LETTER ALEF WITH HAMZA BELOW +&ah@@ +0x0626 ARABIC LETTER YEH WITH HAMZA ABOVE +&yH@@ +0x0627 ARABIC LETTER ALEF +&a+@@ +0x0628 ARABIC LETTER BEH +&b+@@ +0x0629 ARABIC LETTER TEH MARBUTA +&tm@@ +0x062a ARABIC LETTER TEH +&t+@@ +0x062b ARABIC LETTER THEH +&tk@@ +0x062c ARABIC LETTER JEEM +&g+@@ +0x062d ARABIC LETTER HAH +&hk@@ +0x062e ARABIC LETTER KHAH +&x+@@ +0x062f ARABIC LETTER DAL +&d+@@ +0x0630 ARABIC LETTER THAL +&dk@@ +0x0631 ARABIC LETTER REH +&r+@@ +0x0632 ARABIC LETTER ZAIN +&z+@@ +0x0633 ARABIC LETTER SEEN +&s+@@ +0x0634 ARABIC LETTER SHEEN +&sn@@ +0x0635 ARABIC LETTER SAD +&c+@@ +0x0636 ARABIC LETTER DAD +&dd@@ +0x0637 ARABIC LETTER TAH +&tj@@ +0x0638 ARABIC LETTER ZAH +&zH@@ +0x0639 ARABIC LETTER AIN +&e+@@ +0x063a ARABIC LETTER GHAIN +&i+@@ +0x0640 ARABIC TATWEEL +&++@@ +0x0641 ARABIC LETTER FEH +&f+@@ +0x0642 ARABIC LETTER QAF +&q+@@ +0x0643 ARABIC LETTER KAF +&k+@@ +0x0644 ARABIC LETTER LAM +&l+@@ +0x0645 ARABIC LETTER MEEM +&m+@@ +0x0646 ARABIC LETTER NOON +&n+@@ +0x0647 ARABIC LETTER HEH +&h+@@ +0x0648 ARABIC LETTER WAW +&w+@@ +0x0649 ARABIC LETTER ALEF MAKSURA +&j+@@ +0x064a ARABIC LETTER YEH +&y+@@ +0x064b ARABIC FATHATAN +&:+@@ +0x064c ARABIC DAMMATAN +&"+@@ +0x064d ARABIC KASRATAN +&=+@@ +0x064e ARABIC FATHA +&/+@@ +0x064f ARABIC DAMMA +&'+@@ +0x0650 ARABIC KASRA +&1+@@ +0x0651 ARABIC SHADDA +&3+@@ +0x0652 ARABIC SUKUN +&0+@@ +0x0670 SUPERSCRIPT ARABIC LETTER ALEF +&aS@@ +0x067e ARABIC LETTER PEH +&p+@@ +0x06a4 ARABIC LETTER VEH +&v+@@ +0x06af ARABIC LETTER GAF +&gf@@ +0x06f0 EASTERN ARABIC-INDIC DIGIT ZERO +&0a@@ +0x06f1 EASTERN ARABIC-INDIC DIGIT ONE +&1a@@ +0x06f2 EASTERN ARABIC-INDIC DIGIT TWO +&2a@@ +0x06f3 EASTERN ARABIC-INDIC DIGIT THREE +&3a@@ +0x06f4 EASTERN ARABIC-INDIC DIGIT FOUR +&4a@@ +0x06f5 EASTERN ARABIC-INDIC DIGIT FIVE +&5a@@ +0x06f6 EASTERN ARABIC-INDIC DIGIT SIX +&6a@@ +0x06f7 EASTERN ARABIC-INDIC DIGIT SEVEN +&7a@@ +0x06f8 EASTERN ARABIC-INDIC DIGIT EIGHT +&8a@@ +0x06f9 EASTERN ARABIC-INDIC DIGIT NINE +&9a@@ +0x1e00 LATIN CAPITAL LETTER A WITH RING BELOW +&_A-0_@@ +0x1e01 LATIN SMALL LETTER A WITH RING BELOW +&_a-0_@@ +0x1e02 LATIN CAPITAL LETTER B WITH DOT ABOVE +&B.@@ +0x1e03 LATIN SMALL LETTER B WITH DOT ABOVE +&b.@@ +0x1e04 LATIN CAPITAL LETTER B WITH DOT BELOW +&_B-._@@ +0x1e05 LATIN SMALL LETTER B WITH DOT BELOW +&_b-._@@ +0x1e06 LATIN CAPITAL LETTER B WITH LINE BELOW +&B_@@ +0x1e07 LATIN SMALL LETTER B WITH LINE BELOW +&b_@@ +0x1e08 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +&_C,'_@@ +0x1e09 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +&_c,'_@@ +0x1e0a LATIN CAPITAL LETTER D WITH DOT ABOVE +&D.@@ +0x1e0b LATIN SMALL LETTER D WITH DOT ABOVE +&d.@@ +0x1e0c LATIN CAPITAL LETTER D WITH DOT BELOW +&_D-._@@ +0x1e0d LATIN SMALL LETTER D WITH DOT BELOW +&_d-._@@ +0x1e0e LATIN CAPITAL LETTER D WITH LINE BELOW +&D_@@ +0x1e0f LATIN SMALL LETTER D WITH LINE BELOW +&d_@@ +0x1e10 LATIN CAPITAL LETTER D WITH CEDILLA +&D,@@ +0x1e11 LATIN SMALL LETTER D WITH CEDILLA +&d,@@ +0x1e12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +&_D->_@@ +0x1e13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +&_d->_@@ +0x1e14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +&_E-!_@@ +0x1e15 LATIN SMALL LETTER E WITH MACRON AND GRAVE +&_e-!_@@ +0x1e16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +&_E-'_@@ +0x1e17 LATIN SMALL LETTER E WITH MACRON AND ACUTE +&_e-'_@@ +0x1e18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +&_E->_@@ +0x1e19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +&_e->_@@ +0x1e1a LATIN CAPITAL LETTER E WITH TILDE BELOW +&_E-?_@@ +0x1e1b LATIN SMALL LETTER E WITH TILDE BELOW +&_e-?_@@ +0x1e1c LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +&_E,(_@@ +0x1e1d LATIN SMALL LETTER E WITH CEDILLA AND BREVE +&_e,(_@@ +0x1e1e LATIN CAPITAL LETTER F WITH DOT ABOVE +&F.@@ +0x1e1f LATIN SMALL LETTER F WITH DOT ABOVE +&f.@@ +0x1e20 LATIN CAPITAL LETTER G WITH MACRON +&G-@@ +0x1e21 LATIN SMALL LETTER G WITH MACRON +&g-@@ +0x1e22 LATIN CAPITAL LETTER H WITH DOT ABOVE +&H.@@ +0x1e23 LATIN SMALL LETTER H WITH DOT ABOVE +&h.@@ +0x1e24 LATIN CAPITAL LETTER H WITH DOT BELOW +&_H-._@@ +0x1e25 LATIN SMALL LETTER H WITH DOT BELOW +&_h-._@@ +0x1e26 LATIN CAPITAL LETTER H WITH DIAERESIS +&H:@@ +0x1e27 LATIN SMALL LETTER H WITH DIAERESIS +&h:@@ +0x1e28 LATIN CAPITAL LETTER H WITH CEDILLA +&H,@@ +0x1e29 LATIN SMALL LETTER H WITH CEDILLA +&h,@@ +0x1e2a LATIN CAPITAL LETTER H WITH BREVE BELOW +&_H-(_@@ +0x1e2b LATIN SMALL LETTER H WITH BREVE BELOW +&_h-(_@@ +0x1e2c LATIN CAPITAL LETTER I WITH TILDE BELOW +&_I-?_@@ +0x1e2d LATIN SMALL LETTER I WITH TILDE BELOW +&_i-?_@@ +0x1e2e LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +&_I:'_@@ +0x1e2f LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +&_i:'_@@ +0x1e30 LATIN CAPITAL LETTER K WITH ACUTE +&K'@@ +0x1e31 LATIN SMALL LETTER K WITH ACUTE +&k'@@ +0x1e32 LATIN CAPITAL LETTER K WITH DOT BELOW +&_K-._@@ +0x1e33 LATIN SMALL LETTER K WITH DOT BELOW +&_k-._@@ +0x1e34 LATIN CAPITAL LETTER K WITH LINE BELOW +&K_@@ +0x1e35 LATIN SMALL LETTER K WITH LINE BELOW +&k_@@ +0x1e36 LATIN CAPITAL LETTER L WITH DOT BELOW +&_L-._@@ +0x1e37 LATIN SMALL LETTER L WITH DOT BELOW +&_l-._@@ +0x1e38 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +&_L--._@@ +0x1e39 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +&_l--._@@ +0x1e3a LATIN CAPITAL LETTER L WITH LINE BELOW +&L_@@ +0x1e3b LATIN SMALL LETTER L WITH LINE BELOW +&l_@@ +0x1e3c LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +&_L->_@@ +0x1e3d LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +&_l->_@@ +0x1e3e LATIN CAPITAL LETTER M WITH ACUTE +&M'@@ +0x1e3f LATIN SMALL LETTER M WITH ACUTE +&m'@@ +0x1e40 LATIN CAPITAL LETTER M WITH DOT ABOVE +&M.@@ +0x1e41 LATIN SMALL LETTER M WITH DOT ABOVE +&m.@@ +0x1e42 LATIN CAPITAL LETTER M WITH DOT BELOW +&_M-._@@ +0x1e43 LATIN SMALL LETTER M WITH DOT BELOW +&_m-._@@ +0x1e44 LATIN CAPITAL LETTER N WITH DOT ABOVE +&N.@@ +0x1e45 LATIN SMALL LETTER N WITH DOT ABOVE +&n.@@ +0x1e46 LATIN CAPITAL LETTER N WITH DOT BELOW +&_N-._@@ +0x1e47 LATIN SMALL LETTER N WITH DOT BELOW +&_n-._@@ +0x1e48 LATIN CAPITAL LETTER N WITH LINE BELOW +&N_@@ +0x1e49 LATIN SMALL LETTER N WITH LINE BELOW +&n_@@ +0x1e4a LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +&_N->_@@ +0x1e4b LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +&_N->_@@ +0x1e4c LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +&_O?'_@@ +0x1e4d LATIN SMALL LETTER O WITH TILDE AND ACUTE +&_o?'_@@ +0x1e4e LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +&_O?:_@@ +0x1e4f LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +&_o?:_@@ +0x1e50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +&_O-!_@@ +0x1e51 LATIN SMALL LETTER O WITH MACRON AND GRAVE +&_o-!_@@ +0x1e52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +&_O-'_@@ +0x1e53 LATIN SMALL LETTER O WITH MACRON AND ACUTE +&_o-'_@@ +0x1e54 LATIN CAPITAL LETTER P WITH ACUTE +&P'@@ +0x1e55 LATIN SMALL LETTER P WITH ACUTE +&p'@@ +0x1e56 LATIN CAPITAL LETTER P WITH DOT ABOVE +&P.@@ +0x1e57 LATIN SMALL LETTER P WITH DOT ABOVE +&p.@@ +0x1e58 LATIN CAPITAL LETTER R WITH DOT ABOVE +&R.@@ +0x1e59 LATIN SMALL LETTER R WITH DOT ABOVE +&r.@@ +0x1e5a LATIN CAPITAL LETTER R WITH DOT BELOW +&_R-._@@ +0x1e5b LATIN SMALL LETTER R WITH DOT BELOW +&_r-._@@ +0x1e5c LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +&_R--._@@ +0x1e5d LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +&_r--._@@ +0x1e5e LATIN CAPITAL LETTER R WITH LINE BELOW +&R_@@ +0x1e5f LATIN SMALL LETTER R WITH LINE BELOW +&r_@@ +0x1e60 LATIN CAPITAL LETTER S WITH DOT ABOVE +&S.@@ +0x1e61 LATIN SMALL LETTER S WITH DOT ABOVE +&s.@@ +0x1e62 LATIN CAPITAL LETTER S WITH DOT BELOW +&_S-._@@ +0x1e63 LATIN SMALL LETTER S WITH DOT BELOW +&_s-._@@ +0x1e64 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +&_S'._@@ +0x1e65 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +&_s'._@@ +0x1e66 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +&_S<._@@ +0x1e67 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +&_s<._@@ +0x1e68 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +&_S.-._@@ +0x1e69 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +&_S.-._@@ +0x1e6a LATIN CAPITAL LETTER T WITH DOT ABOVE +&T.@@ +0x1e6b LATIN SMALL LETTER T WITH DOT ABOVE +&t.@@ +0x1e6c LATIN CAPITAL LETTER T WITH DOT BELOW +&_T-._@@ +0x1e6d LATIN SMALL LETTER T WITH DOT BELOW +&_t-._@@ +0x1e6e LATIN CAPITAL LETTER T WITH LINE BELOW +&T_@@ +0x1e6f LATIN SMALL LETTER T WITH LINE BELOW +&t_@@ +0x1e70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +&_T->_@@ +0x1e71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +&_t->_@@ +0x1e72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +&_U--:_@@ +0x1e73 LATIN SMALL LETTER U WITH DIAERESIS BELOW +&_u--:_@@ +0x1e74 LATIN CAPITAL LETTER U WITH TILDE BELOW +&_U-?_@@ +0x1e75 LATIN SMALL LETTER U WITH TILDE BELOW +&_u-?_@@ +0x1e76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +&_U->_@@ +0x1e77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +&_u->_@@ +0x1e78 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +&_U?'_@@ +0x1e79 LATIN SMALL LETTER U WITH TILDE AND ACUTE +&_u?'_@@ +0x1e7a LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +&_U-:_@@ +0x1e7b LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +&_u-:_@@ +0x1e7c LATIN CAPITAL LETTER V WITH TILDE +&V?@@ +0x1e7d LATIN SMALL LETTER V WITH TILDE +&v?@@ +0x1e7e LATIN CAPITAL LETTER V WITH DOT BELOW +&_V-._@@ +0x1e7f LATIN SMALL LETTER V WITH DOT BELOW +&_v-._@@ +0x1e80 LATIN CAPITAL LETTER W WITH GRAVE +&W!@@ +0x1e81 LATIN SMALL LETTER W WITH GRAVE +&w!@@ +0x1e82 LATIN CAPITAL LETTER W WITH ACUTE +&W'@@ +0x1e83 LATIN SMALL LETTER W WITH ACUTE +&w'@@ +0x1e84 LATIN CAPITAL LETTER W WITH DIAERESIS +&W:@@ +0x1e85 LATIN SMALL LETTER W WITH DIAERESIS +&w:@@ +0x1e86 LATIN CAPITAL LETTER W WITH DOT ABOVE +&W.@@ +0x1e87 LATIN SMALL LETTER W WITH DOT ABOVE +&w.@@ +0x1e88 LATIN CAPITAL LETTER W WITH DOT BELOW +&_W-._@@ +0x1e89 LATIN SMALL LETTER W WITH DOT BELOW +&_w-._@@ +0x1e8a LATIN CAPITAL LETTER X WITH DOT ABOVE +&X.@@ +0x1e8b LATIN SMALL LETTER X WITH DOT ABOVE +&x.@@ +0x1e8c LATIN CAPITAL LETTER X WITH DIAERESIS +&X:@@ +0x1e8d LATIN SMALL LETTER X WITH DIAERESIS +&x:@@ +0x1e8e LATIN CAPITAL LETTER Y WITH DOT ABOVE +&Y.@@ +0x1e8f LATIN SMALL LETTER Y WITH DOT ABOVE +&y.@@ +0x1e90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +&Z>@@ +0x1e91 LATIN SMALL LETTER Z WITH CIRCUMFLEX +&z>@@ +0x1e92 LATIN CAPITAL LETTER Z WITH DOT BELOW +&_Z-._@@ +0x1e93 LATIN SMALL LETTER Z WITH DOT BELOW +&_z-._@@ +0x1e94 LATIN CAPITAL LETTER Z WITH LINE BELOW +&Z_@@ +0x1e95 LATIN SMALL LETTER Z WITH LINE BELOW +&z_@@ +0x1e96 LATIN SMALL LETTER H WITH LINE BELOW +&h_@@ +0x1e97 LATIN SMALL LETTER T WITH DIAERESIS +&t:@@ +0x1e98 LATIN SMALL LETTER W WITH RING ABOVE +&w0@@ +0x1e99 LATIN SMALL LETTER Y WITH RING ABOVE +&y0@@ +0x1ea0 LATIN CAPITAL LETTER A WITH DOT BELOW +&_A-._@@ +0x1ea1 LATIN SMALL LETTER A WITH DOT BELOW +&_a-._@@ +0x1ea2 LATIN CAPITAL LETTER A WITH HOOK ABOVE +&A2@@ +0x1ea3 LATIN SMALL LETTER A WITH HOOK ABOVE +&a2@@ +0x1ea4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +&_A>'_@@ +0x1ea5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +&_a>'_@@ +0x1ea6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +&_A>!_@@ +0x1ea7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +&_a>!_@@ +0x1ea8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +&_A>2_@@ +0x1ea9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +&_a>2_@@ +0x1eaa LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +&_A>?_@@ +0x1eab LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +&_a>?_@@ +0x1eac LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +&_A>-._@@ +0x1ead LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +&_a>-._@@ +0x1eae LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +&_A('_@@ +0x1eaf LATIN SMALL LETTER A WITH BREVE AND ACUTE +&_a('_@@ +0x1eb0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +&_A(!_@@ +0x1eb1 LATIN SMALL LETTER A WITH BREVE AND GRAVE +&_a(!_@@ +0x1eb2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +&_A(2_@@ +0x1eb3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +&_a(2_@@ +0x1eb4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE +&_A(?_@@ +0x1eb5 LATIN SMALL LETTER A WITH BREVE AND TILDE +&_a(?_@@ +0x1eb6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +&_A(-._@@ +0x1eb7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +&_a(-._@@ +0x1eb8 LATIN CAPITAL LETTER E WITH DOT BELOW +&_E-._@@ +0x1eb9 LATIN SMALL LETTER E WITH DOT BELOW +&_e-._@@ +0x1eba LATIN CAPITAL LETTER E WITH HOOK ABOVE +&E2@@ +0x1ebb LATIN SMALL LETTER E WITH HOOK ABOVE +&e2@@ +0x1ebc LATIN CAPITAL LETTER E WITH TILDE +&E?@@ +0x1ebd LATIN SMALL LETTER E WITH TILDE +&e?@@ +0x1ebe LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +&_E>'_@@ +0x1ebf LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +&_e>'_@@ +0x1ec0 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +&_E>!_@@ +0x1ec1 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +&_e>!_@@ +0x1ec2 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +&_E>2_@@ +0x1ec3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +&_e>2_@@ +0x1ec4 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +&_E>?_@@ +0x1ec5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +&_e>?_@@ +0x1ec6 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +&_E>-._@@ +0x1ec7 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +&_e>-._@@ +0x1ec8 LATIN CAPITAL LETTER I WITH HOOK ABOVE +&I2@@ +0x1ec9 LATIN SMALL LETTER I WITH HOOK ABOVE +&i2@@ +0x1eca LATIN CAPITAL LETTER I WITH DOT BELOW +&_I-._@@ +0x1ecb LATIN SMALL LETTER I WITH DOT BELOW +&_i-._@@ +0x1ecc LATIN CAPITAL LETTER O WITH DOT BELOW +&_O-._@@ +0x1ecd LATIN SMALL LETTER O WITH DOT BELOW +&_o-._@@ +0x1ece LATIN CAPITAL LETTER O WITH HOOK ABOVE +&O2@@ +0x1ecf LATIN SMALL LETTER O WITH HOOK ABOVE +&o2@@ +0x1ed0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +&_O>'_@@ +0x1ed1 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +&_o>'_@@ +0x1ed2 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +&_O>!_@@ +0x1ed3 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +&_o>!_@@ +0x1ed4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +&_O>2_@@ +0x1ed5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +&_o>2_@@ +0x1ed6 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +&_O>?_@@ +0x1ed7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +&_o>?_@@ +0x1ed8 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +&_O>-._@@ +0x1ed9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +&_o>-._@@ +0x1eda LATIN CAPITAL LETTER O WITH HORN AND ACUTE +&_O9'_@@ +0x1edb LATIN SMALL LETTER O WITH HORN AND ACUTE +&_o9'_@@ +0x1edc LATIN CAPITAL LETTER O WITH HORN AND GRAVE +&_O9!_@@ +0x1edd LATIN SMALL LETTER O WITH HORN AND GRAVE +&_o9!_@@ +0x1ede LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +&_O92_@@ +0x1edf LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +&_o92_@@ +0x1ee0 LATIN CAPITAL LETTER O WITH HORN AND TILDE +&_O9?_@@ +0x1ee1 LATIN SMALL LETTER O WITH HORN AND TILDE +&_o9?_@@ +0x1ee2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +&_O9-._@@ +0x1ee3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW +&_o9-._@@ +0x1ee4 LATIN CAPITAL LETTER U WITH DOT BELOW +&_U-._@@ +0x1ee5 LATIN SMALL LETTER U WITH DOT BELOW +&_u-._@@ +0x1ee6 LATIN CAPITAL LETTER U WITH HOOK ABOVE +&U2@@ +0x1ee7 LATIN SMALL LETTER U WITH HOOK ABOVE +&u2@@ +0x1ee8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE +&_U9'_@@ +0x1ee9 LATIN SMALL LETTER U WITH HORN AND ACUTE +&_u9'_@@ +0x1eea LATIN CAPITAL LETTER U WITH HORN AND GRAVE +&_U9!_@@ +0x1eeb LATIN SMALL LETTER U WITH HORN AND GRAVE +&_u9!_@@ +0x1eec LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +&_U92_@@ +0x1eed LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +&_u92_@@ +0x1eee LATIN CAPITAL LETTER U WITH HORN AND TILDE +&_U9?_@@ +0x1eef LATIN SMALL LETTER U WITH HORN AND TILDE +&_u9?_@@ +0x1ef0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +&_U9-._@@ +0x1ef1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW +&_u9-._@@ +0x1ef2 LATIN CAPITAL LETTER Y WITH GRAVE +&Y!@@ +0x1ef3 LATIN SMALL LETTER Y WITH GRAVE +&y!@@ +0x1ef4 LATIN CAPITAL LETTER Y WITH DOT BELOW +&_Y-._@@ +0x1ef5 LATIN SMALL LETTER Y WITH DOT BELOW +&_y-._@@ +0x1ef6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE +&Y2@@ +0x1ef7 LATIN SMALL LETTER Y WITH HOOK ABOVE +&y2@@ +0x1ef8 LATIN CAPITAL LETTER Y WITH TILDE +&Y?@@ +0x1ef9 LATIN SMALL LETTER Y WITH TILDE +&y?@@ +0x1f00 GREEK DASIA AND ACUTE ACCENT +&;'@@ +0x1f01 GREEK PSILI AND ACUTE ACCENT +&,'@@ +0x1f02 GREEK DASIA AND VARIA +&;!@@ +0x1f03 GREEK PSILI AND VARIA +&,!@@ +0x1f04 GREEK DASIA AND PERISPOMENI +&?;@@ +0x1f05 GREEK PSILI AND PERISPOMENI +&?,@@ +0x1f06 GREEK DIAERESIS AND VARIA +&!:@@ +0x1f07 GREEK DIAERESIS AND PERISPOMENI +&?:@@ +0x2002 EN SPACE +&1N@@ +0x2003 EM SPACE +&1M@@ +0x2004 THREE-PER-EM SPACE +&3M@@ +0x2005 FOUR-PER-EM SPACE +&4M@@ +0x2006 SIX-PER-EM SPACE +&6M@@ +0x2009 THIN SPACE +&1T@@ +0x200a HAIR SPACE +&1H@@ +0x2010 HYPHEN +&-1@@ +0x2013 EN DASH +&-N@@ +0x2014 EM DASH +&-M@@ +0x2015 HORIZONTAL BAR +&-3@@ +0x2016 DOUBLE VERTICAL LINE +&!2@@ +0x2017 DOUBLE LOW LINE +&=2@@ +0x2018 LEFT SINGLE QUOTATION MARK +&'6@@ +0x2019 RIGHT SINGLE QUOTATION MARK +&'9@@ +0x201a SINGLE LOW-9 QUOTATION MARK +&.9@@ +0x201b SINGLE HIGH-REVERSED-9 QUOTATION MARK +&9'@@ +0x201c LEFT DOUBLE QUOTATION MARK +&"6@@ +0x201d RIGHT DOUBLE QUOTATION MARK +&"9@@ +0x201e DOUBLE LOW-9 QUOTATION MARK +&:9@@ +0x201f DOUBLE HIGH-REVERSED-9 QUOTATION MARK +&9"@@ +0x2020 DAGGER +&/-@@ +0x2021 DOUBLE DAGGER +&/=@@ +0x2025 TWO DOT LEADER +&..@@ +0x2030 PER MILLE SIGN +&%0@@ +0x2032 PRIME +&1'@@ +0x2033 DOUBLE PRIME +&2'@@ +0x2034 TRIPLE PRIME +&3'@@ +0x2035 REVERSED PRIME +&1"@@ +0x2036 REVERSED DOUBLE PRIME +&2"@@ +0x2037 REVERSED TRIPLE PRIME +&3"@@ +0x2038 CARET +&Ca@@ +0x2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK +&<1@@ +0x203a SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +&>1@@ +0x203b REFERENCE MARK +&:X@@ +0x203c DOUBLE EXCLAMATION MARK +&_!*2_@@ +0x203e OVERLINE +&'-@@ +0x2044 FRACTION SLASH +&/f@@ +0x2070 SUPERSCRIPT DIGIT ZERO +&0S@@ +0x2074 SUPERSCRIPT DIGIT FOUR +&4S@@ +0x2075 SUPERSCRIPT DIGIT FIVE +&5S@@ +0x2076 SUPERSCRIPT DIGIT SIX +&6S@@ +0x2077 SUPERSCRIPT DIGIT SEVEN +&7S@@ +0x2078 SUPERSCRIPT DIGIT EIGHT +&8S@@ +0x2079 SUPERSCRIPT DIGIT NINE +&9S@@ +0x207a SUPERSCRIPT PLUS SIGN +&+S@@ +0x207b SUPERSCRIPT MINUS +&-S@@ +0x207c SUPERSCRIPT EQUALS SIGN +&=S@@ +0x207d SUPERSCRIPT LEFT PARENTHESIS +&(S@@ +0x207e SUPERSCRIPT RIGHT PARENTHESIS +&)S@@ +0x207f SUPERSCRIPT LATIN SMALL LETTER N +&nS@@ +0x2080 SUBSCRIPT DIGIT ZERO +&0s@@ +0x2081 SUBSCRIPT DIGIT ONE +&1s@@ +0x2082 SUBSCRIPT DIGIT TWO +&2s@@ +0x2083 SUBSCRIPT DIGIT THREE +&3s@@ +0x2084 SUBSCRIPT DIGIT FOUR +&4s@@ +0x2085 SUBSCRIPT DIGIT FIVE +&5s@@ +0x2086 SUBSCRIPT DIGIT SIX +&6s@@ +0x2087 SUBSCRIPT DIGIT SEVEN +&7s@@ +0x2088 SUBSCRIPT DIGIT EIGHT +&8s@@ +0x2089 SUBSCRIPT DIGIT NINE +&9s@@ +0x208a SUBSCRIPT PLUS SIGN +&+s@@ +0x208b SUBSCRIPT MINUS +&-s@@ +0x208c SUBSCRIPT EQUALS SIGN +&=s@@ +0x208d SUBSCRIPT LEFT PARENTHESIS +&(s@@ +0x208e SUBSCRIPT RIGHT PARENTHESIS +&)s@@ +0x20a4 LIRA SIGN +&Li@@ +0x20a7 PESETA SIGN +&Pt@@ +0x20a9 WON SIGN +&W=@@ +0x2103 DEGREE CENTIGRADE +&oC@@ +0x2105 CARE OF +&co@@ +0x2109 DEGREE FAHRENHEIT +&oF@@ +0x2116 NUMERO SIGN +&N0@@ +0x2117 SOUND RECORDING COPYRIGHT +&PO@@ +0x211e PRESCRIPTION TAKE +&Rx@@ +0x2120 SERVICE MARK +&SM@@ +0x2122 TRADE MARK SIGN +&TM@@ +0x2126 OHM SIGN +&Om@@ +0x212b ANGSTROEM SIGN +&AO@@ +0x2153 VULGAR FRACTION ONE THIRD +&13@@ +0x2154 VULGAR FRACTION TWO THIRDS +&23@@ +0x2155 VULGAR FRACTION ONE FIFTH +&15@@ +0x2156 VULGAR FRACTION TWO FIFTHS +&25@@ +0x2157 VULGAR FRACTION THREE FIFTHS +&35@@ +0x2158 VULGAR FRACTION FOUR FIFTHS +&45@@ +0x2159 VULGAR FRACTION ONE SIXTH +&16@@ +0x215a VULGAR FRACTION FIVE SIXTHS +&56@@ +0x215b VULGAR FRACTION ONE EIGHTH +&18@@ +0x215c VULGAR FRACTION THREE EIGHTHS +&38@@ +0x215d VULGAR FRACTION FIVE EIGHTHS +&58@@ +0x215e VULGAR FRACTION SEVEN EIGHTHS +&78@@ +0x2160 ROMAN NUMERAL ONE +&1R@@ +0x2161 ROMAN NUMERAL TWO +&2R@@ +0x2162 ROMAN NUMERAL THREE +&3R@@ +0x2163 ROMAN NUMERAL FOUR +&4R@@ +0x2164 ROMAN NUMERAL FIVE +&5R@@ +0x2165 ROMAN NUMERAL SIX +&6R@@ +0x2166 ROMAN NUMERAL SEVEN +&7R@@ +0x2167 ROMAN NUMERAL EIGHT +&8R@@ +0x2168 ROMAN NUMERAL NINE +&9R@@ +0x2169 ROMAN NUMERAL TEN +&aR@@ +0x216a ROMAN NUMERAL ELEVEN +&bR@@ +0x216b ROMAN NUMERAL TWELVE +&cR@@ +0x216c ROMAN NUMERAL FIFTY +&_50R_@@ +0x216d ROMAN NUMERAL ONE HUNDRED +&_100R_@@ +0x216e ROMAN NUMERAL FIVE HUNDRED +&_500R_@@ +0x216f ROMAN NUMERAL ONE THOUSAND +&_1000R_@@ +0x2170 SMALL ROMAN NUMERAL ONE +&1r@@ +0x2171 SMALL ROMAN NUMERAL TWO +&2r@@ +0x2172 SMALL ROMAN NUMERAL THREE +&3r@@ +0x2173 SMALL ROMAN NUMERAL FOUR +&4r@@ +0x2174 SMALL ROMAN NUMERAL FIVE +&5r@@ +0x2175 SMALL ROMAN NUMERAL SIX +&6r@@ +0x2176 SMALL ROMAN NUMERAL SEVEN +&7r@@ +0x2177 SMALL ROMAN NUMERAL EIGHT +&8r@@ +0x2178 SMALL ROMAN NUMERAL NINE +&9r@@ +0x2179 SMALL ROMAN NUMERAL TEN +&ar@@ +0x217a SMALL ROMAN NUMERAL ELEVEN +&br@@ +0x217b SMALL ROMAN NUMERAL TWELVE +&cr@@ +0x217c SMALL ROMAN NUMERAL FIFTY +&_50r_@@ +0x217d SMALL ROMAN NUMERAL ONE HUNDRED +&_100r_@@ +0x217e SMALL ROMAN NUMERAL FIVE HUNDRED +&_500r_@@ +0x217f SMALL ROMAN NUMERAL ONE THOUSAND +&_1000r_@@ +0x2180 ROMAN NUMERAL ONE THOUSAND C D +&_1000RCD_@@ +0x2181 ROMAN NUMERAL FIVE THOUSAND +&_5000R_@@ +0x2182 ROMAN NUMERAL TEN THOUSAND +&_10000R_@@ +0x2190 LEFTWARDS ARROW +&<-@@ +0x2191 UPWARDS ARROW +&-!@@ +0x2192 RIGHTWARDS ARROW +&->@@ +0x2193 DOWNWARDS ARROW +&-v@@ +0x2194 LEFT RIGHT ARROW +&<>@@ +0x2195 UP DOWN ARROW +&UD@@ +0x2196 NORTH WEST ARROW +&__@@ +0x2198 SOUTH EAST ARROW +&_!!>_@@ +0x2199 SOUTH WEST ARROW +&_@@ +0x21d4 LEFT RIGHT DOUBLE ARROW +&==@@ +0x2200 FOR ALL +&FA@@ +0x2202 PARTIAL DIFFERENTIAL +&dP@@ +0x2203 THERE EXISTS +&TE@@ +0x2205 EMPTY SET +&/0@@ +0x2206 INCREMENT +&DE@@ +0x2207 NABLA +&NB@@ +0x2208 ELEMENT OF +&(-@@ +0x220b CONTAINS AS MEMBER +&-)@@ +0x220f N-ARY PRODUCT +&*P@@ +0x2211 N-ARY SUMMATION +&+Z@@ +0x2212 MINUS SIGN +&-2@@ +0x2213 MINUS-OR-PLUS SIGN +&-+@@ +0x2217 ASTERISK OPERATOR +&*-@@ +0x2218 RING OPERATOR +&Ob@@ +0x2219 BULLET OPERATOR +&Sb@@ +0x221a SQUARE ROOT +&RT@@ +0x221d PROPORTIONAL TO +&0(@@ +0x221e INFINITY +&00@@ +0x221f RIGHT ANGLE +&-L@@ +0x2220 ANGLE +&-V@@ +0x2225 PARALLEL TO +&PP@@ +0x2227 LOGICAL AND +&AN@@ +0x2228 LOGICAL OR +&OR@@ +0x2229 INTERSECTION +&(U@@ +0x222a UNION +&)U@@ +0x222b INTEGRAL +&In@@ +0x222c DOUBLE INTEGRAL +&DI@@ +0x222e CONTOUR INTEGRAL +&Io@@ +0x2234 THEREFORE +&.:@@ +0x2235 BECAUSE +&:.@@ +0x2236 RATIO +&:R@@ +0x2237 PROPORTION +&::@@ +0x223c TILDE OPERATOR +&?1@@ +0x223e INVERTED LAZY S +&CG@@ +0x2243 ASYMPTOTICALLY EQUAL TO +&?-@@ +0x2245 APPROXIMATELY EQUAL TO +&?=@@ +0x2248 ALMOST EQUAL TO +&?2@@ +0x224c ALL EQUAL TO +&=?@@ +0x2253 IMAGE OF OR APPROXIMATELY EQUAL TO +&HI@@ +0x2260 NOT EQUAL TO +&!=@@ +0x2261 IDENTICAL TO +&=3@@ +0x2264 LESS-THAN OR EQUAL TO +&=<@@ +0x2265 GREATER-THAN OR EQUAL TO +&>=@@ +0x226a MUCH LESS-THAN +&<*@@ +0x226b MUCH GREATER-THAN +&*>@@ +0x226e NOT LESS-THAN +&!<@@ +0x226f NOT GREATER-THAN +&!>@@ +0x2282 SUBSET OF +&(C@@ +0x2283 SUPERSET OF +&)C@@ +0x2286 SUBSET OF OR EQUAL TO +&(_@@ +0x2287 SUPERSET OF OR EQUAL TO +&)_@@ +0x2299 CIRCLED DOT OPERATOR +&0.@@ +0x229a CIRCLED RING OPERATOR +&02@@ +0x22a5 UP TACK +&-T@@ +0x22c5 DOT OPERATOR +&.P@@ +0x22ee VERTICAL ELLIPSIS +&:3@@ +0x22ef MIDLINE HORIZONTAL ELLIPSIS +&.3@@ +0x2302 HOUSE +&Eh@@ +0x2308 LEFT CEILING +&<7@@ +0x2309 RIGHT CEILING +&>7@@ +0x230a LEFT FLOOR +&7<@@ +0x230b RIGHT FLOOR +&7>@@ +0x2310 REVERSED NOT SIGN +&NI@@ +0x2312 ARC +&(A@@ +0x2315 TELEPHONE RECORDER +&TR@@ +0x2320 TOP HALF INTEGRAL +&Iu@@ +0x2321 BOTTOM HALF INTEGRAL +&Il@@ +0x2329 LEFT-POINTING ANGLE BRACKET +&@@ +0x2423 OPEN BOX +&Vs@@ +0x2440 OCR HOOK +&1h@@ +0x2441 OCR CHAIR +&3h@@ +0x2442 OCR FORK +&2h@@ +0x2443 OCR INVERTED FORK +&4h@@ +0x2446 OCR BRANCH BANK IDENTIFICATION +&1j@@ +0x2447 OCR AMOUNT OF CHECK +&2j@@ +0x2448 OCR DASH +&3j@@ +0x2449 OCR CUSTOMER ACCOUNT NUMBER +&4j@@ +0x2460 CIRCLED DIGIT ONE +&_1-o_@@ +0x2461 CIRCLED DIGIT TWO +&_2-o_@@ +0x2462 CIRCLED DIGIT THREE +&_3-o_@@ +0x2463 CIRCLED DIGIT FOUR +&_4-o_@@ +0x2464 CIRCLED DIGIT FIVE +&_5-o_@@ +0x2465 CIRCLED DIGIT SIX +&_6-o_@@ +0x2466 CIRCLED DIGIT SEVEN +&_7-o_@@ +0x2467 CIRCLED DIGIT EIGHT +&_8-o_@@ +0x2468 CIRCLED DIGIT NINE +&_9-o_@@ +0x2469 CIRCLED NUMBER TEN +&_10-o_@@ +0x246a CIRCLED NUMBER ELEVEN +&_11-o_@@ +0x246b CIRCLED NUMBER TWELVE +&_12-o_@@ +0x246c CIRCLED NUMBER THIRTEEN +&_13-o_@@ +0x246d CIRCLED NUMBER FOURTEEN +&_14-o_@@ +0x246e CIRCLED NUMBER FIFTEEN +&_15-o_@@ +0x246f CIRCLED NUMBER SIXTEEN +&_16-o_@@ +0x2470 CIRCLED NUMBER SEVENTEEN +&_17-o_@@ +0x2471 CIRCLED NUMBER EIGHTEEN +&_18-o_@@ +0x2472 CIRCLED NUMBER NINETEEN +&_19-o_@@ +0x2473 CIRCLED NUMBER TWENTY +&_20-o_@@ +0x2474 PARENTHESIZED DIGIT ONE +&_(1)_@@ +0x2475 PARENTHESIZED DIGIT TWO +&_(2)_@@ +0x2476 PARENTHESIZED DIGIT THREE +&_(3)_@@ +0x2477 PARENTHESIZED DIGIT FOUR +&_(4)_@@ +0x2478 PARENTHESIZED DIGIT FIVE +&_(5)_@@ +0x2479 PARENTHESIZED DIGIT SIX +&_(6)_@@ +0x247a PARENTHESIZED DIGIT SEVEN +&_(7)_@@ +0x247b PARENTHESIZED DIGIT EIGHT +&_(8)_@@ +0x247c PARENTHESIZED DIGIT NINE +&_(9)_@@ +0x247d PARENTHESIZED NUMBER TEN +&_(10)_@@ +0x247e PARENTHESIZED NUMBER ELEVEN +&_(11)_@@ +0x247f PARENTHESIZED NUMBER TWELVE +&_(12)_@@ +0x2480 PARENTHESIZED NUMBER THIRTEEN +&_(13)_@@ +0x2481 PARENTHESIZED NUMBER FOURTEEN +&_(14)_@@ +0x2482 PARENTHESIZED NUMBER FIFTEEN +&_(15)_@@ +0x2483 PARENTHESIZED NUMBER SIXTEEN +&_(16)_@@ +0x2484 PARENTHESIZED NUMBER SEVENTEEN +&_(17)_@@ +0x2485 PARENTHESIZED NUMBER EIGHTEEN +&_(18)_@@ +0x2486 PARENTHESIZED NUMBER NINETEEN +&_(19)_@@ +0x2487 PARENTHESIZED NUMBER TWENTY +&_(20)_@@ +0x2488 DIGIT ONE FULL STOP +&1.@@ +0x2489 DIGIT TWO FULL STOP +&2.@@ +0x248a DIGIT THREE FULL STOP +&3.@@ +0x248b DIGIT FOUR FULL STOP +&4.@@ +0x248c DIGIT FIVE FULL STOP +&5.@@ +0x248d DIGIT SIX FULL STOP +&6.@@ +0x248e DIGIT SEVEN FULL STOP +&7.@@ +0x248f DIGIT EIGHT FULL STOP +&8.@@ +0x2490 DIGIT NINE FULL STOP +&9.@@ +0x2491 NUMBER TEN FULL STOP +&_10._@@ +0x2492 NUMBER ELEVEN FULL STOP +&_11._@@ +0x2493 NUMBER TWELVE FULL STOP +&_12._@@ +0x2494 NUMBER THIRTEEN FULL STOP +&_13._@@ +0x2495 NUMBER FOURTEEN FULL STOP +&_14._@@ +0x2496 NUMBER FIFTEEN FULL STOP +&_15._@@ +0x2497 NUMBER SIXTEEN FULL STOP +&_16._@@ +0x2498 NUMBER SEVENTEEN FULL STOP +&_17._@@ +0x2499 NUMBER EIGHTEEN FULL STOP +&_18._@@ +0x249a NUMBER NINETEEN FULL STOP +&_19._@@ +0x249b NUMBER TWENTY FULL STOP +&_20._@@ +0x249c PARENTHESIZED LATIN SMALL LETTER A +&_(a)_@@ +0x249d PARENTHESIZED LATIN SMALL LETTER B +&_(b)_@@ +0x249e PARENTHESIZED LATIN SMALL LETTER C +&_(c)_@@ +0x249f PARENTHESIZED LATIN SMALL LETTER D +&_(d)_@@ +0x24a0 PARENTHESIZED LATIN SMALL LETTER E +&_(e)_@@ +0x24a1 PARENTHESIZED LATIN SMALL LETTER F +&_(f)_@@ +0x24a2 PARENTHESIZED LATIN SMALL LETTER G +&_(g)_@@ +0x24a3 PARENTHESIZED LATIN SMALL LETTER H +&_(h)_@@ +0x24a4 PARENTHESIZED LATIN SMALL LETTER I +&_(i)_@@ +0x24a5 PARENTHESIZED LATIN SMALL LETTER J +&_(j)_@@ +0x24a6 PARENTHESIZED LATIN SMALL LETTER K +&_(k)_@@ +0x24a7 PARENTHESIZED LATIN SMALL LETTER L +&_(l)_@@ +0x24a8 PARENTHESIZED LATIN SMALL LETTER M +&_(m)_@@ +0x24a9 PARENTHESIZED LATIN SMALL LETTER N +&_(n)_@@ +0x24aa PARENTHESIZED LATIN SMALL LETTER O +&_(o)_@@ +0x24ab PARENTHESIZED LATIN SMALL LETTER P +&_(p)_@@ +0x24ac PARENTHESIZED LATIN SMALL LETTER Q +&_(q)_@@ +0x24ad PARENTHESIZED LATIN SMALL LETTER R +&_(r)_@@ +0x24ae PARENTHESIZED LATIN SMALL LETTER S +&_(s)_@@ +0x24af PARENTHESIZED LATIN SMALL LETTER T +&_(t)_@@ +0x24b0 PARENTHESIZED LATIN SMALL LETTER U +&_(u)_@@ +0x24b1 PARENTHESIZED LATIN SMALL LETTER V +&_(v)_@@ +0x24b2 PARENTHESIZED LATIN SMALL LETTER W +&_(w)_@@ +0x24b3 PARENTHESIZED LATIN SMALL LETTER X +&_(x)_@@ +0x24b4 PARENTHESIZED LATIN SMALL LETTER Y +&_(y)_@@ +0x24b5 PARENTHESIZED LATIN SMALL LETTER Z +&_(z)_@@ +0x24b6 CIRCLED LATIN CAPITAL LETTER A +&_A-o_@@ +0x24b7 CIRCLED LATIN CAPITAL LETTER B +&_B-o_@@ +0x24b8 CIRCLED LATIN CAPITAL LETTER C +&_C-o_@@ +0x24b9 CIRCLED LATIN CAPITAL LETTER D +&_D-o_@@ +0x24ba CIRCLED LATIN CAPITAL LETTER E +&_E-o_@@ +0x24bb CIRCLED LATIN CAPITAL LETTER F +&_F-o_@@ +0x24bc CIRCLED LATIN CAPITAL LETTER G +&_G-o_@@ +0x24bd CIRCLED LATIN CAPITAL LETTER H +&_H-o_@@ +0x24be CIRCLED LATIN CAPITAL LETTER I +&_I-o_@@ +0x24bf CIRCLED LATIN CAPITAL LETTER J +&_J-o_@@ +0x24c0 CIRCLED LATIN CAPITAL LETTER K +&_K-o_@@ +0x24c1 CIRCLED LATIN CAPITAL LETTER L +&_L-o_@@ +0x24c2 CIRCLED LATIN CAPITAL LETTER M +&_M-o_@@ +0x24c3 CIRCLED LATIN CAPITAL LETTER N +&_N-o_@@ +0x24c4 CIRCLED LATIN CAPITAL LETTER O +&_O-o_@@ +0x24c5 CIRCLED LATIN CAPITAL LETTER P +&_P-o_@@ +0x24c6 CIRCLED LATIN CAPITAL LETTER Q +&_Q-o_@@ +0x24c7 CIRCLED LATIN CAPITAL LETTER R +&_R-o_@@ +0x24c8 CIRCLED LATIN CAPITAL LETTER S +&_S-o_@@ +0x24c9 CIRCLED LATIN CAPITAL LETTER T +&_T-o_@@ +0x24ca CIRCLED LATIN CAPITAL LETTER U +&_U-o_@@ +0x24cb CIRCLED LATIN CAPITAL LETTER V +&_V-o_@@ +0x24cc CIRCLED LATIN CAPITAL LETTER W +&_W-o_@@ +0x24cd CIRCLED LATIN CAPITAL LETTER X +&_X-o_@@ +0x24ce CIRCLED LATIN CAPITAL LETTER Y +&_Y-o_@@ +0x24cf CIRCLED LATIN CAPITAL LETTER Z +&_Z-o_@@ +0x24d0 CIRCLED LATIN SMALL LETTER A +&_a-o_@@ +0x24d1 CIRCLED LATIN SMALL LETTER B +&_b-o_@@ +0x24d2 CIRCLED LATIN SMALL LETTER C +&_c-o_@@ +0x24d3 CIRCLED LATIN SMALL LETTER D +&_d-o_@@ +0x24d4 CIRCLED LATIN SMALL LETTER E +&_e-o_@@ +0x24d5 CIRCLED LATIN SMALL LETTER F +&_f-o_@@ +0x24d6 CIRCLED LATIN SMALL LETTER G +&_g-o_@@ +0x24d7 CIRCLED LATIN SMALL LETTER H +&_h-o_@@ +0x24d8 CIRCLED LATIN SMALL LETTER I +&_i-o_@@ +0x24d9 CIRCLED LATIN SMALL LETTER J +&_j-o_@@ +0x24da CIRCLED LATIN SMALL LETTER K +&_k-o_@@ +0x24db CIRCLED LATIN SMALL LETTER L +&_l-o_@@ +0x24dc CIRCLED LATIN SMALL LETTER M +&_m-o_@@ +0x24dd CIRCLED LATIN SMALL LETTER N +&_n-o_@@ +0x24de CIRCLED LATIN SMALL LETTER O +&_o-o_@@ +0x24df CIRCLED LATIN SMALL LETTER P +&_p-o_@@ +0x24e0 CIRCLED LATIN SMALL LETTER Q +&_q-o_@@ +0x24e1 CIRCLED LATIN SMALL LETTER R +&_r-o_@@ +0x24e2 CIRCLED LATIN SMALL LETTER S +&_s-o_@@ +0x24e3 CIRCLED LATIN SMALL LETTER T +&_t-o_@@ +0x24e4 CIRCLED LATIN SMALL LETTER U +&_u-o_@@ +0x24e5 CIRCLED LATIN SMALL LETTER V +&_v-o_@@ +0x24e6 CIRCLED LATIN SMALL LETTER W +&_w-o_@@ +0x24e7 CIRCLED LATIN SMALL LETTER X +&_x-o_@@ +0x24e8 CIRCLED LATIN SMALL LETTER Y +&_y-o_@@ +0x24e9 CIRCLED LATIN SMALL LETTER Z +&_z-o_@@ +0x24ea CIRCLED DIGIT ZERO +&_0-o_@@ +0x2500 BOX DRAWINGS LIGHT HORIZONTAL +&hh@@ +0x2501 BOX DRAWINGS HEAVY HORIZONTAL +&HH@@ +0x2502 BOX DRAWINGS LIGHT VERTICAL +&vv@@ +0x2503 BOX DRAWINGS HEAVY VERTICAL +&VV@@ +0x2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL +&3-@@ +0x2505 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL +&3_@@ +0x2506 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL +&3!@@ +0x2507 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL +&3/@@ +0x2508 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL +&4-@@ +0x2509 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL +&4_@@ +0x250a BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL +&4!@@ +0x250b BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL +&4/@@ +0x250c BOX DRAWINGS LIGHT DOWN AND RIGHT +&dr@@ +0x250d BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY +&dR@@ +0x250e BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT +&Dr@@ +0x250f BOX DRAWINGS HEAVY DOWN AND RIGHT +&DR@@ +0x2510 BOX DRAWINGS LIGHT DOWN AND LEFT +&dl@@ +0x2511 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY +&dL@@ +0x2512 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT +&Dl@@ +0x2513 BOX DRAWINGS HEAVY DOWN AND LEFT +&LD@@ +0x2514 BOX DRAWINGS LIGHT UP AND RIGHT +&ur@@ +0x2515 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY +&uR@@ +0x2516 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT +&Ur@@ +0x2517 BOX DRAWINGS HEAVY UP AND RIGHT +&UR@@ +0x2518 BOX DRAWINGS LIGHT UP AND LEFT +&ul@@ +0x2519 BOX DRAWINGS UP LIGHT AND LEFT HEAVY +&uL@@ +0x251a BOX DRAWINGS UP HEAVY AND LEFT LIGHT +&Ul@@ +0x251b BOX DRAWINGS HEAVY UP AND LEFT +&UL@@ +0x251c BOX DRAWINGS LIGHT VERTICAL AND RIGHT +&vr@@ +0x251d BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +&vR@@ +0x251e BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT +&_Udr_@@ +0x251f BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT +&_uDr_@@ +0x2520 BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +&Vr@@ +0x2521 BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY +&_UdR_@@ +0x2522 BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY +&_uDR_@@ +0x2523 BOX DRAWINGS HEAVY VERTICAL AND RIGHT +&VR@@ +0x2524 BOX DRAWINGS LIGHT VERTICAL AND LEFT +&vl@@ +0x2525 BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +&vL@@ +0x2526 BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT +&_Udl_@@ +0x2527 BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT +&_uDl_@@ +0x2528 BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +&Vl@@ +0x2529 BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY +&_UdL_@@ +0x252a BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY +&_uDL_@@ +0x252b BOX DRAWINGS HEAVY VERTICAL AND LEFT +&VL@@ +0x252c BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +&dh@@ +0x252d BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT +&_dLr_@@ +0x252e BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT +&_dlR_@@ +0x252f BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +&dH@@ +0x2530 BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +&Dh@@ +0x2531 BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY +&_DLr_@@ +0x2532 BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY +&_DlR_@@ +0x2533 BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +&DH@@ +0x2534 BOX DRAWINGS LIGHT UP AND HORIZONTAL +&uh@@ +0x2535 BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT +&_uLr_@@ +0x2536 BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT +&_ulR_@@ +0x2537 BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +&uH@@ +0x2538 BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +&Uh@@ +0x2539 BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY +&_ULr_@@ +0x253a BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY +&_UlR_@@ +0x253b BOX DRAWINGS HEAVY UP AND HORIZONTAL +&UH@@ +0x253c BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +&vh@@ +0x253d BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT +&_vLr_@@ +0x253e BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT +&_vlR_@@ +0x253f BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +&vH@@ +0x2540 BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT +&_Udh_@@ +0x2541 BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT +&_uDh_@@ +0x2542 BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +&Vh@@ +0x2543 BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT +&_UdLr_@@ +0x2544 BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT +&_UdlR_@@ +0x2545 BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT +&_uDLr_@@ +0x2546 BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT +&_uDlR_@@ +0x2547 BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY +&_UdH_@@ +0x2548 BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY +&_uDH_@@ +0x2549 BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY +&_VLr_@@ +0x254a BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY +&_VlR_@@ +0x254b BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +&VH@@ +0x2571 BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT +&FD@@ +0x2572 BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT +&BD@@ +0x2580 UPPER HALF BLOCK +&TB@@ +0x2584 LOWER HALF BLOCK +&LB@@ +0x2588 FULL BLOCK +&FB@@ +0x258c LEFT HALF BLOCK +&lB@@ +0x2590 RIGHT HALF BLOCK +&RB@@ +0x2591 LIGHT SHADE +&.S@@ +0x2592 MEDIUM SHADE +&:S@@ +0x2593 DARK SHADE +&?S@@ +0x25a0 BLACK SQUARE +&fS@@ +0x25a1 WHITE SQUARE +&OS@@ +0x25a2 WHITE SQUARE WITH ROUNDED CORNERS +&RO@@ +0x25a3 WHITE SQUARE CONTAINING BLACK SMALL SQUARE +&Rr@@ +0x25a4 SQUARE WITH HORIZONTAL FILL +&RF@@ +0x25a5 SQUARE WITH VERTICAL FILL +&RY@@ +0x25a6 SQUARE WITH ORTHOGONAL CROSSHATCH FILL +&RH@@ +0x25a7 SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL +&RZ@@ +0x25a8 SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL +&RK@@ +0x25a9 SQUARE WITH DIAGONAL CROSSHATCH FILL +&RX@@ +0x25aa BLACK SMALL SQUARE +&sB@@ +0x25ac BLACK RECTANGLE +&SR@@ +0x25ad WHITE RECTANGLE +&Or@@ +0x25b2 BLACK UP-POINTING TRIANGLE +&UT@@ +0x25b3 WHITE UP-POINTING TRIANGLE +&uT@@ +0x25b6 BLACK RIGHT-POINTING TRIANGLE +&PR@@ +0x25b7 WHITE RIGHT-POINTING TRIANGLE +&Tr@@ +0x25bc BLACK DOWN-POINTING TRIANGLE +&Dt@@ +0x25bd WHITE DOWN-POINTING TRIANGLE +&dT@@ +0x25c0 BLACK LEFT-POINTING TRIANGLE +&PL@@ +0x25c1 WHITE LEFT-POINTING TRIANGLE +&Tl@@ +0x25c6 BLACK DIAMOND +&Db@@ +0x25c7 WHITE DIAMOND +&Dw@@ +0x25ca LOZENGE +&LZ@@ +0x25cb WHITE CIRCLE +&0m@@ +0x25ce BULLSEYE +&0o@@ +0x25cf BLACK CIRCLE +&0M@@ +0x25d0 CIRCLE WITH LEFT HALF BLACK +&0L@@ +0x25d1 CIRCLE WITH RIGHT HALF BLACK +&0R@@ +0x25d8 INVERSE BULLET +&Sn@@ +0x25d9 INVERSE WHITE CIRCLE +&Ic@@ +0x25e2 BLACK LOWER RIGHT TRIANGLE +&Fd@@ +0x25e3 BLACK LOWER LEFT TRIANGLE +&Bd@@ +0x2605 BLACK STAR +&*2@@ +0x2606 WHITE STAR +&*1@@ +0x260e BLACK TELEPHONE +&_TEL_@@ +0x260f WHITE TELEPHONE +&_tel_@@ +0x261c WHITE LEFT POINTING INDEX +&H@@ +0x263a WHITE SMILING FACE +&0u@@ +0x263b BLACK SMILING FACE +&0U@@ +0x263c WHITE SUN WITH RAYS +&SU@@ +0x2640 FEMALE SIGN +&Fm@@ +0x2642 MALE SIGN +&Ml@@ +0x2660 BLACK SPADE SUIT +&cS@@ +0x2661 WHITE HEART SUIT +&cH@@ +0x2662 WHITE DIAMOND SUIT +&cD@@ +0x2663 BLACK CLUB SUIT +&cC@@ +0x2664 WHITE SPADE SUIT +&_cS-_@@ +0x2665 BLACK HEART SUIT +&_cH-_@@ +0x2666 BLACK DIAMOND SUIT +&_cD-_@@ +0x2667 WHITE CLUB SUIT +&_cC-_@@ +0x2669 QUARTER NOTE +&Md@@ +0x266a EIGHTH NOTE +&M8@@ +0x266b BARRED EIGHTH NOTES +&M2@@ +0x266c BARRED SIXTEENTH NOTES +&_M16_@@ +0x266d MUSIC FLAT SIGN +&Mb@@ +0x266e MUSIC NATURAL SIGN +&Mx@@ +0x266f MUSIC SHARP SIGN +&MX@@ +0x2713 CHECK MARK +&OK@@ +0x2717 BALLOT X +&XX@@ +0x2720 MALTESE CROSS +&-X@@ +0x3000 IDEOGRAPHIC SPACE +&IS@@ +0x3001 IDEOGRAPHIC COMMA +&,_@@ +0x3002 IDEOGRAPHIC PERIOD +&._@@ +0x3003 DITTO MARK +&+"@@ +0x3004 IDEOGRAPHIC DITTO MARK +&+_@@ +0x3005 IDEOGRAPHIC ITERATION MARK +&*_@@ +0x3006 IDEOGRAPHIC CLOSING MARK +&;_@@ +0x3007 IDEOGRAPHIC NUMBER ZERO +&0_@@ +0x300a LEFT DOUBLE ANGLE BRACKET +&<+@@ +0x300b RIGHT DOUBLE ANGLE BRACKET +&>+@@ +0x300c LEFT CORNER BRACKET +&<'@@ +0x300d RIGHT CORNER BRACKET +&>'@@ +0x300e LEFT WHITE CORNER BRACKET +&<"@@ +0x300f RIGHT WHITE CORNER BRACKET +&>"@@ +0x3010 LEFT BLACK LENTICULAR BRACKET +&("@@ +0x3011 RIGHT BLACK LENTICULAR BRACKET +&)"@@ +0x3012 POSTAL MARK +&=T@@ +0x3013 GETA MARK +&=_@@ +0x3014 LEFT TORTOISE SHELL BRACKET +&('@@ +0x3015 RIGHT TORTOISE SHELL BRACKET +&)'@@ +0x3016 LEFT WHITE LENTICULAR BRACKET +&(I@@ +0x3017 RIGHT WHITE LENTICULAR BRACKET +&)I@@ +0x301c WAVE DASH +&-?@@ +0x3020 POSTAL MARK FACE +&_=T:)_@@ +0x3041 HIRAGANA LETTER SMALL A +&A5@@ +0x3042 HIRAGANA LETTER A +&a5@@ +0x3043 HIRAGANA LETTER SMALL I +&I5@@ +0x3044 HIRAGANA LETTER I +&i5@@ +0x3045 HIRAGANA LETTER SMALL U +&U5@@ +0x3046 HIRAGANA LETTER U +&u5@@ +0x3047 HIRAGANA LETTER SMALL E +&E5@@ +0x3048 HIRAGANA LETTER E +&e5@@ +0x3049 HIRAGANA LETTER SMALL O +&O5@@ +0x304a HIRAGANA LETTER O +&o5@@ +0x304b HIRAGANA LETTER KA +&ka@@ +0x304c HIRAGANA LETTER GA +&ga@@ +0x304d HIRAGANA LETTER KI +&ki@@ +0x304e HIRAGANA LETTER GI +&gi@@ +0x304f HIRAGANA LETTER KU +&ku@@ +0x3050 HIRAGANA LETTER GU +&gu@@ +0x3051 HIRAGANA LETTER KE +&ke@@ +0x3052 HIRAGANA LETTER GE +&ge@@ +0x3053 HIRAGANA LETTER KO +&ko@@ +0x3054 HIRAGANA LETTER GO +&go@@ +0x3055 HIRAGANA LETTER SA +&sa@@ +0x3056 HIRAGANA LETTER ZA +&za@@ +0x3057 HIRAGANA LETTER SI +&si@@ +0x3058 HIRAGANA LETTER ZI +&zi@@ +0x3059 HIRAGANA LETTER SU +&su@@ +0x305a HIRAGANA LETTER ZU +&zu@@ +0x305b HIRAGANA LETTER SE +&se@@ +0x305c HIRAGANA LETTER ZE +&ze@@ +0x305d HIRAGANA LETTER SO +&so@@ +0x305e HIRAGANA LETTER ZO +&zo@@ +0x305f HIRAGANA LETTER TA +&ta@@ +0x3060 HIRAGANA LETTER DA +&da@@ +0x3061 HIRAGANA LETTER TI +&ti@@ +0x3062 HIRAGANA LETTER DI +&di@@ +0x3063 HIRAGANA LETTER SMALL TU +&tU@@ +0x3064 HIRAGANA LETTER TU +&tu@@ +0x3065 HIRAGANA LETTER DU +&du@@ +0x3066 HIRAGANA LETTER TE +&te@@ +0x3067 HIRAGANA LETTER DE +&de@@ +0x3068 HIRAGANA LETTER TO +&to@@ +0x3069 HIRAGANA LETTER DO +&do@@ +0x306a HIRAGANA LETTER NA +&na@@ +0x306b HIRAGANA LETTER NI +&ni@@ +0x306c HIRAGANA LETTER NU +&nu@@ +0x306d HIRAGANA LETTER NE +&ne@@ +0x306e HIRAGANA LETTER NO +&no@@ +0x306f HIRAGANA LETTER HA +&ha@@ +0x3070 HIRAGANA LETTER BA +&ba@@ +0x3071 HIRAGANA LETTER PA +&pa@@ +0x3072 HIRAGANA LETTER HI +&hi@@ +0x3073 HIRAGANA LETTER BI +&bi@@ +0x3074 HIRAGANA LETTER PI +&pi@@ +0x3075 HIRAGANA LETTER HU +&hu@@ +0x3076 HIRAGANA LETTER BU +&bu@@ +0x3077 HIRAGANA LETTER PU +&pu@@ +0x3078 HIRAGANA LETTER HE +&he@@ +0x3079 HIRAGANA LETTER BE +&be@@ +0x307a HIRAGANA LETTER PE +&pe@@ +0x307b HIRAGANA LETTER HO +&ho@@ +0x307c HIRAGANA LETTER BO +&bo@@ +0x307d HIRAGANA LETTER PO +&po@@ +0x307e HIRAGANA LETTER MA +&ma@@ +0x307f HIRAGANA LETTER MI +&mi@@ +0x3080 HIRAGANA LETTER MU +&mu@@ +0x3081 HIRAGANA LETTER ME +&me@@ +0x3082 HIRAGANA LETTER MO +&mo@@ +0x3083 HIRAGANA LETTER SMALL YA +&yA@@ +0x3084 HIRAGANA LETTER YA +&ya@@ +0x3085 HIRAGANA LETTER SMALL YU +&yU@@ +0x3086 HIRAGANA LETTER YU +&yu@@ +0x3087 HIRAGANA LETTER SMALL YO +&yO@@ +0x3088 HIRAGANA LETTER YO +&yo@@ +0x3089 HIRAGANA LETTER RA +&ra@@ +0x308a HIRAGANA LETTER RI +&ri@@ +0x308b HIRAGANA LETTER RU +&ru@@ +0x308c HIRAGANA LETTER RE +&re@@ +0x308d HIRAGANA LETTER RO +&ro@@ +0x308e HIRAGANA LETTER SMALL WA +&wA@@ +0x308f HIRAGANA LETTER WA +&wa@@ +0x3090 HIRAGANA LETTER WI +&wi@@ +0x3091 HIRAGANA LETTER WE +&we@@ +0x3092 HIRAGANA LETTER WO +&wo@@ +0x3093 HIRAGANA LETTER N +&n5@@ +0x3094 HIRAGANA LETTER VU +&vu@@ +0x309b KATAKANA-HIRAGANA VOICED SOUND MARK +&"5@@ +0x309c KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +&05@@ +0x309d HIRAGANA ITERATION MARK +&*5@@ +0x309e HIRAGANA VOICED ITERATION MARK +&+5@@ +0x30a1 KATAKANA LETTER SMALL A +&a6@@ +0x30a2 KATAKANA LETTER A +&A6@@ +0x30a3 KATAKANA LETTER SMALL I +&i6@@ +0x30a4 KATAKANA LETTER I +&I6@@ +0x30a5 KATAKANA LETTER SMALL U +&u6@@ +0x30a6 KATAKANA LETTER U +&U6@@ +0x30a7 KATAKANA LETTER SMALL E +&e6@@ +0x30a8 KATAKANA LETTER E +&E6@@ +0x30a9 KATAKANA LETTER SMALL O +&o6@@ +0x30aa KATAKANA LETTER O +&O6@@ +0x30ab KATAKANA LETTER KA +&Ka@@ +0x30ac KATAKANA LETTER GA +&Ga@@ +0x30ad KATAKANA LETTER KI +&Ki@@ +0x30ae KATAKANA LETTER GI +&Gi@@ +0x30af KATAKANA LETTER KU +&Ku@@ +0x30b0 KATAKANA LETTER GU +&Gu@@ +0x30b1 KATAKANA LETTER KE +&Ke@@ +0x30b2 KATAKANA LETTER GE +&Ge@@ +0x30b3 KATAKANA LETTER KO +&Ko@@ +0x30b4 KATAKANA LETTER GO +&Go@@ +0x30b5 KATAKANA LETTER SA +&Sa@@ +0x30b6 KATAKANA LETTER ZA +&Za@@ +0x30b7 KATAKANA LETTER SI +&Si@@ +0x30b8 KATAKANA LETTER ZI +&Zi@@ +0x30b9 KATAKANA LETTER SU +&Su@@ +0x30ba KATAKANA LETTER ZU +&Zu@@ +0x30bb KATAKANA LETTER SE +&Se@@ +0x30bc KATAKANA LETTER ZE +&Ze@@ +0x30bd KATAKANA LETTER SO +&So@@ +0x30be KATAKANA LETTER ZO +&Zo@@ +0x30bf KATAKANA LETTER TA +&Ta@@ +0x30c0 KATAKANA LETTER DA +&Da@@ +0x30c1 KATAKANA LETTER TI +&Ti@@ +0x30c2 KATAKANA LETTER DI +&Di@@ +0x30c3 KATAKANA LETTER SMALL TU +&TU@@ +0x30c4 KATAKANA LETTER TU +&Tu@@ +0x30c5 KATAKANA LETTER DU +&Du@@ +0x30c6 KATAKANA LETTER TE +&Te@@ +0x30c7 KATAKANA LETTER DE +&De@@ +0x30c8 KATAKANA LETTER TO +&To@@ +0x30c9 KATAKANA LETTER DO +&Do@@ +0x30ca KATAKANA LETTER NA +&Na@@ +0x30cb KATAKANA LETTER NI +&Ni@@ +0x30cc KATAKANA LETTER NU +&Nu@@ +0x30cd KATAKANA LETTER NE +&Ne@@ +0x30ce KATAKANA LETTER NO +&No@@ +0x30cf KATAKANA LETTER HA +&Ha@@ +0x30d0 KATAKANA LETTER BA +&Ba@@ +0x30d1 KATAKANA LETTER PA +&Pa@@ +0x30d2 KATAKANA LETTER HI +&Hi@@ +0x30d3 KATAKANA LETTER BI +&Bi@@ +0x30d4 KATAKANA LETTER PI +&Pi@@ +0x30d5 KATAKANA LETTER HU +&Hu@@ +0x30d6 KATAKANA LETTER BU +&Bu@@ +0x30d7 KATAKANA LETTER PU +&Pu@@ +0x30d8 KATAKANA LETTER HE +&He@@ +0x30d9 KATAKANA LETTER BE +&Be@@ +0x30da KATAKANA LETTER PE +&Pe@@ +0x30db KATAKANA LETTER HO +&Ho@@ +0x30dc KATAKANA LETTER BO +&Bo@@ +0x30dd KATAKANA LETTER PO +&Po@@ +0x30de KATAKANA LETTER MA +&Ma@@ +0x30df KATAKANA LETTER MI +&Mi@@ +0x30e0 KATAKANA LETTER MU +&Mu@@ +0x30e1 KATAKANA LETTER ME +&Me@@ +0x30e2 KATAKANA LETTER MO +&Mo@@ +0x30e3 KATAKANA LETTER SMALL YA +&YA@@ +0x30e4 KATAKANA LETTER YA +&Ya@@ +0x30e5 KATAKANA LETTER SMALL YU +&YU@@ +0x30e6 KATAKANA LETTER YU +&Yu@@ +0x30e7 KATAKANA LETTER SMALL YO +&YO@@ +0x30e8 KATAKANA LETTER YO +&Yo@@ +0x30e9 KATAKANA LETTER RA +&Ra@@ +0x30ea KATAKANA LETTER RI +&Ri@@ +0x30eb KATAKANA LETTER RU +&Ru@@ +0x30ec KATAKANA LETTER RE +&Re@@ +0x30ed KATAKANA LETTER RO +&Ro@@ +0x30ee KATAKANA LETTER SMALL WA +&WA@@ +0x30ef KATAKANA LETTER WA +&Wa@@ +0x30f0 KATAKANA LETTER WI +&Wi@@ +0x30f1 KATAKANA LETTER WE +&We@@ +0x30f2 KATAKANA LETTER WO +&Wo@@ +0x30f3 KATAKANA LETTER N +&N6@@ +0x30f4 KATAKANA LETTER VU +&Vu@@ +0x30f5 KATAKANA LETTER SMALL KA +&KA@@ +0x30f6 KATAKANA LETTER SMALL KE +&KE@@ +0x30f7 KATAKANA LETTER VA +&Va@@ +0x30f8 KATAKANA LETTER VI +&Vi@@ +0x30f9 KATAKANA LETTER VE +&Ve@@ +0x30fa KATAKANA LETTER VO +&Vo@@ +0x30fb KATAKANA MIDDLE DOT +&.6@@ +0x30fc KATAKANA-HIRAGANA PROLONGED SOUND MARK +&-6@@ +0x30fd KATAKANA ITERATION MARK +&*6@@ +0x30fe KATAKANA VOICED ITERATION MARK +&+6@@ +0x3105 BOPOMOFO LETTER B +&b4@@ +0x3106 BOPOMOFO LETTER P +&p4@@ +0x3107 BOPOMOFO LETTER M +&m4@@ +0x3108 BOPOMOFO LETTER F +&f4@@ +0x3109 BOPOMOFO LETTER D +&d4@@ +0x310a BOPOMOFO LETTER T +&t4@@ +0x310b BOPOMOFO LETTER N +&n4@@ +0x310c BOPOMOFO LETTER L +&l4@@ +0x310d BOPOMOFO LETTER G +&g4@@ +0x310e BOPOMOFO LETTER K +&k4@@ +0x310f BOPOMOFO LETTER H +&h4@@ +0x3110 BOPOMOFO LETTER J +&j4@@ +0x3111 BOPOMOFO LETTER Q +&q4@@ +0x3112 BOPOMOFO LETTER X +&x4@@ +0x3113 BOPOMOFO LETTER ZH +&zh@@ +0x3114 BOPOMOFO LETTER CH +&ch@@ +0x3115 BOPOMOFO LETTER SH +&sh@@ +0x3116 BOPOMOFO LETTER R +&r4@@ +0x3117 BOPOMOFO LETTER Z +&z4@@ +0x3118 BOPOMOFO LETTER C +&c4@@ +0x3119 BOPOMOFO LETTER S +&s4@@ +0x311a BOPOMOFO LETTER A +&a4@@ +0x311b BOPOMOFO LETTER O +&o4@@ +0x311c BOPOMOFO LETTER E +&e4@@ +0x311d BOPOMOFO LETTER EH +&_eh4_@@ +0x311e BOPOMOFO LETTER AI +&ai@@ +0x311f BOPOMOFO LETTER EI +&ei@@ +0x3120 BOPOMOFO LETTER AU +&au@@ +0x3121 BOPOMOFO LETTER OU +&ou@@ +0x3122 BOPOMOFO LETTER AN +&an@@ +0x3123 BOPOMOFO LETTER EN +&en@@ +0x3124 BOPOMOFO LETTER ANG +&aN@@ +0x3125 BOPOMOFO LETTER ENG +&eN@@ +0x3126 BOPOMOFO LETTER ER +&er@@ +0x3127 BOPOMOFO LETTER I +&i4@@ +0x3128 BOPOMOFO LETTER U +&u4@@ +0x3129 BOPOMOFO LETTER IU +&iu@@ +0x312a BOPOMOFO LETTER V +&v4@@ +0x312b BOPOMOFO LETTER NG +&nG@@ +0x312c BOPOMOFO LETTER GN +&gn@@ +0x321c PARENTHESIZED HANGUL JU +&_(JU)_@@ +0x3220 PARENTHESIZED IDEOGRAPH ONE +&1c@@ +0x3221 PARENTHESIZED IDEOGRAPH TWO +&2c@@ +0x3222 PARENTHESIZED IDEOGRAPH THREE +&3c@@ +0x3223 PARENTHESIZED IDEOGRAPH FOUR +&4c@@ +0x3224 PARENTHESIZED IDEOGRAPH FIVE +&5c@@ +0x3225 PARENTHESIZED IDEOGRAPH SIX +&6c@@ +0x3226 PARENTHESIZED IDEOGRAPH SEVEN +&7c@@ +0x3227 PARENTHESIZED IDEOGRAPH EIGHT +&8c@@ +0x3228 PARENTHESIZED IDEOGRAPH NINE +&9c@@ +0x3229 PARENTHESIZED IDEOGRAPH TEN +&_10c_@@ +0x327f KOREAN STANDARD SYMBOL +&_KSC_@@ +0xe001 JOIN THIS LINE WITH NEXT LINE (Mnemonic) +&/c@@ +0xe002 Unit space A (ISO-IR-8-1 064) +&UA@@ +0xe003 Unit space B (ISO-IR-8-1 096) +&UB@@ +0xe004 NON-SPACING UMLAUT (ISO-IR-38 201) (character part) +&"3@@ +0xe005 NON-SPACING DIAERESIS WITH ACCENT (ISO-IR-70 192) (character part) +&"1@@ +0xe006 NON-SPACING GRAVE ACCENT (ISO-IR-103 193) (character part) +&"!@@ +0xe007 NON-SPACING ACUTE ACCENT (ISO-IR-103 194) (character part) +&"'@@ +0xe008 NON-SPACING CIRCUMFLEX ACCENT (ISO-IR-103 195) (character part) +&">@@ +0xe009 NON-SPACING TILDE (ISO-IR-103 196) (character part) +&"?@@ +0xe00a NON-SPACING MACRON (ISO-IR-103 197) (character part) +&"-@@ +0xe00b NON-SPACING BREVE (ISO-IR-103 198) (character part) +&"(@@ +0xe00c NON-SPACING DOT ABOVE (ISO-IR-103 199) (character part) +&".@@ +0xe00d NON-SPACING DIAERESIS (ISO-IR-103 200) (character part) +&":@@ +0xe00e NON-SPACING RING ABOVE (ISO-IR-103 202) (character part) +&"0@@ +0xe00f NON-SPACING DOUBLE ACCUTE (ISO-IR-103 204) (character part) +&""@@ +0xe010 NON-SPACING CARON (ISO-IR-103 206) (character part) +&"<@@ +0xe011 NON-SPACING CEDILLA (ISO-IR-103 203) (character part) +&",@@ +0xe012 NON-SPACING OGONEK (ISO-IR-103 206) (character part) +&";@@ +0xe013 NON-SPACING LOW LINE (ISO-IR-103 204) (character part) +&"_@@ +0xe014 NON-SPACING DOUBLE LOW LINE (ISO-IR-38 217) (character part) +&"=@@ +0xe015 NON-SPACING LONG SOLIDUS (ISO-IR-128 201) (character part) +&"/@@ +0xe016 GREEK NON-SPACING IOTA BELOW (ISO-IR-55 39) (character part) +&"i@@ +0xe017 GREEK NON-SPACING DASIA PNEUMATA (ISO-IR-55 38) (character part) +&"d@@ +0xe018 GREEK NON-SPACING PSILI PNEUMATA (ISO-IR-55 37) (character part) +&"p@@ +0xe019 GREEK DASIA PNEUMATA (ISO-IR-18 92) +&;;@@ +0xe01a GREEK PSILI PNEUMATA (ISO-IR-18 124) +&,,@@ +0xe01b GREEK SMALL LETTER MIDDLE BETA (ISO-IR-18 99) +&b3@@ +0xe01c CIRCLE (ISO-IR-83 0294) +&Ci@@ +0xe01d FUNCTION SIGN (ISO-IR-143 221) +&f(@@ +0xe01e LATIN SMALL LETTER EZH (ISO-IR-158 142) +&ed@@ +0xe01f ANTE MERIDIAM SIGN (ISO-IR-149 0267) +&am@@ +0xe020 POST MERIDIAM SIGN (ISO-IR-149 0268) +&pm@@ +0xe021 TEL COMPATIBILITY SIGN (ISO-IR-149 0269) +&_Tel_@@ +0xe022 ARABIC LETTER ALEF FINAL FORM COMPATIBILITY (IBM868 144) +&_a+:_@@ +0xe023 DUTCH GUILDER SIGN (IBM437 159) +&Fl@@ +0xe024 GAMMA FUNCTION SIGN (ISO-10646-1DIS 032/032/037/122) +&GF@@ +0xe025 RIGHTWARDS VECTOR ABOVE (ISO-10646-1DIS 032/032/038/046) +&>V@@ +0xe026 GREEK VARIA (ISO-10646-1DIS 032/032/042/164) +&!*@@ +0xe027 GREEK PERISPOMENI (ISO-10646-1DIS 032/032/042/165) +&?*@@ +0xe028 LATIN CAPITAL LETTER J WITH CARON (lowercase: 000/000/001/240) +&J<@@ +0xfb00 LATIN SMALL LIGATURE FF +&ff@@ +0xfb01 LATIN SMALL LIGATURE FI +&fi@@ +0xfb02 LATIN SMALL LIGATURE FL +&fl@@ +0xfb03 LATIN SMALL LIGATURE FFI +&_ffi_@@ +0xfb04 LATIN SMALL LIGATURE FFL +&_ffl_@@ +0xfb05 LATIN SMALL LIGATURE FT +&ft@@ +0xfb06 LATIN SMALL LIGATURE ST +&st@@ +0xfe7d ARABIC SHADDA MEDIAL FORM +&_3+;_@@ +0xfe82 ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM +&_aM._@@ +0xfe84 ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM +&_aH._@@ +0xfe8d ARABIC LETTER ALEF ISOLATED FORM +&_a+-_@@ +0xfe8e ARABIC LETTER ALEF FINAL FORM +&_a+._@@ +0xfe8f ARABIC LETTER BEH ISOLATED FORM +&_b+-_@@ +0xfe90 ARABIC LETTER BEH INITIAL FORM +&_b+,_@@ +0xfe91 ARABIC LETTER BEH MEDIAL FORM +&_b+;_@@ +0xfe92 ARABIC LETTER BEH FINAL FORM +&_b+._@@ +0xfe93 ARABIC LETTER TEH MARBUTA ISOLATED FORM +&_tm-_@@ +0xfe94 ARABIC LETTER TEH MARBUTA FINAL FORM +&_tm._@@ +0xfe95 ARABIC LETTER TEH ISOLATED FORM +&_t+-_@@ +0xfe96 ARABIC LETTER TEH INITIAL FORM +&_t+,_@@ +0xfe97 ARABIC LETTER TEH MEDIAL FORM +&_t+;_@@ +0xfe98 ARABIC LETTER TEH FINAL FORM +&_t+._@@ +0xfe99 ARABIC LETTER THEH ISOLATED FORM +&_tk-_@@ +0xfe9a ARABIC LETTER THEH INITIAL FORM +&_tk,_@@ +0xfe9b ARABIC LETTER THEH MEDIAL FORM +&_tk;_@@ +0xfe9c ARABIC LETTER THEH FINAL FORM +&_tk._@@ +0xfe9d ARABIC LETTER JEEM ISOLATED FORM +&_g+-_@@ +0xfe9e ARABIC LETTER JEEM INITIAL FORM +&_g+,_@@ +0xfe9f ARABIC LETTER JEEM MEDIAL FORM +&_g+;_@@ +0xfea0 ARABIC LETTER JEEM FINAL FORM +&_g+._@@ +0xfea1 ARABIC LETTER HAH ISOLATED FORM +&_hk-_@@ +0xfea2 ARABIC LETTER HAH INITIAL FORM +&_hk,_@@ +0xfea3 ARABIC LETTER HAH MEDIAL FORM +&_hk;_@@ +0xfea4 ARABIC LETTER HAH FINAL FORM +&_hk._@@ +0xfea5 ARABIC LETTER KHAH ISOLATED FORM +&_x+-_@@ +0xfea6 ARABIC LETTER KHAH INITIAL FORM +&_x+,_@@ +0xfea7 ARABIC LETTER KHAH MEDIAL FORM +&_x+;_@@ +0xfea8 ARABIC LETTER KHAH FINAL FORM +&_x+._@@ +0xfea9 ARABIC LETTER DAL ISOLATED FORM +&_d+-_@@ +0xfeaa ARABIC LETTER DAL FINAL FORM +&_d+._@@ +0xfeab ARABIC LETTER THAL ISOLATED FORM +&_dk-_@@ +0xfeac ARABIC LETTER THAL FINAL FORM +&_dk._@@ +0xfead ARABIC LETTER REH ISOLATED FORM +&_r+-_@@ +0xfeae ARABIC LETTER REH FINAL FORM +&_r+._@@ +0xfeaf ARABIC LETTER ZAIN ISOLATED FORM +&_z+-_@@ +0xfeb0 ARABIC LETTER ZAIN FINAL FORM +&_z+._@@ +0xfeb1 ARABIC LETTER SEEN ISOLATED FORM +&_s+-_@@ +0xfeb2 ARABIC LETTER SEEN INITIAL FORM +&_s+,_@@ +0xfeb3 ARABIC LETTER SEEN MEDIAL FORM +&_s+;_@@ +0xfeb4 ARABIC LETTER SEEN FINAL FORM +&_s+._@@ +0xfeb5 ARABIC LETTER SHEEN ISOLATED FORM +&_sn-_@@ +0xfeb6 ARABIC LETTER SHEEN INITIAL FORM +&_sn,_@@ +0xfeb7 ARABIC LETTER SHEEN MEDIAL FORM +&_sn;_@@ +0xfeb8 ARABIC LETTER SHEEN FINAL FORM +&_sn._@@ +0xfeb9 ARABIC LETTER SAD ISOLATED FORM +&_c+-_@@ +0xfeba ARABIC LETTER SAD INITIAL FORM +&_c+,_@@ +0xfebb ARABIC LETTER SAD MEDIAL FORM +&_c+;_@@ +0xfebc ARABIC LETTER SAD FINAL FORM +&_c+._@@ +0xfebd ARABIC LETTER DAD ISOLATED FORM +&_dd-_@@ +0xfebe ARABIC LETTER DAD INITIAL FORM +&_dd,_@@ +0xfebf ARABIC LETTER DAD MEDIAL FORM +&_dd;_@@ +0xfec0 ARABIC LETTER DAD FINAL FORM +&_dd._@@ +0xfec1 ARABIC LETTER TAH ISOLATED FORM +&_tj-_@@ +0xfec2 ARABIC LETTER TAH INITIAL FORM +&_tj,_@@ +0xfec3 ARABIC LETTER TAH MEDIAL FORM +&_tj;_@@ +0xfec4 ARABIC LETTER TAH FINAL FORM +&_tj._@@ +0xfec5 ARABIC LETTER ZAH ISOLATED FORM +&_zH-_@@ +0xfec6 ARABIC LETTER ZAH INITIAL FORM +&_zH,_@@ +0xfec7 ARABIC LETTER ZAH MEDIAL FORM +&_zH;_@@ +0xfec8 ARABIC LETTER ZAH FINAL FORM +&_zH._@@ +0xfec9 ARABIC LETTER AIN ISOLATED FORM +&_e+-_@@ +0xfeca ARABIC LETTER AIN INITIAL FORM +&_e+,_@@ +0xfecb ARABIC LETTER AIN MEDIAL FORM +&_e+;_@@ +0xfecc ARABIC LETTER AIN FINAL FORM +&_e+._@@ +0xfecd ARABIC LETTER GHAIN ISOLATED FORM +&_i+-_@@ +0xfece ARABIC LETTER GHAIN INITIAL FORM +&_i+,_@@ +0xfecf ARABIC LETTER GHAIN MEDIAL FORM +&_i+;_@@ +0xfed0 ARABIC LETTER GHAIN FINAL FORM +&_i+._@@ +0xfed1 ARABIC LETTER FEH ISOLATED FORM +&_f+-_@@ +0xfed2 ARABIC LETTER FEH INITIAL FORM +&_f+,_@@ +0xfed3 ARABIC LETTER FEH MEDIAL FORM +&_f+;_@@ +0xfed4 ARABIC LETTER FEH FINAL FORM +&_f+._@@ +0xfed5 ARABIC LETTER QAF ISOLATED FORM +&_q+-_@@ +0xfed6 ARABIC LETTER QAF INITIAL FORM +&_q+,_@@ +0xfed7 ARABIC LETTER QAF MEDIAL FORM +&_q+;_@@ +0xfed8 ARABIC LETTER QAF FINAL FORM +&_q+._@@ +0xfed9 ARABIC LETTER KAF ISOLATED FORM +&_k+-_@@ +0xfeda ARABIC LETTER KAF INITIAL FORM +&_k+,_@@ +0xfedb ARABIC LETTER KAF MEDIAL FORM +&_k+;_@@ +0xfedc ARABIC LETTER KAF FINAL FORM +&_k+._@@ +0xfedd ARABIC LETTER LAM ISOLATED FORM +&_l+-_@@ +0xfede ARABIC LETTER LAM INITIAL FORM +&_l+,_@@ +0xfedf ARABIC LETTER LAM MEDIAL FORM +&_l+;_@@ +0xfee0 ARABIC LETTER LAM FINAL FORM +&_l+._@@ +0xfee1 ARABIC LETTER MEEM ISOLATED FORM +&_m+-_@@ +0xfee2 ARABIC LETTER MEEM INITIAL FORM +&_m+,_@@ +0xfee3 ARABIC LETTER MEEM MEDIAL FORM +&_m+;_@@ +0xfee4 ARABIC LETTER MEEM FINAL FORM +&_m+._@@ +0xfee5 ARABIC LETTER NOON ISOLATED FORM +&_n+-_@@ +0xfee6 ARABIC LETTER NOON INITIAL FORM +&_n+,_@@ +0xfee7 ARABIC LETTER NOON MEDIAL FORM +&_n+;_@@ +0xfee8 ARABIC LETTER NOON FINAL FORM +&_n+._@@ +0xfee9 ARABIC LETTER HEH ISOLATED FORM +&_h+-_@@ +0xfeea ARABIC LETTER HEH INITIAL FORM +&_h+,_@@ +0xfeeb ARABIC LETTER HEH MEDIAL FORM +&_h+;_@@ +0xfeec ARABIC LETTER HEH FINAL FORM +&_h+._@@ +0xfeed ARABIC LETTER WAW ISOLATED FORM +&_w+-_@@ +0xfeee ARABIC LETTER WAW FINAL FORM +&_w+._@@ +0xfeef ARABIC LETTER ALEF MAKSURA ISOLATED FORM +&_j+-_@@ +0xfef0 ARABIC LETTER ALEF MAKSURA FINAL FORM +&_j+._@@ +0xfef1 ARABIC LETTER YEH ISOLATED FORM +&_y+-_@@ +0xfef2 ARABIC LETTER YEH INITIAL FORM +&_y+,_@@ +0xfef3 ARABIC LETTER YEH MEDIAL FORM +&_y+;_@@ +0xfef4 ARABIC LETTER YEH FINAL FORM +&_y+._@@ +0xfef5 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM +&_lM-_@@ +0xfef6 ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM +&_lM._@@ +0xfef7 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM +&_lH-_@@ +0xfef8 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM +&_lH._@@ +0xfef9 ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM +&_lh-_@@ +0xfefa ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM +&_lh._@@ +0xfefb ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM +&_la-_@@ +0xfefc ARABIC LIGATURE LAM WITH ALEF FINAL FORM +&_la._@@ diff --git a/externals/figlet/fonts/moscow.flc b/externals/figlet/fonts/moscow.flc new file mode 100644 index 0000000000..86454f175c --- /dev/null +++ b/externals/figlet/fonts/moscow.flc @@ -0,0 +1,68 @@ +flc2a +# This controlfile maps the U.S. keyboard to Cyrillic +# in the style of the "moscow" font, but is meant for use +# with a FIGlet Unicode font with Cyrillic codes, such as "banner" +# +# "moscow" is an upper-case-only font, so for full compatibility +# use the "upper" controlfile as well and avoid "@" and "<". +t / \0x044c +t \0x5c \0x044a +t | \0x044b +t ~ \0x044d +t < \0x042d +t ` \0x0443 +t @ \0x042e +t > \0x0439 +t A \0x0410 +t a \0x0430 +t B \0x0411 +t b \0x0431 +t C \0x0427 +t c \0x0447 +t D \0x0414 +t d \0x0434 +t E \0x0415 +t e \0x0435 +t F \0x0424 +t f \0x0444 +t G \0x0413 +t g \0x0433 +t H \0x0425 +t h \0x0445 +t I \0x0418 +t i \0x0438 +t J \0x0416 +t j \0x0436 +t K \0x041a +t k \0x043a +t L \0x041b +t l \0x043b +t M \0x041c +t m \0x043c +t N \0x041d +t n \0x043d +t O \0x041e +t o \0x043e +t P \0x041f +t p \0x043f +t Q \0x0426 +t q \0x0446 +t R \0x0420 +t r \0x0440 +t S \0x0421 +t s \0x0441 +t T \0x0422 +t t \0x0442 +t U \0x0423 +t u \0x0443 +t V \0x0412 +t v \0x0432 +t W \0x0428 +t w \0x0448 +t X \0x0429 +t x \0x0449 +t Y \0x042f +t y \0x044f +t Z \0x0417 +t z \0x0437 +t = \-6 diff --git a/externals/figlet/fonts/script.flf b/externals/figlet/fonts/script.flf new file mode 100644 index 0000000000..8f2f048fab --- /dev/null +++ b/externals/figlet/fonts/script.flf @@ -0,0 +1,1493 @@ +flf2a$ 7 5 16 0 10 0 3904 96 +Script by Glenn Chappell 4/93 +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + +$$@ +$$@ +$$@ +$$@ +$$@ +$$@ +$$@@ + @ + |@ + |@ + |@ + o@ + @ + @@ + oo@ + ||@ + $$@ + $$@ + $$@ + @ + @@ + @ + | | @ + --+--+--@ + --+--+--@ + | | @ + @ + @@ + @ + |_|_@ + (|_| @ + _|_|)@ + | | @ + @ + @@ + @ + () /@ + / @ + / @ + / ()@ + @ + @@ + @ + () @ + /\ @ + / \/@ + \__/\@ + @ + @@ + o@ + /@ + $@ + $@ + $@ + @ + @@ + @ + /@ + | @ + | @ + | @ + \@ + @@ + @ + \ @ + |@ + |@ + |@ + / @ + @@ + @ + @ + \|/ @ + --*--@ + /|\ @ + @ + @@ + @ + @ + | @ + --+--@ + | @ + @ + @@ + @ + @ + @ + @ + o@ + /@ + @@ + @ + @ + @ + -----@ + $ @ + @ + @@ + @ + @ + @ + @ + o@ + @ + @@ + @ + /@ + / @ + / @ + / @ + @ + @@ + __ @ + / \ @ + | |@ + | |@ + \__/ @ + @ + @@ + ,@ + /|@ + |@ + |@ + |@ + @ + @@ + __ @ + / )@ + $/ @ + / @ + /___@ + @ + @@ + ___ @ + / \@ + $__/@ + $ \@ + \___/@ + @ + @@ + @ + | | @ + |__|_@ + | @ + | @ + @ + @@ + ____@ + | @ + |___ @ + $ \@ + \___/@ + @ + @@ + __ @ + /$ @ + | __ @ + |/ \@ + \__/@ + @ + @@ + _____@ + $ /@ + $ / @ + $/ @ + / @ + @ + @@ + __ @ + / \@ + \__/@ + / \@ + \__/@ + @ + @@ + __ @ + / |@ + \_/|@ + |@ + |@ + @ + @@ + @ + o@ + $@ + $@ + o@ + @ + @@ + @ + o@ + $@ + $@ + o@ + /@ + @@ + @ + /@ + / @ + \ @ + \@ + @ + @@ + @ + @ + -----@ + -----@ + @ + @ + @@ + @ + \ @ + \@ + /@ + / @ + @ + @@ + __ @ + / \@ + $_/@ + | @ + o @ + @ + @@ + @ + ____ @ + / __,\ @ + | / | |@ + | \_/|/ @ + \____/ @ + @@ + ___, @ + / | @ + | | @ + | | @ + \__/\_/@ + @ + @@ + , __ @ + /|/ \@ + | __/@ + | \@ + |(__/@ + @ + @@ + ___$@ + / (_)@ + | $ @ + | $ @ + \___/@ + @ + @@ + $____ @ + (| \ @ + | |@ + $_| |@ + (/\___/ @ + @ + @@ + ___$@ + / (_)@ + \__$ @ + / $ @ + \___/@ + @ + @@ + $______@ + (_) |$ @ + _|_$@ + / | |@ + (_/ @ + @ + @@ + @ + () |@ + /\/|@ + / |@ + /(__/ @ + @ + @@ + , @ + /| | @ + |___| @ + | |\@ + | |/@ + @ + @@ + _ @ + | |@ + | |@ + _ |/ @ + \_/\/@ + @ + @@ + @ + /\ @ + | | @ + | | @ + \_|/@ + /| @ + \| @@ + , @ + /| / @ + |__/ @ + | \$ @ + | \_/@ + @ + @@ + $_$ @ + \_|_) @ + |$ @ + $_|$ @ + (/\___/@ + @ + @@ + ,__ __ @ + /| | | @ + | | | @ + | | | @ + | | |_/@ + @ + @@ + , _ @ + /|/ \ @ + | | @ + | | @ + | |_/@ + @ + @@ + __ @ + /\_\/@ + | |@ + | |@ + \__/ @ + @ + @@ + , __ @ + /|/ \@ + |___/@ + | $@ + | $@ + @ + @@ + __ @ + / \ @ + | __ | @ + |/ \| @ + \__/\_/@ + @ + @@ + , __ @ + /|/ \ @ + |___/ @ + | \$ @ + | \_/@ + @ + @@ + @ + () @ + /\ @ + / \@ + /(__/@ + @ + @@ + $______@ + (_) | @ + $ | @ + $_ | @ + (_/ @ + @ + @@ + $_ @ + (_| | @ + | | @ + | | @ + \__/\_/@ + @ + @@ + $_ @ + (_| |_/@ + | | @ + | | @ + \_/ @ + @ + @@ + $_ @ + (_| | |_/@ + | | | @ + | | | @ + \_/ \_/ @ + @ + @@ + $_ @ + (_\ / @ + $\/ @ + $/\ @ + _/ \_/@ + @ + @@ + $_ @ + (_| | @ + | | @ + | | @ + \_/|/@ + /| @ + \| @@ + $__ @ + (_ \ @ + $/ @ + / @ + /__/@ + /| @ + \| @@ + _@ + | @ + | @ + | @ + | @ + |_@ + @@ + @ + \ @ + \ @ + \ @ + \@ + @ + @@ + _ @ + |@ + |@ + |@ + |@ + _|@ + @@ + /\@ + $@ + $@ + $@ + $@ + @ + @@ + @ + @ + @ + @ + $ @ + $ @ + _____@@ + o@ + \@ + $@ + $@ + $@ + @ + @@ + @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ + $_$ @ + | | @ + | | @ + |/ \_@ + \_/ @ + @ + @@ + @ + @ + __ @ + /$ @ + \___/@ + @ + @@ + @ + | @ + __| @ + / | @ + \_/|_/@ + @ + @@ + @ + @ + _ @ + |/ @ + |__/@ + @ + @@ + $_$ @ + | | @ + | | @ + |/ @ + |__/@ + |\ @ + |/ @@ + @ + @ + __, @ + / | @ + \_/|/@ + /| @ + \| @@ + $_$ @ + | | @ + | | @ + |/ \ @ + | |_/@ + @ + @@ + @ + o @ + @ + | @ + |_/@ + @ + @@ + @ + o @ + @ + | @ + |/@ + /| @ + \| @@ + $_$ @ + | | @ + | | @ + |/_) @ + | \_/@ + @ + @@ + $_$ @ + | | @ + | | @ + |/ @ + |__/@ + @ + @@ + @ + @ + _ _ _ @ + / |/ |/ | @ + $ | | |_/@ + @ + @@ + @ + @ + _ _ @ + / |/ | @ + $ | |_/@ + @ + @@ + @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ + @ + @ + _ @ + |/ \_@ + |__/ @ + /| @ + \| @@ + @ + @ + __, @ + / | @ + \_/|_/@ + |\ @ + |/ @@ + @ + @ + ,_ @ + / | @ + $ |_/@ + @ + @@ + @ + @ + , @ + / \_@ + $\/ @ + @ + @@ + @ + @ + _|_ @ + | @ + |_/@ + @ + @@ + @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ + @ + @ + @ + | |_@ + $\/ @ + @ + @@ + @ + @ + @ + | | |_@ + $\/ \/ @ + @ + @@ + @ + @ + @ + /\/ @ + $/\_/@ + @ + @@ + @ + @ + @ + | | @ + $\_/|/@ + /| @ + \| @@ + @ + @ + __ @ + / / _@ + $/_/ @ + /| @ + \| @@ + @ + /@ + | @ + < @ + | @ + \@ + @@ + |@ + |@ + |@ + |@ + |@ + |@ + |@@ + @ + \ @ + | @ + >@ + | @ + / @ + @@ + /\/@ + $ @ + $ @ + $ @ + $ @ + @ + @@ + o o @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ + o o @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ + o o @ + $_ @ + (_| | @ + | | @ + \__/\_/@ + @ + @@ + o o @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ + o o @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ + o o @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ + _ @ + / \@ + | /@ + | \@ + | _/@ + | @ + @@ +160 NO-BREAK SPACE + $$@ + $$@ + $$@ + $$@ + $$@ + $$@ + $$@@ +161 INVERTED EXCLAMATION MARK + @ + o@ + |@ + |@ + |@ + @ + @@ +162 CENT SIGN + @ + @ + _|_ @ + / | @ + \_|_/@ + | @ + @@ +163 POUND SIGN + _ @ + / \ @ + __|__ @ + _| $ @ + (/ \__/@ + @ + @@ +164 CURRENCY SIGN + @ + \ _ /@ + / \ @ + \_/ @ + / \@ + @ + @@ +165 YEN SIGN + @ + \ /@ + _\_/_@ + __|__@ + | @ + @ + @@ +166 BROKEN BAR + |@ + |@ + |@ + @ + |@ + |@ + |@@ +167 SECTION SIGN + _@ + ( @ + /\@ + \/@ + _)@ + @ + @@ +168 DIAERESIS + o o@ + $ $@ + $ $@ + $ $@ + $ $@ + @ + @@ +169 COPYRIGHT SIGN + ____ @ + / __ \ @ + / / () \ @ + | | |@ + \ \__/ / @ + \____/ @ + @@ +170 FEMININE ORDINAL INDICATOR + __, @ + / | @ + \_/|_@ + ---- @ + $ @ + @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + //@ + // @ + \\ @ + \\@ + @ + @@ +172 NOT SIGN + @ + ___ @ + |@ + $ @ + $ @ + @ + @@ +173 SOFT HYPHEN + @ + @ + @ + ----@ + $ @ + @ + @@ +174 REGISTERED SIGN + ____ @ + /, _ \ @ + //|/ \ \ @ + | |__/ |@ + \ | \_// @ + \____/ @ + @@ +175 MACRON + _____@ + $ @ + $ @ + $ @ + $ @ + @ + @@ +176 DEGREE SIGN + _ @ + / \@ + \_/@ + @ + $ @ + @ + @@ +177 PLUS-MINUS SIGN + @ + @ + | @ + --+--@ + __|__@ + @ + @@ +178 SUPERSCRIPT TWO + _ @ + )@ + /_@ + @ + $@ + @ + @@ +179 SUPERSCRIPT THREE + ___@ + _/@ + __)@ + @ + $ @ + @ + @@ +180 ACUTE ACCENT + /@ + $@ + $@ + $@ + $@ + @ + @@ +181 MICRO SIGN + @ + @ + @ + | | @ + |\_/|_/@ + | @ + | @@ +182 PILCROW SIGN + ____ @ + / | |@ + \_| |@ + | |@ + | |@ + @ + @@ +183 MIDDLE DOT + @ + @ + $O$@ + $ @ + $ @ + @ + @@ +184 CEDILLA + @ + @ + @ + @ + $ @ + _)@ + @@ +185 SUPERSCRIPT ONE + ,@ + /|@ + |@ + @ + $@ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + __ @ + / \_@ + \__/ @ + ---- @ + $ @ + @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + \\ @ + \\@ + //@ + // @ + @ + @@ +188 VULGAR FRACTION ONE QUARTER + , @ + /| / @ + |/ @ + /|_|_@ + / | @ + @ + @@ +189 VULGAR FRACTION ONE HALF + , @ + /| / @ + |/_ @ + / )@ + / /_@ + @ + @@ +190 VULGAR FRACTION THREE QUARTERS + ___ @ + _/ / @ + __)/ @ + /|_|_@ + / | @ + @ + @@ +191 INVERTED QUESTION MARK + @ + o @ + _| @ + /$ @ + \__/@ + @ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + \ @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + / @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\ @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/ @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + o o @ + ___, @ + / | @ + | | @ + \__/\_/@ + @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _ @ + (_), @ + / | @ + | | @ + \__/\_/@ + @ + @@ +198 LATIN CAPITAL LETTER AE + ___,___$@ + / | (_)@ + | |__ @ + | | @ + \__/\___/@ + @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + ___$@ + / (_)@ + | $ @ + | $ @ + \___/@ + _) @ + @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + \ @ + ___$ @ + / (_) @ + >--$ @ + \____/@ + @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + / @ + ___$ @ + / (_) @ + >--$ @ + \____/@ + @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\ @ + ___$ @ + / (_) @ + >--$ @ + \____/@ + @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + o o @ + ___$ @ + / (_) @ + >--$ @ + \____/@ + @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + \ @ + $_$ @ + | | @ + _ |/ @ + \_/\_/@ + @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + / @ + $_$ @ + | | @ + _ |/ @ + \_/\_/@ + @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + /\ @ + $_$ @ + | | @ + _ |/ @ + \_/\_/@ + @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + o o @ + $_$ @ + | | @ + _ |/ @ + \_/\_/@ + @ + @@ +208 LATIN CAPITAL LETTER ETH + $____ @ + (| \ @ + __|__ |@ + $_| |@ + (/\___/ @ + @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\/ @ + , _ @ + /|/ \ @ + | | @ + | |_/@ + @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + \ @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + / @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\ @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/ @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + o o @ + __ @ + /\_\/@ + | |@ + \__/ @ + @ + @@ +215 MULTIPLICATION SIGN + @ + @ + $\/$@ + $/\$@ + $ $@ + @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + __ /@ + /\_//@ + | / |@ + | / |@ + /__/ @ + / @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + \ @ + $_ @ + (_| | @ + | | @ + \__/\_/@ + @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + / @ + $_ @ + (_| | @ + | | @ + \__/\_/@ + @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + /\ @ + $_ @ + (_| | @ + | | @ + \__/\_/@ + @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + o o @ + $_ @ + (_| | @ + | | @ + \__/\_/@ + @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + / @ + $_ @ + (_| | @ + | | @ + \_/|/@ + /| @ + \| @@ +222 LATIN CAPITAL LETTER THORN + , @ + | __ @ + /|/ \@ + |___/@ + | $@ + @ + @@ +223 LATIN SMALL LETTER SHARP S + _ @ + / \@ + | /@ + | \@ + | _/@ + | @ + @@ +224 LATIN SMALL LETTER A WITH GRAVE + \ @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + / @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\ @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/ @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + o o @ + @ + __, @ + / | @ + \_/|_/@ + @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + @ + () @ + __, @ + / | @ + \_/|_/@ + @ + @@ +230 LATIN SMALL LETTER AE + @ + @ + __,_ @ + / |/ @ + \_/|__/@ + @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + @ + __ @ + / @ + \___/@ + _) @ + @@ +232 LATIN SMALL LETTER E WITH GRAVE + \ @ + @ + _ @ + |/ @ + |__/@ + @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + / @ + @ + _ @ + |/ @ + |__/@ + @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + /\ @ + @ + _ @ + |/ @ + |__/@ + @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + o o @ + @ + _ @ + |/ @ + |__/@ + @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + \ @ + @ + @ + | @ + |_/@ + @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + / @ + @ + @ + | @ + |_/@ + @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + /\ @ + @ + @ + | @ + |_/@ + @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + o o @ + @ + @ + | @ + |__/@ + @ + @@ +240 LATIN SMALL LETTER ETH + @ + \/@ + _'|@ + / |@ + \_/ @ + @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/ @ + @ + _ _ @ + / |/ | @ + $ | |_/@ + @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + \ @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + / @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + /\ @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/ @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + o o @ + @ + __ @ + / \_@ + \__/ @ + @ + @@ +247 DIVISION SIGN + @ + @ + O @ + -----@ + O @ + @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + @ + __/ @ + / /\_@ + \/_/ @ + / @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + \ @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + / @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\ @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + o o @ + @ + @ + | | @ + $\_/|_/@ + @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + / @ + @ + @ + | | @ + $\_/|/@ + /| @ + \| @@ +254 LATIN SMALL LETTER THORN + _ @ + | | @ + | | @ + |/ \_@ + |__/ @ + /| @ + \| @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + o o @ + @ + @ + | | @ + $\_/|/@ + /| @ + \| @@ diff --git a/externals/figlet/fonts/shadow.flf b/externals/figlet/fonts/shadow.flf new file mode 100644 index 0000000000..2ec918211b --- /dev/null +++ b/externals/figlet/fonts/shadow.flf @@ -0,0 +1,1097 @@ +flf2a$ 5 4 16 0 10 0 4992 96 +Shadow by Glenn Chappell 6/93 -- based on Standard & SmShadow +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $$@ + $$@ + $$@ + $$@ + $$@@ + $|$@ + $|$@ + _|$@ + _)$@ + @@ + $| )$@ + V V$ @ + $$ @ + $$ @ + @@ + $| |$ @ + _ |_ |_|$@ + _ |_ |_|$@ + _| _|$ @ + @@ + $|$ @ + $ __)$@ + \__ \$@ + ( /$@ + _|$ @@ + _) /$@ + $/$ @ + $/$ @ + _/ _)$@ + @@ + $ _ )$ @ + $_ \ \$@ + $( ` <$@ + \___/\/$@ + @@ + $)$@ + /$ @ + $$ @ + $$ @ + @@ + $/$@ + $|$ @ + $|$ @ + $|$ @ + \_\$@@ + \ \$ @ + $|$@ + $|$@ + $|$@ + _/$ @@ + $\$ @ + \ /$@ + $_ _\$@ + \/$ @ + @@ + @ + $|$ @ + _ _|$@ + _|$ @ + @@ + @ + @ + @ + $)$@ + /$ @@ + @ + @ + _____|$@ + $$ @ + @@ + @ + @ + @ + _)$@ + @@ + $/$@ + $/$ @ + $/$ @ + _/$ @ + @@ + $_ \$ @ + $| |$@ + $| |$@ + \___/$ @ + @@ + _ |$@ + $|$@ + $|$@ + _|$@ + @@ + ___ \$ @ + ) |$@ + $__/$ @ + _____|$@ + @@ + ___ /$ @ + _ \$ @ + ) |$@ + ____/$ @ + @@ + $| |$ @ + $| |$ @ + ___ __|$@ + _|$ @ + @@ + $___|$ @ + $__ \$ @ + ) |$@ + ____/$ @ + @@ + $/$ @ + $ _ \$ @ + $( |$@ + \___/$ @ + @@ + ___ |$@ + $/$ @ + $/$ @ + _/$ @ + @@ + $ _ )$ @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ + $_ \$ @ + $( |$@ + \__ |$@ + __/$ @ + @@ + @ + _)$@ + $$ @ + _)$@ + @@ + @ + _)$@ + $$ @ + $)$@ + /$ @@ + $/$@ + $/$ @ + \ \$ @ + \_\$@ + @@ + @ + _____|$@ + _____|$@ + @ + @@ + \ \$ @ + \ \$@ + $/$@ + _/$ @ + @@ + __ \$@ + $/$@ + _|$ @ + _)$ @ + @@ + $__ \$ @ + $/ _` |$@ + $| ( |$@ + \ \__,_|$@ + \____/$ @@ + $\$ @ + $_ \$ @ + $___ \$ @ + _/ _\$@ + @@ + $__ )$ @ + $__ \$ @ + $| |$@ + ____/$ @ + @@ + $___|$@ + $|$ @ + $|$ @ + \____|$@ + @@ + $__ \$ @ + $| |$@ + $| |$@ + ____/$ @ + @@ + $____|$@ + $__|$ @ + $|$ @ + _____|$@ + @@ + $____|$@ + $|$ @ + $__|$ @ + _|$ @ + @@ + $___|$@ + $|$ @ + $| |$@ + \____|$@ + @@ + $| |$@ + $| |$@ + $___ |$@ + _| _|$@ + @@ + _ _|$@ + $|$ @ + $|$ @ + ___|$@ + @@ + $|$@ + $|$@ + $\ |$@ + \___/$ @ + @@ + $| /$@ + $' /$ @ + $. \$ @ + _|\_\$@ + @@ + $|$ @ + $|$ @ + $|$ @ + _____|$@ + @@ + $ \ |$@ + $|\/ |$@ + $| |$@ + _| _|$@ + @@ + $ \ |$@ + $ \ |$@ + $|\ |$@ + _| \_|$@ + @@ + $_ \$ @ + $| |$@ + $| |$@ + \___/$ @ + @@ + $ _ \$ @ + $| |$@ + $___/$ @ + _|$ @ + @@ + $_ \$ @ + $| |$@ + $| |$@ + \__\_\$@ + @@ + $ _ \$ @ + $| |$@ + $__ <$ @ + _| \_\$@ + @@ + $___|$ @ + \___ \$ @ + $|$@ + _____/$ @ + @@ + __ __|$@ + $|$ @ + $|$ @ + _|$ @ + @@ + $| |$@ + $| |$@ + $| |$@ + \___/$ @ + @@ + \ \ /$@ + \ \ /$ @ + \ \ /$ @ + \_/$ @ + @@ + \ \ /$@ + \ \ \ /$ @ + \ \ \ /$ @ + \_/\_/$ @ + @@ + \ \ /$@ + \ /$ @ + $ \$ @ + _/\_\$@ + @@ + \ \ /$@ + \ /$ @ + $|$ @ + _|$ @ + @@ + __ /$@ + $/$ @ + $/$ @ + ____|$@ + @@ + $_|$@ + $|$ @ + $|$ @ + $|$ @ + __|$@@ + \ \$ @ + \ \$ @ + \ \$ @ + \_\$@ + @@ + _ |$@ + $|$@ + $|$@ + $|$@ + __|$@@ + /\\$@ + $$ @ + $$ @ + $$ @ + @@ + @ + @ + @ + $$ @ + _____|$@@ + $)$@ + \|$@ + $$ @ + $$ @ + @@ + @ + $_` |$@ + $( |$@ + \__,_|$@ + @@ + $|$ @ + $__ \$ @ + $| |$@ + _.__/$ @ + @@ + @ + $__|$@ + $($ @ + \___|$@ + @@ + $|$@ + $_` |$@ + $( |$@ + \__,_|$@ + @@ + @ + $_ \$@ + $ __/$@ + \___|$@ + @@ + $_|$@ + $|$ @ + $__|$@ + _|$ @ + @@ + @ + $_` |$@ + $( |$@ + \__, |$@ + |___/$ @@ + $|$ @ + $__ \$ @ + $| | |$@ + _| |_|$@ + @@ + _)$@ + $|$@ + $|$@ + _|$@ + @@ + _)$@ + $|$@ + $|$@ + $|$@ + ___/$ @@ + $|$ @ + $| /$@ + $ <$ @ + _|\_\$@ + @@ + $|$@ + $|$@ + $|$@ + _|$@ + @@ + @ + $__ `__ \$ @ + $| | |$@ + _| _| _|$@ + @@ + @ + $__ \$ @ + $| |$@ + _| _|$@ + @@ + @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ + @ + $__ \$ @ + $| |$@ + $.__/$ @ + _|$ @@ + @ + $_` |$@ + $( |$@ + \__, |$@ + _|$@@ + @ + $ __|$@ + $|$ @ + _|$ @ + @@ + @ + $__|$@ + \__ \$@ + ____/$@ + @@ + $|$ @ + $__|$@ + $|$ @ + \__|$@ + @@ + @ + $| |$@ + $| |$@ + \__,_|$@ + @@ + @ + \ \ /$@ + \ \ /$ @ + \_/$ @ + @@ + @ + \ \ \ /$@ + \ \ \ /$ @ + \_/\_/$ @ + @@ + @ + \ \ /$@ + ` <$ @ + _/\_\$@ + @@ + @ + $| |$@ + $| |$@ + \__, |$@ + ____/$ @@ + @ + _ /$@ + $/$ @ + ___|$@ + @@ + $/$@ + $|$ @ + < <$ @ + $|$ @ + \_\$@@ + $|$@ + $|$@ + $|$@ + $|$@ + _|$@@ + \ \$ @ + $|$ @ + ` >$@ + $|$ @ + _/$ @@ + / _/$@ + $$ @ + $$ @ + $$ @ + @@ + _) \ _)$@ + $_ \$ @ + $___ \$ @ + _/ _\$@ + @@ + _) _)$@ + $_ \$ @ + $| |$@ + \___/$ @ + @@ + _) _)$@ + $| |$@ + $| |$@ + \___/$ @ + @@ + _) _)$@ + $_` |$@ + $( |$@ + \__,_|$@ + @@ + _) _)$@ + $_ \$ @ + $( |$@ + \___/$ @ + @@ + _) _)$@ + $| |$@ + $| |$@ + \__,_|$@ + @@ + $_ \$@ + $| /$@ + $|\ \$@ + $|__/$@ + _|$ @@ +160 NO-BREAK SPACE + $ $@ + $ $@ + $ $@ + $ $@ + $ $@@ +161 INVERTED EXCLAMATION MARK + _)$@ + $|$@ + $|$@ + _|$@ + @@ +162 CENT SIGN + $|$ @ + $__)$@ + $($ @ + \ )$@ + _|$ @@ +163 POUND SIGN + $,_\$ @ + _ |_$ @ + $|$ @ + _,____|$@ + @@ +164 CURRENCY SIGN + \ _ /$@ + $( |$@ + $___ \$@ + \/ /$@ + @@ +165 YEN SIGN + \ \ /$ @ + __ __|$@ + __ __|$@ + _|$ @ + @@ +166 BROKEN BAR + $|$@ + _|$@ + @ + $|$@ + _|$@@ +167 SECTION SIGN + $_)$@ + $\ \$ @ + \ \\ \$@ + \ \_/$@ + (__/$ @@ +168 DIAERESIS + _) _)$@ + $ $ @ + $ $ @ + $ $ @ + @@ +169 COPYRIGHT SIGN + $ \$ @ + $ __| \$ @ + $ ( |$@ + \ \___| /$ @ + \_____/$ @@ +170 FEMININE ORDINAL INDICATOR + $_` |$@ + \__,_|$@ + _____|$@ + $$ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + $/ /$@ + $/ /$ @ + \ \ \$ @ + \_\_\$@ + @@ +172 NOT SIGN + @ + _____ |$@ + _|$@ + $$ @ + @@ +173 SOFT HYPHEN + @ + @ + _____|$@ + $$ @ + @@ +174 REGISTERED SIGN + $ \$ @ + $ _ \ \$ @ + $ / |$@ + \ _|_\ /$ @ + \_____/$ @@ +175 MACRON + _____|$@ + $$ @ + $$ @ + $$ @ + @@ +176 DEGREE SIGN + $ \$ @ + $( |$@ + \__/$ @ + $$ @ + @@ +177 PLUS-MINUS SIGN + $|$ @ + _ _|$@ + _|$ @ + _____|$@ + @@ +178 SUPERSCRIPT TWO + _ )$@ + $/$ @ + ___|$@ + $$ @ + @@ +179 SUPERSCRIPT THREE + __ /$@ + _ \$@ + ___/$@ + $$ @ + @@ +180 ACUTE ACCENT + _/$@ + $$ @ + $$ @ + $$ @ + @@ +181 MICRO SIGN + @ + $| |$@ + $| |$@ + $._,_|$@ + _|$ @@ +182 PILCROW SIGN + $ |$@ + $( | |$@ + \__ | |$@ + _|_|$@ + @@ +183 MIDDLE DOT + @ + _)$@ + $$ @ + $$ @ + @@ +184 CEDILLA + @ + @ + @ + $$ @ + _)$@@ +185 SUPERSCRIPT ONE + _ |$@ + $|$@ + _|$@ + $$ @ + @@ +186 MASCULINE ORDINAL INDICATOR + $_ \$@ + \___/$@ + ____|$@ + $$ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + \ \ \$ @ + \ \ \$@ + $/ /$@ + _/_/$ @ + @@ +188 VULGAR FRACTION ONE QUARTER + _ | /$ @ + $| / | |$ @ + _| / __ _|$@ + _/ _|$ @ + @@ +189 VULGAR FRACTION ONE HALF + _ | /$ @ + $| /_ )$@ + _| / /$ @ + _/ ___|$@ + @@ +190 VULGAR FRACTION THREE QUARTERS + __ / /$ @ + _ \ / | |$ @ + ___/ / __ _|$@ + _/ _|$ @ + @@ +191 INVERTED QUESTION MARK + _)$ @ + $|$ @ + $/$ @ + \___|$@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + \_\$ @ + $\$ @ + $_ \$ @ + _/ _\$@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + _/$ @ + $\$ @ + $_ \$ @ + _/ _\$@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\\$ @ + $\$ @ + $_ \$ @ + _/ _\$@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + / _/$ @ + $\$ @ + $_ \$ @ + _/ _\$@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _) \ _)$@ + $_ \$ @ + $___ \$ @ + _/ _\$@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + ( )$ @ + $_ \$ @ + $___ \$ @ + _/ _\$@ + @@ +198 LATIN CAPITAL LETTER AE + $ ____|$@ + $/ __|$ @ + $__ |$ @ + _/ _____|$@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + $___|$@ + $|$ @ + $|$ @ + \____|$@ + _)$ @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + \_\$ @ + $____|$@ + $ _|$ @ + _____|$@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _/$ @ + $____|$@ + $ _|$ @ + _____|$@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\\$ @ + $____|$@ + $ _|_$ @ + _____|$@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _) _)$@ + $____|$@ + $ _|$ @ + _____|$@ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + \_\$ @ + _ _|$@ + | |$ @ + ___|$@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + _/$ @ + _ _|$@ + $|$ @ + ___|$@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + /\\$ @ + _ _|$@ + $|$ @ + ___|$@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _) _)$@ + _ _|$ @ + $|$ @ + ___|$ @ + @@ +208 LATIN CAPITAL LETTER ETH + __ \$ @ + | |$@ + __ __| |$@ + ____/$ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + / _/$@ + $ \ |$@ + $. |$@ + _|\_|$@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + \_\$ @ + $_ \$ @ + $| |$@ + \___/$ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + _/$ @ + $_ \$ @ + $| |$@ + \___/$ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\\$ @ + $_ \$ @ + $| |$@ + \___/$ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + / _/$ @ + $_ \$ @ + $| |$@ + \___/$ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _) _)$@ + $_ \$ @ + $| |$@ + \___/$ @ + @@ +215 MULTIPLICATION SIGN + @ + \ \$@ + , '$@ + \/\/$@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + $_ /$ @ + $| / |$@ + $ / |$@ + _/__/$ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + \_\$ @ + $| |$@ + $| |$@ + \___/$ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + _/$ @ + $| |$@ + $| |$@ + \___/$ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + /\\$ @ + $| |$@ + $| |$@ + \___/$ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _) _)$@ + $| |$@ + $| |$@ + \___/$ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + _/$ @ + \ \ /$@ + \ /$ @ + _|$ @ + @@ +222 LATIN CAPITAL LETTER THORN + $|$ @ + $ __ \$@ + $ ___/$@ + _|$ @ + @@ +223 LATIN SMALL LETTER SHARP S + $_ \$@ + $| /$@ + $|\ \$@ + $|__/$@ + _|$ @@ +224 LATIN SMALL LETTER A WITH GRAVE + \_\$ @ + $_` |$@ + $( |$@ + \__,_|$@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + _/_$ @ + $_` |$@ + $( |$@ + \__,_|$@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\\$ @ + $_` |$@ + $( |$@ + \__,_|$@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + / _/$ @ + $_` |$@ + $( |$@ + \__,_|$@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _) _)$@ + $_` |$@ + $( |$@ + \__,_|$@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + ( )$ @ + $_ '|$@ + $( |$@ + \__,_|$@ + @@ +230 LATIN SMALL LETTER AE + @ + $_` _ \$@ + $( __/$@ + \__,____|$@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + $__|$@ + $($ @ + \___|$@ + _)$ @@ +232 LATIN SMALL LETTER E WITH GRAVE + \_\$ @ + $_ \$@ + $ __/$@ + \___|$@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + _/$ @ + $_ \$@ + $ __/$@ + \___|$@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + /\\$ @ + $_ \$@ + $ __/$@ + \___|$@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _) _)$@ + $_ \$ @ + $ __/$ @ + \___|$ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + \_\$@ + $|$@ + $|$@ + _|$@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + _/$@ + $|$@ + $|$@ + _|$@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + /\\$@ + $|$ @ + $|$ @ + _|$ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _) _)$@ + $|$ @ + $|$ @ + _|$ @ + @@ +240 LATIN SMALL LETTER ETH + ` <$ @ + \/\ |$@ + $__` |$@ + \____/$ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + / _/$ @ + $'_ \$ @ + $| |$@ + _| _|$@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + \_\$ @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + _/$ @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + /\\$ @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + / _/$ @ + $_ \$ @ + $( |$@ + \___/$ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _) _)$@ + $_ \$ @ + $( |$@ + \___/$ @ + @@ +247 DIVISION SIGN + @ + _)$ @ + _____|$@ + _)$ @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + $_ /\$ @ + $( / |$@ + \_/__/$ @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + \_\$ @ + $| |$@ + $| |$@ + \__,_|$@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + _/$ @ + $| |$@ + $| |$@ + \__,_|$@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\\$ @ + $| |$@ + $| |$@ + \__,_|$@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _) _)$@ + $| |$@ + $| |$@ + \__,_|$@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + _/$ @ + $| |$@ + $| |$@ + \__, |$@ + ____/$ @@ +254 LATIN SMALL LETTER THORN + $|$ @ + $__ \$ @ + $| |$@ + $.__/$ @ + _|$ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _) _)$@ + $| |$@ + $| |$@ + \__, |$@ + ____/$ @@ diff --git a/externals/figlet/fonts/slant.flf b/externals/figlet/fonts/slant.flf new file mode 100644 index 0000000000..43fe3986e8 --- /dev/null +++ b/externals/figlet/fonts/slant.flf @@ -0,0 +1,1295 @@ +flf2a$ 6 5 16 15 10 0 18319 96 +Slant by Glenn Chappell 3/93 -- based on Standard +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $$@ + $$ @ + $$ @ + $$ @ + $$ @ +$$ @@ + __@ + / /@ + / / @ + /_/ @ +(_) @ + @@ + _ _ @ +( | )@ +|/|/ @ + $ @ +$ @ + @@ + __ __ @ + __/ // /_@ + /_ _ __/@ +/_ _ __/ @ + /_//_/ @ + @@ + __@ + _/ /@ + / __/@ + (_ ) @ +/ _/ @ +/_/ @@ + _ __@ + (_)_/_/@ + _/_/ @ + _/_/_ @ +/_/ (_) @ + @@ + ___ @ + ( _ ) @ + / __ \/|@ +/ /_/ < @ +\____/\/ @ + @@ + _ @ + ( )@ + |/ @ + $ @ +$ @ + @@ + __@ + _/_/@ + / / @ + / / @ +/ / @ +|_| @@ + _ @ + | |@ + / /@ + / / @ + _/_/ @ +/_/ @@ + @ + __/|_@ + | /@ +/_ __| @ + |/ @ + @@ + @ + __ @ + __/ /_@ +/_ __/@ + /_/ @ + @@ + @ + @ + @ + _ @ +( )@ +|/ @@ + @ + @ + ______@ +/_____/@ + $ @ + @@ + @ + @ + @ + _ @ +(_)@ + @@ + __@ + _/_/@ + _/_/ @ + _/_/ @ +/_/ @ + @@ + ____ @ + / __ \@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ + ___@ + < /@ + / / @ + / / @ +/_/ @ + @@ + ___ @ + |__ \@ + __/ /@ + / __/ @ +/____/ @ + @@ + _____@ + |__ /@ + /_ < @ + ___/ / @ +/____/ @ + @@ + __ __@ + / // /@ + / // /_@ +/__ __/@ + /_/ @ + @@ + ______@ + / ____/@ + /___ \ @ + ____/ / @ +/_____/ @ + @@ + _____@ + / ___/@ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ + _____@ +/__ /@ + / / @ + / / @ +/_/ @ + @@ + ____ @ + ( __ )@ + / __ |@ +/ /_/ / @ +\____/ @ + @@ + ____ @ + / __ \@ + / /_/ /@ + \__, / @ +/____/ @ + @@ + @ + _ @ + (_)@ + _ @ +(_) @ + @@ + @ + _ @ + (_)@ + _ @ +( ) @ +|/ @@ + __@ + / /@ +/ / @ +\ \ @ + \_\@ + @@ + @ + _____@ + /____/@ +/____/ @ + $ @ + @@ +__ @ +\ \ @ + \ \@ + / /@ +/_/ @ + @@ + ___ @ + /__ \@ + / _/@ + /_/ @ +(_) @ + @@ + ______ @ + / ____ \@ + / / __ `/@ +/ / /_/ / @ +\ \__,_/ @ + \____/ @@ + ___ @ + / |@ + / /| |@ + / ___ |@ +/_/ |_|@ + @@ + ____ @ + / __ )@ + / __ |@ + / /_/ / @ +/_____/ @ + @@ + ______@ + / ____/@ + / / @ +/ /___ @ +\____/ @ + @@ + ____ @ + / __ \@ + / / / /@ + / /_/ / @ +/_____/ @ + @@ + ______@ + / ____/@ + / __/ @ + / /___ @ +/_____/ @ + @@ + ______@ + / ____/@ + / /_ @ + / __/ @ +/_/ @ + @@ + ______@ + / ____/@ + / / __ @ +/ /_/ / @ +\____/ @ + @@ + __ __@ + / / / /@ + / /_/ / @ + / __ / @ +/_/ /_/ @ + @@ + ____@ + / _/@ + / / @ + _/ / @ +/___/ @ + @@ + __@ + / /@ + __ / / @ +/ /_/ / @ +\____/ @ + @@ + __ __@ + / //_/@ + / ,< @ + / /| | @ +/_/ |_| @ + @@ + __ @ + / / @ + / / @ + / /___@ +/_____/@ + @@ + __ ___@ + / |/ /@ + / /|_/ / @ + / / / / @ +/_/ /_/ @ + @@ + _ __@ + / | / /@ + / |/ / @ + / /| / @ +/_/ |_/ @ + @@ + ____ @ + / __ \@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ + ____ @ + / __ \@ + / /_/ /@ + / ____/ @ +/_/ @ + @@ + ____ @ + / __ \@ + / / / /@ +/ /_/ / @ +\___\_\ @ + @@ + ____ @ + / __ \@ + / /_/ /@ + / _, _/ @ +/_/ |_| @ + @@ + _____@ + / ___/@ + \__ \ @ + ___/ / @ +/____/ @ + @@ + ______@ + /_ __/@ + / / @ + / / @ +/_/ @ + @@ + __ __@ + / / / /@ + / / / / @ +/ /_/ / @ +\____/ @ + @@ + _ __@ +| | / /@ +| | / / @ +| |/ / @ +|___/ @ + @@ + _ __@ +| | / /@ +| | /| / / @ +| |/ |/ / @ +|__/|__/ @ + @@ + _ __@ + | |/ /@ + | / @ + / | @ +/_/|_| @ + @@ +__ __@ +\ \/ /@ + \ / @ + / / @ +/_/ @ + @@ + _____@ +/__ /@ + / / @ + / /__@ +/____/@ + @@ + ___@ + / _/@ + / / @ + / / @ + / / @ +/__/ @@ +__ @ +\ \ @ + \ \ @ + \ \ @ + \_\@ + @@ + ___@ + / /@ + / / @ + / / @ + _/ / @ +/__/ @@ + //|@ + |/||@ + $ @ + $ @ +$ @ + @@ + @ + @ + @ + @ + ______@ +/_____/@@ + _ @ + ( )@ + V @ + $ @ +$ @ + @@ + @ + ____ _@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ + __ @ + / /_ @ + / __ \@ + / /_/ /@ +/_.___/ @ + @@ + @ + _____@ + / ___/@ +/ /__ @ +\___/ @ + @@ + __@ + ____/ /@ + / __ / @ +/ /_/ / @ +\__,_/ @ + @@ + @ + ___ @ + / _ \@ +/ __/@ +\___/ @ + @@ + ____@ + / __/@ + / /_ @ + / __/ @ +/_/ @ + @@ + @ + ____ _@ + / __ `/@ + / /_/ / @ + \__, / @ +/____/ @@ + __ @ + / /_ @ + / __ \@ + / / / /@ +/_/ /_/ @ + @@ + _ @ + (_)@ + / / @ + / / @ +/_/ @ + @@ + _ @ + (_)@ + / / @ + / / @ + __/ / @ +/___/ @@ + __ @ + / /__@ + / //_/@ + / ,< @ +/_/|_| @ + @@ + __@ + / /@ + / / @ + / / @ +/_/ @ + @@ + @ + ____ ___ @ + / __ `__ \@ + / / / / / /@ +/_/ /_/ /_/ @ + @@ + @ + ____ @ + / __ \@ + / / / /@ +/_/ /_/ @ + @@ + @ + ____ @ + / __ \@ +/ /_/ /@ +\____/ @ + @@ + @ + ____ @ + / __ \@ + / /_/ /@ + / .___/ @ +/_/ @@ + @ + ____ _@ + / __ `/@ +/ /_/ / @ +\__, / @ + /_/ @@ + @ + _____@ + / ___/@ + / / @ +/_/ @ + @@ + @ + _____@ + / ___/@ + (__ ) @ +/____/ @ + @@ + __ @ + / /_@ + / __/@ +/ /_ @ +\__/ @ + @@ + @ + __ __@ + / / / /@ +/ /_/ / @ +\__,_/ @ + @@ + @ + _ __@ +| | / /@ +| |/ / @ +|___/ @ + @@ + @ + _ __@ +| | /| / /@ +| |/ |/ / @ +|__/|__/ @ + @@ + @ + _ __@ + | |/_/@ + _> < @ +/_/|_| @ + @@ + @ + __ __@ + / / / /@ + / /_/ / @ + \__, / @ +/____/ @@ + @ + ____@ +/_ /@ + / /_@ +/___/@ + @@ + __@ + _/_/@ + _/_/ @ +< < @ +/ / @ +\_\ @@ + __@ + / /@ + / / @ + / / @ + / / @ +/_/ @@ + _ @ + | |@ + / /@ + _>_>@ + _/_/ @ +/_/ @@ + /\//@ + //\/ @ + $ @ + $ @ +$ @ + @@ + _ _ @ + (_)(_)@ + / _ | @ + / __ | @ +/_/ |_| @ + @@ + _ _ @ + (_)_(_)@ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ + _ _ @ + (_) (_)@ + / / / / @ +/ /_/ / @ +\____/ @ + @@ + _ _ @ + (_)_(_)@ + / __ `/ @ +/ /_/ / @ +\__,_/ @ + @@ + _ _ @ + (_)_(_)@ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ + _ _ @ + (_) (_)@ + / / / / @ +/ /_/ / @ +\__,_/ @ + @@ + ____ @ + / __ \@ + / / / /@ + / /_| | @ + / //__/ @ +/_/ @@ +160 NO-BREAK SPACE + $$@ + $$ @ + $$ @ + $$ @ + $$ @ +$$ @@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + / / @ + / / @ +/_/ @ + @@ +162 CENT SIGN + __@ + __/ /@ + / ___/@ +/ /__ @ +\ _/ @ +/_/ @@ +163 POUND SIGN + ____ @ + / ,__\@ + __/ /_ @ + _/ /___ @ +(_,____/ @ + @@ +164 CURRENCY SIGN + /|___/|@ + | __ / @ + / /_/ / @ + /___ | @ +|/ |/ @ + @@ +165 YEN SIGN + ____@ + _| / /@ + /_ __/@ +/_ __/ @ + /_/ @ + @@ +166 BROKEN BAR + __@ + / /@ + /_/ @ + __ @ + / / @ +/_/ @@ +167 SECTION SIGN + __ @ + _/ _)@ + / | | @ + | || | @ + | |_/ @ +(__/ @@ +168 DIAERESIS + _ _ @ + (_) (_)@ + $ $ @ + $ $ @ +$ $ @ + @@ +169 COPYRIGHT SIGN + ______ @ + / _____\ @ + / / ___/ |@ + / / /__ / @ +| \___/ / @ + \______/ @@ +170 FEMININE ORDINAL INDICATOR + ___ _@ + / _ `/@ + _\_,_/ @ +/____/ @ + $ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ +/ / / @ +\ \ \ @ + \_\_\@ + @@ +172 NOT SIGN + @ + ______@ +/___ /@ + /_/ @ + $ @ + @@ +173 SOFT HYPHEN + @ + @ + _____@ +/____/@ + $ @ + @@ +174 REGISTERED SIGN + ______ @ + / ___ \ @ + / / _ \ |@ + / / , _/ / @ +| /_/|_| / @ + \______/ @@ +175 MACRON + ______@ +/_____/@ + $ @ + $ @ +$ @ + @@ +176 DEGREE SIGN + ___ @ + / _ \@ +/ // /@ +\___/ @ + $ @ + @@ +177 PLUS-MINUS SIGN + __ @ + __/ /_@ + /_ __/@ + __/_/_ @ +/_____/ @ + @@ +178 SUPERSCRIPT TWO + ___ @ + |_ |@ + / __/ @ +/____/ @ + $ @ + @@ +179 SUPERSCRIPT THREE + ____@ + |_ /@ + _/_ < @ +/____/ @ + $ @ + @@ +180 ACUTE ACCENT + __@ + /_/@ + $ @ + $ @ +$ @ + @@ +181 MICRO SIGN + @ + __ __@ + / / / /@ + / /_/ / @ + / ._,_/ @ +/_/ @@ +182 PILCROW SIGN + _______@ + / _ /@ +/ (/ / / @ +\_ / / @ + /_/_/ @ + @@ +183 MIDDLE DOT + @ + _ @ +(_)@ + $ @ +$ @ + @@ +184 CEDILLA + @ + @ + @ + @ + _ @ +/_)@@ +185 SUPERSCRIPT ONE + ___@ + < /@ + / / @ +/_/ @ +$ @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \@ + _\___/@ +/____/ @ + $ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +____ @ +\ \ \ @ + \ \ \@ + / / /@ +/_/_/ @ + @@ +188 VULGAR FRACTION ONE QUARTER + ___ __ @ + < / _/_/ @ + / /_/_/___@ +/_//_// / /@ + /_/ /_ _/@ + /_/ @@ +189 VULGAR FRACTION ONE HALF + ___ __ @ + < / _/_/__ @ + / /_/_/|_ |@ +/_//_/ / __/ @ + /_/ /____/ @ + @@ +190 VULGAR FRACTION THREE QUARTERS + ____ __ @ + |_ / _/_/ @ + _/_ < _/_/___@ +/____//_// / /@ + /_/ /_ _/@ + /_/ @@ +191 INVERTED QUESTION MARK + _ @ + (_)@ + _/ / @ +/ _/_ @ +\___/ @ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + _\_\@ + / _ |@ + / __ |@ +/_/ |_|@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __@ + _/_/@ + / _ |@ + / __ |@ +/_/ |_|@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + //|@ + _|/||@ + / _ | @ + / __ | @ +/_/ |_| @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\//@ + _//\/ @ + / _ | @ + / __ | @ +/_/ |_| @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ + / _ | @ + / __ | @ +/_/ |_| @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + (())@ + / |@ + / /| |@ + / ___ |@ +/_/ |_|@ + @@ +198 LATIN CAPITAL LETTER AE + __________@ + / ____/@ + / /| __/ @ + / __ /___ @ +/_/ /_____/ @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + ______@ + / ____/@ + / / @ +/ /___ @ +\____/ @ + /_) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + _\_\@ + / __/@ + / _/ @ +/___/ @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __@ + _/_/@ + / __/@ + / _/ @ +/___/ @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + //|@ + _|/||@ + / __/ @ + / _/ @ +/___/ @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_)(_)@ + / __/ @ + / _/ @ +/___/ @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + _\_\@ + / _/@ + _/ / @ +/___/ @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __@ + _/_/@ + / _/@ + _/ / @ +/___/ @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //|@ + _|/||@ + / _/ @ + _/ / @ +/___/ @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)(_)@ + / _/ @ + _/ / @ +/___/ @ + @@ +208 LATIN CAPITAL LETTER ETH + ____ @ + / __ \@ + __/ /_/ /@ +/_ __/ / @ + /_____/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\//@ + _//\/ @ + / |/ / @ + / / @ +/_/|_/ @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + __\_\@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __@ + __/_/@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\//@ + _//\/ @ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ +215 MULTIPLICATION SIGN + @ + @ + /|/|@ + > < @ +|/|/ @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _____ @ + / _// \@ + / //// /@ +/ //// / @ +\_//__/ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + __\_\_@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __ @ + __/_/_@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //| @ + _|/||_@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + / / / / @ +/ /_/ / @ +\____/ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __ @ +__/_/_@ +\ \/ /@ + \ / @ + /_/ @ + @@ +222 LATIN CAPITAL LETTER THORN + __ @ + / /_ @ + / __ \@ + / ____/@ +/_/ @ + @@ +223 LATIN SMALL LETTER SHARP S + ____ @ + / __ \@ + / / / /@ + / /_| | @ + / //__/ @ +/_/ @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + __\_\_@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __ @ + __/_/_@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + //| @ + _|/||_@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\//@ + _//\/_@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_)@ + / __ `/ @ +/ /_/ / @ +\__,_/ @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + __(())@ + / __ `/@ +/ /_/ / @ +\__,_/ @ + @@ +230 LATIN SMALL LETTER AE + @ + ____ ___ @ + / __ ` _ \@ +/ /_/ __/@ +\__,_____/ @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + _____@ + / ___/@ +/ /__ @ +\___/ @ +/_) @@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + _\_\@ + / _ \@ +/ __/@ +\___/ @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __@ + _/_/@ + / _ \@ +/ __/@ +\___/ @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //|@ + _|/||@ + / _ \ @ +/ __/ @ +\___/ @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ + (_)(_)@ + / _ \ @ +/ __/ @ +\___/ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + / / @ + / / @ +/_/ @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + / / @ + / / @ +/_/ @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //|@ + |/||@ + / / @ + / / @ +/_/ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + / / @ + / / @ +/_/ @ + @@ +240 LATIN SMALL LETTER ETH + || @ + =||=@ + ___ || @ +/ __` | @ +\____/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\//@ + _//\/ @ + / __ \ @ + / / / / @ +/_/ /_/ @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + __\_\@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __@ + __/_/@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ + / __ \@ +/ /_/ /@ +\____/ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\//@ + _//\/ @ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / __ \ @ +/ /_/ / @ +\____/ @ + @@ +247 DIVISION SIGN + @ + _ @ + __(_)_@ +/_____/@ + (_) @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + _____ @ + / _// \@ +/ //// /@ +\_//__/ @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + __\_\_@ + / / / /@ +/ /_/ / @ +\__,_/ @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __ @ + __/_/_@ + / / / /@ +/ /_/ / @ +\__,_/ @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + //| @ + _|/||_@ + / / / /@ +/ /_/ / @ +\__,_/ @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + / / / / @ +/ /_/ / @ +\__,_/ @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __ @ + __/_/_@ + / / / /@ + / /_/ / @ + \__, / @ +/____/ @@ +254 LATIN SMALL LETTER THORN + __ @ + / /_ @ + / __ \@ + / /_/ /@ + / .___/ @ +/_/ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_) (_)@ + / / / / @ + / /_/ / @ + \__, / @ +/____/ @@ diff --git a/externals/figlet/fonts/small.flf b/externals/figlet/fonts/small.flf new file mode 100644 index 0000000000..c6b5bfcdef --- /dev/null +++ b/externals/figlet/fonts/small.flf @@ -0,0 +1,1097 @@ +flf2a$ 5 4 13 15 10 0 22415 96 +Small by Glenn Chappell 4/93 -- based on Standard +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $@ + $@ + $@ + $@ + $@@ + _ @ + | |@ + |_|@ + (_)@ + @@ + _ _ @ + ( | )@ + V V @ + $ @ + @@ + _ _ @ + _| | |_ @ + |_ . _|@ + |_ _|@ + |_|_| @@ + @ + ||_@ + (_-<@ + / _/@ + || @@ + _ __ @ + (_)/ / @ + / /_ @ + /_/(_)@ + @@ + __ @ + / _|___ @ + > _|_ _|@ + \_____| @ + @@ + _ @ + ( )@ + |/ @ + $ @ + @@ + __@ + / /@ + | | @ + | | @ + \_\@@ + __ @ + \ \ @ + | |@ + | |@ + /_/ @@ + @ + _/\_@ + > <@ + \/ @ + @@ + _ @ + _| |_ @ + |_ _|@ + |_| @ + @@ + @ + @ + _ @ + ( )@ + |/ @@ + @ + ___ @ + |___|@ + $ @ + @@ + @ + @ + _ @ + (_)@ + @@ + __@ + / /@ + / / @ + /_/ @ + @@ + __ @ + / \ @ + | () |@ + \__/ @ + @@ + _ @ + / |@ + | |@ + |_|@ + @@ + ___ @ + |_ )@ + / / @ + /___|@ + @@ + ____@ + |__ /@ + |_ \@ + |___/@ + @@ + _ _ @ + | | | @ + |_ _|@ + |_| @ + @@ + ___ @ + | __|@ + |__ \@ + |___/@ + @@ + __ @ + / / @ + / _ \@ + \___/@ + @@ + ____ @ + |__ |@ + / / @ + /_/ @ + @@ + ___ @ + ( _ )@ + / _ \@ + \___/@ + @@ + ___ @ + / _ \@ + \_, /@ + /_/ @ + @@ + _ @ + (_)@ + _ @ + (_)@ + @@ + _ @ + (_)@ + _ @ + ( )@ + |/ @@ + __@ + / /@ + < < @ + \_\@ + @@ + @ + ___ @ + |___|@ + |___|@ + @@ + __ @ + \ \ @ + > >@ + /_/ @ + @@ + ___ @ + |__ \@ + /_/@ + (_) @ + @@ + ____ @ + / __ \ @ + / / _` |@ + \ \__,_|@ + \____/ @@ + _ @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ + ___ @ + | _ )@ + | _ \@ + |___/@ + @@ + ___ @ + / __|@ + | (__ @ + \___|@ + @@ + ___ @ + | \ @ + | |) |@ + |___/ @ + @@ + ___ @ + | __|@ + | _| @ + |___|@ + @@ + ___ @ + | __|@ + | _| @ + |_| @ + @@ + ___ @ + / __|@ + | (_ |@ + \___|@ + @@ + _ _ @ + | || |@ + | __ |@ + |_||_|@ + @@ + ___ @ + |_ _|@ + | | @ + |___|@ + @@ + _ @ + _ | |@ + | || |@ + \__/ @ + @@ + _ __@ + | |/ /@ + | ' < @ + |_|\_\@ + @@ + _ @ + | | @ + | |__ @ + |____|@ + @@ + __ __ @ + | \/ |@ + | |\/| |@ + |_| |_|@ + @@ + _ _ @ + | \| |@ + | .` |@ + |_|\_|@ + @@ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ + ___ @ + | _ \@ + | _/@ + |_| @ + @@ + ___ @ + / _ \ @ + | (_) |@ + \__\_\@ + @@ + ___ @ + | _ \@ + | /@ + |_|_\@ + @@ + ___ @ + / __|@ + \__ \@ + |___/@ + @@ + _____ @ + |_ _|@ + | | @ + |_| @ + @@ + _ _ @ + | | | |@ + | |_| |@ + \___/ @ + @@ + __ __@ + \ \ / /@ + \ V / @ + \_/ @ + @@ + __ __@ + \ \ / /@ + \ \/\/ / @ + \_/\_/ @ + @@ + __ __@ + \ \/ /@ + > < @ + /_/\_\@ + @@ + __ __@ + \ \ / /@ + \ V / @ + |_| @ + @@ + ____@ + |_ /@ + / / @ + /___|@ + @@ + __ @ + | _|@ + | | @ + | | @ + |__|@@ + __ @ + \ \ @ + \ \ @ + \_\@ + @@ + __ @ + |_ |@ + | |@ + | |@ + |__|@@ + /\ @ + |/\|@ + $ @ + $ @ + @@ + @ + @ + @ + ___ @ + |___|@@ + _ @ + ( )@ + \|@ + $ @ + @@ + @ + __ _ @ + / _` |@ + \__,_|@ + @@ + _ @ + | |__ @ + | '_ \@ + |_.__/@ + @@ + @ + __ @ + / _|@ + \__|@ + @@ + _ @ + __| |@ + / _` |@ + \__,_|@ + @@ + @ + ___ @ + / -_)@ + \___|@ + @@ + __ @ + / _|@ + | _|@ + |_| @ + @@ + @ + __ _ @ + / _` |@ + \__, |@ + |___/ @@ + _ @ + | |_ @ + | ' \ @ + |_||_|@ + @@ + _ @ + (_)@ + | |@ + |_|@ + @@ + _ @ + (_)@ + | |@ + _/ |@ + |__/ @@ + _ @ + | |__@ + | / /@ + |_\_\@ + @@ + _ @ + | |@ + | |@ + |_|@ + @@ + @ + _ __ @ + | ' \ @ + |_|_|_|@ + @@ + @ + _ _ @ + | ' \ @ + |_||_|@ + @@ + @ + ___ @ + / _ \@ + \___/@ + @@ + @ + _ __ @ + | '_ \@ + | .__/@ + |_| @@ + @ + __ _ @ + / _` |@ + \__, |@ + |_|@@ + @ + _ _ @ + | '_|@ + |_| @ + @@ + @ + ___@ + (_-<@ + /__/@ + @@ + _ @ + | |_ @ + | _|@ + \__|@ + @@ + @ + _ _ @ + | || |@ + \_,_|@ + @@ + @ + __ __@ + \ V /@ + \_/ @ + @@ + @ + __ __ __@ + \ V V /@ + \_/\_/ @ + @@ + @ + __ __@ + \ \ /@ + /_\_\@ + @@ + @ + _ _ @ + | || |@ + \_, |@ + |__/ @@ + @ + ___@ + |_ /@ + /__|@ + @@ + __@ + / /@ + _| | @ + | | @ + \_\@@ + _ @ + | |@ + | |@ + | |@ + |_|@@ + __ @ + \ \ @ + | |_@ + | | @ + /_/ @@ + /\/|@ + |/\/ @ + $ @ + $ @ + @@ + _ _ @ + (_)(_)@ + /--\ @ + /_/\_\@ + @@ + _ _ @ + (_)(_)@ + / __ \@ + \____/@ + @@ + _ _ @ + (_) (_)@ + | |_| |@ + \___/ @ + @@ + _ _ @ + (_)(_)@ + / _` |@ + \__,_|@ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + \___/ @ + @@ + _ _ @ + (_)(_)@ + | || |@ + \_,_|@ + @@ + ___ @ + / _ \@ + | |< <@ + | ||_/@ + |_| @@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + $@@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + | |@ + |_|@ + @@ +162 CENT SIGN + @ + || @ + / _)@ + \ _)@ + || @@ +163 POUND SIGN + __ @ + _/ _\ @ + |_ _|_ @ + (_,___|@ + @@ +164 CURRENCY SIGN + /\_/\@ + \ . /@ + / _ \@ + \/ \/@ + @@ +165 YEN SIGN + __ __ @ + \ V / @ + |__ __|@ + |__ __|@ + |_| @@ +166 BROKEN BAR + _ @ + | |@ + |_|@ + | |@ + |_|@@ +167 SECTION SIGN + __ @ + / _)@ + /\ \ @ + \ \/ @ + (__/ @@ +168 DIAERESIS + _ _ @ + (_)(_)@ + $ $ @ + $ $ @ + @@ +169 COPYRIGHT SIGN + ____ @ + / __ \ @ + / / _| \@ + \ \__| /@ + \____/ @@ +170 FEMININE ORDINAL INDICATOR + __ _ @ + / _` |@ + \__,_|@ + |____|@ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ + < < < @ + \_\_\@ + @@ +172 NOT SIGN + ____ @ + |__ |@ + |_|@ + $ @ + @@ +173 SOFT HYPHEN + @ + __ @ + |__|@ + $ @ + @@ +174 REGISTERED SIGN + ____ @ + / __ \ @ + / | -) \@ + \ ||\\ /@ + \____/ @@ +175 MACRON + ___ @ + |___|@ + $ @ + $ @ + @@ +176 DEGREE SIGN + _ @ + /.\@ + \_/@ + $ @ + @@ +177 PLUS-MINUS SIGN + _ @ + _| |_ @ + |_ _|@ + _|_|_ @ + |_____|@@ +178 SUPERSCRIPT TWO + __ @ + |_ )@ + /__|@ + $ @ + @@ +179 SUPERSCRIPT THREE + ___@ + |_ /@ + |__)@ + $ @ + @@ +180 ACUTE ACCENT + __@ + /_/@ + $ @ + $ @ + @@ +181 MICRO SIGN + @ + _ _ @ + | || |@ + | .,_|@ + |_| @@ +182 PILCROW SIGN + ____ @ + / |@ + \_ | |@ + |_|_|@ + @@ +183 MIDDLE DOT + @ + _ @ + (_)@ + $ @ + @@ +184 CEDILLA + @ + @ + @ + _ @ + )_)@@ +185 SUPERSCRIPT ONE + _ @ + / |@ + |_|@ + $ @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \@ + \___/@ + |___|@ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + ____ @ + \ \ \ @ + > > >@ + /_/_/ @ + @@ +188 VULGAR FRACTION ONE QUARTER + _ __ @ + / |/ /__ @ + |_/ /_' |@ + /_/ |_|@ + @@ +189 VULGAR FRACTION ONE HALF + _ __ @ + / |/ /_ @ + |_/ /_ )@ + /_//__|@ + @@ +190 VULGAR FRACTION THREE QUARTERS + ___ __ @ + |_ // /__ @ + |__) /_' |@ + /_/ |_|@ + @@ +191 INVERTED QUESTION MARK + _ @ + (_) @ + / /_ @ + \___|@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + \_\ @ + /--\ @ + /_/\_\@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __ @ + /_/ @ + /--\ @ + /_/\_\@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\ @ + |/\| @ + /--\ @ + /_/\_\@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/|@ + |/\/ @ + /--\ @ + /_/\_\@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ + /--\ @ + /_/\_\@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + __ @ + (()) @ + /--\ @ + /_/\_\@ + @@ +198 LATIN CAPITAL LETTER AE + ____ @ + /, __|@ + / _ _| @ + /_/|___|@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + ___ @ + / __|@ + | (__ @ + \___|@ + )_) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + \_\@ + | -<@ + |__<@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __@ + /_/@ + | -<@ + |__<@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\ @ + |/\|@ + | -<@ + |__<@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_)(_)@ + | -< @ + |__< @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + \_\ @ + |_ _|@ + |___|@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __ @ + /_/ @ + |_ _|@ + |___|@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //\ @ + |/_\|@ + |_ _|@ + |___|@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + |_ _| @ + |___| @ + @@ +208 LATIN CAPITAL LETTER ETH + ____ @ + | __ \ @ + |_ _|) |@ + |____/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\/|@ + |/\/ @ + | \| |@ + |_|\_|@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + \_\_ @ + / __ \@ + \____/@ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __ @ + _/_/ @ + / __ \@ + \____/@ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\ @ + |/\| @ + / __ \@ + \____/@ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/|@ + |/\/ @ + / __ \@ + \____/@ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)(_)@ + / __ \@ + \____/@ + @@ +215 MULTIPLICATION SIGN + @ + /\/\@ + > <@ + \/\/@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + ____ @ + / _//\ @ + | (//) |@ + \//__/ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + _\_\_ @ + | |_| |@ + \___/ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __ @ + _/_/_ @ + | |_| |@ + \___/ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //\ @ + |/ \| @ + | |_| |@ + \___/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | |_| |@ + \___/ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __ @ + _/_/_@ + \ V /@ + |_| @ + @@ +222 LATIN CAPITAL LETTER THORN + _ @ + | |_ @ + | -_)@ + |_| @ + @@ +223 LATIN SMALL LETTER SHARP S + ___ @ + / _ \@ + | |< <@ + | ||_/@ + |_| @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + \_\_ @ + / _` |@ + \__,_|@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __ @ + _/_/ @ + / _` |@ + \__,_|@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\ @ + |/\| @ + / _` |@ + \__,_|@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/|@ + |/\/ @ + / _` |@ + \__,_|@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ + / _` |@ + \__,_|@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + (()) @ + / _` |@ + \__,_|@ + @@ +230 LATIN SMALL LETTER AE + @ + __ ___ @ + / _` -_)@ + \__,___|@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + __ @ + / _|@ + \__|@ + )_)@@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + \_\ @ + / -_)@ + \___|@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __ @ + /_/ @ + / -_)@ + \___|@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //\ @ + |/_\|@ + / -_)@ + \___|@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ + (_)_(_)@ + / -_) @ + \___| @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + | |@ + |_|@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + | |@ + |_|@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //\ @ + |/_\|@ + | | @ + |_| @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + | | @ + |_| @ + @@ +240 LATIN SMALL LETTER ETH + \\/\ @ + \/\\ @ + / _` |@ + \___/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/| @ + |/\/ @ + | ' \ @ + |_||_|@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + \_\ @ + / _ \@ + \___/@ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __ @ + /_/ @ + / _ \@ + \___/@ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //\ @ + |/_\|@ + / _ \@ + \___/@ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/|@ + |/\/ @ + / _ \@ + \___/@ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + \___/ @ + @@ +247 DIVISION SIGN + _ @ + (_) @ + |___|@ + (_) @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + ___ @ + / //\@ + \//_/@ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + \_\_ @ + | || |@ + \_,_|@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __ @ + _/_/ @ + | || |@ + \_,_|@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\ @ + |/\| @ + | || |@ + \_,_|@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_)(_)@ + | || |@ + \_,_|@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __ @ + _/_/ @ + | || |@ + \_, |@ + |__/ @@ +254 LATIN SMALL LETTER THORN + _ @ + | |__ @ + | '_ \@ + | .__/@ + |_| @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_)(_)@ + | || |@ + \_, |@ + |__/ @@ diff --git a/externals/figlet/fonts/smscript.flf b/externals/figlet/fonts/smscript.flf new file mode 100644 index 0000000000..32a8a39da5 --- /dev/null +++ b/externals/figlet/fonts/smscript.flf @@ -0,0 +1,1097 @@ +flf2a$ 5 4 13 0 10 0 3904 96 +SmScript by Glenn Chappell 4/93 -- based on Script +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + +$ $@ +$ $@ +$ $@ +$ $@ +$ $@@ + @ + |@ + |@ + o@ + @@ + oo@ + ||@ + $@ + $@ + @@ + @ + _|_|_@ + _|_|_@ + | | @ + @@ + @ + |_|_@ + (|_| @ + _|_|)@ + | | @@ + @ + () / @ + / @ + / ()@ + @@ + @ + () @ + /\/@ + \/\@ + @@ + o@ + /@ + $@ + $@ + @@ + @ + /@ + | @ + | @ + \@@ + @ + \ @ + |@ + |@ + / @@ + @ + \|/ @ + --*--@ + /|\ @ + @@ + @ + | @ + --+--@ + | @ + @@ + @ + @ + @ + o@ + /@@ + @ + @ + ----@ + $ @ + @@ + @ + @ + @ + o@ + @@ + @ + /@ + / @ + / @ + @@ + _ @ + / \ @ + | |@ + \_/ @ + @@ + ,@ + /|@ + |@ + |@ + @@ + _ @ + / )@ + / @ + /__@ + @@ + ____@ + __/@ + $ \@ + \__/@ + @@ + @ + | | @ + |__|_@ + | @ + @@ + ___@ + |__ @ + $ \@ + \__/@ + @@ + _ @ + /_ @ + |/ \@ + \_/@ + @@ + ____@ + $/@ + / @ + / @ + @@ + __ @ + (__)@ + / \@ + \__/@ + @@ + __ @ + / |@ + \_/|@ + |@ + @@ + @ + o@ + $@ + o@ + @@ + @ + o@ + $@ + o@ + /@@ + @ + /@ + < @ + \@ + @@ + @ + ____@ + ____@ + $ @ + @@ + @ + \ @ + >@ + / @ + @@ + __ @ + )@ + | @ + o @ + @@ + ____ @ + / __,\ @ + | / | |@ + | \_/|/ @ + \____/ @@ + __, @ + / | @ + | | @ + \_/\_/@ + @@ + , _ @ + /|/_)@ + | \@ + |(_/@ + @@ + __$ @ + / () @ + | $ @ + \___/@ + @@ + $___ @ + (| \ @ + | |@ + (\__/ @ + @@ + __$ @ + / () @ + >-$ @ + \___/@ + @@ + $_____@ + () |_$@ + /| |@ + (/ @ + @@ + @ + () |@ + /\/|@ + /(_/ @ + @@ + , @ + /| | @ + |--| @ + | |)@ + @@ + @ + |\ @ + _ |/ @ + \_/\/@ + @@ + @ + /| @ + | | @ + \|/@ + (| @@ + , , @ + /|_/ @ + |\ @ + | \_/@ + @@ + $ @ + \_|) @ + | @ + (\__/@ + @@ + ,_ _ @ + /| | | @ + | | | @ + | | |_/@ + @@ + , @ + /|/\ @ + | | @ + | |_/@ + @@ + __ @ + /\_\/@ + | |@ + \__/ @ + @@ + , _ @ + /|/ \@ + |__/@ + | $@ + @@ + __ @ + /__\ @ + |/ \| @ + \__/\_/@ + @@ + , _ @ + /|/ \ @ + |__/ @ + | \_/@ + @@ + @ + () @ + /\ @ + /(_)@ + @@ + $_____@ + () | @ + $| @ + (/ @ + @@ + @ + (| | @ + | | @ + \_/\_/@ + @@ + @ + (| |_/@ + | | @ + \/ @ + @@ + @ + (| | |_/@ + | | | @ + \/ \/ @ + @@ + @ + (\ / @ + >< @ + _/ \_/@ + @@ + @ + (| | @ + | | @ + \/|/@ + (| @@ + _ @ + / ) @ + / @ + /__/@ + (| @@ + _@ + | @ + | @ + | @ + |_@@ + @ + \ @ + \ @ + \@ + @@ + _ @ + |@ + |@ + |@ + _|@@ + /\@ + $@ + $@ + $@ + @@ + @ + @ + @ + $ @ + ____@@ + o@ + \@ + $@ + $@ + @@ + @ + _, @ + / | @ + \/|_/@ + @@ + @ + |) @ + |/\_@ + \/ @ + @@ + @ + _ @ + / @ + \__/@ + @@ + @ + _| @ + / | @ + \/|_/@ + @@ + @ + _ @ + |/ @ + |_/@ + @@ + @ + |\ @ + |/ @ + |_/@ + |) @@ + @ + _, @ + / | @ + \/|/@ + (| @@ + @ + |) @ + |/\ @ + | |/@ + @@ + @ + o @ + | @ + |/@ + @@ + @ + o @ + | @ + |/@ + (| @@ + @ + |) @ + |/) @ + | \/@ + @@ + @ + |\ @ + |/ @ + |_/@ + @@ + @ + @ + /|/|/| @ + $| | |_/@ + @@ + @ + @ + /|/| @ + $| |_/@ + @@ + @ + _ @ + / \_@ + \_/ @ + @@ + @ + @ + |/\_@ + |_/ @ + (| @@ + @ + _, @ + / | @ + \/|_/@ + |) @@ + @ + ,_ @ + / | @ + $ |/@ + @@ + @ + , @ + / \_@ + $\/ @ + @@ + @ + _|_ @ + | @ + |_/@ + @@ + @ + @ + | | @ + $\/|_/@ + @@ + @ + @ + | |_@ + $\/ @ + @@ + @ + @ + | | |_@ + $\/ \/ @ + @@ + @ + @ + /\/ @ + $/\/@ + @@ + @ + @ + | | @ + $\/|/@ + (| @@ + @ + __ @ + / / _@ + $/_/ @ + (| @@ + @ + /@ + _| @ + | @ + \@@ + |@ + |@ + |@ + |@ + |@@ + @ + \ @ + |_@ + | @ + / @@ + /\/@ + $ @ + $ @ + $ @ + @@ + o o @ + __, @ + / | @ + \_/\_/@ + @@ + o o @ + __ @ + /\_\/@ + \__/ @ + @@ + /\/ @ + @ + (| | @ + \_/\_/@ + @@ + o o @ + _, @ + / | @ + \/|_/@ + @@ + o o @ + _ @ + / \_@ + \_/ @ + @@ + o o @ + @ + | | @ + $\/|_/@ + @@ + _ @ + | \@ + | <@ + |_/@ + | @@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + $@@ +161 INVERTED EXCLAMATION MARK + @ + o@ + |@ + |@ + @@ +162 CENT SIGN + @ + _|_ @ + / | @ + \_|_/@ + | @@ +163 POUND SIGN + _ @ + _|_` @ + | @ + (\__/@ + @@ +164 CURRENCY SIGN + \ _ /@ + / \ @ + \_/ @ + / \@ + @@ +165 YEN SIGN + \ /@ + _\_/_@ + __|__@ + | @ + @@ +166 BROKEN BAR + |@ + |@ + @ + |@ + |@@ +167 SECTION SIGN + _@ + ( @ + ()@ + _)@ + @@ +168 DIAERESIS + o o@ + $ $@ + $ $@ + $ $@ + @@ +169 COPYRIGHT SIGN + ____ @ + / __ \ @ + | / () |@ + | \__/ |@ + \____/ @@ +170 FEMININE ORDINAL INDICATOR + _, @ + (_|_@ + --- @ + $ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + //@ + << @ + \\@ + @@ +172 NOT SIGN + @ + __ @ + |@ + $ @ + @@ +173 SOFT HYPHEN + @ + @ + ---@ + $ @ + @@ +174 REGISTERED SIGN + ____ @ + / ,_ \ @ + | /|_) |@ + | |\/ |@ + \____/ @@ +175 MACRON + ____@ + $ @ + $ @ + $ @ + @@ +176 DEGREE SIGN + ()@ + $@ + $@ + $@ + @@ +177 PLUS-MINUS SIGN + @ + | @ + --+--@ + __|__@ + @@ +178 SUPERSCRIPT TWO + _ @ + )@ + /_@ + $@ + @@ +179 SUPERSCRIPT THREE + ___@ + _/@ + __)@ + $ @ + @@ +180 ACUTE ACCENT + /@ + $@ + $@ + $@ + @@ +181 MICRO SIGN + @ + @ + | | @ + |\/|_/@ + | @@ +182 PILCROW SIGN + ___ @ + / | |@ + \_| |@ + | |@ + @@ +183 MIDDLE DOT + @ + @ + $O$@ + $ @ + @@ +184 CEDILLA + @ + @ + @ + $ @ + _)@@ +185 SUPERSCRIPT ONE + ,@ + /|@ + |@ + $@ + @@ +186 MASCULINE ORDINAL INDICATOR + __@ + (_)@ + ---@ + $ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + @ + \\ @ + >>@ + // @ + @@ +188 VULGAR FRACTION ONE QUARTER + , @ + /| / @ + |/|_|_@ + / | @ + @@ +189 VULGAR FRACTION ONE HALF + , @ + /| /_ @ + |/ )@ + / /_@ + @@ +190 VULGAR FRACTION THREE QUARTERS + ___ @ + _/ / @ + __)/|_|_@ + / | @ + @@ +191 INVERTED QUESTION MARK + @ + o @ + | @ + (__@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + \ @ + __, @ + / | @ + \_/\_/@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + / @ + __, @ + / | @ + \_/\_/@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\ @ + __, @ + / | @ + \_/\_/@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/ @ + __, @ + / | @ + \_/\_/@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + o o @ + __, @ + / | @ + \_/\_/@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _ @ + (_) @ + / | @ + \_/\_/@ + @@ +198 LATIN CAPITAL LETTER AE + __,__$ @ + / | () @ + | |-$ @ + \_/\___/@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + __$ @ + / () @ + | $ @ + \___/@ + _) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + \ @ + __$ @ + <_() @ + <___/@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + / @ + __$ @ + <_() @ + <___/@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\ @ + __$ @ + <_() @ + <___/@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + o o @ + __$ @ + <_() @ + <___/@ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + \ @ + |\ @ + _ |/ @ + \_/\/@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + / @ + |\ @ + _ |/ @ + \_/\/@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + /\ @ + |\ @ + _ |/ @ + \_/\/@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + o o @ + |\ @ + _ |/ @ + \_/\/@ + @@ +208 LATIN CAPITAL LETTER ETH + ___ @ + (| \ @ + -|- |@ + (\__/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + ,/\/ @ + /|/\ @ + | | @ + | |_/@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + \ @ + __ @ + /\_\/@ + \__/ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + / @ + __ @ + /\_\/@ + \__/ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\ @ + __ @ + /\_\/@ + \__/ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/ @ + __ @ + /\_\/@ + \__/ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + o o @ + __ @ + /\_\/@ + \__/ @ + @@ +215 MULTIPLICATION SIGN + @ + $\/$@ + $/\$@ + $ $@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + __/ @ + /\/\/@ + | / |@ + /__/ @ + / @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + \ @ + @ + (| | @ + \_/\_/@ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + / @ + @ + (| | @ + \_/\_/@ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + /\ @ + @ + (| | @ + \_/\_/@ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + /\/ @ + @ + (| | @ + \_/\_/@ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + / @ + @ + (| | @ + \/|/@ + (| @@ +222 LATIN CAPITAL LETTER THORN + , @ + /|__ @ + |__)@ + | $@ + @@ +223 LATIN SMALL LETTER SHARP S + _ @ + | \@ + | <@ + |_/@ + | @@ +224 LATIN SMALL LETTER A WITH GRAVE + \ @ + _, @ + / | @ + \/|_/@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + / @ + _, @ + / | @ + \/|_/@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\ @ + _, @ + / | @ + \/|_/@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/ @ + _, @ + / | @ + \/|_/@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + o o @ + _, @ + / | @ + \/|_/@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + () @ + _, @ + / | @ + \/|_/@ + @@ +230 LATIN SMALL LETTER AE + @ + _,_ @ + / |/ @ + \/|_/@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + _ @ + / @ + \__/@ + _) @@ +232 LATIN SMALL LETTER E WITH GRAVE + \ @ + _ @ + |/ @ + |_/@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + / @ + _ @ + |/ @ + |_/@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + /\ @ + _ @ + |/ @ + |_/@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + o o @ + _ @ + |/ @ + |__/@ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + \ @ + @ + | @ + |/@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + / @ + @ + | @ + |/@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + /\@ + @ + | @ + |/@ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + o o @ + @ + | @ + |__/@ + @@ +240 LATIN SMALL LETTER ETH + \, @ + '\ @ + / |@ + \/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/ @ + @ + /|/| @ + $| |_/@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + \ @ + _ @ + / \_@ + \_/ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + / @ + _ @ + / \_@ + \_/ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + /\ @ + _ @ + / \_@ + \_/ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/ @ + _ @ + / \_@ + \_/ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + o o @ + _ @ + / \_@ + \_/ @ + @@ +247 DIVISION SIGN + @ + O @ + ---@ + O @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + __/ @ + / /\_@ + \/_/ @ + / @@ +249 LATIN SMALL LETTER U WITH GRAVE + \ @ + @ + | | @ + $\/|_/@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + / @ + @ + | | @ + $\/|_/@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\ @ + @ + | | @ + $\/|_/@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + o o @ + @ + | | @ + $\/|_/@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + / @ + @ + | | @ + $\/|/@ + (| @@ +254 LATIN SMALL LETTER THORN + @ + |) @ + |/\_@ + |_/ @ + (| @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + o o @ + @ + | | @ + $\/|/@ + (| @@ diff --git a/externals/figlet/fonts/smshadow.flf b/externals/figlet/fonts/smshadow.flf new file mode 100644 index 0000000000..7e1329f4c2 --- /dev/null +++ b/externals/figlet/fonts/smshadow.flf @@ -0,0 +1,899 @@ +flf2a$ 4 3 14 0 10 0 1920 96 +SmShadow by Glenn Chappell 4/93 -- based on Small +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $$@ + $$@ + $$@ + $$@@ + |$@ + _|$@ + _)$@ + @@ + | )$@ + V V$ @ + @ + @@ + | |$ @ + _ |_ |_|$@ + _ |_ |_|$@ + _| _|$ @@ + |$ @ + (_-<$@ + _ _/$@ + _|$ @@ + _) /$ @ + /$ @ + _/ _)$@ + @@ + _|$ @ + _| _|$@ + \____|$ @ + @@ + )$@ + /$ @ + @ + @@ + /$@ + |$ @ + |$ @ + \_\$@@ + \ \$ @ + |$@ + |$@ + _/$ @@ + \ \ /$ @ + _ _|$@ + _/ _\$ @ + @@ + |$ @ + __ __|$@ + _|$ @ + @@ + @ + @ + )$@ + /$ @@ + @ + ____|$@ + @ + @@ + @ + @ + _)$@ + @@ + /$@ + /$ @ + _/$ @ + @@ + \$ @ + ( |$@ + \__/$ @ + @@ + _ |$@ + |$@ + _|$@ + @@ + _ )$@ + /$ @ + ___|$@ + @@ + __ /$@ + _ \$@ + ___/$@ + @@ + | |$ @ + __ _|$@ + _|$ @ + @@ + __|$@ + __ \$@ + ___/$@ + @@ + /$ @ + _ \$@ + \___/$@ + @@ + __ /$@ + /$ @ + _/$ @ + @@ + _ )$@ + _ \$@ + \___/$@ + @@ + _ \$@ + \_ /$@ + _/$ @ + @@ + _)$@ + @ + _)$@ + @@ + _)$@ + @ + )$@ + /$ @@ + /$@ + < <$ @ + \_\$@ + @@ + @ + ____|$@ + ____|$@ + @@ + \ \$ @ + > >$@ + _/$ @ + @@ + __ \$@ + _/$@ + _)$ @ + @@ + __ \$ @ + / _` |$@ + \__,_|$@ + \____/$ @@ + \$ @ + _ \$ @ + _/ _\$@ + @@ + _ )$@ + _ \$@ + ___/$@ + @@ + __|$@ + ($ @ + \___|$@ + @@ + _ \$ @ + | |$@ + ___/$ @ + @@ + __|$@ + _|$ @ + ___|$@ + @@ + __|$@ + _|$ @ + _|$ @ + @@ + __|$@ + (_ |$@ + \___|$@ + @@ + | |$@ + __ |$@ + _| _|$@ + @@ + _ _|$@ + |$ @ + ___|$@ + @@ + |$@ + \ |$@ + \__/$ @ + @@ + | /$@ + . <$ @ + _|\_\$@ + @@ + |$ @ + |$ @ + ____|$@ + @@ + \ |$@ + |\/ |$@ + _| _|$@ + @@ + \ |$@ + . |$@ + _|\_|$@ + @@ + _ \$ @ + ( |$@ + \___/$ @ + @@ + _ \$@ + __/$@ + _|$ @ + @@ + _ \$ @ + ( |$@ + \__\_\$@ + @@ + _ \$@ + /$@ + _|_\$@ + @@ + __|$@ + \__ \$@ + ____/$@ + @@ + __ __|$@ + |$ @ + _|$ @ + @@ + | |$@ + | |$@ + \__/$ @ + @@ + \ \ /$@ + \ \ /$ @ + \_/$ @ + @@ + \ \ /$@ + \ \ \ /$ @ + \_/\_/$ @ + @@ + \ \ /$@ + > <$ @ + _/\_\$@ + @@ + \ \ /$@ + \ /$ @ + _|$ @ + @@ + __ /$@ + /$ @ + ____|$@ + @@ + _|$@ + |$ @ + |$ @ + __|$@@ + \ \$ @ + \ \$ @ + \_\$@ + @@ + _ |$@ + |$@ + |$@ + __|$@@ + \$ @ + /\|$@ + @ + @@ + @ + @ + @ + ____|$@@ + )$@ + \|$@ + @ + @@ + @ + _` |$@ + \__,_|$@ + @@ + |$ @ + _ \$@ + _.__/$@ + @@ + @ + _|$@ + \__|$@ + @@ + |$@ + _` |$@ + \__,_|$@ + @@ + @ + -_)$@ + \___|$@ + @@ + _|$@ + _|$@ + _|$ @ + @@ + @ + _` |$@ + \__, |$@ + ____/$ @@ + |$ @ + \$ @ + _| _|$@ + @@ + _)$@ + |$@ + _|$@ + @@ + _)$@ + |$@ + |$@ + __/$ @@ + |$ @ + | /$@ + _\_\$@ + @@ + |$@ + |$@ + _|$@ + @@ + @ + ` \$ @ + _|_|_|$@ + @@ + @ + \$ @ + _| _|$@ + @@ + @ + _ \$@ + \___/$@ + @@ + @ + _ \$@ + .__/$@ + _|$ @@ + @ + _` |$@ + \__, |$@ + _|$@@ + @ + _|$@ + _|$ @ + @@ + @ + (_-<$@ + ___/$@ + @@ + |$ @ + _|$@ + \__|$@ + @@ + @ + | |$@ + \_,_|$@ + @@ + @ + \ \ /$@ + \_/$ @ + @@ + @ + \ \ \ /$@ + \_/\_/$ @ + @@ + @ + \ \ /$@ + _\_\$@ + @@ + @ + | |$@ + \_, |$@ + ___/$ @@ + @ + _ /$@ + ___|$@ + @@ + /$@ + _ |$ @ + |$ @ + \_\$@@ + |$@ + |$@ + |$@ + _|$@@ + \ \$ @ + |_$@ + |$ @ + _/$ @@ + \ |$@ + /\/$ @ + @ + @@ + _) \_)$@ + _ \$ @ + / _\$@ + @@ + _) _)$@ + __ \$@ + \____/$@ + @@ + _) _)$@ + | |$@ + \__/$ @ + @@ + _) _)$@ + _` |$@ + \__,_|$@ + @@ + _) _)$@ + _ \$@ + \___/$@ + @@ + _) _)$@ + | |$@ + \_,_|$@ + @@ + _ \$@ + |< <$@ + |__/$@ + _|$ @@ +160 NO-BREAK SPACE + $$@ + $$@ + $$@ + $$@@ +161 INVERTED EXCLAMATION MARK + _)$@ + |$@ + _|$@ + @@ +162 CENT SIGN + |$ @ + _)$@ + \ _)$@ + |$ @@ +163 POUND SIGN + _\$ @ + _ _|$ @ + _,___|$@ + @@ +164 CURRENCY SIGN + \ . /$@ + _ \$@ + \/ /$@ + @@ +165 YEN SIGN + \ \ /$ @ + __ __|$@ + __ __|$@ + _|$ @@ +166 BROKEN BAR + |$@ + _|$@ + |$@ + _|$@@ +167 SECTION SIGN + _)$@ + \ \$ @ + \ \/$ @ + __/$ @@ +168 DIAERESIS + _) _)$@ + @ + @ + @@ +169 COPYRIGHT SIGN + \$ @ + _| \$@ + \ \__| /$@ + \____/$ @@ +170 FEMININE ORDINAL INDICATOR + _` |$@ + \__,_|$@ + _____|$@ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + / /$@ + < < <$ @ + \_\_\$@ + @@ +172 NOT SIGN + ____ |$@ + _|$@ + @ + @@ +173 SOFT HYPHEN + @ + ___|$@ + @ + @@ +174 REGISTERED SIGN + \$ @ + -) \$@ + \ |\\ /$@ + \____/$ @@ +175 MACRON + ___|$@ + @ + @ + @@ +176 DEGREE SIGN + .\$@ + \_/$@ + @ + @@ +177 PLUS-MINUS SIGN + |$ @ + _ _|$@ + _|$ @ + _____|$@@ +178 SUPERSCRIPT TWO + _ )$@ + __|$@ + @ + @@ +179 SUPERSCRIPT THREE + _ /$@ + __)$@ + @ + @@ +180 ACUTE ACCENT + _/$@ + @ + @ + @@ +181 MICRO SIGN + @ + | |$@ + .,_|$@ + _|$ @@ +182 PILCROW SIGN + |$@ + \_ | |$@ + _|_|$@ + @@ +183 MIDDLE DOT + @ + _)$@ + @ + @@ +184 CEDILLA + @ + @ + @ + _)$@@ +185 SUPERSCRIPT ONE + _ |$@ + _|$@ + @ + @@ +186 MASCULINE ORDINAL INDICATOR + _ \$@ + \___/$@ + ____|$@ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + \ \ \$ @ + > > >$@ + _/_/$ @ + @@ +188 VULGAR FRACTION ONE QUARTER + _ | /$ @ + _| /_' |$@ + _/ _|$@ + @@ +189 VULGAR FRACTION ONE HALF + _ | /$ @ + _| /_ )$@ + _/ __|$@ + @@ +190 VULGAR FRACTION THREE QUARTERS + _ / /$ @ + __) /_' |$@ + _/ _|$@ + @@ +191 INVERTED QUESTION MARK + _)$ @ + /$ @ + \___|$@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + \_\$ @ + --\$ @ + _/\_\$@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + _/$ @ + --\$ @ + _/\_\$@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + /\\$ @ + --\$ @ + _/\_\$@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + / _/$ @ + --\$ @ + _/\_\$@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _) \_)$@ + _ \$ @ + / _\$@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + ( )$ @ + _ \$ @ + _/ _\$@ + @@ +198 LATIN CAPITAL LETTER AE + , __|$@ + _ _|$ @ + _/ ___|$@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + |$@ + ($ @ + \___|$@ + _)$ @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + \_\$@ + -<$@ + __<$@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + _/$@ + -<$@ + __<$@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + /\\$@ + -<$@ + __<$@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _) _)$@ + -<$ @ + __<$ @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + \_\$ @ + _ _|$@ + ___|$@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + _/$ @ + _ _|$@ + ___|$@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + /\\$ @ + _ _|$@ + ___|$@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _) _)$@ + _ _|$ @ + ___|$ @ + @@ +208 LATIN CAPITAL LETTER ETH + _ \$ @ + _ _| |$@ + ___/$ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + / _/$@ + \ |$@ + _|\_|$@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + \_\$ @ + __ \$@ + \____/$@ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + _/$ @ + __ \$@ + \____/$@ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + /\\$ @ + __ \$@ + \____/$@ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + / _/$ @ + __ \$@ + \____/$@ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _) _)$@ + __ \$@ + \____/$@ + @@ +215 MULTIPLICATION SIGN + \ \$@ + , '$@ + \/\/$@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _ /\$ @ + ( / |$@ + \_/__/$ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + \_\$ @ + | |$@ + \__/$ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + _/$ @ + | |$@ + \__/$ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + /\\$ @ + | |$@ + \__/$ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _) _)$@ + | |$@ + \__/$ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + _/$ @ + \ \ /$@ + _|$ @ + @@ +222 LATIN CAPITAL LETTER THORN + |$ @ + -_)$@ + _|$ @ + @@ +223 LATIN SMALL LETTER SHARP S + _ \$@ + |< <$@ + |__/$@ + _|$ @@ +224 LATIN SMALL LETTER A WITH GRAVE + \_\$ @ + _` |$@ + \__,_|$@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + _/$ @ + _` |$@ + \__,_|$@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + /\\$ @ + _` |$@ + \__,_|$@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + / _/$ @ + _` |$@ + \__,_|$@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _) _)$@ + _` |$@ + \__,_|$@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + ( )$ @ + _` |$@ + \__,_|$@ + @@ +230 LATIN SMALL LETTER AE + @ + _` -_)$@ + \__,___|$@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + _|$@ + \__|$@ + _)$@@ +232 LATIN SMALL LETTER E WITH GRAVE + \_\$ @ + -_)$@ + \___|$@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + _/$ @ + -_)$@ + \___|$@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + /\\$ @ + -_)$@ + \___|$@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _) _)$@ + -_)$ @ + \___|$ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + \_\$@ + |$@ + _|$@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + _/$@ + |$@ + _|$@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + /\\$@ + |$ @ + _|$ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _) _)$@ + |$ @ + _|$ @ + @@ +240 LATIN SMALL LETTER ETH + , \'$@ + _` |$@ + \___/$ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + / _/$ @ + ' \$ @ + _| _|$@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + \_\$ @ + _ \$@ + \___/$@ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + _/$ @ + _ \$@ + \___/$@ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + /\\$ @ + _ \$@ + \___/$@ + @@ +245 LATIN SMALL LETTER O WITH TILDE + / _/$@ + _ \$@ + \___/$@ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _) _)$@ + _ \$@ + \___/$@ + @@ +247 DIVISION SIGN + _)$ @ + ___|$@ + _)$ @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + /\$@ + \_/_/$@ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + \_\$ @ + | |$@ + \_,_|$@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + _/$ @ + | |$@ + \_,_|$@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + /\\$ @ + | |$@ + \_,_|$@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _) _)$@ + | |$@ + \_,_|$@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + _/$ @ + | |$@ + \_, |$@ + ___/$ @@ +254 LATIN SMALL LETTER THORN + |$ @ + '_ \$@ + .__/$@ + _|$ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _) _)$@ + | |$@ + \_, |$@ + ___/$ @@ diff --git a/externals/figlet/fonts/smslant.flf b/externals/figlet/fonts/smslant.flf new file mode 100644 index 0000000000..24284b8465 --- /dev/null +++ b/externals/figlet/fonts/smslant.flf @@ -0,0 +1,1097 @@ +flf2a$ 5 4 14 15 10 0 22415 96 +SmSlant by Glenn Chappell 6/93 - based on Small & Slant +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + + $@ + $ @ + $ @ + $ @ +$ @@ + __@ + / /@ + /_/ @ +(_) @ + @@ + _ _ @ +( | )@ +|/|/ @ +$ @ + @@ + ____ @ + __/ / /_@ + /_ . __/@ +/_ __/ @ + /_/_/ @@ + @ + _//@ + (_-<@ +/ __/@ +// @@ + _ __@ +(_)_/_/@ + _/_/_ @ +/_/ (_)@ + @@ + ____ @ + / __/___@ + > _/_ _/@ +|_____/ @ + @@ + _ @ +( )@ +|/ @ +$ @ + @@ + __@ + _/_/@ + / / @ +/ / @ +|_| @@ + _ @ + | |@ + / /@ + _/_/ @ +/_/ @@ + @ + _/|@ +> _<@ +|/ @ + @@ + __ @ + __/ /_@ +/_ __/@ + /_/ @ + @@ + @ + @ + _ @ +( )@ +|/ @@ + @ + ____@ +/___/@ + $ @ + @@ + @ + @ + _ @ +(_)@ + @@ + __@ + _/_/@ + _/_/ @ +/_/ @ + @@ + ___ @ + / _ \@ +/ // /@ +\___/ @ + @@ + ___@ + < /@ + / / @ +/_/ @ + @@ + ___ @ + |_ |@ + / __/ @ +/____/ @ + @@ + ____@ + |_ /@ + _/_ < @ +/____/ @ + @@ + ____@ + / / /@ +/_ _/@ + /_/ @ + @@ + ____@ + / __/@ + /__ \ @ +/____/ @ + @@ + ____@ + / __/@ +/ _ \ @ +\___/ @ + @@ + ____@ +/_ /@ + / / @ +/_/ @ + @@ + ___ @ + ( _ )@ +/ _ |@ +\___/ @ + @@ + ___ @ + / _ \@ + \_, /@ +/___/ @ + @@ + _ @ + (_)@ + _ @ +(_) @ + @@ + _ @ + (_)@ + _ @ +( ) @ +|/ @@ + __@ + / /@ +< < @ + \_\@ + @@ + @ + ____@ + /___/@ +/___/ @ + @@ +__ @ +\ \ @ + > >@ +/_/ @ + @@ + ___ @ +/__ \@ + /__/@ +(_) @ + @@ + _____ @ + / ___ \@ +/ / _ `/@ +\ \_,_/ @ + \___/ @@ + ___ @ + / _ |@ + / __ |@ +/_/ |_|@ + @@ + ___ @ + / _ )@ + / _ |@ +/____/ @ + @@ + _____@ + / ___/@ +/ /__ @ +\___/ @ + @@ + ___ @ + / _ \@ + / // /@ +/____/ @ + @@ + ____@ + / __/@ + / _/ @ +/___/ @ + @@ + ____@ + / __/@ + / _/ @ +/_/ @ + @@ + _____@ + / ___/@ +/ (_ / @ +\___/ @ + @@ + __ __@ + / // /@ + / _ / @ +/_//_/ @ + @@ + ____@ + / _/@ + _/ / @ +/___/ @ + @@ + __@ + __ / /@ +/ // / @ +\___/ @ + @@ + __ __@ + / //_/@ + / ,< @ +/_/|_| @ + @@ + __ @ + / / @ + / /__@ +/____/@ + @@ + __ ___@ + / |/ /@ + / /|_/ / @ +/_/ /_/ @ + @@ + _ __@ + / |/ /@ + / / @ +/_/|_/ @ + @@ + ____ @ + / __ \@ +/ /_/ /@ +\____/ @ + @@ + ___ @ + / _ \@ + / ___/@ +/_/ @ + @@ + ____ @ + / __ \@ +/ /_/ /@ +\___\_\@ + @@ + ___ @ + / _ \@ + / , _/@ +/_/|_| @ + @@ + ____@ + / __/@ + _\ \ @ +/___/ @ + @@ + ______@ +/_ __/@ + / / @ +/_/ @ + @@ + __ __@ + / / / /@ +/ /_/ / @ +\____/ @ + @@ + _ __@ + | | / /@ + | |/ / @ + |___/ @ + @@ + _ __@ + | | /| / /@ + | |/ |/ / @ + |__/|__/ @ + @@ + _ __@ + | |/_/@ + _> < @ +/_/|_| @ + @@ + __ __@ + \ \/ /@ + \ / @ + /_/ @ + @@ + ____@ + /_ /@ + / /_@ + /___/@ + @@ + ___@ + / _/@ + / / @ + / / @ +/__/ @@ +__ @ +\ \ @ + \ \ @ + \_\@ + @@ + ___@ + / /@ + / / @ + _/ / @ +/__/ @@ + //|@ +|/||@ + $ @ +$ @ + @@ + @ + @ + @ + ____@ +/___/@@ + _ @ +( )@ + V @ +$ @ + @@ + @ + ___ _@ +/ _ `/@ +\_,_/ @ + @@ + __ @ + / / @ + / _ \@ +/_.__/@ + @@ + @ + ____@ +/ __/@ +\__/ @ + @@ + __@ + ___/ /@ +/ _ / @ +\_,_/ @ + @@ + @ + ___ @ +/ -_)@ +\__/ @ + @@ + ___@ + / _/@ + / _/ @ +/_/ @ + @@ + @ + ___ _@ + / _ `/@ + \_, / @ +/___/ @@ + __ @ + / / @ + / _ \@ +/_//_/@ + @@ + _ @ + (_)@ + / / @ +/_/ @ + @@ + _ @ + (_)@ + / / @ + __/ / @ +|___/ @@ + __ @ + / /__@ + / '_/@ +/_/\_\ @ + @@ + __@ + / /@ + / / @ +/_/ @ + @@ + @ + __ _ @ + / ' \@ +/_/_/_/@ + @@ + @ + ___ @ + / _ \@ +/_//_/@ + @@ + @ + ___ @ +/ _ \@ +\___/@ + @@ + @ + ___ @ + / _ \@ + / .__/@ +/_/ @@ + @ + ___ _@ +/ _ `/@ +\_, / @ + /_/ @@ + @ + ____@ + / __/@ +/_/ @ + @@ + @ + ___@ + (_-<@ +/___/@ + @@ + __ @ + / /_@ +/ __/@ +\__/ @ + @@ + @ + __ __@ +/ // /@ +\_,_/ @ + @@ + @ + _ __@ +| |/ /@ +|___/ @ + @@ + @ + _ __@ +| |/|/ /@ +|__,__/ @ + @@ + @ + __ __@ + \ \ /@ +/_\_\ @ + @@ + @ + __ __@ + / // /@ + \_, / @ +/___/ @@ + @ + ___@ +/_ /@ +/__/@ + @@ + __@ + _/_/@ +_/ / @ +/ / @ +\_\ @@ + __@ + / /@ + / / @ + / / @ +/_/ @@ + __ @ + \ \ @ + / /_@ + _/_/ @ +/_/ @@ + /\//@ +//\/ @ + $ @ +$ @ + @@ + _ _ @ + (_)(_)@ + / - | @ +/_/|_| @ + @@ + _ _ @ + (_)_(_)@ +/ __ \ @ +\____/ @ + @@ + _ _ @ + (_) (_)@ +/ /_/ / @ +\____/ @ + @@ + _ _ @ + (_)(_)@ +/ _ `/ @ +\_,_/ @ + @@ + _ _ @ + (_)(_)@ +/ _ \ @ +\___/ @ + @@ + _ _ @ + (_)(_)@ +/ // / @ +\_,_/ @ + @@ + ____ @ + / _ )@ + / /< < @ + / //__/ @ +/_/ @@ +160 NO-BREAK SPACE + $@ + $ @ + $ @ + $ @ +$ @@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + / / @ +/_/ @ + @@ +162 CENT SIGN + @ + __//@ +/ __/@ +\ _/ @ +// @@ +163 POUND SIGN + __ @ + __/__|@ + /_ _/_ @ +(_,___/ @ + @@ +164 CURRENCY SIGN + /|_/|@ + | . / @ + /_ | @ +|/ |/ @ + @@ +165 YEN SIGN + ____@ + _| / /@ + /_ __/@ +/_ __/ @ + /_/ @@ +166 BROKEN BAR + __@ + / /@ + /_/ @ + / / @ +/_/ @@ +167 SECTION SIGN + __ @ + _/ _)@ + / | | @ + | |_/ @ +(__/ @@ +168 DIAERESIS + _ _ @ +(_) (_)@ + $ $ @ +$ $ @ + @@ +169 COPYRIGHT SIGN + ____ @ + / ___\ @ + / / _/ |@ +| |__/ / @ + \____/ @@ +170 FEMININE ORDINAL INDICATOR + ___ _@ + / _ `/@ + _\_,_/ @ +/____/ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ +< < < @ + \_\_\@ + @@ +172 NOT SIGN + @ + ____@ +/_ /@ + /_/ @ + @@ +173 SOFT HYPHEN + @ + ___@ +/__/@ + $ @ + @@ +174 REGISTERED SIGN + ____ @ + / __ \ @ + / / -) |@ +| //\\ / @ + \____/ @@ +175 MACRON + ____@ +/___/@ + $ @ +$ @ + @@ +176 DEGREE SIGN + __ @ + /. |@ +|__/ @ + $ @ + @@ +177 PLUS-MINUS SIGN + __ @ + __/ /_@ + /_ __/@ + __/_/_ @ +/_____/ @@ +178 SUPERSCRIPT TWO + __ @ + |_ )@ +/__| @ + $ @ + @@ +179 SUPERSCRIPT THREE + ___@ + |_ /@ +/__) @ + $ @ + @@ +180 ACUTE ACCENT + __@ +/_/@ + $ @ +$ @ + @@ +181 MICRO SIGN + @ + __ __@ + / // /@ + / .,_/ @ +/_/ @@ +182 PILCROW SIGN + _____@ + / /@ +|_ / / @ +/_/_/ @ + @@ +183 MIDDLE DOT + @ + _ @ +(_)@ +$ @ + @@ +184 CEDILLA + @ + @ + @ + _ @ +/_)@@ +185 SUPERSCRIPT ONE + __@ + < /@ +/_/ @ +$ @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \@ + _\___/@ +/____/ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +____ @ +\ \ \ @ + > > >@ +/_/_/ @ + @@ +188 VULGAR FRACTION ONE QUARTER + __ __ @ + < /_/_/___@ +/_//_//_' /@ + /_/ /_/ @ + @@ +189 VULGAR FRACTION ONE HALF + __ __ @ + < /_/_/_ @ +/_//_/|_ )@ + /_/ /__| @ + @@ +190 VULGAR FRACTION THREE QUARTERS + ___ __ @ + |_ /_/_/___@ +/__)/_//_' /@ + /_/ /_/ @ + @@ +191 INVERTED QUESTION MARK + _ @ + _(_)@ +/ _/_@ +\___/@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + _\_\@ + / - |@ +/_/|_|@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __@ + _/_/@ + / - |@ +/_/|_|@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + //|@ + _|/||@ + / - | @ +/_/|_| @ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\//@ + _//\/ @ + / - | @ +/_/|_| @ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ + / - | @ +/_/|_| @ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + (())@ + / _ |@ + / __ |@ +/_/ |_|@ + @@ +198 LATIN CAPITAL LETTER AE + _______@ + / _ __/@ + / _ _/ @ +/_//___/ @ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + _____@ + / ___/@ +/ /__ @ +\___/ @ +/_) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + \_\@ + / -<@ +/__< @ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __@ + _/_/@ + / -< @ +/__< @ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + //|@ + |/||@ + / -< @ +/__< @ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_)(_)@ + / -< @ +/__< @ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + _\_\ @ + /_ __/@ +/____/ @ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __@ + __/_/@ + /_ __/@ +/____/ @ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //|@ + _|/||@ + /_ __/@ +/____/ @ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)(_)@ + /_ __/ @ +/____/ @ + @@ +208 LATIN CAPITAL LETTER ETH + ____ @ + _/ __ \@ +/_ _// /@ +/_____/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\//@ + __//\/ @ + / |/ / @ +/_/|__/ @ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + _\_\ @ +/ __ \@ +\____/@ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __@ + __/_/@ +/ __ \@ +\____/@ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ +/ __ \@ +\____/@ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\//@ + _//\/ @ +/ __ \ @ +\____/ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ +/ __ \ @ +\____/ @ + @@ +215 MULTIPLICATION SIGN + @ + /|/|@ + > < @ +|/|/ @ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + _____ @ + / _// \@ +/ //// /@ +\_//__/ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + __\_\ @ +/ /_/ /@ +\____/ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __@ + __ /_/@ +/ /_/ /@ +\____/ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //|@ + __|/||@ +/ /_/ /@ +\____/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ +/ /_/ / @ +\____/ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __@ +__/_/@ +\ V /@ + /_/ @ + @@ +222 LATIN CAPITAL LETTER THORN + __ @ + / / @ + / -_)@ +/_/ @ + @@ +223 LATIN SMALL LETTER SHARP S + ____ @ + / _ )@ + / /< < @ + / //__/ @ +/_/ @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + _\_\_@ +/ _ `/@ +\_,_/ @ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __@ + __/_/@ +/ _ `/@ +\_,_/ @ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + //|@ + _|/||@ +/ _ `/@ +\_,_/ @ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\//@ + _//\/ @ +/ _ `/ @ +\_,_/ @ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)(_)@ +/ _ `/ @ +\_,_/ @ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + _(())@ +/ _ `/@ +\_,_/ @ + @@ +230 LATIN SMALL LETTER AE + @ + ___ ___ @ +/ _ ` -_)@ +\_,____/ @ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + ____@ +/ __/@ +\__/ @ +/_) @@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + _\_\@ +/ -_)@ +\__/ @ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __@ + _/_/@ +/ -_)@ +\__/ @ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //|@ + |/||@ +/ -_)@ +\__/ @ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ +(_)(_)@ +/ -_) @ +\__/ @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + / / @ +/_/ @ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + / / @ +/_/ @ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //|@ + |/||@ + / / @ +/_/ @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ +(_)_(_)@ + / / @ +/_/ @ + @@ +240 LATIN SMALL LETTER ETH + _||_@ + __ || @ +/ _` | @ +\___/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\//@ + _//\/ @ + / _ \ @ +/_//_/ @ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + _\_\@ +/ _ \@ +\___/@ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __@ + _/_/@ +/ _ \@ +\___/@ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //|@ + _|/||@ +/ _ \ @ +\___/ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\//@ + _//\/ @ +/ _ \ @ +\___/ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)(_)@ +/ _ \ @ +\___/ @ + @@ +247 DIVISION SIGN + _ @ + _(_)@ +/___/@ +(_) @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + ___ @ +/ //\@ +\//_/@ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + __\_\@ +/ // /@ +\_,_/ @ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __@ + __/_/@ +/ // /@ +\_,_/ @ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + //|@ + _|/||@ +/ // /@ +\_,_/ @ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_)(_)@ +/ // / @ +\_,_/ @ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __@ + __/_/@ + / // /@ + \_, / @ +/___/ @@ +254 LATIN SMALL LETTER THORN + __ @ + / / @ + / _ \@ + / .__/@ +/_/ @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_)(_)@ + / // / @ + \_, / @ +/___/ @@ diff --git a/externals/figlet/fonts/standard.flf b/externals/figlet/fonts/standard.flf new file mode 100644 index 0000000000..bb15241b0a --- /dev/null +++ b/externals/figlet/fonts/standard.flf @@ -0,0 +1,2238 @@ +flf2a$ 6 5 16 15 15 0 24463 229 +Standard by Glenn Chappell & Ian Chai 3/93 -- based on Frank's .sig +Includes ISO Latin-1 +figlet release 2.1 -- 12 Aug 1994 +Modified for figlet 2.2 by John Cowan + to add Latin-{2,3,4,5} support (Unicode U+0100-017F). +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +--- + +Modified by Paul Burton 12/96 to include new parameter +supported by FIGlet and FIGWin. May also be slightly modified for better use +of new full-width/kern/smush alternatives, but default output is NOT changed. + +Modified 2012-05 by Patrick Gillespie (patorjk@gmail.com) to add the 0xCA0 character. + $@ + $@ + $@ + $@ + $@ + $@@ + _ @ + | |@ + | |@ + |_|@ + (_)@ + @@ + _ _ @ + ( | )@ + V V @ + $ @ + $ @ + @@ + _ _ @ + _| || |_ @ + |_ .. _|@ + |_ _|@ + |_||_| @ + @@ + _ @ + | | @ + / __)@ + \__ \@ + ( /@ + |_| @@ + _ __@ + (_)/ /@ + / / @ + / /_ @ + /_/(_)@ + @@ + ___ @ + ( _ ) @ + / _ \/\@ + | (_> <@ + \___/\/@ + @@ + _ @ + ( )@ + |/ @ + $ @ + $ @ + @@ + __@ + / /@ + | | @ + | | @ + | | @ + \_\@@ + __ @ + \ \ @ + | |@ + | |@ + | |@ + /_/ @@ + @ + __/\__@ + \ /@ + /_ _\@ + \/ @ + @@ + @ + _ @ + _| |_ @ + |_ _|@ + |_| @ + @@ + @ + @ + @ + _ @ + ( )@ + |/ @@ + @ + @ + _____ @ + |_____|@ + $ @ + @@ + @ + @ + @ + _ @ + (_)@ + @@ + __@ + / /@ + / / @ + / / @ + /_/ @ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @@ + _ @ + / |@ + | |@ + | |@ + |_|@ + @@ + ____ @ + |___ \ @ + __) |@ + / __/ @ + |_____|@ + @@ + _____ @ + |___ / @ + |_ \ @ + ___) |@ + |____/ @ + @@ + _ _ @ + | || | @ + | || |_ @ + |__ _|@ + |_| @ + @@ + ____ @ + | ___| @ + |___ \ @ + ___) |@ + |____/ @ + @@ + __ @ + / /_ @ + | '_ \ @ + | (_) |@ + \___/ @ + @@ + _____ @ + |___ |@ + / / @ + / / @ + /_/ @ + @@ + ___ @ + ( _ ) @ + / _ \ @ + | (_) |@ + \___/ @ + @@ + ___ @ + / _ \ @ + | (_) |@ + \__, |@ + /_/ @ + @@ + @ + _ @ + (_)@ + _ @ + (_)@ + @@ + @ + _ @ + (_)@ + _ @ + ( )@ + |/ @@ + __@ + / /@ + / / @ + \ \ @ + \_\@ + @@ + @ + _____ @ + |_____|@ + |_____|@ + $ @ + @@ + __ @ + \ \ @ + \ \@ + / /@ + /_/ @ + @@ + ___ @ + |__ \@ + / /@ + |_| @ + (_) @ + @@ + ____ @ + / __ \ @ + / / _` |@ + | | (_| |@ + \ \__,_|@ + \____/ @@ + _ @ + / \ @ + / _ \ @ + / ___ \ @ + /_/ \_\@ + @@ + ____ @ + | __ ) @ + | _ \ @ + | |_) |@ + |____/ @ + @@ + ____ @ + / ___|@ + | | @ + | |___ @ + \____|@ + @@ + ____ @ + | _ \ @ + | | | |@ + | |_| |@ + |____/ @ + @@ + _____ @ + | ____|@ + | _| @ + | |___ @ + |_____|@ + @@ + _____ @ + | ___|@ + | |_ @ + | _| @ + |_| @ + @@ + ____ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + @@ + _ _ @ + | | | |@ + | |_| |@ + | _ |@ + |_| |_|@ + @@ + ___ @ + |_ _|@ + | | @ + | | @ + |___|@ + @@ + _ @ + | |@ + _ | |@ + | |_| |@ + \___/ @ + @@ + _ __@ + | |/ /@ + | ' / @ + | . \ @ + |_|\_\@ + @@ + _ @ + | | @ + | | @ + | |___ @ + |_____|@ + @@ + __ __ @ + | \/ |@ + | |\/| |@ + | | | |@ + |_| |_|@ + @@ + _ _ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \___/ @ + @@ + ____ @ + | _ \ @ + | |_) |@ + | __/ @ + |_| @ + @@ + ___ @ + / _ \ @ + | | | |@ + | |_| |@ + \__\_\@ + @@ + ____ @ + | _ \ @ + | |_) |@ + | _ < @ + |_| \_\@ + @@ + ____ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + @@ + _____ @ + |_ _|@ + | | @ + | | @ + |_| @ + @@ + _ _ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + @@ + __ __@ + \ \ / /@ + \ \ / / @ + \ V / @ + \_/ @ + @@ + __ __@ + \ \ / /@ + \ \ /\ / / @ + \ V V / @ + \_/\_/ @ + @@ + __ __@ + \ \/ /@ + \ / @ + / \ @ + /_/\_\@ + @@ + __ __@ + \ \ / /@ + \ V / @ + | | @ + |_| @ + @@ + _____@ + |__ /@ + / / @ + / /_ @ + /____|@ + @@ + __ @ + | _|@ + | | @ + | | @ + | | @ + |__|@@ + __ @ + \ \ @ + \ \ @ + \ \ @ + \_\@ + @@ + __ @ + |_ |@ + | |@ + | |@ + | |@ + |__|@@ + /\ @ + |/\|@ + $ @ + $ @ + $ @ + @@ + @ + @ + @ + @ + _____ @ + |_____|@@ + _ @ + ( )@ + \|@ + $ @ + $ @ + @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ + _ @ + | |__ @ + | '_ \ @ + | |_) |@ + |_.__/ @ + @@ + @ + ___ @ + / __|@ + | (__ @ + \___|@ + @@ + _ @ + __| |@ + / _` |@ + | (_| |@ + \__,_|@ + @@ + @ + ___ @ + / _ \@ + | __/@ + \___|@ + @@ + __ @ + / _|@ + | |_ @ + | _|@ + |_| @ + @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |___/ @@ + _ @ + | |__ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ + _ @ + (_)@ + | |@ + | |@ + |_|@ + @@ + _ @ + (_)@ + | |@ + | |@ + _/ |@ + |__/ @@ + _ @ + | | __@ + | |/ /@ + | < @ + |_|\_\@ + @@ + _ @ + | |@ + | |@ + | |@ + |_|@ + @@ + @ + _ __ ___ @ + | '_ ` _ \ @ + | | | | | |@ + |_| |_| |_|@ + @@ + @ + _ __ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ + @ + ___ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ + @ + _ __ @ + | '_ \ @ + | |_) |@ + | .__/ @ + |_| @@ + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |_|@@ + @ + _ __ @ + | '__|@ + | | @ + |_| @ + @@ + @ + ___ @ + / __|@ + \__ \@ + |___/@ + @@ + _ @ + | |_ @ + | __|@ + | |_ @ + \__|@ + @@ + @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ + @ + __ __@ + \ \ / /@ + \ V / @ + \_/ @ + @@ + @ + __ __@ + \ \ /\ / /@ + \ V V / @ + \_/\_/ @ + @@ + @ + __ __@ + \ \/ /@ + > < @ + /_/\_\@ + @@ + @ + _ _ @ + | | | |@ + | |_| |@ + \__, |@ + |___/ @@ + @ + ____@ + |_ /@ + / / @ + /___|@ + @@ + __@ + / /@ + | | @ + < < @ + | | @ + \_\@@ + _ @ + | |@ + | |@ + | |@ + | |@ + |_|@@ + __ @ + \ \ @ + | | @ + > >@ + | | @ + /_/ @@ + /\/|@ + |/\/ @ + $ @ + $ @ + $ @ + @@ + _ _ @ + (_)_(_)@ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + | |_| |@ + \___/ @ + @@ + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \___/ @ + @@ + _ _ @ + (_)_(_)@ + / _` |@ + | (_| |@ + \__,_|@ + @@ + _ _ @ + (_)_(_)@ + / _ \ @ + | (_) |@ + \___/ @ + @@ + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \__,_|@ + @@ + ___ @ + / _ \@ + | |/ /@ + | |\ \@ + | ||_/@ + |_| @@ +160 NO-BREAK SPACE + $@ + $@ + $@ + $@ + $@ + $@@ +161 INVERTED EXCLAMATION MARK + _ @ + (_)@ + | |@ + | |@ + |_|@ + @@ +162 CENT SIGN + _ @ + | | @ + / __)@ + | (__ @ + \ )@ + |_| @@ +163 POUND SIGN + ___ @ + / ,_\ @ + _| |_ @ + | |___ @ + (_,____|@ + @@ +164 CURRENCY SIGN + /\___/\@ + \ _ /@ + | (_) |@ + / ___ \@ + \/ \/@ + @@ +165 YEN SIGN + __ __ @ + \ V / @ + |__ __|@ + |__ __|@ + |_| @ + @@ +166 BROKEN BAR + _ @ + | |@ + |_|@ + _ @ + | |@ + |_|@@ +167 SECTION SIGN + __ @ + _/ _)@ + / \ \ @ + \ \\ \@ + \ \_/@ + (__/ @@ +168 DIAERESIS + _ _ @ + (_) (_)@ + $ $ @ + $ $ @ + $ $ @ + @@ +169 COPYRIGHT SIGN + _____ @ + / ___ \ @ + / / __| \ @ + | | (__ |@ + \ \___| / @ + \_____/ @@ +170 FEMININE ORDINAL INDICATOR + __ _ @ + / _` |@ + \__,_|@ + |____|@ + $ @ + @@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ____@ + / / /@ + / / / @ + \ \ \ @ + \_\_\@ + @@ +172 NOT SIGN + @ + _____ @ + |___ |@ + |_|@ + $ @ + @@ +173 SOFT HYPHEN + @ + @ + ____ @ + |____|@ + $ @ + @@ +174 REGISTERED SIGN + _____ @ + / ___ \ @ + / | _ \ \ @ + | | / |@ + \ |_|_\ / @ + \_____/ @@ +175 MACRON + _____ @ + |_____|@ + $ @ + $ @ + $ @ + @@ +176 DEGREE SIGN + __ @ + / \ @ + | () |@ + \__/ @ + $ @ + @@ +177 PLUS-MINUS SIGN + _ @ + _| |_ @ + |_ _|@ + _|_|_ @ + |_____|@ + @@ +178 SUPERSCRIPT TWO + ___ @ + |_ )@ + / / @ + /___|@ + $ @ + @@ +179 SUPERSCRIPT THREE + ____@ + |__ /@ + |_ \@ + |___/@ + $ @ + @@ +180 ACUTE ACCENT + __@ + /_/@ + $ @ + $ @ + $ @ + @@ +181 MICRO SIGN + @ + _ _ @ + | | | |@ + | |_| |@ + | ._,_|@ + |_| @@ +182 PILCROW SIGN + _____ @ + / |@ + | (| | |@ + \__ | |@ + |_|_|@ + @@ +183 MIDDLE DOT + @ + _ @ + (_)@ + $ @ + $ @ + @@ +184 CEDILLA + @ + @ + @ + @ + _ @ + )_)@@ +185 SUPERSCRIPT ONE + _ @ + / |@ + | |@ + |_|@ + $ @ + @@ +186 MASCULINE ORDINAL INDICATOR + ___ @ + / _ \@ + \___/@ + |___|@ + $ @ + @@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + ____ @ + \ \ \ @ + \ \ \@ + / / /@ + /_/_/ @ + @@ +188 VULGAR FRACTION ONE QUARTER + _ __ @ + / | / / _ @ + | |/ / | | @ + |_/ /|_ _|@ + /_/ |_| @ + @@ +189 VULGAR FRACTION ONE HALF + _ __ @ + / | / /__ @ + | |/ /_ )@ + |_/ / / / @ + /_/ /___|@ + @@ +190 VULGAR FRACTION THREE QUARTERS + ____ __ @ + |__ / / / _ @ + |_ \/ / | | @ + |___/ /|_ _|@ + /_/ |_| @ + @@ +191 INVERTED QUESTION MARK + _ @ + (_) @ + | | @ + / /_ @ + \___|@ + @@ +192 LATIN CAPITAL LETTER A WITH GRAVE + __ @ + \_\ @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +193 LATIN CAPITAL LETTER A WITH ACUTE + __ @ + /_/ @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX + //\ @ + |/_\| @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +195 LATIN CAPITAL LETTER A WITH TILDE + /\/| @ + |/\/ @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_)@ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE + _ @ + (o) @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +198 LATIN CAPITAL LETTER AE + ______ @ + / ____|@ + / _ _| @ + / __ |___ @ + /_/ |_____|@ + @@ +199 LATIN CAPITAL LETTER C WITH CEDILLA + ____ @ + / ___|@ + | | @ + | |___ @ + \____|@ + )_) @@ +200 LATIN CAPITAL LETTER E WITH GRAVE + __ @ + _\_\_ @ + | ____|@ + | _|_ @ + |_____|@ + @@ +201 LATIN CAPITAL LETTER E WITH ACUTE + __ @ + _/_/_ @ + | ____|@ + | _|_ @ + |_____|@ + @@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX + //\ @ + |/_\| @ + | ____|@ + | _|_ @ + |_____|@ + @@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS + _ _ @ + (_)_(_)@ + | ____|@ + | _|_ @ + |_____|@ + @@ +204 LATIN CAPITAL LETTER I WITH GRAVE + __ @ + \_\ @ + |_ _|@ + | | @ + |___|@ + @@ +205 LATIN CAPITAL LETTER I WITH ACUTE + __ @ + /_/ @ + |_ _|@ + | | @ + |___|@ + @@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX + //\ @ + |/_\|@ + |_ _|@ + | | @ + |___|@ + @@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + |_ _| @ + | | @ + |___| @ + @@ +208 LATIN CAPITAL LETTER ETH + ____ @ + | _ \ @ + _| |_| |@ + |__ __| |@ + |____/ @ + @@ +209 LATIN CAPITAL LETTER N WITH TILDE + /\/|@ + |/\/ @ + | \| |@ + | .` |@ + |_|\_|@ + @@ +210 LATIN CAPITAL LETTER O WITH GRAVE + __ @ + \_\ @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +211 LATIN CAPITAL LETTER O WITH ACUTE + __ @ + /_/ @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX + //\ @ + |/_\| @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +213 LATIN CAPITAL LETTER O WITH TILDE + /\/| @ + |/\/ @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | |_| |@ + \___/ @ + @@ +215 MULTIPLICATION SIGN + @ + @ + /\/\@ + > <@ + \/\/@ + @@ +216 LATIN CAPITAL LETTER O WITH STROKE + ____ @ + / _// @ + | |// |@ + | //| |@ + //__/ @ + @@ +217 LATIN CAPITAL LETTER U WITH GRAVE + __ @ + _\_\_ @ + | | | |@ + | |_| |@ + \___/ @ + @@ +218 LATIN CAPITAL LETTER U WITH ACUTE + __ @ + _/_/_ @ + | | | |@ + | |_| |@ + \___/ @ + @@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX + //\ @ + |/ \| @ + | | | |@ + | |_| |@ + \___/ @ + @@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \___/ @ + @@ +221 LATIN CAPITAL LETTER Y WITH ACUTE + __ @ + __/_/__@ + \ \ / /@ + \ V / @ + |_| @ + @@ +222 LATIN CAPITAL LETTER THORN + _ @ + | |___ @ + | __ \@ + | ___/@ + |_| @ + @@ +223 LATIN SMALL LETTER SHARP S + ___ @ + / _ \@ + | |/ /@ + | |\ \@ + | ||_/@ + |_| @@ +224 LATIN SMALL LETTER A WITH GRAVE + __ @ + \_\_ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ +225 LATIN SMALL LETTER A WITH ACUTE + __ @ + /_/_ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX + //\ @ + |/_\| @ + / _` |@ + | (_| |@ + \__,_|@ + @@ +227 LATIN SMALL LETTER A WITH TILDE + /\/| @ + |/\/_ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ +228 LATIN SMALL LETTER A WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _` |@ + | (_| |@ + \__,_|@ + @@ +229 LATIN SMALL LETTER A WITH RING ABOVE + __ @ + (()) @ + / _ '|@ + | (_| |@ + \__,_|@ + @@ +230 LATIN SMALL LETTER AE + @ + __ ____ @ + / _` _ \@ + | (_| __/@ + \__,____|@ + @@ +231 LATIN SMALL LETTER C WITH CEDILLA + @ + ___ @ + / __|@ + | (__ @ + \___|@ + )_) @@ +232 LATIN SMALL LETTER E WITH GRAVE + __ @ + \_\ @ + / _ \@ + | __/@ + \___|@ + @@ +233 LATIN SMALL LETTER E WITH ACUTE + __ @ + /_/ @ + / _ \@ + | __/@ + \___|@ + @@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX + //\ @ + |/_\|@ + / _ \@ + | __/@ + \___|@ + @@ +235 LATIN SMALL LETTER E WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | __/ @ + \___| @ + @@ +236 LATIN SMALL LETTER I WITH GRAVE + __ @ + \_\@ + | |@ + | |@ + |_|@ + @@ +237 LATIN SMALL LETTER I WITH ACUTE + __@ + /_/@ + | |@ + | |@ + |_|@ + @@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX + //\ @ + |/_\|@ + | | @ + | | @ + |_| @ + @@ +239 LATIN SMALL LETTER I WITH DIAERESIS + _ _ @ + (_)_(_)@ + | | @ + | | @ + |_| @ + @@ +240 LATIN SMALL LETTER ETH + /\/\ @ + > < @ + _\/\ |@ + / __` |@ + \____/ @ + @@ +241 LATIN SMALL LETTER N WITH TILDE + /\/| @ + |/\/ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ +242 LATIN SMALL LETTER O WITH GRAVE + __ @ + \_\ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +243 LATIN SMALL LETTER O WITH ACUTE + __ @ + /_/ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX + //\ @ + |/_\| @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +245 LATIN SMALL LETTER O WITH TILDE + /\/| @ + |/\/ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +246 LATIN SMALL LETTER O WITH DIAERESIS + _ _ @ + (_)_(_)@ + / _ \ @ + | (_) |@ + \___/ @ + @@ +247 DIVISION SIGN + @ + _ @ + _(_)_ @ + |_____|@ + (_) @ + @@ +248 LATIN SMALL LETTER O WITH STROKE + @ + ____ @ + / _//\ @ + | (//) |@ + \//__/ @ + @@ +249 LATIN SMALL LETTER U WITH GRAVE + __ @ + _\_\_ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +250 LATIN SMALL LETTER U WITH ACUTE + __ @ + _/_/_ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX + //\ @ + |/ \| @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +252 LATIN SMALL LETTER U WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \__,_|@ + @@ +253 LATIN SMALL LETTER Y WITH ACUTE + __ @ + _/_/_ @ + | | | |@ + | |_| |@ + \__, |@ + |___/ @@ +254 LATIN SMALL LETTER THORN + _ @ + | |__ @ + | '_ \ @ + | |_) |@ + | .__/ @ + |_| @@ +255 LATIN SMALL LETTER Y WITH DIAERESIS + _ _ @ + (_) (_)@ + | | | |@ + | |_| |@ + \__, |@ + |___/ @@ +0x0100 LATIN CAPITAL LETTER A WITH MACRON + ____ @ + /___/ @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +0x0101 LATIN SMALL LETTER A WITH MACRON + ___ @ + /_ _/@ + / _` |@ + | (_| |@ + \__,_|@ + @@ +0x0102 LATIN CAPITAL LETTER A WITH BREVE + _ _ @ + \\_// @ + /_\ @ + / _ \ @ + /_/ \_\@ + @@ +0x0103 LATIN SMALL LETTER A WITH BREVE + \_/ @ + ___ @ + / _` |@ + | (_| |@ + \__,_|@ + @@ +0x0104 LATIN CAPITAL LETTER A WITH OGONEK + @ + _ @ + /_\ @ + / _ \ @ + /_/ \_\@ + (_(@@ +0x0105 LATIN SMALL LETTER A WITH OGONEK + @ + __ _ @ + / _` |@ + | (_| |@ + \__,_|@ + (_(@@ +0x0106 LATIN CAPITAL LETTER C WITH ACUTE + __ @ + _/_/ @ + / ___|@ + | |___ @ + \____|@ + @@ +0x0107 LATIN SMALL LETTER C WITH ACUTE + __ @ + /__/@ + / __|@ + | (__ @ + \___|@ + @@ +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX + /\ @ + _//\\@ + / ___|@ + | |___ @ + \____|@ + @@ +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX + /\ @ + /_\ @ + / __|@ + | (__ @ + \___|@ + @@ +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE + [] @ + ____ @ + / ___|@ + | |___ @ + \____|@ + @@ +0x010B LATIN SMALL LETTER C WITH DOT ABOVE + [] @ + ___ @ + / __|@ + | (__ @ + \___|@ + @@ +0x010C LATIN CAPITAL LETTER C WITH CARON + \\// @ + _\/_ @ + / ___|@ + | |___ @ + \____|@ + @@ +0x010D LATIN SMALL LETTER C WITH CARON + \\//@ + _\/ @ + / __|@ + | (__ @ + \___|@ + @@ +0x010E LATIN CAPITAL LETTER D WITH CARON + \\// @ + __\/ @ + | _ \ @ + | |_| |@ + |____/ @ + @@ +0x010F LATIN SMALL LETTER D WITH CARON + \/ _ @ + __| |@ + / _` |@ + | (_| |@ + \__,_|@ + @@ +0x0110 LATIN CAPITAL LETTER D WITH STROKE + ____ @ + |_ __ \ @ + /| |/ | |@ + /|_|/_| |@ + |_____/ @ + @@ +0x0111 LATIN SMALL LETTER D WITH STROKE + ---|@ + __| |@ + / _` |@ + | (_| |@ + \__,_|@ + @@ +0x0112 LATIN CAPITAL LETTER E WITH MACRON + ____ @ + /___/ @ + | ____|@ + | _|_ @ + |_____|@ + @@ +0x0113 LATIN SMALL LETTER E WITH MACRON + ____@ + /_ _/@ + / _ \ @ + | __/ @ + \___| @ + @@ +0x0114 LATIN CAPITAL LETTER E WITH BREVE + _ _ @ + \\_// @ + | ____|@ + | _|_ @ + |_____|@ + @@ +0x0115 LATIN SMALL LETTER E WITH BREVE + \\ //@ + -- @ + / _ \ @ + | __/ @ + \___| @ + @@ +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE + [] @ + _____ @ + | ____|@ + | _|_ @ + |_____|@ + @@ +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE + [] @ + __ @ + / _ \@ + | __/@ + \___|@ + @@ +0x0118 LATIN CAPITAL LETTER E WITH OGONEK + @ + _____ @ + | ____|@ + | _|_ @ + |_____|@ + (__(@@ +0x0119 LATIN SMALL LETTER E WITH OGONEK + @ + ___ @ + / _ \@ + | __/@ + \___|@ + (_(@@ +0x011A LATIN CAPITAL LETTER E WITH CARON + \\// @ + __\/_ @ + | ____|@ + | _|_ @ + |_____|@ + @@ +0x011B LATIN SMALL LETTER E WITH CARON + \\//@ + \/ @ + / _ \@ + | __/@ + \___|@ + @@ +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX + _/\_ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + @@ +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX + /\ @ + _/_ \@ + / _` |@ + | (_| |@ + \__, |@ + |___/ @@ +0x011E LATIN CAPITAL LETTER G WITH BREVE + _\/_ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + @@ +0x011F LATIN SMALL LETTER G WITH BREVE + \___/ @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |___/ @@ +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE + _[]_ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + @@ +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE + [] @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |___/ @@ +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA + ____ @ + / ___|@ + | | _ @ + | |_| |@ + \____|@ + )__) @@ +0x0123 LATIN SMALL LETTER G WITH CEDILLA + @ + __ _ @ + / _` |@ + | (_| |@ + \__, |@ + |_))))@@ +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX + _/ \_ @ + | / \ |@ + | |_| |@ + | _ |@ + |_| |_|@ + @@ +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX + _ /\ @ + | |//\ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ +0x0126 LATIN CAPITAL LETTER H WITH STROKE + _ _ @ + | |=| |@ + | |_| |@ + | _ |@ + |_| |_|@ + @@ +0x0127 LATIN SMALL LETTER H WITH STROKE + _ @ + |=|__ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ +0x0128 LATIN CAPITAL LETTER I WITH TILDE + /\//@ + |_ _|@ + | | @ + | | @ + |___|@ + @@ +0x0129 LATIN SMALL LETTER I WITH TILDE + @ + /\/@ + | |@ + | |@ + |_|@ + @@ +0x012A LATIN CAPITAL LETTER I WITH MACRON + /___/@ + |_ _|@ + | | @ + | | @ + |___|@ + @@ +0x012B LATIN SMALL LETTER I WITH MACRON + ____@ + /___/@ + | | @ + | | @ + |_| @ + @@ +0x012C LATIN CAPITAL LETTER I WITH BREVE + \__/@ + |_ _|@ + | | @ + | | @ + |___|@ + @@ +0x012D LATIN SMALL LETTER I WITH BREVE + @ + \_/@ + | |@ + | |@ + |_|@ + @@ +0x012E LATIN CAPITAL LETTER I WITH OGONEK + ___ @ + |_ _|@ + | | @ + | | @ + |___|@ + (__(@@ +0x012F LATIN SMALL LETTER I WITH OGONEK + _ @ + (_) @ + | | @ + | | @ + |_|_@ + (_(@@ +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE + _[] @ + |_ _|@ + | | @ + | | @ + |___|@ + @@ +0x0131 LATIN SMALL LETTER DOTLESS I + @ + _ @ + | |@ + | |@ + |_|@ + @@ +0x0132 LATIN CAPITAL LIGATURE IJ + ___ _ @ + |_ _|| |@ + | | | |@ + | |_| |@ + |__|__/ @ + @@ +0x0133 LATIN SMALL LIGATURE IJ + _ _ @ + (_) (_)@ + | | | |@ + | | | |@ + |_|_/ |@ + |__/ @@ +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX + /\ @ + /_\|@ + _ | | @ + | |_| | @ + \___/ @ + @@ +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX + /\@ + /_\@ + | |@ + | |@ + _/ |@ + |__/ @@ +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA + _ _ @ + | |/ / @ + | ' / @ + | . \ @ + |_|\_\ @ + )__)@@ +0x0137 LATIN SMALL LETTER K WITH CEDILLA + _ @ + | | __@ + | |/ /@ + | < @ + |_|\_\@ + )_)@@ +0x0138 LATIN SMALL LETTER KRA + @ + _ __ @ + | |/ \@ + | < @ + |_|\_\@ + @@ +0x0139 LATIN CAPITAL LETTER L WITH ACUTE + _ //@ + | | // @ + | | @ + | |___ @ + |_____|@ + @@ +0x013A LATIN SMALL LETTER L WITH ACUTE + //@ + | |@ + | |@ + | |@ + |_|@ + @@ +0x013B LATIN CAPITAL LETTER L WITH CEDILLA + _ @ + | | @ + | | @ + | |___ @ + |_____|@ + )__)@@ +0x013C LATIN SMALL LETTER L WITH CEDILLA + _ @ + | | @ + | | @ + | | @ + |_| @ + )_)@@ +0x013D LATIN CAPITAL LETTER L WITH CARON + _ \\//@ + | | \/ @ + | | @ + | |___ @ + |_____|@ + @@ +0x013E LATIN SMALL LETTER L WITH CARON + _ \\//@ + | | \/ @ + | | @ + | | @ + |_| @ + @@ +0x013F LATIN CAPITAL LETTER L WITH MIDDLE DOT + _ @ + | | @ + | | [] @ + | |___ @ + |_____|@ + @@ +0x0140 LATIN SMALL LETTER L WITH MIDDLE DOT + _ @ + | | @ + | | []@ + | | @ + |_| @ + @@ +0x0141 LATIN CAPITAL LETTER L WITH STROKE + __ @ + | // @ + |//| @ + // |__ @ + |_____|@ + @@ +0x0142 LATIN SMALL LETTER L WITH STROKE + _ @ + | |@ + |//@ + //|@ + |_|@ + @@ +0x0143 LATIN CAPITAL LETTER N WITH ACUTE + _/ /_ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + @@ +0x0144 LATIN SMALL LETTER N WITH ACUTE + _ @ + _ /_/ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA + _ _ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + )_) @@ +0x0146 LATIN SMALL LETTER N WITH CEDILLA + @ + _ __ @ + | '_ \ @ + | | | |@ + |_| |_|@ + )_) @@ +0x0147 LATIN CAPITAL LETTER N WITH CARON + _\/ _ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \_|@ + @@ +0x0148 LATIN SMALL LETTER N WITH CARON + \\// @ + _\/_ @ + | '_ \ @ + | | | |@ + |_| |_|@ + @@ +0x0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE + @ + _ __ @ + ( )| '_\ @ + |/| | | |@ + |_| |_|@ + @@ +0x014A LATIN CAPITAL LETTER ENG + _ _ @ + | \ | |@ + | \| |@ + | |\ |@ + |_| \ |@ + )_)@@ +0x014B LATIN SMALL LETTER ENG + _ __ @ + | '_ \ @ + | | | |@ + |_| | |@ + | |@ + |__ @@ +0x014C LATIN CAPITAL LETTER O WITH MACRON + ____ @ + /_ _/ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +0x014D LATIN SMALL LETTER O WITH MACRON + ____ @ + /_ _/ @ + / _ \ @ + | (_) |@ + \___/ @ + @@ +0x014E LATIN CAPITAL LETTER O WITH BREVE + \ / @ + _-_ @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +0x014F LATIN SMALL LETTER O WITH BREVE + \ / @ + _-_ @ + / _ \ @ + | |_| |@ + \___/ @ + @@ +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE + ___ @ + /_/_/@ + / _ \ @ + | |_| |@ + \___/ @ + @@ +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE + ___ @ + /_/_/@ + / _ \ @ + | |_| |@ + \___/ @ + @@ +0x0152 LATIN CAPITAL LIGATURE OE + ___ ___ @ + / _ \| __|@ + | | | | | @ + | |_| | |__@ + \___/|____@ + @@ +0x0153 LATIN SMALL LIGATURE OE + @ + ___ ___ @ + / _ \ / _ \@ + | (_) | __/@ + \___/ \___|@ + @@ +0x0154 LATIN CAPITAL LETTER R WITH ACUTE + _/_/ @ + | _ \ @ + | |_) |@ + | _ < @ + |_| \_\@ + @@ +0x0155 LATIN SMALL LETTER R WITH ACUTE + __@ + _ /_/@ + | '__|@ + | | @ + |_| @ + @@ +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA + ____ @ + | _ \ @ + | |_) |@ + | _ < @ + |_| \_\@ + )_) @@ +0x0157 LATIN SMALL LETTER R WITH CEDILLA + @ + _ __ @ + | '__|@ + | | @ + |_| @ + )_) @@ +0x0158 LATIN CAPITAL LETTER R WITH CARON + _\_/ @ + | _ \ @ + | |_) |@ + | _ < @ + |_| \_\@ + @@ +0x0159 LATIN SMALL LETTER R WITH CARON + \\// @ + _\/_ @ + | '__|@ + | | @ + |_| @ + @@ +0x015A LATIN CAPITAL LETTER S WITH ACUTE + _/_/ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + @@ +0x015B LATIN SMALL LETTER S WITH ACUTE + __@ + _/_/@ + / __|@ + \__ \@ + |___/@ + @@ +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX + _/\_ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + @@ +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX + @ + /_\_@ + / __|@ + \__ \@ + |___/@ + @@ +0x015E LATIN CAPITAL LETTER S WITH CEDILLA + ____ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + )__)@@ +0x015F LATIN SMALL LETTER S WITH CEDILLA + @ + ___ @ + / __|@ + \__ \@ + |___/@ + )_)@@ +0x0160 LATIN CAPITAL LETTER S WITH CARON + _\_/ @ + / ___| @ + \___ \ @ + ___) |@ + |____/ @ + @@ +0x0161 LATIN SMALL LETTER S WITH CARON + \\//@ + _\/ @ + / __|@ + \__ \@ + |___/@ + @@ +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA + _____ @ + |_ _|@ + | | @ + | | @ + |_| @ + )__)@@ +0x0163 LATIN SMALL LETTER T WITH CEDILLA + _ @ + | |_ @ + | __|@ + | |_ @ + \__|@ + )_)@@ +0x0164 LATIN CAPITAL LETTER T WITH CARON + _____ @ + |_ _|@ + | | @ + | | @ + |_| @ + @@ +0x0165 LATIN SMALL LETTER T WITH CARON + \/ @ + | |_ @ + | __|@ + | |_ @ + \__|@ + @@ +0x0166 LATIN CAPITAL LETTER T WITH STROKE + _____ @ + |_ _|@ + | | @ + -|-|- @ + |_| @ + @@ +0x0167 LATIN SMALL LETTER T WITH STROKE + _ @ + | |_ @ + | __|@ + |-|_ @ + \__|@ + @@ +0x0168 LATIN CAPITAL LETTER U WITH TILDE + @ + _/\/_ @ + | | | |@ + | |_| |@ + \___/ @ + @@ +0x0169 LATIN SMALL LETTER U WITH TILDE + @ + _/\/_ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x016A LATIN CAPITAL LETTER U WITH MACRON + ____ @ + /__ _/@ + | | | |@ + | |_| |@ + \___/ @ + @@ +0x016B LATIN SMALL LETTER U WITH MACRON + ____ @ + / _ /@ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x016C LATIN CAPITAL LETTER U WITH BREVE + @ + \_/_ @ + | | | |@ + | |_| |@ + \____|@ + @@ +0x016D LATIN SMALL LETTER U WITH BREVE + @ + \_/_ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE + O @ + __ _ @ + | | | |@ + | |_| |@ + \___/ @ + @@ +0x016F LATIN SMALL LETTER U WITH RING ABOVE + O @ + __ __ @ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE + -- --@ + /_//_/@ + | | | |@ + | |_| |@ + \___/ @ + @@ +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE + ____@ + _/_/_/@ + | | | |@ + | |_| |@ + \__,_|@ + @@ +0x0172 LATIN CAPITAL LETTER U WITH OGONEK + _ _ @ + | | | |@ + | | | |@ + | |_| |@ + \___/ @ + (__(@@ +0x0173 LATIN SMALL LETTER U WITH OGONEK + @ + _ _ @ + | | | |@ + | |_| |@ + \__,_|@ + (_(@@ +0x0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX + __ /\ __@ + \ \ //\\/ /@ + \ \ /\ / / @ + \ V V / @ + \_/\_/ @ + @@ +0x0175 LATIN SMALL LETTER W WITH CIRCUMFLEX + /\ @ + __ //\\__@ + \ \ /\ / /@ + \ V V / @ + \_/\_/ @ + @@ +0x0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX + /\ @ + __//\\ @ + \ \ / /@ + \ V / @ + |_| @ + @@ +0x0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX + /\ @ + //\\ @ + | | | |@ + | |_| |@ + \__, |@ + |___/ @@ +0x0178 LATIN CAPITAL LETTER Y WITH DIAERESIS + [] []@ + __ _@ + \ \ / /@ + \ V / @ + |_| @ + @@ +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE + __/_/@ + |__ /@ + / / @ + / /_ @ + /____|@ + @@ +0x017A LATIN SMALL LETTER Z WITH ACUTE + _ @ + _/_/@ + |_ /@ + / / @ + /___|@ + @@ +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE + __[]_@ + |__ /@ + / / @ + / /_ @ + /____|@ + @@ +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE + [] @ + ____@ + |_ /@ + / / @ + /___|@ + @@ +0x017D LATIN CAPITAL LETTER Z WITH CARON + _\_/_@ + |__ /@ + / / @ + / /_ @ + /____|@ + @@ +0x017E LATIN SMALL LETTER Z WITH CARON + \\//@ + _\/_@ + |_ /@ + / / @ + /___|@ + @@ +0x017F LATIN SMALL LETTER LONG S + __ @ + / _|@ + |-| | @ + |-| | @ + |_| @ + @@ +0x02C7 CARON + \\//@ + \/ @ + $@ + $@ + $@ + $@@ +0x02D8 BREVE + \\_//@ + \_/ @ + $@ + $@ + $@ + $@@ +0x02D9 DOT ABOVE + []@ + $@ + $@ + $@ + $@ + $@@ +0x02DB OGONEK + $@ + $@ + $@ + $@ + $@ + )_) @@ +0x02DD DOUBLE ACUTE ACCENT + _ _ @ + /_/_/@ + $@ + $@ + $@ + $@@ +0xCA0 KANNADA LETTER TTHA + _____)@ + /_ ___/@ + / _ \ @ + | (_) | @ + $\___/$ @ + @@ diff --git a/externals/figlet/fonts/term.flf b/externals/figlet/fonts/term.flf new file mode 100644 index 0000000000..e27d01eeec --- /dev/null +++ b/externals/figlet/fonts/term.flf @@ -0,0 +1,600 @@ +flf2a 1 1 2 -1 13 0 0 242 +Terminal by Glenn Chappell 4/93 +Includes characters 128-255 +Enhanced for Latin-2,3,4 by John Cowan +Latin character sets supported only if your screen font does +figlet release 2.2 -- November 1996 +Permission is hereby given to modify this font, as long as the +modifier's name is placed on a comment line. + +Double-checked by Paul Burton 12/96. Added the new +parameter supported by FIGlet and FIGWin. Unlike all other FIGfonts, this one +is intended to produce output exactly the same as the input unless a control +file is used. Therefore it produces the SAME output for smush, kern or fit. + +@ +!@ +"@ +#@ +$@ +%@ +&@ +'@ +(@ +)@ +*@ ++@ +,@ +-@ +.@ +/@ +0@ +1@ +2@ +3@ +4@ +5@ +6@ +7@ +8@ +9@ +:@ +;@ +<@ +=@ +>@ +?@ +@# +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@ +[@ +\@ +]@ +^@ +_@ +`@ +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@ +{@ +|@ +}@ +~@ +�@ +�@ +�@ +�@ +�@ +�@ +�@ +128 +�@ +129 +�@ +130 +�@ +131 +�@ +132 +�@ +133 +�@ +134 +�@ +135 +�@ +136 +�@ +137 +�@ +138 +�@ +139 +�@ +140 +�@ +141 +�@ +142 +�@ +143 +�@ +144 +�@ +145 +�@ +146 +�@ +147 +�@ +148 +�@ +149 +�@ +150 +�@ +151 +�@ +152 +�@ +153 +�@ +154 +�@ +155 +�@ +156 +�@ +157 +�@ +158 +�@ +159 +�@ +160 NO-BREAK SPACE +�@ +161 INVERTED EXCLAMATION MARK +�@ +162 CENT SIGN +�@ +163 POUND SIGN +�@ +164 CURRENCY SIGN +�@ +165 YEN SIGN +�@ +166 BROKEN BAR +�@ +167 SECTION SIGN +�@ +168 DIAERESIS +�@ +169 COPYRIGHT SIGN +�@ +170 FEMININE ORDINAL INDICATOR +�@ +171 LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +�@ +172 NOT SIGN +�@ +173 SOFT HYPHEN +�@ +174 REGISTERED SIGN +�@ +175 MACRON +�@ +176 DEGREE SIGN +�@ +177 PLUS-MINUS SIGN +�@ +178 SUPERSCRIPT TWO +�@ +179 SUPERSCRIPT THREE +�@ +180 ACUTE ACCENT +�@ +181 MICRO SIGN +�@ +182 PILCROW SIGN +�@ +183 MIDDLE DOT +�@ +184 CEDILLA +�@ +185 SUPERSCRIPT ONE +�@ +186 MASCULINE ORDINAL INDICATOR +�@ +187 RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +�@ +188 VULGAR FRACTION ONE QUARTER +�@ +189 VULGAR FRACTION ONE HALF +�@ +190 VULGAR FRACTION THREE QUARTERS +�@ +191 INVERTED QUESTION MARK +�@ +192 LATIN CAPITAL LETTER A WITH GRAVE +�@ +193 LATIN CAPITAL LETTER A WITH ACUTE +�@ +194 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +�@ +195 LATIN CAPITAL LETTER A WITH TILDE +�@ +196 LATIN CAPITAL LETTER A WITH DIAERESIS +�@ +197 LATIN CAPITAL LETTER A WITH RING ABOVE +�@ +198 LATIN CAPITAL LETTER AE +�@ +199 LATIN CAPITAL LETTER C WITH CEDILLA +�@ +200 LATIN CAPITAL LETTER E WITH GRAVE +�@ +201 LATIN CAPITAL LETTER E WITH ACUTE +�@ +202 LATIN CAPITAL LETTER E WITH CIRCUMFLEX +�@ +203 LATIN CAPITAL LETTER E WITH DIAERESIS +�@ +204 LATIN CAPITAL LETTER I WITH GRAVE +�@ +205 LATIN CAPITAL LETTER I WITH ACUTE +�@ +206 LATIN CAPITAL LETTER I WITH CIRCUMFLEX +�@ +207 LATIN CAPITAL LETTER I WITH DIAERESIS +�@ +208 LATIN CAPITAL LETTER ETH +�@ +209 LATIN CAPITAL LETTER N WITH TILDE +�@ +210 LATIN CAPITAL LETTER O WITH GRAVE +�@ +211 LATIN CAPITAL LETTER O WITH ACUTE +�@ +212 LATIN CAPITAL LETTER O WITH CIRCUMFLEX +�@ +213 LATIN CAPITAL LETTER O WITH TILDE +�@ +214 LATIN CAPITAL LETTER O WITH DIAERESIS +�@ +215 MULTIPLICATION SIGN +�@ +216 LATIN CAPITAL LETTER O WITH STROKE +�@ +217 LATIN CAPITAL LETTER U WITH GRAVE +�@ +218 LATIN CAPITAL LETTER U WITH ACUTE +�@ +219 LATIN CAPITAL LETTER U WITH CIRCUMFLEX +�@ +220 LATIN CAPITAL LETTER U WITH DIAERESIS +�@ +221 LATIN CAPITAL LETTER Y WITH ACUTE +�@ +222 LATIN CAPITAL LETTER THORN +�@ +223 LATIN SMALL LETTER SHARP S +�@ +224 LATIN SMALL LETTER A WITH GRAVE +�@ +225 LATIN SMALL LETTER A WITH ACUTE +�@ +226 LATIN SMALL LETTER A WITH CIRCUMFLEX +�@ +227 LATIN SMALL LETTER A WITH TILDE +�@ +228 LATIN SMALL LETTER A WITH DIAERESIS +�@ +229 LATIN SMALL LETTER A WITH RING ABOVE +�@ +230 LATIN SMALL LETTER AE +�@ +231 LATIN SMALL LETTER C WITH CEDILLA +�@ +232 LATIN SMALL LETTER E WITH GRAVE +�@ +233 LATIN SMALL LETTER E WITH ACUTE +�@ +234 LATIN SMALL LETTER E WITH CIRCUMFLEX +�@ +235 LATIN SMALL LETTER E WITH DIAERESIS +�@ +236 LATIN SMALL LETTER I WITH GRAVE +�@ +237 LATIN SMALL LETTER I WITH ACUTE +�@ +238 LATIN SMALL LETTER I WITH CIRCUMFLEX +�@ +239 LATIN SMALL LETTER I WITH DIAERESIS +�@ +240 LATIN SMALL LETTER ETH +�@ +241 LATIN SMALL LETTER N WITH TILDE +�@ +242 LATIN SMALL LETTER O WITH GRAVE +�@ +243 LATIN SMALL LETTER O WITH ACUTE +�@ +244 LATIN SMALL LETTER O WITH CIRCUMFLEX +�@ +245 LATIN SMALL LETTER O WITH TILDE +�@ +246 LATIN SMALL LETTER O WITH DIAERESIS +�@ +247 DIVISION SIGN +�@ +248 LATIN SMALL LETTER O WITH STROKE +�@ +249 LATIN SMALL LETTER U WITH GRAVE +�@ +250 LATIN SMALL LETTER U WITH ACUTE +�@ +251 LATIN SMALL LETTER U WITH CIRCUMFLEX +�@ +252 LATIN SMALL LETTER U WITH DIAERESIS +�@ +253 LATIN SMALL LETTER Y WITH ACUTE +�@ +254 LATIN SMALL LETTER THORN +�@ +255 LATIN SMALL LETTER Y WITH DIAERESIS +�@ +0x0100 LATIN CAPITAL LETTER A WITH MACRON +�@ +0x0101 LATIN SMALL LETTER A WITH MACRON +�@ +0x0102 LATIN CAPITAL LETTER A WITH BREVE +�@ +0x0103 LATIN SMALL LETTER A WITH BREVE +�@ +0x0104 LATIN CAPITAL LETTER A WITH OGONEK +�@ +0x0105 LATIN SMALL LETTER A WITH OGONEK +�@ +0x0106 LATIN CAPITAL LETTER C WITH ACUTE +�@ +0x0107 LATIN SMALL LETTER C WITH ACUTE +�@ +0x0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX +�@ +0x0109 LATIN SMALL LETTER C WITH CIRCUMFLEX +�@ +0x010A LATIN CAPITAL LETTER C WITH DOT ABOVE +�@ +0x010B LATIN SMALL LETTER C WITH DOT ABOVE +�@ +0x010C LATIN CAPITAL LETTER C WITH CARON +�@ +0x010D LATIN SMALL LETTER C WITH CARON +�@ +0x010E LATIN CAPITAL LETTER D WITH CARON +�@ +0x010F LATIN SMALL LETTER D WITH CARON +�@ +0x0110 LATIN CAPITAL LETTER D WITH STROKE +�@ +0x0111 LATIN SMALL LETTER D WITH STROKE +�@ +0x0112 LATIN CAPITAL LETTER E WITH MACRON +�@ +0x0113 LATIN SMALL LETTER E WITH MACRON +�@ +0x0116 LATIN CAPITAL LETTER E WITH DOT ABOVE +�@ +0x0117 LATIN SMALL LETTER E WITH DOT ABOVE +�@ +0x0118 LATIN CAPITAL LETTER E WITH OGONEK +�@ +0x0119 LATIN SMALL LETTER E WITH OGONEK +�@ +0x011A LATIN CAPITAL LETTER E WITH CARON +�@ +0x011B LATIN SMALL LETTER E WITH CARON +�@ +0x011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX +�@ +0x011D LATIN SMALL LETTER G WITH CIRCUMFLEX +�@ +0x011E LATIN CAPITAL LETTER G WITH BREVE +�@ +0x011F LATIN SMALL LETTER G WITH BREVE +�@ +0x0120 LATIN CAPITAL LETTER G WITH DOT ABOVE +�@ +0x0121 LATIN SMALL LETTER G WITH DOT ABOVE +�@ +0x0122 LATIN CAPITAL LETTER G WITH CEDILLA +�@ +0x0123 LATIN SMALL LETTER G WITH CEDILLA +�@ +0x0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX +�@ +0x0125 LATIN SMALL LETTER H WITH CIRCUMFLEX +�@ +0x0126 LATIN CAPITAL LETTER H WITH STROKE +�@ +0x0127 LATIN SMALL LETTER H WITH STROKE +�@ +0x0128 LATIN CAPITAL LETTER I WITH TILDE +�@ +0x0129 LATIN SMALL LETTER I WITH TILDE +�@ +0x012A LATIN CAPITAL LETTER I WITH MACRON +�@ +0x012B LATIN SMALL LETTER I WITH MACRON +�@ +0x012E LATIN CAPITAL LETTER I WITH OGONEK +�@ +0x012F LATIN SMALL LETTER I WITH OGONEK +�@ +0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +�@ +0x0131 LATIN SMALL LETTER DOTLESS I +�@ +0x0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX +�@ +0x0135 LATIN SMALL LETTER J WITH CIRCUMFLEX +�@ +0x0136 LATIN CAPITAL LETTER K WITH CEDILLA +�@ +0x0137 LATIN SMALL LETTER K WITH CEDILLA +�@ +0x0138 LATIN SMALL LETTER KRA +�@ +0x0139 LATIN CAPITAL LETTER L WITH ACUTE +�@ +0x013A LATIN SMALL LETTER L WITH ACUTE +�@ +0x013B LATIN CAPITAL LETTER L WITH CEDILLA +�@ +0x013C LATIN SMALL LETTER L WITH CEDILLA +�@ +0x013D LATIN CAPITAL LETTER L WITH CARON +�@ +0x013E LATIN SMALL LETTER L WITH CARON +�@ +0x0141 LATIN CAPITAL LETTER L WITH STROKE +�@ +0x0142 LATIN SMALL LETTER L WITH STROKE +�@ +0x0143 LATIN CAPITAL LETTER N WITH ACUTE +�@ +0x0144 LATIN SMALL LETTER N WITH ACUTE +�@ +0x0145 LATIN CAPITAL LETTER N WITH CEDILLA +�@ +0x0146 LATIN SMALL LETTER N WITH CEDILLA +�@ +0x0147 LATIN CAPITAL LETTER N WITH CARON +�@ +0x0148 LATIN SMALL LETTER N WITH CARON +�@ +0x014A LATIN CAPITAL LETTER ENG +�@ +0x014B LATIN SMALL LETTER ENG +�@ +0x014C LATIN CAPITAL LETTER O WITH MACRON +�@ +0x014D LATIN SMALL LETTER O WITH MACRON +�@ +0x0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +�@ +0x0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE +�@ +0x0154 LATIN CAPITAL LETTER R WITH ACUTE +�@ +0x0155 LATIN SMALL LETTER R WITH ACUTE +�@ +0x0156 LATIN CAPITAL LETTER R WITH CEDILLA +�@ +0x0157 LATIN SMALL LETTER R WITH CEDILLA +�@ +0x0158 LATIN CAPITAL LETTER R WITH CARON +�@ +0x0159 LATIN SMALL LETTER R WITH CARON +�@ +0x015A LATIN CAPITAL LETTER S WITH ACUTE +�@ +0x015B LATIN SMALL LETTER S WITH ACUTE +�@ +0x015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX +�@ +0x015D LATIN SMALL LETTER S WITH CIRCUMFLEX +�@ +0x015E LATIN CAPITAL LETTER S WITH CEDILLA +�@ +0x015F LATIN SMALL LETTER S WITH CEDILLA +�@ +0x0160 LATIN CAPITAL LETTER S WITH CARON +�@ +0x0161 LATIN SMALL LETTER S WITH CARON +�@ +0x0162 LATIN CAPITAL LETTER T WITH CEDILLA +�@ +0x0163 LATIN SMALL LETTER T WITH CEDILLA +�@ +0x0164 LATIN CAPITAL LETTER T WITH CARON +�@ +0x0165 LATIN SMALL LETTER T WITH CARON +�@ +0x0166 LATIN CAPITAL LETTER T WITH STROKE +�@ +0x0167 LATIN SMALL LETTER T WITH STROKE +�@ +0x0168 LATIN CAPITAL LETTER U WITH TILDE +�@ +0x0169 LATIN SMALL LETTER U WITH TILDE +�@ +0x016A LATIN CAPITAL LETTER U WITH MACRON +�@ +0x016B LATIN SMALL LETTER U WITH MACRON +�@ +0x016C LATIN CAPITAL LETTER U WITH BREVE +�@ +0x016D LATIN SMALL LETTER U WITH BREVE +�@ +0x016E LATIN CAPITAL LETTER U WITH RING ABOVE +�@ +0x016F LATIN SMALL LETTER U WITH RING ABOVE +�@ +0x0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +�@ +0x0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE +�@ +0x0172 LATIN CAPITAL LETTER U WITH OGONEK +�@ +0x0173 LATIN SMALL LETTER U WITH OGONEK +�@ +0x0179 LATIN CAPITAL LETTER Z WITH ACUTE +�@ +0x017A LATIN SMALL LETTER Z WITH ACUTE +�@ +0x017B LATIN CAPITAL LETTER Z WITH DOT ABOVE +�@ +0x017C LATIN SMALL LETTER Z WITH DOT ABOVE +�@ +0x017D LATIN CAPITAL LETTER Z WITH CARON +�@ +0x017E LATIN SMALL LETTER Z WITH CARON +�@ +0x02C7 CARON +�@ +0x02D8 BREVE +�@ +0x02D9 DOT ABOVE +�@ +0x02DB OGONEK +�@ +0x02DD DOUBLE ACUTE ACCENT +�@ diff --git a/externals/figlet/fonts/upper.flc b/externals/figlet/fonts/upper.flc new file mode 100644 index 0000000000..f383471764 --- /dev/null +++ b/externals/figlet/fonts/upper.flc @@ -0,0 +1,193 @@ +flc2a +# Upper by Glenn Chappell 1/94 +# Converts lower-case to upper-case. +# Modified to support all of Unicode by John Cowan 10/96 +# figlet release 2.2 -- November 1996 +# +# This is a figlet controlfile. +# +# Explanation of first line: +# flc2 - "magic number" for file identification +# a - should always be `a', for now +# +# File body: +# The first character of any line is the "command" for that line. +# Possible figlet 2.1 commands are as follows: +# `#' - comment, continues until end-of-line +# `t' - translate, a not-so-fancy version of the Unix "tr" command +# `f' - freeze, treat further lines as if they were in a new file +# +# The following lines convert lower-case to upper-case. +# +# Standard letters: +t a-z A-Z +# +# figlet Deutsch characters (obsolete in 2.2 and later): +t \-252-\-250 \-255-\-253 +# +# ISO Latin-1 accented letters: +t \224-\246 \192-\214 +t \248-\254 \216-\222 +# Note: Latin-1 has no upper-case Y umlaut, so map to "Y". +# But remove the following line for Unicode fonts. +t \255 Y +# This is the proper Unicode mapping, and does no harm for non-Unicode fonts. +t \255 \0x0178 +# Latin Extended A (Latin-2,3,4,5) accented letters: +t \0x01\0x01 \0x0100 +t \0x0103 \0x0102 +t \0x0105 \0x0104 +t \0x0107 \0x0106 +t \0x0109 \0x0108 +t \0x010B \0x010A +t \0x010D \0x010C +t \0x010F \0x010E +t \0x01\0x01 \0x0100 +t \0x0103 \0x0102 +t \0x0105 \0x0104 +t \0x0117 \0x0116 +t \0x0119 \0x0118 +t \0x011B \0x011A +t \0x011D \0x011C +t \0x011F \0x011E +t \0x01\0x01 \0x0100 +t \0x0103 \0x0102 +t \0x0105 \0x0104 +t \0x0127 \0x0126 +t \0x0129 \0x0128 +t \0x012B \0x012A +t \0x012D \0x012C +t \0x012F \0x012E +t \0x0131 I +t \0x0133 \0x0132 +t \0x0135 \0x0134 +t \0x0137 \0x0136 +t \0x0138 K +t \0x013A \0x0139 +t \0x013C \0x013B +t \0x013E \0x013D +t \0x0140 \0x013F +t \0x0142 \0x0141 +t \0x0144 \0x0143 +t \0x0146 \0x0145 +t \0x0148 \0x0147 +t \0x0149 N +t \0x014B \0x014A +t \0x014D \0x014C +t \0x014F \0x014E +t \0x0151 \0x0150 +t \0x0153 \0x0152 +t \0x0155 \0x0154 +t \0x0157 \0x0156 +t \0x0159 \0x0158 +t \0x015B \0x015A +t \0x015D \0x015C +t \0x015F \0x015E +t \0x0161 \0x0160 +t \0x0163 \0x0162 +t \0x0165 \0x0164 +t \0x0167 \0x0166 +t \0x0169 \0x0168 +t \0x016B \0x016A +t \0x016D \0x016C +t \0x016F \0x016E +t \0x0171 \0x0170 +t \0x0173 \0x0172 +t \0x0175 \0x0174 +t \0x0177 \0x0176 +t \0x017A \0x0179 +t \0x017C \0x017B +t \0x017E \0x017D +t \0x017F S +# Greek letters: +\0x037A \0x0399 +\0x0390 \0x0399 +\0x03AC \0x0386 +\0x03AD \0x0388 +\0x03AE \0x0389 +\0x03AF \0x038A +\0x03B0 \0x03AB +\0x03B1-\0x03C1 \0x0391-\0x03A1 +\0x03C2 \0x03A3 +\0x03C3-\0x03CB \0x03A3-\0x03AB +\0x03CC \0x038C +\0x03CD \0x038E +\0x03CE \0x038F +\0x03E3 \0x03E2 +\0x03E5 \0x03E4 +\0x03E7 \0x03E6 +\0x03E9 \0x03E8 +\0x03EB \0x03EA +\0x03ED \0x03EC +\0x03EF \0x03ED +# Cyrillic letters: +\0x0430-\0x044F \0x0410-\0x042F +\0x0451-\0x045F \0x0401-\0x040F +\0x0461 \0x0460 +\0x0463 \0x0461 +\0x0465 \0x0464 +\0x0467 \0x0466 +\0x0469 \0x0468 +\0x046B \0x046A +\0x046D \0x046C +\0x046F \0x046E +\0x0471 \0x0470 +\0x0473 \0x0471 +\0x0475 \0x0474 +\0x0477 \0x0476 +\0x0479 \0x0478 +\0x047B \0x047A +\0x047D \0x047C +\0x047F \0x047E +\0x0481 \0x0480 +\0x0491 \0x0490 +\0x0493 \0x0491 +\0x0495 \0x0494 +\0x0497 \0x0496 +\0x0499 \0x0498 +\0x049B \0x049A +\0x049D \0x049C +\0x049F \0x049E +\0x04A1 \0x04A0 +\0x04A3 \0x04A1 +\0x04A5 \0x04A4 +\0x04A7 \0x04A6 +\0x04A9 \0x04A8 +\0x04AB \0x04AA +\0x04AD \0x04AC +\0x04AF \0x04AE +\0x04B1 \0x04B0 +\0x04B3 \0x04B1 +\0x04B5 \0x04B4 +\0x04B7 \0x04B6 +\0x04B9 \0x04B8 +\0x04BB \0x04BA +\0x04BD \0x04BC +\0x04BF \0x04BE +\0x04C2 \0x04C1 +\0x04C4 \0x04C3 +\0x04C8 \0x04C7 +\0x04CC \0x04CB +\0x04D1 \0x04D0 +\0x04D3 \0x04D2 +\0x04D5 \0x04D4 +\0x04D7 \0x04D6 +\0x04D9 \0x04D8 +\0x04DB \0x04DA +\0x04DD \0x04DC +\0x04DF \0x04DE +\0x04E1 \0x04E0 +\0x04E3 \0x04E2 +\0x04E5 \0x04E4 +\0x04E7 \0x04E6 +\0x04E9 \0x04E8 +\0x04EB \0x04EA +\0x04ED \0x04EC +\0x04EF \0x04EE +\0x04F1 \0x04F0 +\0x04F3 \0x04F2 +\0x04F5 \0x04F4 +\0x04F7 \0x04F6 +\0x04F9 \0x04F8 +# Armenian letters: +\0x0561-\0x0586 \0x0531-\0x0556 diff --git a/externals/figlet/fonts/ushebrew.flc b/externals/figlet/fonts/ushebrew.flc new file mode 100644 index 0000000000..313af84b5b --- /dev/null +++ b/externals/figlet/fonts/ushebrew.flc @@ -0,0 +1,33 @@ +flc2a +# implements a natural mapping from the U.S. keyboard +# to Hebrew characters in the Ivrit font. +# Note that capital letters remain unchanged. + +t a \0x05d0 +t b \0x05d1 +t g \0x05d2 +t d \0x05d3 +t h \0x05d4 +t v \0x05d5 +t z \0x05d6 +t c \0x05d7 +t t \0x05d8 +t y \0x05d9 +t k \0x05db +t f \0x05da +t l \0x05dc +t m \0x05de +t o \0x05dd +t n \0x05e0 +t i \0x05df +t e \0x05e1 +t _ \0x05e2 +t p \0x05e4 +t u \0x05e3 +t j \0x05e6 +t w \0x05e5 +t q \0x05e7 +t r \0x05e8 +t s \0x05e9 +t x \0x05ea +t ~ \-3 diff --git a/externals/figlet/fonts/uskata.flc b/externals/figlet/fonts/uskata.flc new file mode 100644 index 0000000000..62e559f4be --- /dev/null +++ b/externals/figlet/fonts/uskata.flc @@ -0,0 +1,53 @@ +flc2a +# Maps the upper and lower case alphabet (A-Z and a-v) into the +# 48 basic katakana Unicodes. Can be used with any Unicode katakana +# font, such as Banner. +t A \0x30A2 +t B \0x30A4 +t C \0x30A6 +t D \0x30A8 +t E \0x30AA +t F \0x30AB +t G \0x30AD +t H \0x30AF +t I \0x30B1 +t J \0x30B3 +t K \0x30B5 +t L \0x30B7 +t M \0x30B9 +t N \0x30BB +t O \0x30BD +t P \0x30BF +t Q \0x30C1 +t R \0x30C4 +t S \0x30C6 +t T \0x30C8 +t U \0x30CA +t V \0x30CB +t W \0x30CC +t X \0x30CD +t Y \0x30CE +t Z \0x30CF +t a \0x30D2 +t b \0x30D5 +t c \0x30D8 +t d \0x30DB +t e \0x30DE +t f \0x30DF +t g \0x30E0 +t h \0x30E1 +t i \0x30E2 +t j \0x30E4 +t k \0x30E6 +t l \0x30E8 +t m \0x30F1 +t n \0x30E9 +t o \0x30EA +t p \0x30EB +t q \0x30EC +t r \0x30ED +t s \0x30EF +t t \0x30F0 +t u \0x30F2 +t v \0x30F3 +t ~ \-4 diff --git a/externals/figlet/fonts/utf8.flc b/externals/figlet/fonts/utf8.flc new file mode 100644 index 0000000000..532986d7c6 --- /dev/null +++ b/externals/figlet/fonts/utf8.flc @@ -0,0 +1,4 @@ +flc2a +# Set UTF-8 input mode (an 8-bit encoding of Unicode that preserves ASCII) +# Meaningful only to FIGlet 2.2 beta 4 or better +u diff --git a/externals/figlet/getopt.c b/externals/figlet/getopt.c new file mode 100644 index 0000000000..421899152c --- /dev/null +++ b/externals/figlet/getopt.c @@ -0,0 +1,104 @@ +/* + * * @(#)getopt.c 2.3 (smail) 5/30/87 + */ + +/* + * Here's something you've all been waiting for: the AT&T public domain + * source for getopt(3). It is the code which was given out at the 1985 + * UNIFORUM conference in Dallas. I obtained it by electronic mail directly + * from AT&T. The people there assure me that it is indeed in the public + * domain. + * + * There is no manual page. That is because the one they gave out at UNIFORUM + * was slightly different from the current System V Release 2 manual page. + * The difference apparently involved a note about the famous rules 5 and 6, + * recommending using white space between an option and its first argument, + * and not grouping options that have arguments. Getopt itself is currently + * lenient about both of these things White space is allowed, but not + * mandatory, and the last option in a group can have an argument. That + * particular version of the man page evidently has no official existence, + * and my source at AT&T did not send a copy. The current SVR2 man page + * reflects the actual behavior of this getopt. However, I am not about to + * post a copy of anything licensed by AT&T. + */ + +#ifdef BSD + #include +#else + #define index strchr + #include +#endif + +/* LINTLIBRARY */ +#ifndef NULL +#define NULL 0 +#endif + +#define EOF (-1) +#define ERR(s, c) if(opterr){\ + extern int write(int, void *, unsigned);\ + char errbuf[2];\ + errbuf[0] = (char)c; errbuf[1] = '\n';\ + (void) write(2, strlwr(argv[0]), (unsigned)strlen(argv[0]));\ + (void) write(2, s, (unsigned)strlen(s));\ + (void) write(2, errbuf, 2);} + +extern char *index(); + +int opterr = 1; +int optind = 1; +int optopt; +char *optarg; + +int getopt(int argc, char *argv[], char *opts) +{ + static int sp = 1; + register int c; + register char *cp; + + if (sp == 1) + { + if (optind >= argc || argv[optind][0] != '-' || + argv[optind][1] == '\0') + return (EOF); + else if (strcmp(argv[optind], "--") == 0) + { + optind++; + return (EOF); + } + } + optopt = c = argv[optind][sp]; + if (c == ':' || (cp = index(opts, c)) == NULL) + { + ERR(": illegal option -- ", c); + if (argv[optind][++sp] == '\0') + { + optind++; + sp = 1; + } + return ('?'); + } + if (*++cp == ':') + { + if (argv[optind][sp + 1] != '\0') + optarg = &argv[optind++][sp + 1]; + else if (++optind >= argc) + { + ERR(": option requires an argument -- ", c); + sp = 1; + return ('?'); + } + else optarg = argv[optind++]; + sp = 1; + } + else + { + if (argv[optind][++sp] == '\0') + { + sp = 1; + optind++; + } + optarg = NULL; + } + return (c); +} diff --git a/externals/figlet/inflate.c b/externals/figlet/inflate.c new file mode 100644 index 0000000000..06cef443b6 --- /dev/null +++ b/externals/figlet/inflate.c @@ -0,0 +1,1321 @@ +/* + * inflate.c - inflate decompression routine + * + * Version 1.1.2 + */ + +/* + * Copyright (C) 1995, Edward B. Hamrick + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the copyright holders + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. The copyright + * holders makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Changes from 1.1 to 1.1.2: + * Relicensed under the MIT license, with consent of the copyright holders. + * Claudio Matsuoka (Jan 11 2011) + */ + +/* + * inflate.c is based on the public-domain (non-copyrighted) version + * written by Mark Adler, version c14o, 23 August 1994. It has been + * modified to be reentrant, more portable, and to be data driven. + */ + +/* + * 1) All file i/o is done externally to these routines + * 2) Routines are symmetrical so inflate can feed into deflate + * 3) Routines can be easily integrated into wide range of applications + * 4) Routines are very portable, and use only ANSI C + * 5) No #defines in inflate.h to conflict with external #defines + * 6) No external routines need be called by these routines + * 7) Buffers are owned by the calling routine + * 8) No static non-constant variables are allowed + */ + +/* + * Note that for each call to InflatePutBuffer, there will be + * 0 or more calls to (*putbuffer_ptr). Before InflatePutBuffer + * returns, it will have output as much uncompressed data as + * is possible. + */ + +#ifdef MEMCPY +#include +#endif + +#include "inflate.h" + +/* + * Macros for constants + */ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef WINDOWSIZE +#define WINDOWSIZE 0x8000 +#endif + +#ifndef WINDOWMASK +#define WINDOWMASK 0x7fff +#endif + +#ifndef BUFFERSIZE +#define BUFFERSIZE 0x4000 +#endif + +#ifndef BUFFERMASK +#define BUFFERMASK 0x3fff +#endif + +#ifndef INFLATESTATETYPE +#define INFLATESTATETYPE 0xabcdabcdL +#endif + +/* + * typedefs + */ + +typedef unsigned long ulg; +typedef unsigned short ush; +typedef unsigned char uch; + +/* Structure to hold state for inflating zip files */ +struct InflateState { + + unsigned long runtimetypeid1; /* to detect run-time errors */ + int errorencountered; /* error encountered flag */ + + /* Decoding state */ + int state; /* -1 -> need block type */ + /* 0 -> need stored setup */ + /* 1 -> need fixed setup */ + /* 2 -> need dynamic setup */ + /* 10 -> need stored data */ + /* 11 -> need fixed data */ + /* 12 -> need dynamic data */ + +/* State for decoding fixed & dynamic data */ + struct huft *tl; /* literal/length decoder tbl */ + struct huft *td; /* distance decoder table */ + int bl; /* bits decoded by tl */ + int bd; /* bits decoded by td */ + + /* State for decoding stored data */ + unsigned int storelength; + + /* State to keep track that last block has been encountered */ + int lastblock; /* current block is last */ + + /* Input buffer state (circular) */ + ulg bb; /* input buffer bits */ + unsigned int bk; /* input buffer count of bits */ + unsigned int bp; /* input buffer pointer */ + unsigned int bs; /* input buffer size */ + unsigned char buffer[BUFFERSIZE]; /* input buffer data */ + + /* Storage for try/catch */ + ulg catch_bb; /* bit buffer */ + unsigned int catch_bk; /* bits in bit buffer */ + unsigned int catch_bp; /* buffer pointer */ + unsigned int catch_bs; /* buffer size */ + + /* Output window state (circular) */ + unsigned int wp; /* output window pointer */ + unsigned int wf; /* output window flush-from */ + unsigned char window[WINDOWSIZE]; /* output window data */ + + /* Application state */ + void *AppState; /* opaque ptr for callout */ + + /* pointers to call-outs */ + int (*putbuffer_ptr)( /* returns 0 on success */ + void *AppState, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ + ); + + void *(*malloc_ptr)(long length); /* utility routine */ + + void (*free_ptr)(void *buffer); /* utility routine */ + + unsigned long runtimetypeid2; /* to detect run-time errors */ +}; + +/* + * Error handling macro + */ + +#define ERROREXIT(is) {(is)->errorencountered = TRUE; return TRUE;} + +/* + * Macros for handling data in the input buffer + * + * Note that the NEEDBITS and DUMPBITS macros + * need to be bracketed by the TRY/CATCH macros + * + * The usage is: + * + * TRY + * { + * NEEDBITS(j) + * x = b & mask_bits[j]; + * DUMPBITS(j) + * } + * CATCH_BEGIN + * cleanup code + * CATCH_END + * + * Note that there can only be one TRY/CATCH pair per routine + * because of the use of goto in the implementation of the macros. + * + * NEEDBITS makes sure that b has at least j bits in it, and + * DUMPBITS removes the bits from b. The macros use the variable k + * for the number of bits in b. Normally, b and k are register + * variables for speed, and are initialized at the beginning of a + * routine that uses these macros from a global bit buffer and count. + * + * In order to not ask for more bits than there are in the compressed + * stream, the Huffman tables are constructed to only ask for just + * enough bits to make up the end-of-block code (value 256). Then no + * bytes need to be "returned" to the buffer at the end of the last + * block. See the huft_build() routine. + */ + +#define TRY \ + is->catch_bb = b; \ + is->catch_bk = k; \ + is->catch_bp = is->bp; \ + is->catch_bs = is->bs; + +#define CATCH_BEGIN \ + goto cleanup_done; \ + cleanup: \ + b = is->catch_bb; \ + k = is->catch_bk; \ + is->bb = b; \ + is->bk = k; \ + is->bp = is->catch_bp; \ + is->bs = is->catch_bs; + +#define CATCH_END \ + cleanup_done: ; + +#define NEEDBITS(n) \ +{ \ + while (k < (n)) \ + { \ + if (is->bs <= 0) \ + { \ + goto cleanup; \ + } \ + b |= ((ulg) (is->buffer[is->bp & BUFFERMASK])) << k; \ + is->bs--; \ + is->bp++; \ + k += 8; \ + } \ +} + +#define DUMPBITS(n) \ +{ \ + b >>= (n); \ + k -= (n); \ +} + +/* + * Macro for flushing the output window to the putbuffer callout. + * + * Note that the window is always flushed when it fills to 32K, + * and before returning to the application. + */ + +#define FLUSHWINDOW(w, now) \ +if ((now && (is->wp > is->wf)) || ((w) >= WINDOWSIZE)) \ +{ \ + is->wp = (w); \ + if ((*(is->putbuffer_ptr)) \ + (is->AppState, is->window+is->wf, is->wp-is->wf)) \ + ERROREXIT(is); \ + is->wp &= WINDOWMASK; \ + is->wf = is->wp; \ + (w) = is->wp; \ +} + +/* + * Inflate deflated (PKZIP's method 8 compressed) data. The compression + * method searches for as much of the current string of bytes (up to a + * length of 258) in the previous 32K bytes. If it doesn't find any + * matches (of at least length 3), it codes the next byte. Otherwise, it + * codes the length of the matched string and its distance backwards from + * the current position. There is a single Huffman code that codes both + * single bytes (called "literals") and match lengths. A second Huffman + * code codes the distance information, which follows a length code. Each + * length or distance code actually represents a base value and a number + * of "extra" (sometimes zero) bits to get to add to the base value. At + * the end of each deflated block is a special end-of-block (EOB) literal/ + * length code. The decoding process is basically: get a literal/length + * code; if EOB then done; if a literal, emit the decoded byte; if a + * length then get the distance and emit the referred-to bytes from the + * sliding window of previously emitted data. + * + * There are (currently) three kinds of inflate blocks: stored, fixed, and + * dynamic. The compressor outputs a chunk of data at a time and decides + * which method to use on a chunk-by-chunk basis. A chunk might typically + * be 32K to 64K, uncompressed. If the chunk is uncompressible, then the + * "stored" method is used. In this case, the bytes are simply stored as + * is, eight bits per byte, with none of the above coding. The bytes are + * preceded by a count, since there is no longer an EOB code. + * + * If the data is compressible, then either the fixed or dynamic methods + * are used. In the dynamic method, the compressed data is preceded by + * an encoding of the literal/length and distance Huffman codes that are + * to be used to decode this block. The representation is itself Huffman + * coded, and so is preceded by a description of that code. These code + * descriptions take up a little space, and so for small blocks, there is + * a predefined set of codes, called the fixed codes. The fixed method is + * used if the block ends up smaller that way (usually for quite small + * chunks); otherwise the dynamic method is used. In the latter case, the + * codes are customized to the probabilities in the current block and so + * can code it much better than the pre-determined fixed codes can. + * + * The Huffman codes themselves are decoded using a mutli-level table + * lookup, in order to maximize the speed of decoding plus the speed of + * building the decoding tables. See the comments below that precede the + * lbits and dbits tuning parameters. + */ + +/* + * Notes beyond the 1.93a appnote.txt: + * + * 1. Distance pointers never point before the beginning of the output + * stream. + * 2. Distance pointers can point back across blocks, up to 32k away. + * 3. There is an implied maximum of 7 bits for the bit length table and + * 15 bits for the actual data. + * 4. If only one code exists, then it is encoded using one bit. (Zero + * would be more efficient, but perhaps a little confusing.) If two + * codes exist, they are coded using one bit each (0 and 1). + * 5. There is no way of sending zero distance codes--a dummy must be + * sent if there are none. (History: a pre 2.0 version of PKZIP would + * store blocks with no distance codes, but this was discovered to be + * too harsh a criterion.) Valid only for 1.93a. 2.04c does allow + * zero distance codes, which is sent as one code of zero bits in + * length. + * 6. There are up to 286 literal/length codes. Code 256 represents the + * end-of-block. Note however that the static length tree defines + * 288 codes just to fill out the Huffman codes. Codes 286 and 287 + * cannot be used though, since there is no length base or extra bits + * defined for them. Similarly, there are up to 30 distance codes. + * However, static trees define 32 codes (all 5 bits) to fill out the + * Huffman codes, but the last two had better not show up in the data. + * 7. Unzip can check dynamic Huffman blocks for complete code sets. + * The exception is that a single code would not be complete (see #4). + * 8. The five bits following the block type is really the number of + * literal codes sent minus 257. + * 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits + * (1+6+6). Therefore, to output three times the length, you output + * three codes (1+1+1), whereas to output four times the same length, + * you only need two codes (1+3). Hmm. + *10. In the tree reconstruction algorithm, Code = Code + Increment + * only if BitLength(i) is not zero. (Pretty obvious.) + *11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) + *12. Note: length code 284 can represent 227-258, but length code 285 + * really is 258. The last length deserves its own, short code + * since it gets used a lot in very redundant files. The length + * 258 is special since 258 - 3 (the min match length) is 255. + *13. The literal/length and distance code bit lengths are read as a + * single stream of lengths. It is possible (and advantageous) for + * a repeat code (16, 17, or 18) to go across the boundary between + * the two sets of lengths. + */ + +/* + * Huffman code lookup table entry--this entry is four bytes for machines + * that have 16-bit pointers (e.g. PC's in the small or medium model). + * Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 + * means that v is a literal, 16 < e < 32 means that v is a pointer to + * the next table, which codes e - 16 bits, and lastly e == 99 indicates + * an unused code. If a code with e == 99 is looked up, this implies an + * error in the data. + */ + +struct huft { + uch e; /* number of extra bits or operation */ + uch b; /* number of bits in this code or subcode */ + union { + ush n; /* literal, length base, or distance base */ + struct huft *t; /* pointer to next level of table */ + } v; +}; + +/* + * Tables for deflate from PKZIP's appnote.txt. + */ + +static const unsigned border[] = { /* Order of the bit length code lengths */ + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +static const ush cplens[] = { /* Copy lengths for literal codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + /* note: see note #13 above about the 258 in this list. */ + +static const ush cplext[] = { /* Extra bits for literal codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ + +static const ush cpdist[] = { /* Copy offsets for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; + +static const ush cpdext[] = { /* Extra bits for distance codes */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + +/* + * Constants for run-time computation of mask + */ + +static const ush mask_bits[] = { + 0x0000, + 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, + 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff +}; + +/* + * Huffman code decoding is performed using a multi-level table lookup. + * The fastest way to decode is to simply build a lookup table whose + * size is determined by the longest code. However, the time it takes + * to build this table can also be a factor if the data being decoded + * is not very long. The most common codes are necessarily the + * shortest codes, so those codes dominate the decoding time, and hence + * the speed. The idea is you can have a shorter table that decodes the + * shorter, more probable codes, and then point to subsidiary tables for + * the longer codes. The time it costs to decode the longer codes is + * then traded against the time it takes to make longer tables. + * + * This results of this trade are in the variables lbits and dbits + * below. lbits is the number of bits the first level table for literal/ + * length codes can decode in one step, and dbits is the same thing for + * the distance codes. Subsequent tables are also less than or equal to + * those sizes. These values may be adjusted either when all of the + * codes are shorter than that, in which case the longest code length in + * bits is used, or when the shortest code is *longer* than the requested + * table size, in which case the length of the shortest code in bits is + * used. + * + * There are two different values for the two tables, since they code a + * different number of possibilities each. The literal/length table + * codes 286 possible values, or in a flat code, a little over eight + * bits. The distance table codes 30 possible values, or a little less + * than five bits, flat. The optimum values for speed end up being + * about one bit more than those, so lbits is 8+1 and dbits is 5+1. + * The optimum values may differ though from machine to machine, and + * possibly even between compilers. Your mileage may vary. + */ + +static const int lbits = 9; /* bits in base literal/length lookup table */ +static const int dbits = 6; /* bits in base distance lookup table */ + +/* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ +#define BMAX 16 /* maximum bit length of any code (16 for explode) */ +#define N_MAX 288 /* maximum number of codes in any set */ + +/* + * Free the malloc'ed tables built by huft_build(), which makes a linked + * list of the tables it made, with the links in a dummy first entry of + * each table. + */ + +static int huft_free( + struct InflateState *is, /* Inflate state */ + struct huft *t /* table to free */ +) +{ + struct huft *p, *q; + + /* Go through linked list, freeing from the malloced (t[-1]) address. */ + p = t; + while (p != (struct huft *)NULL) + { + q = (--p)->v.t; + (*is->free_ptr)((char*)p); + p = q; + } + return 0; +} + +/* + * Given a list of code lengths and a maximum table size, make a set of + * tables to decode that set of codes. Return zero on success, one if + * the given code set is incomplete (the tables are still built in this + * case), two if the input is invalid (all zero length codes or an + * oversubscribed set of lengths), and three if not enough memory. + * The code with value 256 is special, and the tables are constructed + * so that no bits beyond that code are fetched when that code is + * decoded. + */ + +static int huft_build( + struct InflateState *is, /* Inflate state */ + unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ + unsigned n, /* number of codes (assumed <= N_MAX) */ + unsigned s, /* number of simple-valued codes (0..s-1) */ + const ush *d, /* list of base values for non-simple codes */ + const ush *e, /* list of extra bits for non-simple codes */ + struct huft **t, /* result: starting table */ + int *m /* maximum lookup bits, returns actual */ +) +{ + unsigned a; /* counter for codes of length k */ + unsigned c[BMAX+1]; /* bit length count table */ + unsigned el; /* length of EOB code (value 256) */ + unsigned f; /* i repeats in table every f entries */ + int g; /* maximum code length */ + int h; /* table level */ + unsigned i; /* counter, current code */ + unsigned j; /* counter */ + int k; /* number of bits in current code */ + int lx[BMAX+1]; /* memory for l[-1..BMAX-1] */ + int *l = lx+1; /* stack of bits per table */ + unsigned *p; /* pointer into c[], b[], or v[] */ + struct huft *q; /* points to current table */ + struct huft r; /* table entry for structure assignment */ + struct huft *u[BMAX]; /* table stack */ + unsigned v[N_MAX]; /* values in order of bit length */ + int w; /* bits before this table == (l * h) */ + unsigned x[BMAX+1]; /* bit offsets, then code stack */ + unsigned *xp; /* pointer into x */ + int y; /* number of dummy codes added */ + unsigned z; /* number of entries in current table */ + + /* clear the bit length count table */ + for (i=0; i<(BMAX+1); i++) + { + c[i] = 0; + } + + /* Generate counts for each bit length */ + el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */ + p = b; i = n; + do { + c[*p]++; p++; /* assume all entries <= BMAX */ + } while (--i); + if (c[0] == n) /* null input--all zero length codes */ + { + *t = (struct huft *)NULL; + *m = 0; + return 0; + } + + /* Find minimum and maximum length, bound *m by those */ + for (j = 1; j <= BMAX; j++) + if (c[j]) + break; + k = j; /* minimum code length */ + if ((unsigned)*m < j) + *m = j; + for (i = BMAX; i; i--) + if (c[i]) + break; + g = i; /* maximum code length */ + if ((unsigned)*m > i) + *m = i; + + /* Adjust last length count to fill out codes, if needed */ + for (y = 1 << j; j < i; j++, y <<= 1) + if ((y -= c[j]) < 0) + return 2; /* bad input: more codes than bits */ + if ((y -= c[i]) < 0) + return 2; + c[i] += y; + + /* Generate starting offsets into the value table for each length */ + x[1] = j = 0; + p = c + 1; xp = x + 2; + while (--i) { /* note that i == g from above */ + *xp++ = (j += *p++); + } + + /* Make a table of values in order of bit lengths */ + p = b; i = 0; + do { + if ((j = *p++) != 0) + v[x[j]++] = i; + } while (++i < n); + + /* Generate the Huffman codes and for each, make the table entries */ + x[0] = i = 0; /* first Huffman code is zero */ + p = v; /* grab values in bit order */ + h = -1; /* no tables yet--level -1 */ + w = l[-1] = 0; /* no bits decoded yet */ + u[0] = (struct huft *)NULL; /* just to keep compilers happy */ + q = (struct huft *)NULL; /* ditto */ + z = 0; /* ditto */ + + /* go through the bit lengths (k already is bits in shortest code) */ + for (; k <= g; k++) + { + a = c[k]; + while (a--) + { + /* here i is the Huffman code of length k bits for value *p */ + /* make tables up to required level */ + while (k > w + l[h]) + { + w += l[h++]; /* add bits already decoded */ + + /* compute minimum size table less than or equal to *m bits */ + z = (z = g - w) > (unsigned)*m ? *m : z; /* upper limit */ + if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ + { /* too few codes for k-w bit table */ + f -= a + 1; /* deduct codes from patterns left */ + xp = c + k; + while (++j < z) /* try smaller tables up to z bits */ + { + if ((f <<= 1) <= *++xp) + break; /* enough codes to use up j bits */ + f -= *xp; /* else deduct codes from patterns */ + } + } + if ((unsigned)w + j > el && (unsigned)w < el) + j = el - w; /* make EOB code end at table */ + z = 1 << j; /* table entries for j-bit table */ + l[h] = j; /* set table size in stack */ + + /* allocate and link in new table */ + if ((q = (struct huft *) + ((*is->malloc_ptr)((z + 1)*sizeof(struct huft)))) == + (struct huft *)NULL) + { + if (h) + huft_free(is, u[0]); + return 3; /* not enough memory */ + } + *t = q + 1; /* link to list for huft_free() */ + *(t = &(q->v.t)) = (struct huft *)NULL; + u[h] = ++q; /* table starts after link */ + + /* connect to last table, if there is one */ + if (h) + { + x[h] = i; /* save pattern for backing up */ + r.b = (uch)l[h-1]; /* bits to dump before this table */ + r.e = (uch)(16 + j); /* bits in this table */ + r.v.t = q; /* pointer to this table */ + j = (i & ((1 << w) - 1)) >> (w - l[h-1]); + u[h-1][j] = r; /* connect to last table */ + } + } + + /* set up table entry in r */ + r.b = (uch)(k - w); + if (p >= v + n) + r.e = 99; /* out of values--invalid code */ + else if (*p < s) + { + r.e = (uch)(*p < 256 ? 16 : 15); /* 256 is end-of-block code */ + r.v.n = (ush) *p++; /* simple code is just the value */ + } + else + { + r.e = (uch)e[*p - s]; /* non-simple--look up in lists */ + r.v.n = d[*p++ - s]; + } + + /* fill code-like entries with r */ + f = 1 << (k - w); + for (j = i >> w; j < z; j += f) + q[j] = r; + + /* backwards increment the k-bit code i */ + for (j = 1 << (k - 1); i & j; j >>= 1) + i ^= j; + i ^= j; + + /* backup over finished tables */ + while ((i & ((1 << w) - 1)) != x[h]) + w -= l[--h]; /* don't need to update q */ + } + } + + /* return actual size of base table */ + *m = l[0]; + + /* Return true (1) if we were given an incomplete table */ + return y != 0 && g != 1; +} + +/* + * inflate (decompress) the codes in a stored (uncompressed) block. + * Return an error code or zero if it all goes ok. + */ + +static int inflate_stored( + struct InflateState *is /* Inflate state */ +) +{ + ulg b; /* bit buffer */ + unsigned k; /* number of bits in bit buffer */ + unsigned w; /* current window position */ + + /* make local copies of state */ + b = is->bb; /* initialize bit buffer */ + k = is->bk; /* initialize bit count */ + w = is->wp; /* initialize window position */ + + /* + * Note that this code knows that NEEDBITS jumps to cleanup + */ + + while (is->storelength > 0) /* do until end of block */ + { + NEEDBITS(8) + is->window[w++] = (uch) b; + DUMPBITS(8) + FLUSHWINDOW(w, FALSE); + is->storelength--; + } + + cleanup: + + /* restore the state from the locals */ + is->bb = b; /* restore bit buffer */ + is->bk = k; /* restore bit count */ + is->wp = w; /* restore window pointer */ + + if (is->storelength > 0) + return -1; + else + return 0; +} + +static int inflate_codes( + struct InflateState *is, /* Inflate state */ + struct huft *tl, /* literal/length decoder table */ + struct huft *td, /* distance decoder table */ + int bl, /* number of bits decoded by tl[] */ + int bd /* number of bits decoded by td[] */ +) +{ + unsigned e; /* table entry flag/number of extra bits */ + unsigned n, d; /* length and index for copy */ + unsigned w; /* current window position */ + struct huft *t; /* pointer to table entry */ + unsigned ml, md; /* masks for bl and bd bits */ + ulg b; /* bit buffer */ + unsigned k; /* number of bits in bit buffer */ + + /* make local copies of state */ + b = is->bb; /* initialize bit buffer */ + k = is->bk; /* initialize bit count */ + w = is->wp; /* initialize window position */ + + /* inflate the coded data */ + ml = mask_bits[bl]; /* precompute masks for speed */ + md = mask_bits[bd]; + for (;;) /* do until end of block */ + { + TRY + { + NEEDBITS((unsigned)bl) + if ((e = (t = tl + ((unsigned)b & ml))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + + if (e == 16) /* it's a literal */ + { + is->window[w++] = (uch)t->v.n; + FLUSHWINDOW(w, FALSE); + } + else if (e == 15) /* it's an EOB */ + { + break; + } + else /* it's a length */ + { + /* get length of block to copy */ + NEEDBITS(e) + n = t->v.n + ((unsigned)b & mask_bits[e]); + DUMPBITS(e); + + /* decode distance of block to copy */ + NEEDBITS((unsigned)bd) + if ((e = (t = td + ((unsigned)b & md))->e) > 16) + do { + if (e == 99) + return 1; + DUMPBITS(t->b) + e -= 16; + NEEDBITS(e) + } while ((e = (t = t->v.t + ((unsigned)b & mask_bits[e]))->e) > 16); + DUMPBITS(t->b) + NEEDBITS(e) + d = w - t->v.n - ((unsigned)b & mask_bits[e]); + DUMPBITS(e) + + /* do the copy */ + do { + n -= (e = ((e = WINDOWSIZE - ((d &= WINDOWMASK) > w ? d : w)) > n) + ? n : e + ); +#if defined(MEMCPY) + if (w - d >= e) /* (this test assumes unsigned comparison) */ + { + memcpy(is->window + w, is->window + d, e); + w += e; + d += e; + } + else /* do it slow to avoid memcpy() overlap */ +#endif /* MEMCPY */ + do { + is->window[w++] = is->window[d++]; + } while (--e); + FLUSHWINDOW(w, FALSE); + } while (n); + } + } + CATCH_BEGIN + is->wp = w; /* restore window pointer */ + return -1; + CATCH_END + } + + /* restore the state from the locals */ + is->bb = b; /* restore bit buffer */ + is->bk = k; /* restore bit count */ + is->wp = w; /* restore window pointer */ + + /* done */ + return 0; +} + +/* + * "decompress" an inflated type 0 (stored) block. + */ + +static int inflate_stored_setup( + struct InflateState *is /* Inflate state */ +) +{ + unsigned n; /* number of bytes in block */ + ulg b; /* bit buffer */ + unsigned k; /* number of bits in bit buffer */ + + /* make local copies of state */ + b = is->bb; /* initialize bit buffer */ + k = is->bk; /* initialize bit count */ + + TRY + { + /* go to byte boundary */ + n = k & 7; + DUMPBITS(n); + + /* get the length and its complement */ + NEEDBITS(16) + n = ((unsigned)b & 0xffff); + DUMPBITS(16) + NEEDBITS(16) + if (n != (unsigned)((~b) & 0xffff)) + return 1; /* error in compressed data */ + DUMPBITS(16) + } + CATCH_BEGIN + return -1; + CATCH_END + + /* Save store state for this block */ + is->storelength = n; + + /* restore the state from the locals */ + is->bb = b; /* restore bit buffer */ + is->bk = k; /* restore bit count */ + + return 0; +} + +/* + * decompress an inflated type 1 (fixed Huffman codes) block. We should + * either replace this with a custom decoder, or at least precompute the + * Huffman tables. + */ + +static int inflate_fixed_setup( + struct InflateState *is /* Inflate state */ +) +{ + int i; /* temporary variable */ + struct huft *tl; /* literal/length code table */ + struct huft *td; /* distance code table */ + int bl; /* lookup bits for tl */ + int bd; /* lookup bits for td */ + unsigned l[288]; /* length list for huft_build */ + + /* set up literal table */ + for (i = 0; i < 144; i++) + l[i] = 8; + for (; i < 256; i++) + l[i] = 9; + for (; i < 280; i++) + l[i] = 7; + for (; i < 288; i++) /* make a complete, but wrong code set */ + l[i] = 8; + bl = 7; + if ((i = huft_build(is, l, 288, 257, cplens, cplext, &tl, &bl)) != 0) + return i; + + /* set up distance table */ + for (i = 0; i < 30; i++) /* make an incomplete code set */ + l[i] = 5; + bd = 5; + if ((i = huft_build(is, l, 30, 0, cpdist, cpdext, &td, &bd)) > 1) + { + huft_free(is, tl); + return i; + } + + /* Save inflate state for this block */ + is->tl = tl; + is->td = td; + is->bl = bl; + is->bd = bd; + + return 0; +} + +/* + * decompress an inflated type 2 (dynamic Huffman codes) block. + */ + +#define PKZIP_BUG_WORKAROUND + +static int inflate_dynamic_setup( + struct InflateState *is /* Inflate state */ +) +{ + int i; /* temporary variables */ + unsigned j; + unsigned l; /* last length */ + unsigned m; /* mask for bit lengths table */ + unsigned n; /* number of lengths to get */ + struct huft *tl; /* literal/length code table */ + struct huft *td; /* distance code table */ + int bl; /* lookup bits for tl */ + int bd; /* lookup bits for td */ + unsigned nb; /* number of bit length codes */ + unsigned nl; /* number of literal/length codes */ + unsigned nd; /* number of distance codes */ +#ifdef PKZIP_BUG_WORKAROUND + unsigned ll[288+32]; /* literal/length and distance code lengths */ +#else + unsigned ll[286+30]; /* literal/length and distance code lengths */ +#endif + ulg b; /* bit buffer */ + unsigned k; /* number of bits in bit buffer */ + + /* make local copies of state */ + b = is->bb; /* initialize bit buffer */ + k = is->bk; /* initialize bit count */ + + /* initialize tl for cleanup */ + tl = NULL; + + TRY + { + /* read in table lengths */ + NEEDBITS(5) + nl = 257 + ((unsigned)b & 0x1f); /* number of literal/length codes */ + DUMPBITS(5) + NEEDBITS(5) + nd = 1 + ((unsigned)b & 0x1f); /* number of distance codes */ + DUMPBITS(5) + NEEDBITS(4) + nb = 4 + ((unsigned)b & 0xf); /* number of bit length codes */ + DUMPBITS(4) +#ifdef PKZIP_BUG_WORKAROUND + if (nl > 288 || nd > 32) +#else + if (nl > 286 || nd > 30) +#endif + return 1; /* bad lengths */ + + /* read in bit-length-code lengths */ + for (j = 0; j < 19; j++) ll[j] = 0; + for (j = 0; j < nb; j++) + { + NEEDBITS(3) + ll[border[j]] = (unsigned)b & 7; + DUMPBITS(3) + } + + /* build decoding table for trees--single level, 7 bit lookup */ + bl = 7; + if ((i = huft_build(is, ll, 19, 19, NULL, NULL, &tl, &bl)) != 0) + { + if (i == 1) + huft_free(is, tl); + return i; /* incomplete code set */ + } + + /* read in literal and distance code lengths */ + n = nl + nd; + m = mask_bits[bl]; + i = l = 0; + while ((unsigned)i < n) + { + NEEDBITS((unsigned)bl) + j = (td = tl + ((unsigned)b & m))->b; + DUMPBITS(j) + j = td->v.n; + if (j < 16) /* length of code in bits (0..15) */ + ll[i++] = l = j; /* save last length in l */ + else if (j == 16) /* repeat last length 3 to 6 times */ + { + NEEDBITS(2) + j = 3 + ((unsigned)b & 3); + DUMPBITS(2) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = l; + } + else if (j == 17) /* 3 to 10 zero length codes */ + { + NEEDBITS(3) + j = 3 + ((unsigned)b & 7); + DUMPBITS(3) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = 0; + l = 0; + } + else /* j == 18: 11 to 138 zero length codes */ + { + NEEDBITS(7) + j = 11 + ((unsigned)b & 0x7f); + DUMPBITS(7) + if ((unsigned)i + j > n) + return 1; + while (j--) + ll[i++] = 0; + l = 0; + } + } + + /* free decoding table for trees */ + huft_free(is, tl); + } + CATCH_BEGIN + if (tl) huft_free(is, tl); + return -1; + CATCH_END + + /* restore the state from the locals */ + is->bb = b; /* restore bit buffer */ + is->bk = k; /* restore bit count */ + + /* build the decoding tables for literal/length and distance codes */ + bl = lbits; + if ((i = huft_build(is, ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) + { + if (i == 1) { + /* incomplete literal tree */ + huft_free(is, tl); + } + return i; /* incomplete code set */ + } + bd = dbits; + if ((i = huft_build(is, ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) + { + if (i == 1) { + /* incomplete distance tree */ +#ifdef PKZIP_BUG_WORKAROUND + } +#else + huft_free(is, td); + } + huft_free(is, tl); + return i; /* incomplete code set */ +#endif + } + + /* Save inflate state for this block */ + is->tl = tl; + is->td = td; + is->bl = bl; + is->bd = bd; + + return 0; +} + +/* Routine to initialize inflate decompression */ +void *InflateInitialize( /* returns InflateState */ + void *AppState, /* for passing to putbuffer */ + int (*putbuffer_ptr)( /* returns 0 on success */ + void *AppState, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ + ), + void *(*malloc_ptr)(long length), /* utility routine */ + void (*free_ptr)(void *buffer) /* utility routine */ +) +{ + struct InflateState *is; + + /* Do some argument checking */ + if ((!putbuffer_ptr) || (!malloc_ptr) || (!free_ptr)) return NULL; + + /* Allocate the InflateState memory area */ + is = (struct InflateState *) (*malloc_ptr)(sizeof(struct InflateState)); + if (!is) return NULL; + + /* Set up the initial values of the inflate state */ + is->runtimetypeid1 = INFLATESTATETYPE; + is->errorencountered = FALSE; + + is->bb = 0; + is->bk = 0; + is->bp = 0; + is->bs = 0; + + is->wp = 0; + is->wf = 0; + + is->state = -1; + is->lastblock = FALSE; + + is->AppState = AppState; + + is->putbuffer_ptr = putbuffer_ptr; + is->malloc_ptr = malloc_ptr; + is->free_ptr = free_ptr; + + is->runtimetypeid2 = INFLATESTATETYPE; + + /* Return this state info to the caller */ + return is; +} + +/* Call-in routine to put a buffer into inflate decompression */ +int InflatePutBuffer( /* returns 0 on success */ + void *InflateState, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ +) +{ + struct InflateState *is; + + int beginstate; + + /* Get (and check) the InflateState structure */ + is = (struct InflateState *) InflateState; + if (!is || (is->runtimetypeid1 != INFLATESTATETYPE) + || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE; + if (is->errorencountered) return TRUE; + + do + { + int size, i; + + + if ((is->state == -1) && (is->lastblock)) break; + + /* Save the beginning state */ + beginstate = is->state; + + /* Push as much as possible into input buffer */ + size = BUFFERSIZE - is->bs; + if (size > length) size = (int) length; + i = is->bp + is->bs; + + while (size-- > 0) + { + is->buffer[i++ & BUFFERMASK] = *buffer; + is->bs++; + buffer++; + length--; + } + + /* Process some more data */ + if (is->state == -1) + { + int e; /* last block flag */ + unsigned t; /* block type */ + + ulg b; /* bit buffer */ + unsigned k; /* number of bits in bit buffer */ + + /* make local copies of state */ + b = is->bb; /* initialize bit buffer */ + k = is->bk; /* initialize bit count */ + + TRY + { + /* read in last block bit */ + NEEDBITS(1) + e = (int)b & 1; + DUMPBITS(1) + + /* read in block type */ + NEEDBITS(2) + t = (unsigned)b & 3; + DUMPBITS(2) + + if (t <= 2) + { + is->state = t; + is->lastblock = e; + } + else + { + ERROREXIT(is); + } + } + CATCH_BEGIN + CATCH_END + + /* restore the state from the locals */ + is->bb = b; /* restore bit buffer */ + is->bk = k; /* restore bit count */ + } + else if (is->state == 0) + { + int ret; + + ret = inflate_stored_setup(is); + + if (ret > 0) + ERROREXIT(is); + + if (ret == 0) is->state += 10; + } + else if (is->state == 1) + { + int ret; + + ret = inflate_fixed_setup(is); + + if (ret > 0) + ERROREXIT(is); + + if (ret == 0) is->state += 10; + } + else if (is->state == 2) + { + int ret; + + ret = inflate_dynamic_setup(is); + + if (ret > 0) + ERROREXIT(is); + + if (ret == 0) is->state += 10; + } + else if (is->state == 10) + { + int ret; + + ret = inflate_stored(is); + + if (ret > 0) + ERROREXIT(is); + + if (ret == 0) + { + is->state = -1; + } + } + else if ((is->state == 11) || + (is->state == 12) ) + { + int ret; + + ret = inflate_codes(is, is->tl, is->td, is->bl, is->bd); + + if (ret > 0) + ERROREXIT(is); + + if (ret == 0) + { + /* free the decoding tables */ + huft_free(is, is->tl); + huft_free(is, is->td); + is->state = -1; + } + } + else + { + ERROREXIT(is); + } + } + while (length || (is->state != beginstate)); + + FLUSHWINDOW(is->wp, TRUE); + + return is->errorencountered; +} + +/* Routine to terminate inflate decompression */ +int InflateTerminate( /* returns 0 on success */ + void *InflateState /* opaque ptr from Initialize */ +) +{ + int err; + void (*free_ptr)(void *buffer); + + struct InflateState *is; + + /* Get (and check) the InflateState structure */ + is = (struct InflateState *) InflateState; + if (!is || (is->runtimetypeid1 != INFLATESTATETYPE) + || (is->runtimetypeid2 != INFLATESTATETYPE)) return TRUE; + + /* save the error return */ + err = is->errorencountered || (is->bs > 0) + || (is->state != -1) + || (!is->lastblock); + + /* save the address of the free routine */ + free_ptr = is->free_ptr; + + /* Deallocate everything */ + (*free_ptr)(is); + + return err; +} diff --git a/externals/figlet/inflate.h b/externals/figlet/inflate.h new file mode 100644 index 0000000000..4fc7454820 --- /dev/null +++ b/externals/figlet/inflate.h @@ -0,0 +1,90 @@ +/* + * inflate.h - inflate decompression routine + * + * Version 1.1.2 + */ + +/* + * Copyright (C) 1995, Edward B. Hamrick + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the copyright holders + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. The copyright + * holders makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Changes from 1.1 to 1.1.2: + * Relicensed under the MIT license, with consent of the copyright holders. + * Claudio Matsuoka (Jan 11 2011) + */ + +/* + * 1) All file i/o is done externally to these routines + * 2) Routines are symmetrical so inflate can feed into deflate + * 3) Routines can be easily integrated into wide range of applications + * 4) Routines are very portable, and use only ANSI C + * 5) No #defines in inflate.h to conflict with external #defines + * 6) No external routines need be called by these routines + * 7) Buffers are owned by the calling routine + * 8) No static non-constant variables are allowed + */ + +/* + * Note that for each call to InflatePutBuffer, there will be + * 0 or more calls to (*putbuffer_ptr). All except the last + * call to (*putbuffer_ptr) will be with 32768 bytes, although + * this behaviour may change in the future. Before InflatePutBuffer + * returns, it will have output as much uncompressed data as + * is possible. + */ + +#ifndef __INFLATE_H +#define __INFLATE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* Routine to initialize inflate decompression */ +void *InflateInitialize( /* returns InflateState */ + void *AppState, /* for passing to putbuffer */ + int (*putbuffer_ptr)( /* returns 0 on success */ + void *AppState, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ + ), + void *(*malloc_ptr)(long length), /* utility routine */ + void (*free_ptr)(void *buffer) /* utility routine */ +); + +/* Call-in routine to put a buffer into inflate decompression */ +int InflatePutBuffer( /* returns 0 on success */ + void *InflateState, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ +); + +/* Routine to terminate inflate decompression */ +int InflateTerminate( /* returns 0 on success */ + void *InflateState /* opaque ptr from Initialize */ +); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/externals/figlet/run-tests.sh b/externals/figlet/run-tests.sh new file mode 100755 index 0000000000..4c373ec8d0 --- /dev/null +++ b/externals/figlet/run-tests.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +LC_ALL=POSIX +export LC_ALL + +TESTDIR=tests +OUTPUT=.test-output.txt +LOGFILE=tests.log +CMD="./figlet" +FONTDIR="$1" + +run_test() { + test_dsc=$1 + test_cmd=$2 + + total=`expr $total + 1` + test_num=`printf %03d $total` + + echo >> $LOGFILE + printf "Run test $test_num: ${test_dsc}... " | tee -a $LOGFILE + echo >> $LOGFILE + echo "Command: $test_cmd" >> $LOGFILE + eval "$test_cmd" > "$OUTPUT" 2>> $LOGFILE + cmp "$OUTPUT" "tests/res${test_num}.txt" >> $LOGFILE 2>&1 + if [ $? -eq 0 ]; then + echo "pass" | tee -a $LOGFILE + else + echo "**fail**" | tee -a $LOGFILE + result=1 + fail=`expr $fail + 1` + fi +} + +result=0 +fail=0 +$CMD -v > $LOGFILE + +file="$TESTDIR/input.txt" +cmd="cat $file|$CMD" + +printf "Default font dir: "; $CMD -I2 +if [ -n "$FONTDIR" ]; then + FIGLET_FONTDIR="$FONTDIR" + export FIGLET_FONTDIR +fi +printf "Current font dir: "; $CMD -I2 +printf "Default font: "; $CMD -I3 +$CMD -f small "Test results" | tee -a $LOGFILE + +total=0 + +run_test "showfigfonts output" "./showfigfonts" +run_test "text rendering in all fonts" \ + "for i in fonts/*.flf; do $cmd -f \$i; done" +run_test "long text rendering" "cat tests/longtext.txt|$CMD" +run_test "left-to-right text" "$cmd -L" +run_test "right-to-left text" "$cmd -R" +run_test "flush-left justification" "$cmd -l" +run_test "flush-right justification" "$cmd -r" +run_test "center justification" "$cmd -c" +run_test "kerning mode" "$cmd -k" +run_test "full width mode" "$cmd -W" +run_test "overlap mode" "$cmd -o" +run_test "tlf2 font rendering" "$cmd -f tests/emboss" +run_test "kerning flush-left right-to-left mode" "$cmd -klR" +run_test "kerning centered right-to-left mode (slant)" "$cmd -kcR -f slant" +run_test "full-width flush-right right-to-left mode" "$cmd -WrR" +run_test "overlap flush-right mode (big)" "$cmd -or -f big" +run_test "tlf2 kerning flush-right mode" "$cmd -kr -f tests/emboss" +run_test "tlf2 overlap centered mode" "$cmd -oc -f tests/emboss" +run_test "tlf2 full-width flush-left right-to-left mode" \ + "$cmd -WRl -f tests/emboss" +run_test "specify font directory" \ + "X=.t;mkdir \$X;cp fonts/script.flf \$X/foo.flf;$cmd -d\$X -ffoo;rm -Rf \$X" +run_test "paragraph mode long line output" "$cmd -p -w250" +run_test "short line output" "$cmd -w5" +run_test "kerning paragraph centered mode (small)" "$cmd -kpc -fsmall" +run_test "list of control files" "ls fonts/*flc" +run_test "uskata control file" "printf 'ABCDE'|$CMD -fbanner -Cuskata" +run_test "jis0201 control file" "printf '\261\262\263\264\265'|$CMD -fbanner -Cjis0201" +run_test "right-to-left smushing with JavE font" "$cmd -f tests/flowerpower -R" + +rm -f "$OUTPUT" + +echo +if [ $result -ne 0 ]; then + echo " $fail tests failed. See $LOGFILE for result details" +else + echo " All tests passed." +fi + +exit $result diff --git a/externals/figlet/showfigfonts b/externals/figlet/showfigfonts new file mode 100755 index 0000000000..90c4d0afed --- /dev/null +++ b/externals/figlet/showfigfonts @@ -0,0 +1,55 @@ +#!/bin/sh - +# showfigfonts by Glenn Chappell +# figlet release 2.1.1 -- 25 Aug 1994 +# Based on showfigfonts by Greg Galperin , Nov 1993. +# +# Prints a list of available figlet fonts, along with a sample of each +# font. If directory is given, lists fonts in that directory; otherwise +# uses the default font directory. If word is given, prints that word +# in each font; otherwise prints the font name. +# +# Usage: showfigfonts [ -d directory ] [ word ] + +DIR=`dirname $0` +FIGLET=$DIR/figlet + +# Get figlet version +FIGLETVERSION=`$FIGLET -I1 2>/dev/null` +if [ -z "$FIGLETVERSION" ]; then + FIGLETVERSION=20000 +fi + +USAGE="Usage: `basename $0` [ -d directory ] [ word ]" + +if [ "$1" = '-d' ]; then + FONTDIR="$2" + WORD="$3" + if [ $# -gt 3 ] || [ $# -lt 2 ]; then + echo "$USAGE" + exit 1 + fi +else + WORD="$1" + if [ $# -gt 1 ]; then + echo "$USAGE" + exit 1 + fi + if [ "$FIGLETVERSION" -lt 20100 ]; then + # figlet 2.0 + FONTDIR="`$FIGLET -F | sed -e '1d' -e '3,$d' -e 's/Font directory: //'`" + else + # figlet 2.1 or later + FONTDIR="`$FIGLET -I2`" + fi +fi + +FONTLIST=`ls "$FONTDIR"/*.flf | sed 's!.*/\(.*\)\.flf$!\1!'` +for F in $FONTLIST ; do + echo "$F :" + if [ -n "$WORD" ]; then + echo "$WORD" | $FIGLET -d "$FONTDIR" -f "$F" + else + echo "$F" | $FIGLET -d "$FONTDIR" -f "$F" + fi + echo "" ; echo "" +done diff --git a/externals/figlet/showfigfonts.6 b/externals/figlet/showfigfonts.6 new file mode 100644 index 0000000000..0ec5783dff --- /dev/null +++ b/externals/figlet/showfigfonts.6 @@ -0,0 +1,67 @@ +.\" showfigfonts by Glenn Chappell +.\" figlet release 2.1.1 -- 25 Aug 1994 +.\" Based on showfigfonts by Greg Galperin , Nov 1993. +.\" +.\" Prints a list of available figlet fonts, along with a sample of each +.\" font. If directory is given, lists fonts in that directory; otherwise +.\" uses the default font directory. If word is given, prints that word +.\" in each font; otherwise prints the font name. +.\" +.\" Usage: showfigfonts [ -d directory ] [ word ] +.\" +.\" Manual page by Jonathon Abbott, for the Debian Project +.\" slightly modified by Francesco Tapparo, for the Debian Project +.TH SHOWFIGFONTS 6 "31 May 2012" "v2.2.5" + +.SH NAME +showfigfonts \- prints a list of available figlet fonts + +.SH SYNOPSIS +.B showfigfonts +[ +.B \-d +.I directory +] +[ +.I word +] + +.SH "DESCRIPTION" +Prints a list of available figlet fonts, along with a sample of each +font. If directory is given, lists fonts in that directory; otherwise +uses the default font directory. If word is given, prints that word +in each font; otherwise prints the font name. + +.SH EXAMPLES +To use +.B showfigfonts +with its default settings, simply type +.RS + +.B example% showfigfonts + +.RE + +To print all the fonts in /usr/share/fonts/figlet +.RS + +.B example% showfigfonts -d /usr/share/fonts/figlet + +.RE + +To print the word foo using all available fonts +.RS + +.B example% showfigfonts foo + +.RE + +.SH "AUTHORS" +showfigfonts was written by Glenn Chappell + +This manual page was written by Jonathon Abbott for the Debian Project. + +.SH "SEE ALSO" +.BR figlet (6), +.BR chkfont (6), +.BR figlist (6) diff --git a/externals/figlet/tests/emboss.tlf b/externals/figlet/tests/emboss.tlf new file mode 100644 index 0000000000..eff0852d4f --- /dev/null +++ b/externals/figlet/tests/emboss.tlf @@ -0,0 +1,325 @@ +tlf2a 3 3 8 -1 18 0 0 0 +=============================================================================== + This is emboss.tlf, or “Emboss”, by Sam Hocevar . It was +created on September 30th, 2006. + + This font is free software. It comes without any warranty, to the extent +permitted by applicable law. You can redistribute it and/or modify it under +the terms of the Do What The Fuck You Want To Public License, Version 2, +as published by Sam Hocevar. See http://sam.zoy.org/wtfpl/COPYING for more +details. + + Missing characters: # $ % , ; < > + + To create emboss2.tlf, use the following command: + $ sed '/@@/,$y/━┃┏┓┗┛/═║╔╗╚╝/' < emboss.tlf > emboss2.tlf + + This font is part of TOIlet’s official distribution. More information +on the TOIlet website at http://caca.zoy.org/wiki/toilet +=============================================================================== + @ + @ + @@ +┃! +┛! +┛!! +┛┛" + " + "" + @ + @ +#@@ + @ + @ +$@@ + @ + @ +%@@ +┏┛┃ & +┃━┏┛& +━━┛ && +┛' + ' + '' + ┛( +┃ ( + ┛(( +━ ) + ┃) +━ )) +┛ ┛* +━┏┛* +┛ ┛** + ┃ + +━┏┛+ + ┛ ++ + @ + @ +,@@ + - +━┛- + -- + . + . +┛.. + ┛/ + ┛ / +┛ // +┏━┃0 +┃┛┃0 +━━┛00 +━┃ 1 + ┃ 1 +━━┛11 +━━┃2 +┏━┛2 +━━┛22 +━━┃3 +━━┃3 +━━┛33 +┃ ┃4 +━━┃4 + ┛44 +┏━┛5 +━━┃5 +━━┛55 +┏━┛6 +┏━┃6 +━━┛66 +┏━┃7 + ┃7 + ┛77 +┏━┃8 +┏━┃8 +━━┛88 +┏━┃9 +━━┃9 +━━┛99 + : +┛: +┛:: + @ + @ +;@@ + @ + @ +<@@ + = +━━┛= +━━┛== + @ + @ +>@@ +┏━┃? + ┛? + ┛ ?? +┏━┃@ +┃┛┛@ +━━┛@@ +┏━┃A +┏━┃A +┛ ┛AA +┏━ B +┏━┃B +━━ BB +┏━┛C +┃ C +━━┛CC +┏━ D +┃ ┃D +━━ DD +┏━┛E +┏━┛E +━━┛EE +┏━┛F +┏━┛F +┛ FF +┏━┛G +┃ ┃G +━━┛GG +┃ ┃H +┏━┃H +┛ ┛HH +┛I +┃I +┛II + ┛J + ┃J +━┛JJ +┃ ┃K +┏┛ K +┛ ┛KK +┃ L +┃ L +━━┛LL +┏┏ M +┃┃┃M +┛┛┛MM +┏━ N +┃ ┃N +┛ ┛NN +┏━┃O +┃ ┃O +━━┛OO +┏━┃p +┏━┛P +┛ PP +┏━┃ Q +┃ ┃ Q +━━━┛QQ +┏━┃R +┏┏┛R +┛ ┛RR +┏━┛S +━━┃S +━━┛SS +━┏┛T + ┃ T + ┛ TT +┃ ┃U +┃ ┃U +━━┛UU +┃ ┃V +┃ ┃V + ┛ VV +┃┃┃W +┃┃┃W +━━┛WW +┃ ┃X + ┛ X +┛ ┛XX +┃ ┃Y +━┏┛Y + ┛ YY +━━┃Z +┏┛ Z +━━┛ZZ +┏┛[ +┃ [ +━┛[[ +┛ \ + ┛ \ + ┛\\ +━┃] + ┃] +━┛]] + ┛ ^ +┛ ┛^ + ^^ + _ + _ +━━┛__ +┛ ` + ┛` + `` +┏━┃a +┏━┃a +┛ ┛aa +┏━ b +┏━┃b +━━ bb +┏━┛c +┃ c +━━┛cc +┏━ d +┃ ┃d +━━ dd +┏━┛e +┏━┛e +━━┛ee +┏━┛f +┏━┛f +┛ ff +┏━┛g +┃ ┃g +━━┛gg +┃ ┃h +┏━┃h +┛ ┛hh +┛i +┃i +┛ii + ┛j + ┃j +━┛jj +┃ ┃k +┏┛ k +┛ ┛kk +┃ l +┃ l +━━┛ll +┏┏ m +┃┃┃m +┛┛┛mm +┏━ n +┃ ┃n +┛ ┛nn +┏━┃o +┃ ┃o +━━┛oo +┏━┃p +┏━┛p +┛ pp +┏━┃ q +┃ ┃ q +━━━┛qq +┏━┃r +┏┏┛r +┛ ┛rr +┏━┛s +━━┃s +━━┛ss +━┏┛t + ┃ t + ┛ tt +┃ ┃u +┃ ┃u +━━┛uu +┃ ┃v +┃ ┃v + ┛ vv +┃┃┃w +┃┃┃w +━━┛ww +┃ ┃x + ┛ x +┛ ┛xx +┃ ┃y +━┏┛y + ┛ yy +━━┃z +┏┛ z +━━┛zz + ┏┛{ +━┃ { + ━┛{{ +┃| +┃| +┛|| +━┃ } + ┏┛} +━┛ }} + ┛ ┛~ +┛ ┛ ~ + ~~ +┏━┃┏━┛Ä +┏━┃┏━┛Ä +┛ ┛━━┛ÄÄ +┏━┃┏━┛Ö +┃ ┃┏━┛Ö +━━┛━━┛ÖÖ +┃ ┃┏━┛Ü +┃ ┃┏━┛Ü +━━┛━━┛ÜÜ +┏━┃┏━┛ä +┏━┃┏━┛ä +┛ ┛━━┛ää +┏━┃┏━┛ö +┃ ┃┏━┛ö +━━┛━━┛öö +┃ ┃┏━┛ü +┃ ┃┏━┛ü +━━┛━━┛üü +┏━┛┏━┛ß +━━┃━━┃ß +━━┛━━┛ßß diff --git a/externals/figlet/tests/flowerpower.flf b/externals/figlet/tests/flowerpower.flf new file mode 100644 index 0000000000..3f294fb374 Binary files /dev/null and b/externals/figlet/tests/flowerpower.flf differ diff --git a/externals/figlet/tests/input.txt b/externals/figlet/tests/input.txt new file mode 100644 index 0000000000..8826520227 --- /dev/null +++ b/externals/figlet/tests/input.txt @@ -0,0 +1,7 @@ + joshk@influx:/etc/logrotate.d> sh -n * + apache: line 14: syntax error near unexpected token `}' + apache: line 14: `}' + the plot thickens + those aren't shell scripts + this wasn't chicken. + -- in #debian-devel diff --git a/externals/figlet/tests/longtext.txt b/externals/figlet/tests/longtext.txt new file mode 100644 index 0000000000..72e3a18209 --- /dev/null +++ b/externals/figlet/tests/longtext.txt @@ -0,0 +1,14 @@ + What is involved in such [close] relationships is a form of emotional +chemistry, so far unexplained by any school of psychiatry I am aware of, that +conditions nothing so simple as a choice between the poles of attraction and +repulsion. You can meet some people thirty, forty times down the years, and +they remain amiable bystanders, like the shore lights of towns that a sailor +passes at stated times but never calls at on the regular run. Conversely, +all considerations of sex aside, you can meet some other people once or twice +and they remain permanent influences on your life. + Everyone is aware of this discrepancy between the acquaintance seen +as familiar wallpaper or instant friend. The chemical action it entails is +less worth analyzing than enjoying. At any rate, these six pieces are about +men with whom I felt an immediate sympat - to use a coining of Max Beerbohm's +more satisfactory to me than the opaque vogue word "empathy". + -- Alistair Cooke, "Six Men" diff --git a/externals/figlet/tests/res001.txt b/externals/figlet/tests/res001.txt new file mode 100644 index 0000000000..a85fa59528 --- /dev/null +++ b/externals/figlet/tests/res001.txt @@ -0,0 +1,148 @@ +banner : + +##### ## # # # # ###### ##### +# # # # ## # ## # # # # +##### # # # # # # # # ##### # # +# # ###### # # # # # # # ##### +# # # # # ## # ## # # # +##### # # # # # # ###### # # + + + +big : + _ _ +| | (_) +| |__ _ __ _ +| '_ \| |/ _` | +| |_) | | (_| | +|_.__/|_|\__, | + __/ | + |___/ + + +block : + +_| _| _| +_|_|_| _| _|_| _|_|_| _| _| +_| _| _| _| _| _| _|_| +_| _| _| _| _| _| _| _| +_|_|_| _| _|_| _|_|_| _| _| + + + + +bubble : + _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ +( b | u | b | b | l | e ) + \_/ \_/ \_/ \_/ \_/ \_/ + + +digital : ++-+-+-+-+-+-+-+ +|d|i|g|i|t|a|l| ++-+-+-+-+-+-+-+ + + +ivrit : + _ _ _ + | |_(_)_ ____ _(_) + | __| | '__\ \ / / | + | |_| | | \ V /| | + \__|_|_| \_/ |_| + + + +lean : + + _/ + _/ _/_/ _/_/_/ _/_/_/ + _/ _/_/_/_/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ +_/ _/_/_/ _/_/_/ _/ _/ + + + + +mini : + +._ _ o._ o +| | ||| || + + + +mnemonic : +mnemonic + + +script : + + o + , __ ,_ _ _|_ +/ \_/ / | | |/ \_| + \/ \___/ |_/|_/|__/ |_/ + /| + \| + + +shadow : + | | + __| __ \ _` | _` | _ \\ \ \ / +\__ \ | | | ( | ( | ( |\ \ \ / +____/_| |_|\__,_|\__,_|\___/ \_/\_/ + + + +slant : + __ __ + _____/ /___ _____ / /_ + / ___/ / __ `/ __ \/ __/ + (__ ) / /_/ / / / / /_ +/____/_/\__,_/_/ /_/\__/ + + + +small : + _ _ + ____ __ __ _| | | +(_-< ' \/ _` | | | +/__/_|_|_\__,_|_|_| + + + +smscript : + + , , _ ,_ o _|_ +/ \_/|/|/| / \_/ / | | |/\_| + \/ | | |_/ \/ \__/ |/|/|_/ |_/ + (| + + +smshadow : + | | +(_-< ` \ (_-< \ _` | _` | _ \\ \ \ / +___/_|_|_|___/_| _|\__,_|\__,_|\___/ \_/\_/ + + + +smslant : + __ __ + ___ __ _ ___ / /__ ____ / /_ + (_- > + \ \| | (_) \__ \ | | | < / / + \_\ |\___/|___/_| |_|_|\_\/_/ + _/ | + |__/ + _ _ _ _ __ _ __ _ + (_) | | | | ____ (_) / _| | _ / / | | + _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / /__| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ \ __/ __| + | | (_) \__ \ | | | < | (_| | | | | | | | | |_| |> < _ / / __/ || (__ + | |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| + _/ | \____/ +|__/ + ___ _ _ ___ _ + / / | | | | | | \ \ | | + / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__ + / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > > / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | +/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + __/ | + |___/ + _ + /\| |/\ + ______ _ __ \ ` ' / +|______| '_ \ |_ _| + | | | | / , . \ + |_| |_| \/|_|\/ + + + ___ _ _ __ _ + / (_) | | | | \ \ | | _ + / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_) +< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \ + \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + _/ | | | + |__/ |_| + _ _ __ _ _ _ +| (_) /_ | || | _ | | +| |_ _ __ ___ | | || |_(_) ___ _ _ _ __ | |_ __ ___ __ +| | | '_ \ / _ \ | |__ _| / __| | | | '_ \| __/ _` \ \/ / +| | | | | | __/ | | | | _ \__ \ |_| | | | | || (_| |> < +|_|_|_| |_|\___| |_| |_| (_) |___/\__, |_| |_|\__\__,_/_/\_\ + __/ | + |___/ + + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| +| __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + + _ _ _ _ + | | | | | | | | + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + | | + |_| + ___ _ +( ) \ ( ) + \|| ||/ + \ \ + / / + | | + /_/ + + ___ _ _ __ _ + / (_) | | | | \ \ | | _ + / / _ ___ ___| |__ | | __ \ \ __ _ _ __ __ _ ___| |__ ___(_) +< < | |/ _ \/ __| '_ \| |/ / > > / _` | '_ \ / _` |/ __| '_ \ / _ \ + \ \| | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + _/ | | | + |__/ |_| + _ _ __ _ _ ___ _ +| (_) /_ | || | _ ( ) \ ( ) +| |_ _ __ ___ | | || |_(_) \|| ||/ +| | | '_ \ / _ \ | |__ _| \ \ +| | | | | | __/ | | | | _ / / +|_|_|_| |_|\___| |_| |_| (_) | | + /_/ + + ___ _ _ __ _ _ _ _ + / (_) | | | | \ \ | | | | | | | | + / / _ ___ ___| |__ | | __ \ \ | |_| |__ ___ _ __ | | ___ | |_ +< < | |/ _ \/ __| '_ \| |/ / > > | __| '_ \ / _ \ | '_ \| |/ _ \| __| + \ \| | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + _/ | | | + |__/ |_| + _ _ _ _ +| | | | (_) | | +| |_| |__ _ ___| | _____ _ __ ___ +| __| '_ \| |/ __| |/ / _ \ '_ \/ __| +| |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + + __ __ __ _ _ ___ _ _ + / / / _|/ _(_) | | | \ \ | | | | + / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \ | |_| |__ ___ ___ ___ +< < / _` / __| | | | _| _| |/ _ \ |/ _` | > > | __| '_ \ / _ \/ __|/ _ \ + \ \ (_| \__ \ |_| | | | | | | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + + _ _ _ _ _ + ( ) | | | | | | + __ _ _ __ ___ _ __ |/| |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \ | __| / __| '_ \ / _ \ | | +| (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + + _ _ + (_) | | + ___ ___ _ __ _ _ __ | |_ ___ +/ __|/ __| '__| | '_ \| __/ __| +\__ \ (__| | | | |_) | |_\__ \ +|___/\___|_| |_| .__/ \__|___/ + | | + |_| + __ _ _ __ _ _ _ + / / (_) | | \ \ | | | | (_) + / / ___ _ __ _ ___| |__ \ \ | |_| |__ _ ___ +< < / _ \ '__| |/ __| '_ \ > > | __| '_ \| / __| + \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ + + + _ _ _ _ _ + ( ) | | | (_) | | +__ ____ _ ___ _ __ |/| |_ ___| |__ _ ___| | _____ _ __ +\ \ /\ / / _` / __| '_ \ | __| / __| '_ \| |/ __| |/ / _ \ '_ \ + \ V V / (_| \__ \ | | | | |_ | (__| | | | | (__| < __/ | | |_ + \_/\_/ \__,_|___/_| |_| \__| \___|_| |_|_|\___|_|\_\___|_| |_(_) + + + _ + (_) + ______ ______ _ _ __ + |______|______| | | '_ \ + | | | | | + |_|_| |_| + + + _ _ _ _ _ _ _ + _| || |_ | | | | (_) | | | | +|_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| | + _| || |_ / _` |/ _ \ '_ \| |/ _` | '_ \______/ _` |/ _ \ \ / / _ \ | +|_ __ _| (_| | __/ |_) | | (_| | | | | | (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + + + + _| _| _| _| _| + _| _|_| _|_|_| _|_|_| _| _| _| +_| _| _| _| _|_| _| _| _|_| _| + _| _| _| _| _|_| _| _| _| _| _| + _| _| _|_| _|_|_| _| _| _| _| _| + _| + _| + + _| _| _| _|_|_|_|_| _| + _|_| _|_|_| _|_|_| _| _| _| _| _|_|_| + _| _| _| _|_| _| _| _|_| _| _|_|_| _| _| _| _| + _| _| _| _|_| _| _| _| _| _| _| _| _| _| _| _| + _| _|_| _|_|_| _| _| _| _| _| _|_|_|_| _| _| _| + _| _| +_| _|_|_|_|_|_| + + _|_| _| _| _| + _| _| _| _| _| _| _| _| _|_| _|_|_|_| _|_|_| +_|_|_|_| _| _| _| _|_| _| _|_|_|_| _| _| + _| _| _| _| _| _| _| _| _| _| + _| _| _|_|_| _| _| _| _| _|_|_| _|_| _|_|_| + + + + _| _| _| + _| _| _|_| _|_|_| _| _|_| _|_| _|_|_|_| _|_|_| + _| _| _| _| _| _| _|_| _| _| _| _| _| + _| _| _| _| _| _| _| _| _| _| _| _| +_| _| _|_| _|_|_| _| _|_| _|_| _|_|_| + _| + _|_| + + _| _| _| _| +_|_|_|_| _|_| _|_|_| _| _|_|_| _|_|_| + _| _|_|_|_| _| _| _| _|_| _| _| + _| _| _| _| _| _|_| _| _| + _|_| _|_|_| _| _|_|_| _| _|_|_| _| _| + + + + _| _| _| + _|_|_| _|_|_| +_|_|_|_|_| _| _| _|_|_|_|_| + _| _| _|_|_| + _| _| _| _| _| + + + + _| _| _| _| _| + _| _|_| _|_|_| _|_|_| _| _| _| +_| _| _| _| _|_| _| _| _|_| _| + _| _| _| _| _|_| _| _| _| _| _| + _| _| _|_| _|_|_| _| _| _| _| _| + _| + _| + + _| + _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _| +_| _| _| _| _| _| _| _| _| _|_|_|_| +_| _| _| _| _| _| _| _| _| _| + _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _| + _| + _| + +_| _| _| _| _| +_| _|_|_| _|_| _|_| _| _| _| +_| _| _| _| _|_|_|_| _| _|_|_|_| +_| _| _| _| _| _| _| +_| _| _| _| _|_|_| _| _| _| + + + + _| + _|_|_| _| _| _|_|_| _|_|_|_| _|_|_| _| _| +_|_| _| _| _| _| _| _| _| _|_| + _|_| _| _| _| _| _| _| _| _| _| +_|_|_| _|_|_| _| _| _|_| _|_|_| _| _| + _| + _|_| + + + _|_| _| _|_| _| _|_| _|_| _| _|_| +_|_|_|_| _|_| _|_| _| _| _|_| +_| _| _| _| _| _| + _|_|_| _| _| _|_| _| + + + + +_|_|_| _|_| _|_|_| _| _|_| +_| _| _|_|_|_| _| _| _|_| +_| _| _| _| _| _| +_| _| _|_|_| _|_|_| _| + + + + +_| _| _|_|_| _|_| _| _| _|_|_| _|_| _|_|_| +_| _| _| _| _|_|_|_| _|_| _| _| _|_|_|_| _| +_| _| _| _| _| _| _| _| _| _| _| + _|_|_| _| _| _|_|_| _| _| _|_|_| _|_|_| _|_|_| + _| + _| + + _| _| +_|_|_|_| _|_| _|_|_| + _| _|_|_|_| _| _| + _| _| _| _| + _|_| _|_|_| _|_|_| + + + _| _| _| + _| _| _| _| _| +_|_|_|_| _|_| _| _| _|_| _|_|_| _| + _| _| _| _|_| _|_|_|_| _| _| _| + _| _| _| _| _| _| _| _| _| + _|_| _|_| _| _| _|_|_| _| _| _| + _| + + + _| _| _| _| _| + _| _|_| _|_|_| _|_|_| _| _| _| +_| _| _| _| _|_| _| _| _|_| _| + _| _| _| _| _|_| _| _| _| _| _| + _| _| _|_| _|_|_| _| _| _| _| _| + _| + _| + + _| + _|_|_| _|_|_| _|_|_| _|_|_| _|_|_| _|_| _| +_| _| _| _| _| _| _| _| _| _|_|_|_| +_| _| _| _| _| _| _| _| _| _| + _|_|_| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _| + _| + _| + _| _| _| +_| _| _| _| _| _| _| _| +_| _|_|_| _|_| _|_| _| _| _| _| +_| _| _| _| _|_|_|_| _| _|_|_|_| _| +_| _| _| _| _| _| _| _| +_| _| _| _| _|_|_| _| _| _| _| + _| + + + _| _| _| _| _| + _| _|_| _|_|_| _|_|_| _| _| _| +_| _| _| _| _|_| _| _| _|_| _| + _| _| _| _| _|_| _| _| _| _| _| + _| _| _|_| _|_|_| _| _| _| _| _| + _| + _| + + _| _| _| _| +_|_|_|_| _|_|_| _|_| _|_|_| _| _|_| _|_|_|_| + _| _| _| _|_|_|_| _| _| _| _| _| _| + _| _| _| _| _| _| _| _| _| _| + _|_| _| _| _|_|_| _|_|_| _| _|_| _|_| + _| + _| + + _| _| _| _| +_|_|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_| _|_|_| + _| _| _| _| _| _|_| _|_|_|_| _| _| _|_| + _| _| _| _| _| _| _| _| _| _| _|_| + _|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _|_|_| + + + + _| _|_| _|_| _| _| + _| _|_|_| _|_|_| _| _| _| _| _|_| _| +_| _| _| _|_| _| _| _|_|_|_| _|_|_|_| _| _|_|_|_| _| + _| _| _| _|_| _| _| _| _| _| _| _| + _| _|_|_| _|_|_| _|_|_| _| _| _| _|_|_| _| + + + + _| _| _| _| + _|_|_| _| _|_|_|_| _|_|_| _|_| _|_|_| _|_| +_| _| _| _| _| _| _| _| _|_| _|_|_|_| +_| _| _| _| _| _| _| _| _|_| _| + _|_|_| _| _|_| _| _| _|_| _|_|_| _|_|_| + + + _| + _| _| + _|_|_| _| _|_| _|_| _|_|_| _|_|_|_| +_| _| _|_| _|_|_|_| _| _| _| +_| _| _| _| _| _| _| + _|_|_| _| _|_|_| _| _| _|_| + + + + _| _| _| + _|_|_| _|_|_| _|_| _| _| +_|_| _| _| _|_|_|_| _| _| + _|_| _| _| _| _| _| +_|_|_| _| _| _|_|_| _| _| + + + + _| _| + _|_|_| _|_|_| _| _|_| _|_|_| _|_|_|_| _|_|_| +_|_| _| _|_| _| _| _| _| _|_| + _|_| _| _| _| _| _| _| _|_| +_|_|_| _|_|_| _| _| _|_|_| _|_| _|_|_| + _| + _| + + _| _| _| _| + _| _|_| _| _|_| _|_|_| _|_|_| _| +_| _|_|_|_| _|_| _| _| _| _| _| + _| _| _| _| _| _| _| _| + _| _|_|_| _| _| _|_|_| _| _| _| + + + + _| _| _| +_|_|_|_| _|_|_| _|_|_| + _| _| _| _| _|_| + _| _| _| _| _|_| + _|_| _| _| _| _|_|_| + + + _| + _| _| +_| _| _| _|_|_| _|_|_| _|_|_| _|_|_|_| +_| _| _| _| _| _|_| _| _| _| + _| _| _| _| _| _| _|_| _| _| _| + _| _| _|_|_| _|_|_| _| _| _|_| + + + + _| _| _| + _|_|_| _|_|_| _|_|_| _| _| _|_| _|_|_| +_| _| _| _| _| _|_| _|_|_|_| _| _| +_| _| _| _| _| _| _| _| _| _| + _|_|_| _| _| _| _|_|_| _| _| _|_|_| _| _| _| + + + + + + _|_|_|_|_| + + + + + + _| + _|_|_| +_|_|_|_|_| _| _| _| + _| _| _| + _| _| _| + + + + _| _| _| _| _| +_|_|_|_|_| _|_|_| _|_| _|_|_| _|_|_| _|_|_| + _| _| _| _| _|_|_|_| _| _| _| _| _| _| _| _|_|_|_|_| +_|_|_|_|_| _| _| _| _| _| _| _| _| _| _| + _| _| _|_|_| _|_|_| _|_|_| _| _|_|_| _| _| + + + + _| _| + _|_|_| _|_| _| _| _|_| _| +_| _| _|_|_|_| _| _| _|_|_|_| _| +_| _| _| _| _| _| _| + _|_|_| _|_|_| _| _|_|_| _| + + + _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ +( < | j | o | s | h | k | > ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( j | o | s | h | k | @ | i | n | f | l | u | x | : | / | e | t | c | / | l ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( o | g | r | o | t | a | t | e | . | d | > ) ( s | h ) ( - | n ) ( * ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( 1 | 4 | : ) ( s | y | n | t | a | x ) ( e | r | r | o | r ) ( n | e | a | r ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( u | n | e | x | p | e | c | t | e | d ) ( t | o | k | e | n ) ( ` | } | ' ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( < | j | o | s | h | k | > ) ( a | p | a | c | h | e | : ) ( l | i | n | e ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ +( 1 | 4 | : ) ( ` | } | ' ) + \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( < | j | o | s | h | k | > ) ( t | h | e ) ( p | l | o | t ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ +( t | h | i | c | k | e | n | s ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( < | a | s | u | f | f | i | e | l | d | > ) ( t | h | o | s | e ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( a | r | e | n | ' | t ) ( s | h | e | l | l ) ( s | c | r | i | p | t | s ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( < | e | r | i | c | h | > ) ( t | h | i | s ) ( w | a | s | n | ' | t ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ +( c | h | i | c | k | e | n | . ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ + _ _ _ _ + / \ / \ / \ / \ + ( - | - ) ( i | n ) + \_/ \_/ \_/ \_/ + _ _ _ _ _ _ _ _ _ _ _ _ _ + / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ +( # | d | e | b | i | a | n | - | d | e | v | e | l ) + \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +|<|j|o|s|h|k|>| |j|o|s|h|k|@|i|n|f|l|u|x|:|/|e|t|c|/|l|o|g|r|o|t|a|t|e|.|d|>| ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ++-+-+ +-+-+ +-+ +|s|h| |-|n| |*| ++-+-+ +-+-+ +-+ ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |s|y|n|t|a|x| |e|r|r|o|r| ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ ++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+ +|n|e|a|r| |u|n|e|x|p|e|c|t|e|d| |t|o|k|e|n| |`|}|'| ++-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+ ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+ +|<|j|o|s|h|k|>| |a|p|a|c|h|e|:| |l|i|n|e| |1|4|:| |`|}|'| ++-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+ +-+-+-+ ++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+ +|<|j|o|s|h|k|>| |t|h|e| |p|l|o|t| |t|h|i|c|k|e|n|s| ++-+-+-+-+-+-+-+ +-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+-+-+ ++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+ +|<|a|s|u|f|f|i|e|l|d|>| |t|h|o|s|e| |a|r|e|n|'|t| |s|h|e|l|l| |s|c|r|i|p|t|s| ++-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+ +-+-+-+-+-+-+-+ ++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +|<|e|r|i|c|h|>| |t|h|i|s| |w|a|s|n|'|t| |c|h|i|c|k|e|n|.| ++-+-+-+-+-+-+-+ +-+-+-+-+ +-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ + +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+ + |-|-| |i|n| |#|d|e|b|i|a|n|-|d|e|v|e|l| + +-+-+ +-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+ + __ _ _ _ __ + \ \| | _| |__ ___ ___ (_)/ / + \ \ |/ / '_ \/ __|/ _ \| / / + / / <| | | \__ \ (_) | \ \ + /_/|_|\_\_| |_|___/\___// |\_\ + |__/ + _ __ _ __ _ ____ _ _ _ + ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_) + / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| | + | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | | + \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// | + \____/ |__/ + _ __ _ _ _ _ __ + | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / / + | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / / + | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ / + |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/ + |___/ + + __/\__ _ __ + \ / | '_ \ _____ + /_ _\ | | | |_____| + \/ |_| |_| + + _ __ _ _ _ __ + _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ / + (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / / + | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \ + (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + _ _ _ _ _ _ + __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) | + \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | | + > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | | + /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_| + |___/ + + _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___ + | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \ + | | | (_| | __/ | | | | | | (_) | | | | | __/ + |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___| + + _ _ _ _ + _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _ + | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | | + | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| | + |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_| + |_| + ___ _ + ( ) \ ( ) + |/ | | \| + > > + | | + /_/ + _ __ _ _ _ __ + _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ / + (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / / + | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \ + (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + ___ _ _ _ _ _ _ + ( ) \ ( ) _| || | / | ___ _ __ (_) | + |/ | | \| (_) || |_| | / _ \ '_ \| | | + > > _|__ _| | | __/ | | | | | + | | (_) |_| |_| \___|_| |_|_|_| + /_/ + _ _ _ _ __ _ _ _ __ + | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ / + | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / / + | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \ + \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + _ _ _ _ + ___ _ __ ___| | _____(_) |__ | |_ + / __| '_ \ / _ \ |/ / __| | '_ \| __| + \__ \ | | | __/ < (__| | | | | |_ + |___/_| |_|\___|_|\_\___|_|_| |_|\__| + + _ _ __ _ _ _ __ __ __ + ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / / + / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / / + | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \ + \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\ + + _ _ _ _ _ + | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _ + | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` | + | | | __/ | | \__ \ | |_ | | | | __/ | | (_| | + |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_| + + _ _ + ___| |_ _ __ (_)_ __ ___ ___ + / __| __| '_ \| | '__/ __/ __| + \__ \ |_| |_) | | | | (__\__ \ + |___/\__| .__/|_|_| \___|___/ + |_| + _ _ _ __ _ _ __ + ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / / + / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ / + \__ \ | | | | |_ / / | | | (__| | | | __/\ \ + |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\ + + _ _ _ _ _ + _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __ + | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / / + _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V / + (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/ + + _ + _ __ (_) + | '_ \| | _____ _____ + | | | | | |_____|_____| + |_| |_|_| + + _ _ _ _ _ _ _ + | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_ + | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _| + | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _| + |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_| + + + _/ _/ _/ _/ _/ + _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/ + _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ + _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ + _/ + _/ + + _/ _/ _/ _/_/_/_/_/ _/ + _/_/ _/_/_/ _/_/_/ _/ _/ _/ _/ + _/ _/ _/ _/_/ _/ _/ _/_/ _/ _/_/_/ _/ _/ + _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ _/_/_/_/ _/ + _/ _/ +_/ _/_/_/_/_/_/ + + _/_/ _/ _/ + _/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ + _/ _/ _/_/_/_/ _/ _/ _/ _/_/ _/ _/_/_/_/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ +_/ _/ _/ _/ _/_/_/ _/ _/ _/ _/ _/_/_/ + + + + _/ _/ _/ +_/_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/ _/_/ + _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/_/ + _/ + _/_/ + + _/ _/ _/ _/ +_/_/_/_/ _/_/_/ _/_/_/_/ _/_/ _/_/_/ _/ + _/ _/ _/ _/ _/_/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ + _/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/_/ _/ + + + + _/ _/ _/ _/ + _/_/_/ _/_/_/ _/_/_/ _/_/_/ + _/_/ _/ _/ _/_/_/_/_/ _/ _/ _/_/_/_/_/ + _/_/ _/ _/ _/ _/ _/_/_/ +_/_/_/ _/ _/ _/ _/ _/ _/ _/ + + + + _/ _/ _/ _/ _/ + _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/ + _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ + _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ + _/ + _/ + + _/ + _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/ + _/ + _/ + + _/ _/ _/ _/ _/ + _/ _/_/_/ _/_/ _/_/ _/ _/ _/ + _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/ + _/ _/ _/ _/ _/ _/ _/ +_/ _/ _/ _/ _/_/_/ _/ _/ _/ + + + + _/ + _/_/_/ _/ _/ _/_/_/ _/_/_/_/ _/_/_/ _/ _/ + _/_/ _/ _/ _/ _/ _/ _/ _/ _/_/ + _/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ +_/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/ _/ + _/ + _/_/ + + + _/_/ _/ _/_/ _/ _/_/ _/_/ _/ _/_/ + _/_/_/_/ _/_/ _/_/ _/ _/ _/_/ +_/ _/ _/ _/ _/ _/ + _/_/_/ _/ _/ _/_/ _/ + + + + + _/_/_/ _/_/ _/_/_/ _/ _/_/ + _/ _/ _/_/_/_/ _/ _/ _/_/ + _/ _/ _/ _/ _/ _/ +_/ _/ _/_/_/ _/_/_/ _/ + + + + + _/ _/ _/_/_/ _/_/ _/ _/ _/_/_/ _/_/ _/_/_/ + _/ _/ _/ _/ _/_/_/_/ _/_/ _/ _/ _/_/_/_/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/_/_/ _/_/_/ + _/ + _/ + + _/ _/ +_/_/_/_/ _/_/ _/_/_/ + _/ _/_/_/_/ _/ _/ +_/ _/ _/ _/ + _/_/ _/_/_/ _/_/_/ + + + _/ _/ _/ + _/ _/ _/ _/ _/ +_/_/_/_/ _/_/ _/ _/ _/_/ _/_/_/ _/ + _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/ _/_/ _/ _/ _/_/_/ _/ _/ _/ + _/ + + + _/ _/ _/ _/ _/ + _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/ + _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ + _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ + _/ + _/ + + _/ + _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/_/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/_/_/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/_/ _/ + _/ + _/ + + _/ _/ _/ _/ _/ + _/ _/_/_/ _/_/ _/_/ _/ _/ _/ + _/ _/ _/ _/ _/_/_/_/ _/ _/_/_/_/ + _/ _/ _/ _/ _/ _/ _/ +_/ _/ _/ _/ _/_/_/ _/ _/ _/ + + + _/ _/ _/ + _/ _/ _/ + _/ + _/ + _/ + _/ + _/ + + + _/ _/ _/ _/ _/ + _/ _/_/ _/_/_/ _/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/_/ _/ _/ _/_/ _/ + _/ _/ _/ _/ _/_/ _/ _/ _/ _/ _/ + _/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/ + _/ + _/ + + _/ _/ _/ _/ +_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/ _/_/ _/_/_/_/ + _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/ _/ _/ _/_/_/ _/_/_/ _/ _/_/ _/_/ + _/ + _/ + + _/ _/ _/ _/ +_/_/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ _/_/_/ + _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ _/_/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/_/ + _/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/_/_/ + + + + _/ _/_/ _/_/ _/ _/ + _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/_/ _/ +_/ _/ _/ _/_/ _/ _/ _/_/_/_/_/_/_/_/ _/ _/_/_/_/ _/ + _/ _/ _/ _/_/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/_/ _/_/_/ _/_/_/ _/ _/ _/ _/_/_/ _/ + + + + _/ _/ _/ _/ + _/_/_/ _/ _/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/ + _/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/_/_/_/ +_/ _/ _/ _/ _/ _/ _/ _/ _/_/ _/ + _/_/_/ _/ _/_/ _/ _/ _/_/ _/_/_/ _/_/_/ + + + _/ + _/ _/ + _/_/_/ _/ _/_/ _/_/ _/_/_/ _/_/_/_/ + _/ _/ _/_/ _/_/_/_/ _/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/ _/_/_/ _/ _/ _/_/ + + + + _/ _/ _/ + _/_/_/ _/_/_/ _/_/ _/ _/ + _/_/ _/ _/ _/_/_/_/ _/ _/ + _/_/ _/ _/ _/ _/ _/ +_/_/_/ _/ _/ _/_/_/ _/ _/ + + + + _/ _/ + _/_/_/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/_/ _/_/_/ + _/_/ _/ _/_/ _/ _/ _/ _/ _/_/ + _/_/ _/ _/ _/ _/ _/ _/ _/_/ +_/_/_/ _/_/_/ _/ _/ _/_/_/ _/_/ _/_/_/ + _/ + _/ + + _/ _/ _/ _/ + _/ _/_/ _/ _/_/ _/_/_/ _/_/_/ _/ +_/ _/_/_/_/ _/_/ _/ _/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/ + + + + _/ _/ _/ +_/_/_/_/ _/_/_/ _/_/_/ + _/ _/ _/ _/ _/_/ +_/ _/ _/ _/ _/_/ + _/_/ _/ _/ _/ _/_/_/ + + + _/ + _/ _/ + _/ _/ _/ _/_/_/ _/_/_/ _/_/_/ _/_/_/_/ +_/ _/ _/ _/ _/ _/_/ _/ _/ _/ + _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/ + _/ _/ _/_/_/ _/_/_/ _/ _/ _/_/ + + + + _/ _/ _/ + _/_/_/ _/_/_/ _/_/_/ _/ _/ _/_/ _/_/_/ + _/ _/ _/ _/ _/ _/_/ _/_/_/_/ _/ _/ +_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/ _/ _/ _/_/_/ _/ _/ _/_/_/ _/ _/ _/ + + + + + + + + + + + + _/ + _/_/_/ +_/_/_/_/_/ _/_/_/_/_/ _/ _/ _/ + _/ _/ _/ + _/ _/ _/ + + + + _/ _/ _/ _/ _/ + _/_/_/_/_/ _/_/_/ _/_/ _/_/_/ _/_/_/ _/_/_/ + _/ _/ _/ _/ _/_/_/_/ _/ _/ _/ _/ _/ _/ _/ +_/_/_/_/_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ + _/ _/ _/_/_/ _/_/_/ _/_/_/ _/ _/_/_/ _/ _/ + + + + _/ _/ + _/_/_/ _/_/ _/ _/ _/_/ _/ +_/_/_/_/_/ _/ _/ _/_/_/_/ _/ _/ _/_/_/_/ _/ + _/ _/ _/ _/ _/ _/ _/ + _/_/_/ _/_/_/ _/ _/_/_/ _/ + + + +/o _ _|_ | \ +\|(_)_>| ||| ||<| (|/|| || ||_|>| | +_| \__ _| + +__._ \|/ + | | /|\ + + +/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o _ .__|_ _. _ ._.__ ._ +\|(_)_>| ||\/| ||_(_|>< (/_| |(_)| +_| | / + -. +._ _ _.._ ._ _ ._ _ __|_ _ _| _|_ _ | _ ._ \|_/ +| |(/_(_|| |_|| |(/_><|_)(/_(_ |_(/_(_| |_(_)|<(/_| | | + | -' + -. +/o _ _|_ | \ _.._ _. _|_ _ o |o._ _ /||_|_o \|_/ +\|(_)_>| ||| || +_| | + _ _ +/ _. _ _|__|_o _ | _|\ _|_|_ _ _ _ _..__ ._/_|_ _|_ _ || _ _._o.__|_ _ +\(_|_>|_|| | |(/_|(_|/ |_| |(_)_>(/_ (_||(/_| | |_ _>| |(/_|| _>(_| ||_)|__> + | + +/ _ ._o _|_ \ _|_|_ o _ _. _._/_|_ _|_ o _| _ ._ +\(/_| |(_| |/ |_| ||_> \/\/(_|_>| | |_ (_| ||(_|<(/_| |o + + + ____ o._ -|-|- _| _ |_ o _..____| _ _ | + || | -|-|-(_|(/_|_)|(_|| |(_|(/_\/(/_| + +&SPjoshk&Atinflux:/etc/logrotate.d>&SPsh&SP-n&SP* +&SPapache:&SPline&SP14:&SPsyntax&SPerror&SPnear&SPunexpected&SPtoken +&'!&!)' +&SPapache:&SPline&SP14:&SP&'!&!)' +&SPthe&SPplot&SPthickens +&SPthose&SParen't&SPshell&SPscripts +&SPthis&SPwasn't&SPchicken. +&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP&SP--&SPin&SP&Nbdebian-devel + _ _ + /o | | | | \ +/ __ , | | | | \ +\ | / \_/ \_|/ \ |/_) / + \|/\__/ \/ | |_/| \_// + /| + \| + _ _ _ _ + o | | | | ____ o | | | | o / + __ , | | | | / __,\ _ _ | | | | /_ _|_ __ + | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | / + |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/ +/| \____/ |\ +\| |/ + _ _ + /| | | \ | | + / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | | + / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \ +/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/ + /| + \| + + + _ _ \|/ +-----/ |/ | --*-- + | |_/ /|\ + + + _ _ _ + /o | | | | \ | | o +/ __ , | | | | \ __, _ __, __ | | _ +\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/ + \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o + /| /| + \| \| + _ , +| | o /|| | o +| | _ _ _ ||__|_ , _ _ _|_ __, +|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/ +|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/ + /| + \| + + + _ ,_ ,_ __ ,_ _ _ _ __, ,_ +|/ / | / | / \_/ | / |/ | |/ / | / | +|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/ + + + _ + | | | + _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _ +| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ | + \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/ + /| + \| +o o +\\ / + | + > + | + / + + _ _ _ + /o | | | | \ | | o +/ __ , | | | | \ __, _ __, __ | | _ +\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/ + \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o + /| /| + \| \| + _ , o o +| | o /|| | o \\ / +| | _ _ _ ||__|_ | +|/ | / |/ | |/ | | > +|__/|_/ | |_/|__/ | | o | + / + + _ _ _ _ + /o | | | | \ | | | | +/ __ , | | | | \ _|_ | | _ _ | | __ _|_ +\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_| + \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/ + /| /| + \| \| + _ _ + | | o | | +_|_ | | __ | | _ _ _ , + | |/ \ | / |/_) |/ / |/ | / \_ + |_/| |_/|_/\___/| \_/|__/ | |_/ \/ + + + _ _ _ _ + / | | | | o | | | \ | | +/ __, , | | | | _ | | __| \ _|_ | | __ , _ +\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/ + \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/ + |\ |\ + |/ |/ + o _ _ _ + / | | | | | | + __, ,_ _ _ _ _|_ , | | _ | | | | +/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/ +\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/ + + + + o + , __ ,_ _ _|_ , +/ \_/ / | | |/ \_| / \_ + \/ \___/ |_/|_/|__/ |_/ \/ + /| + \| + _ _ + / o | | \ | | o +/ _ ,_ __ | | \ _|_ | | , +\ |/ / | | / |/ \ / | |/ \ | / \_ + \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/ + + + o _ _ + / | | o | | + __, , _ _ _|_ __ | | __ | | _ _ _ +| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ | + \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o + + + + o + _ _ + ---------- | / |/ | + |_/ | |_/ + + + _ _ + | | | | | o | | | +--+--+-- __| _ | | __, _ _ __| _ _ | | +--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/ + | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/ + + + /_) | | \ \ + / | _ \ __| __ \ | /\ \ +\ \ | ( |\__ \ | | | < / + \_\ |\___/ ____/_| |_|_|\_\_/ + ___/ + _) | | __ \ _) _| | / | + | _ \ __| __ \ | / / _` | | __ \ | | | |\ \ /_) / _ \ __| + | ( |\__ \ | | | < | ( | | | | __| | | | ` < / __/ | + |\___/ ____/_| |_|_|\_\\ \__,_|_|_| _|_| _|\__,_| _/\_\_)_/ \___|\__| +___/ \____/ + / | | | |\ \ | + __| / | _ \ _` | __| _ \ __| _` | __| _ \ _` | \ \ __| __ \ + ( / | ( | ( | | ( | | ( | | __/ ( | / \__ \ | | | +\___|_/ _|\___/ \__, |_| \___/ \__|\__,_|\__|\___|_)\__,_| _/ ____/_| |_| + |___/ + \ + __ \ \ / +_____| | | _ _\ + _| _| \/ + + /_) | | \ \ | + / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_) +\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/ + \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_) + ___/ _| + |_) _ | | | | + | | __ \ _ \ | | | _) __| | | __ \ __| _` |\ \ / + | | | | __/ |___ __| \__ \ | | | | | ( | ` < +_|_|_| _|\___| _| _| _) ____/\__, |_| _|\__|\__,_| _/\_\ + ____/ + + _ \ __| __| _ \ __| __ \ _ \ _` | __| + __/ | | ( | | | | __/ ( | | +\___|_| _| \___/ _| _| _|\___|\__,_|_| + + | | + | | __ \ _ \\ \ / __ \ _ \ __| __| _ \ _` | + | | | | __/ ` < | | __/ ( | __/ ( | +\__,_|_| _|\___| _/\_\ .__/ \___|\___|\__|\___|\__,_| + _| + | | )\ \ ) + __| _ \ | / _ \ __ \ \| | / + | ( | < __/ | | ` > +\__|\___/ _|\_\\___|_| _| | + _/ + /_) | | \ \ | + / | _ \ __| __ \ | /\ \ _` | __ \ _` | __| __ \ _ \_) +\ \ | ( |\__ \ | | | < / ( | | | ( | ( | | | __/ + \_\ |\___/ ____/_| |_|_|\_\_/ \__,_| .__/ \__,_|\___|_| |_|\___|_) + ___/ _| + |_) _ | | | )\ \ ) + | | __ \ _ \ | | | _) \| | / + | | | | __/ |___ __| ` > +_|_|_| _|\___| _| _| _) | + _/ + /_) | | \ \ | | | | + / | _ \ __| __ \ | /\ \ __| __ \ _ \ __ \ | _ \ __| +\ \ | ( |\__ \ | | | < / | | | | __/ | | | ( | | + \_\ |\___/ ____/_| |_|_|\_\_/ \__|_| |_|\___| .__/ _|\___/ \__| + ___/ _| + | | _) | + __| __ \ | __| | / _ \ __ \ __| + | | | | | ( < __/ | |\__ \ +\__|_| |_|_|\___|_|\_\\___|_| _|____/ + + / _| _|_) | |\ \ | | + / _` | __| | | | | | _ \ | _` | \ \ __| __ \ _ \ __| _ \ +\ \ ( |\__ \ | | __| __| | __/ | ( | / | | | | ( |\__ \ __/ + \_\\__,_|____/\__,_|_| _| _|\___|_|\__,_| _/ \__|_| |_|\___/ ____/\___| + + ) | | | | + _` | __| _ \ __ \ / __| __| __ \ _ \ | | + ( | | __/ | | | \__ \ | | | __/ | | +\__,_|_| \___|_| _| \__| ____/_| |_|\___|_|_| + + _) | + __| __| __| | __ \ __| __| +\__ \ ( | | | | | \__ \ +____/\___|_| _| .__/ \__|____/ + _| + / _) | \ \ | | _) + / _ \ __| | __| __ \ \ \ __| __ \ | __| +\ \ __/ | | ( | | | / | | | | |\__ \ + \_\\___|_| _|\___|_| |_|_/ \__|_| |_|_|____/ + + ) | | _) | +\ \ \ / _` | __| __ \ / __| __| __ \ | __| | / _ \ __ \ + \ \ \ / ( |\__ \ | | | ( | | | | ( < __/ | | + \_/\_/ \__,_|____/_| _| \__| \___|_| |_|_|\___|_|\_\\___|_| _|_) + + _) + | __ \ + _____|_____| | | | + _|_| _| + + | | | | _) | | +_ |_ |_| _` | _ \ __ \ | _` | __ \ _` | _ \\ \ / _ \ | +_ |_ |_| ( | __/ | | | ( | | |_____| ( | __/ \ \ / __/ | + _| _| \__,_|\___|_.__/ _|\__,_|_| _| \__,_|\___| \_/ \___|_| + + __ _ __ __ __ + / / (_)___ _____/ /_ / /_\ \ +/ / / / __ \/ ___/ __ \/ //_/\ \ +\ \ / / /_/ (__ ) / / / ,< / / + \_\_/ /\____/____/_/ /_/_/|_| /_/ + /___/ + _ __ __ ______ _ ______ __ __ + (_)___ _____/ /_ / /__/ ____ \(_)___ / __/ /_ ___ ___ _/_/__ / /_ + / / __ \/ ___/ __ \/ //_/ / __ `/ / __ \/ /_/ / / / / |/_(_)_/_// _ \/ __/ + / / /_/ (__ ) / / / ,< / / /_/ / / / / / __/ / /_/ /> <_ _/_/ / __/ /_ + __/ /\____/____/_/ /_/_/|_|\ \__,_/_/_/ /_/_/ /_/\__,_/_/|_(_)_/ \___/\__/ +/___/ \____/ + ____ __ __ ____ + _____ _/_/ /___ ____ __________ / /_____ _/ /____ ____/ /\ \ + / ___/_/_// / __ \/ __ `/ ___/ __ \/ __/ __ `/ __/ _ \ / __ / \ \ +/ /___/_/ / / /_/ / /_/ / / / /_/ / /_/ /_/ / /_/ __// /_/ / / / +\___/_/ /_/\____/\__, /_/ \____/\__/\__,_/\__/\___(_)__,_/ /_/ + /____/ + __ + _____/ /_ ____ __/|_ + / ___/ __ \ ______/ __ \ | / + (__ ) / / / /_____/ / / / /_ __| +/____/_/ /_/ /_/ /_/ |/ + + __ _ __ __ __ __ + / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _ +/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_) +\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/ + \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_) + /___/ /_/ + ___ _____ __ __ + / (_)___ ___ < / // / _ _______ ______ / /_____ __ __ + / / / __ \/ _ \ / / // /_(_) / ___/ / / / __ \/ __/ __ `/ |/_/ + / / / / / / __/ / /__ __/ (__ ) /_/ / / / / /_/ /_/ /> < +/_/_/_/ /_/\___/ /_/ /_/ (_) /____/\__, /_/ /_/\__/\__,_/_/|_| + /____/ + + ___ ______________ _____ ____ ___ ____ ______ + / _ \/ ___/ ___/ __ \/ ___/ / __ \/ _ \/ __ `/ ___/ +/ __/ / / / / /_/ / / / / / / __/ /_/ / / +\___/_/ /_/ \____/_/ /_/ /_/\___/\__,_/_/ + + __ __ + __ ______ ___ _ ______ ___ _____/ /____ ____/ / + / / / / __ \/ _ \| |/_/ __ \/ _ \/ ___/ __/ _ \/ __ / +/ /_/ / / / / __/> _> +\__/\____/_/|_|\___/_/ /_/ _/_/ + /_/ + __ _ __ __ __ __ + / / (_)___ _____/ /_ / /_\ \ ____ _____ ____ ______/ /_ ___ _ +/ / / / __ \/ ___/ __ \/ //_/\ \ / __ `/ __ \/ __ `/ ___/ __ \/ _ \(_) +\ \ / / /_/ (__ ) / / / ,< / / / /_/ / /_/ / /_/ / /__/ / / / __/ + \_\_/ /\____/____/_/ /_/_/|_| /_/ \__,_/ .___/\__,_/\___/_/ /_/\___(_) + /___/ /_/ + ___ _____ __ _ _ _ + / (_)___ ___ < / // / _ ( )| |( ) + / / / __ \/ _ \ / / // /_(_) V / /|/ + / / / / / / __/ / /__ __/ _>_> +/_/_/_/ /_/\___/ /_/ /_/ (_) _/_/ + /_/ + __ _ __ __ __ __ __ __ __ + / / (_)___ _____/ /_ / /_\ \ / /_/ /_ ___ ____ / /___ / /_ +/ / / / __ \/ ___/ __ \/ //_/\ \ / __/ __ \/ _ \ / __ \/ / __ \/ __/ +\ \ / / /_/ (__ ) / / / ,< / / / /_/ / / / __/ / /_/ / / /_/ / /_ + \_\_/ /\____/____/_/ /_/_/|_| /_/ \__/_/ /_/\___/ / .___/_/\____/\__/ + /___/ /_/ + __ __ _ __ + / /_/ /_ (_)____/ /_____ ____ _____ + / __/ __ \/ / ___/ //_/ _ \/ __ \/ ___/ +/ /_/ / / / / /__/ ,< / __/ / / (__ ) +\__/_/ /_/_/\___/_/|_|\___/_/ /_/____/ + + __ _________ __ ____ __ __ + / / ____ ________ __/ __/ __(_)__ / /___/ /\ \ / /_/ /_ ____ ________ +/ / / __ `/ ___/ / / / /_/ /_/ / _ \/ / __ / \ \ / __/ __ \/ __ \/ ___/ _ \ +\ \/ /_/ (__ ) /_/ / __/ __/ / __/ / /_/ / / / / /_/ / / / /_/ (__ ) __/ + \_\__,_/____/\__,_/_/ /_/ /_/\___/_/\__,_/ /_/ \__/_/ /_/\____/____/\___/ + + _ __ __ ____ + ____ _________ ____ ( )/ /_ _____/ /_ ___ / / / + / __ `/ ___/ _ \/ __ \|// __/ / ___/ __ \/ _ \/ / / +/ /_/ / / / __/ / / / / /_ (__ ) / / / __/ / / +\__,_/_/ \___/_/ /_/ \__/ /____/_/ /_/\___/_/_/ + + _ __ + _______________(_)___ / /______ + / ___/ ___/ ___/ / __ \/ __/ ___/ + (__ ) /__/ / / / /_/ / /_(__ ) +/____/\___/_/ /_/ .___/\__/____/ + /_/ + __ _ ____ __ __ _ + / / ___ _____(_)____/ /\ \ / /_/ /_ (_)____ +/ / / _ \/ ___/ / ___/ __ \ \ / __/ __ \/ / ___/ +\ \/ __/ / / / /__/ / / / / / /_/ / / / (__ ) + \_\___/_/ /_/\___/_/ /_/_/ \__/_/ /_/_/____/ + + _ __ __ _ __ + _ ______ __________ ( )/ /_ _____/ /_ (_)____/ /_____ ____ +| | /| / / __ `/ ___/ __ \|// __/ / ___/ __ \/ / ___/ //_/ _ \/ __ \ +| |/ |/ / /_/ (__ ) / / / / /_ / /__/ / / / / /__/ ,< / __/ / / / +|__/|__/\__,_/____/_/ /_/ \__/ \___/_/ /_/_/\___/_/|_|\___/_/ /_(_) + + _ + (_)___ + ____________ / / __ \ + /_____/_____/ / / / / / + /_/_/ /_/ + + __ __ __ __ _ __ __ + __/ // /_____/ /__ / /_ (_)___ _____ ____/ /__ _ _____ / / + /_ _ __/ __ / _ \/ __ \/ / __ `/ __ \______/ __ / _ \ | / / _ \/ / +/_ _ __/ /_/ / __/ /_/ / / /_/ / / / /_____/ /_/ / __/ |/ / __/ / + /_//_/ \__,_/\___/_.___/_/\__,_/_/ /_/ \__,_/\___/|___/\___/_/ + + __ _ _ _ __ + / /(_)___ __| |_ | |__\ \ +< < | / _ (_-< ' \| / / > > + \_\/ \___/__/_||_|_\_\/_/ + |__/ + _ _ _ ____ _ __ _ _ __ _ ___ + (_)___ __| |_ | |__/ __ \(_)_ _ / _| |_ ___ _(_) / /__| |_ __ / / |___ + | / _ (_-< ' \| / / / _` | | ' \| _| | || \ \ /_ / / -_) _/ _|/ /| / _ \ + _/ \___/__/_||_|_\_\ \__,_|_|_||_|_| |_|\_,_/_\_(_)_/\___|\__\__/_/ |_\___/ +|__/ \____/ + _ _ ___ _ + __ _ _ _ ___| |_ __ _| |_ ___ __| \ \ __| |_ ___ _ _ _/\_ +/ _` | '_/ _ \ _/ _` | _/ -_)_/ _` |> > (_-< ' \ |___| ' \ > < +\__, |_| \___/\__\__,_|\__\___(_)__,_/_/ /__/_||_| |_||_| \/ +|___/ + __ _ _ _ __ _ _ _ _ + / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___ +< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_) + \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___| + |__/ |_| + _ _ _ _ _ +/ | | (_) ____ _ _ _| |_ __ ___ __ ___ _ _ _ _ ___ _ _ _ _ ___ __ _ _ _ +| |_ _| (_-< || | ' \ _/ _` \ \ / / -_) '_| '_/ _ \ '_| | ' \/ -_) _` | '_| +|_| |_(_) /__/\_, |_||_\__\__,_/_\_\ \___|_| |_| \___/_| |_||_\___\__,_|_| + |__/ + _ _ _ _ ___ _ + _ _ _ _ _____ ___ __ ___ __| |_ ___ __| | | |_ ___| |_____ _ _ ( ) \ ( ) +| || | ' \/ -_) \ / '_ \/ -_) _| _/ -_) _` | | _/ _ \ / / -_) ' \ \|| ||/ + \_,_|_||_\___/_\_\ .__/\___\__|\__\___\__,_| \__\___/_\_\___|_||_| | | + |_| /_/ + __ _ _ _ __ _ _ _ _ + / /(_)___ __| |_ | |__\ \ __ _ _ __ __ _ __| |_ ___(_) | (_)_ _ ___ +< < | / _ (_-< ' \| / / > > / _` | '_ \/ _` / _| ' \/ -_)_ | | | ' \/ -_) + \_\/ \___/__/_||_|_\_\/_/ \__,_| .__/\__,_\__|_||_\___(_) |_|_|_||_\___| + |__/ |_| + _ _ _ _ ___ _ +/ | | (_) ( ) \ ( ) +| |_ _| \|| ||/ +|_| |_(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_)___ __| |_ | |__\ \ | |_| |_ ___ _ __| |___| |_ +< < | / _ (_-< ' \| / / > > | _| ' \/ -_) | '_ \ / _ \ _| + \_\/ \___/__/_||_|_\_\/_/ \__|_||_\___| | .__/_\___/\__| + |__/ |_| + _ _ _ _ +| |_| |_ (_)__| |_____ _ _ ___ +| _| ' \| / _| / / -_) ' \(_-< + \__|_||_|_\__|_\_\___|_||_/__/ + + __ __ __ _ _ ___ _ _ + / /__ _ ____ _ / _|/ _(_)___| |__| \ \ | |_| |_ ___ ___ ___ +< > | _| ' \/ _ (_- > | _| ' \| (_-< \ V V / _` (_-< ' \|/| _| + \_\___|_| |_\__|_||_/_/ \__|_||_|_/__/ \_/\_/\__,_/__/_||_| \__| + + _ _ _ + __| |_ (_)__| |_____ _ _ +/ _| ' \| / _| / / -_) ' \ _ +\__|_||_|_\__|_\_\___|_||_(_) + + _ + ___ ___ (_)_ _ + |___|___| | | ' \ + |_|_||_| + + _ _ _ _ _ _ _ + _| | |_ __| |___| |__(_)__ _ _ _ ___ __| |_____ _____| | +|_ . _/ _` / -_) '_ \ / _` | ' \___/ _` / -_) V / -_) | +|_ _\__,_\___|_.__/_\__,_|_||_| \__,_\___|\_/\___|_| + |_|_| + + /o _ , |) |) \ +< | / \_/ \_|/\ |/) > + \|/\_/ \/ | |/| \// + (| + ____ + o _ , |) |) / __,\ o |\ |\ o /__|_ _ /|\ _ _, + | / \_/ \_|/\ |/) | / | || /|/| |/ |/ | | /\/ /|/ | / / |/ / \_/ | + |/\_/ \/ | |/| \/| \_/|/ |/ | |_/|_/|_/ \/|_/ /\/o/ |_/|_/\__// |_/\_/ \/|/ +(| \____/ |) (| + + ,_ _ _|_ _, _|_ _ _| \ , |) \|/ +/ | / \_| / | | |/ / | > / \_|/\ ----/|/| --*-- + |/\_/ |_/\/|_/|_/|_/o\/|_// \/ | |/ | |_/ /|\ + + + /o _ , |) |) \ _, _, _ |) _ o |\ o _ +< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/ + \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/ + (| (| + , +/|| | o , _|_ _, _ ,_ ,_ _ ,_ + ||__|_ / \_| | /|/| | / | /\/ |/ / | / | / \_/ | + | | o \/ \/|/ | |_/|_/\/|_/ /\/ |_/ |/ |/\_/ |/ + (| + + _ _, ,_ _ _ _ _|_ _ _| +/|/| |/ / | / | | | /|/| |/ /\/ |/\_|/ / | |/ / | + | |_/|_/\/|_/ |/ \/|_/ | |_/|_/ /\/|_/ |_/\__/|_/|_/\/|_/ + (| + o o +_|_ _ |) _ \\ / + | / \_|/) |/ /|/| |_ + |_/\_/ | \/|_/ | |_/ | + / + + /o _ , |) |) \ _, _, _ |) _ o |\ o _ +< | / \_/ \_|/\ |/) > / | |/\_/ | / |/\ |/ |/ | /|/| |/ + \|/\_/ \/ | |/| \// \/|_/|_/ \/|_/\__/| |/|_/o |_/|/ | |_/|_/ + (| (| + , o o +/|| | o \\ / + ||__|_ |_ + | | o | + / + + /o _ , |) |) \ _|_ |) _ |\ _ _|_ +< | / \_/ \_|/\ |/) > | |/\ |/ |/\_|/ / \_| + \|/\_/ \/ | |/| \// |_/| |/|_/ |_/ |_/\_/ |_/ + (| (| + +_|_ |) o _ |) _ , + | |/\ | / |/) |/ /|/| / \_ + |_/| |/|/\__/| \/|_/ | |_/ \/ + + + / _, , |\ |\ o _ |\ _| \ _|_ |) _ , _ +< / | / \_| | |/ |/ | |/ |/ / | > | |/\ / \_/ \_|/ + \\/|_/ \/ \/|_/|_/|_/|/|_/|_/\/|_// |_/| |/\_/ \/ |_/ + |) |) + o + _, ,_ _ /_|_ , |) _ |\ |\ , _ ,_ o _|_ , +/ | / | |/ /|/| | / \_|/\ |/ |/ |/ / \_/ / | | |/\_| / \_ +\/|_/ |/|_/ | |_/ |_/ \/ | |/|_/|_/|_/ \/ \__/ |/|/|_/ |_/ \/ + (| + o + / _ ,_ o _ |) \ _|_ |) o , _, , /_|_ +< |/ / | | / |/\ > | |/\ | / \_ | | |_/ | / \_/|/| | + \|_/ |/|/\__/| |// |_/| |/|/ \/ \/ \/ \/|_/ \/ | |_/ |_/ + + + _ |) o _ |) _ +/ |/\ | / |/) |/ /|/| +\__/| |/|/\__/| \/|_/ | |_/o + + + o + -------- | /|/| + |/ | |_/ + + +_|_|_ _| _|) o _, _| _ _ |\ +_|_|_/ | |/|/\_| / | /|/|----/ | |/ | |_|/ |/ + | | \/|_/|_/\/ |/\/|_/ | |_/ \/|_/|_/ \/ |_/|_/ + + /_) | | \ \ +< < | _ \(_-< \ | /> > + \_\ |\___/___/_| _|_\_\_/ + __/ + _) | | __ \ _) _|| _) / | /| + | _ \(_-< \ | // _` | | \ _|| | |\ \ / / -_) _| _| / | _ \ + |\___/___/_| _|_\_\\__,_|_|_| _|_| _|\_,_| _\_\_)_/\___|\__|\__|_/ _|\___/ +__/ \____/ + | | |\ \ | \ \ / + _` | _|_ \ _| _` | _| -_) _` | > > (_-< \ ____|\ _ _| +\__, |_|\___/\__|\__,_|\__|\___|_)\__,_| _/ ___/_| _| _| _| _/ _\ +____/ + /_) | | \ \ | _) |_) +< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_) + \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___| + __/ _| +_ | | |_) | + |__ _| (_-< | | \ _| _` |\ \ / -_) _|_|_ \ _| + _| _|_) ___/\_, |_| _|\__|\__,_| _\_\ \___|_|_|\___/_| + ___/ + | | + \ -_) _` | _| | | \ -_)\ \ / _ \ -_) _| _| -_) _` | +_| _|\___|\__,_|_| \_,_|_| _|\___| _\_\.__/\___|\__|\__|\___|\__,_| + _| + | | )\ \ ) + _| _ \ | / -_) \ \| |_/ +\__|\___/_\_\\___|_| _| | + _/ + /_) | | \ \ | _) |_) +< < | _ \(_-< \ | /> > _` | _ \ _` | _| \ -_) | | \ -_) + \_\ |\___/___/_| _|_\_\_/ \__,_|.__/\__,_|\__|_| _|\___|_) _|_|_| _|\___| + __/ _| +_ | | |_) )\ \ ) + |__ _| \| |_/ + _| _|_) | + _/ + /_) | | \ \ | | | | +< < | _ \(_-< \ | /> > _| \ -_) _ \ | _ \ _| + \_\ |\___/___/_| _|_\_\_/ \__|_| _|\___| .__/_|\___/\__| + __/ _| + | | _) | + _| \ | _| | / -_) \ (_-< +\__|_| _|_|\__|_\_\\___|_| _|___/ + + / _|_|_) | |\ \ | | +< < _` |(_-< | | _|_| | -_) | _` | > > _| \ _ \(_-< -_) + \_\\__,_|___/\_,_|_|_| _|\___|_|\__,_| _/ \__|_| _|\___/___/\___| + + )| | | | _) | + _` | _|-_) \/ _| (_-< \ -_) | | (_-< _| _|| _ \ _|(_-< +\__,_|_|\___|_| _|\__| ___/_| _|\___|_|_| ___/\__|_| _|.__/\__|___/ + _| + / _) | \ \ | | _) )| +< < -_) _|| _| \ > > _| \ |(_-< \ \ \ / _` |(_-< \/ _| + \_\\___|_| _|\__|_| _|_/ \__|_| _|_|___/ \_/\_/\__,_|___/_| _|\__| + + | _) | + _| \ | _| | / -_) \ +\__|_| _|_|\__|_\_\\___|_| _|_) + + _) + ____|____| | \ + _|_| _| + + | | | | _) | | +_ |_ |_| _` | -_) _ \ | _` | \____|_` | -_)\ \ / -_) | +_ |_ |_|\__,_|\___|_.__/_|\__,_|_| _| \__,_|\___| \_/\___|_| + _| _| + __ _ __ __ __ + / / (_)__ ___ / / / /_\ \ +< < / / _ \(_- > + \_\_/ /\___/___/_//_/_/\_\/_/ + |___/ + _ __ __ _____ _ _____ _ __ __ __ + (_)__ ___ / / / /__/ ___ \(_)__ / _/ /_ ____ __(_)_/_/__ / /_____ _/_/ + / / _ \(_- > (_- _< +/_/\___/\_, /_/ \___/\__/\_,_/\__/\__(_)_,_/ /_/ /___/_//_/ /_//_/ |/ + /___/ + __ _ __ __ __ __ _ ___ + / / (_)__ ___ / / / /_\ \ ___ ____ ___ _____/ / ___ (_) / (_)__ ___ +< < / / _ \(_- > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_) + \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/ + |___/ /_/ + _______ _ __ + < / / /(_) ___ __ _____ / /____ ___ __ ___ ___________ ____ + / /_ _/ (_- > / _ `/ _ \/ _ `/ __/ _ \/ -_) / / / _ \/ -_) + \_\_/ /\___/___/_//_/_/\_\/_/ \_,_/ .__/\_,_/\__/_//_/\__(_) /_/_/_//_/\__/ + |___/ /_/ + _______ _ _ __ _ + < / / /(_) ( )\ \( ) + / /_ _/ V / /|/ +/_/ /_/(_) _/_/ + /_/ + __ _ __ __ __ __ __ __ __ + / / (_)__ ___ / / / /_\ \ / /_/ / ___ ___ / /__ / /_ +< < / / _ \(_- > / __/ _ \/ -_) / _ \/ / _ \/ __/ + \_\_/ /\___/___/_//_/_/\_\/_/ \__/_//_/\__/ / .__/_/\___/\__/ + |___/ /_/ + __ __ _ __ + / /_/ / (_)___/ /_____ ___ ___ +/ __/ _ \/ / __/ '_/ -_) _ \(_-< +\__/_//_/_/\__/_/\_\\__/_//_/___/ + + __ _______ __ ____ __ __ + / /___ ____ __ __/ _/ _(_)__ / /__/ /\ \ / /_/ / ___ ___ ___ +< > / __/ _ \/ _ \(_- > / __/ _ \/ (_-< | |/|/ / _ `(_- < _ / / __/ || (__ + _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| +|__/ \____/ + ___ _ _ ___ _ + / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | +/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + |___/ + + _ __ __/\__ + _____| '_ \ \ / +|_____| | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ +| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ +| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / +| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < +|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| +| __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + |_| + ___ _ +( ) \ ( ) + \|| ||/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ +| (_)_ __ ___ / | || | _ ( ) \ ( ) +| | | '_ \ / _ \ | | || |(_) \|| ||/ +| | | | | | __/ | |__ _| > > +|_|_|_| |_|\___| |_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ +/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| +\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ +| |_| |__ (_) ___| | _____ _ __ ___ +| __| '_ \| |/ __| |/ / _ \ '_ \/ __| +| |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ +/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ +\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ + __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | +| (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + _ _ + ___ ___ _ __(_)_ __ | |_ ___ +/ __|/ __| '__| | '_ \| __/ __| +\__ \ (__| | | | |_) | |_\__ \ +|___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ +| (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____ | | '_ \ + |_____|_____| | | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | +|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | +|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + + joshk@influx:/etc/logrotate.d> sh -n * + apache: line 14: syntax error near unexpected token `}' + apache: line 14: `}' + the plot thickens + those aren't shell scripts + this wasn't chicken. + -- in #debian-devel diff --git a/externals/figlet/tests/res003.txt b/externals/figlet/tests/res003.txt new file mode 100644 index 0000000000..31770d6c96 --- /dev/null +++ b/externals/figlet/tests/res003.txt @@ -0,0 +1,432 @@ + __ ___ _ _ + \ \ / / |__ __ _| |_ (_)___ + \ \ /\ / /| '_ \ / _` | __| | / __| + \ V V / | | | | (_| | |_ | \__ \ + \_/\_/ |_| |_|\__,_|\__| |_|___/ + + _ _ _ _ _ +(_)_ ____ _____ | |_ _____ __| | (_)_ __ ___ _ _ ___| |__ +| | '_ \ \ / / _ \| \ \ / / _ \/ _` | | | '_ \ / __| | | |/ __| '_ \ +| | | | \ V / (_) | |\ V / __/ (_| | | | | | | \__ \ |_| | (__| | | | +|_|_| |_|\_/ \___/|_| \_/ \___|\__,_| |_|_| |_| |___/\__,_|\___|_| |_| + + __ _ __ +| _|___| | ___ ___ __|_ | +| |/ __| |/ _ \/ __|/ _ \ | +| | (__| | (_) \__ \ __/ | +| |\___|_|\___/|___/\___| | +|__| |__| + _ _ _ _ _ _ + _ __ ___| | __ _| |_(_) ___ _ __ ___| |__ (_)_ __ ___ (_)___ __ _ +| '__/ _ \ |/ _` | __| |/ _ \| '_ \/ __| '_ \| | '_ \/ __| | / __| / _` | +| | | __/ | (_| | |_| | (_) | | | \__ \ | | | | |_) \__ \ | \__ \ | (_| | +|_| \___|_|\__,_|\__|_|\___/|_| |_|___/_| |_|_| .__/|___/ |_|___/ \__,_| + |_| + __ __ + / _| ___ _ __ _ __ ___ ___ / _| +| |_ / _ \| '__| '_ ` _ \ / _ \| |_ +| _| (_) | | | | | | | | | (_) | _| +|_| \___/|_| |_| |_| |_| \___/|_| + + _ _ _ + ___ _ __ ___ ___ | |_(_) ___ _ __ __ _| | + / _ \ '_ ` _ \ / _ \| __| |/ _ \| '_ \ / _` | | +| __/ | | | | | (_) | |_| | (_) | | | | (_| | | + \___|_| |_| |_|\___/ \__|_|\___/|_| |_|\__,_|_| + + _ _ _ __ + ___| |__ ___ _ __ ___ (_)___| |_ _ __ _ _ ___ ___ / _| __ _ _ __ + / __| '_ \ / _ \ '_ ` _ \| / __| __| '__| | | | / __|/ _ \ | |_ / _` | '__| +| (__| | | | __/ | | | | | \__ \ |_| | | |_| |_ \__ \ (_) | | _| (_| | | + \___|_| |_|\___|_| |_| |_|_|___/\__|_| \__, ( ) |___/\___/ |_| \__,_|_| + |___/|/ + _ _ _ _ + _ _ _ __ _____ ___ __ | | __ _(_)_ __ ___ __| | | |__ _ _ +| | | | '_ \ / _ \ \/ / '_ \| |/ _` | | '_ \ / _ \/ _` | | '_ \| | | | +| |_| | | | | __/> <| |_) | | (_| | | | | | __/ (_| | | |_) | |_| | + \__,_|_| |_|\___/_/\_\ .__/|_|\__,_|_|_| |_|\___|\__,_| |_.__/ \__, | + |_| |___/ + _ _ __ + __ _ _ __ _ _ ___ ___| |__ ___ ___ | | ___ / _| + / _` | '_ \| | | | / __|/ __| '_ \ / _ \ / _ \| | / _ \| |_ +| (_| | | | | |_| | \__ \ (__| | | | (_) | (_) | | | (_) | _| + \__,_|_| |_|\__, | |___/\___|_| |_|\___/ \___/|_| \___/|_| + |___/ + _ _ _ ___ + _ __ ___ _ _ ___| |__ (_) __ _| |_ _ __ _ _ |_ _| __ _ _ __ ___ +| '_ \/ __| | | |/ __| '_ \| |/ _` | __| '__| | | | | | / _` | '_ ` _ \ +| |_) \__ \ |_| | (__| | | | | (_| | |_| | | |_| | | | | (_| | | | | | | +| .__/|___/\__, |\___|_| |_|_|\__,_|\__|_| \__, | |___| \__,_|_| |_| |_| +|_| |___/ |___/ + __ _ _ _ + __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ __ _| |_ + / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \ / _` | __| +| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | (_| | |_ + \__,_| \_/\_/ \__,_|_| \___| \___/|_|( ) \__|_| |_|\__,_|\__| + |/ + _ _ _ _ + ___ ___ _ __ __| (_) |_(_) ___ _ __ ___ + / __/ _ \| '_ \ / _` | | __| |/ _ \| '_ \/ __| +| (_| (_) | | | | (_| | | |_| | (_) | | | \__ \ + \___\___/|_| |_|\__,_|_|\__|_|\___/|_| |_|___/ + + _ _ _ + _ __ ___ | |_| |__ (_)_ __ __ _ ___ ___ +| '_ \ / _ \| __| '_ \| | '_ \ / _` | / __|/ _ \ +| | | | (_) | |_| | | | | | | | (_| | \__ \ (_) | +|_| |_|\___/ \__|_| |_|_|_| |_|\__, | |___/\___/ + |___/ + _ _ + ___(_)_ __ ___ _ __ | | ___ __ _ ___ __ _ +/ __| | '_ ` _ \| '_ \| |/ _ \ / _` / __| / _` | +\__ \ | | | | | | |_) | | __/ | (_| \__ \ | (_| | +|___/_|_| |_| |_| .__/|_|\___| \__,_|___/ \__,_| + |_| + _ _ _ _ + ___| |__ ___ (_) ___ ___ | |__ ___| |___ _____ ___ _ __ + / __| '_ \ / _ \| |/ __/ _ \ | '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \ +| (__| | | | (_) | | (_| __/ | |_) | __/ |_ \ V V / __/ __/ | | | + \___|_| |_|\___/|_|\___\___| |_.__/ \___|\__| \_/\_/ \___|\___|_| |_| + + _ _ _ __ +| |_| |__ ___ _ __ ___ | | ___ ___ ___ / _| +| __| '_ \ / _ \ | '_ \ / _ \| |/ _ \/ __| / _ \| |_ +| |_| | | | __/ | |_) | (_) | | __/\__ \ | (_) | _| + \__|_| |_|\___| | .__/ \___/|_|\___||___/ \___/|_| + |_| + _ _ _ _ _ + __ _| |_| |_ _ __ __ _ ___| |_(_) ___ _ __ __ _ _ __ __| | + / _` | __| __| '__/ _` |/ __| __| |/ _ \| '_ \ / _` | '_ \ / _` | +| (_| | |_| |_| | | (_| | (__| |_| | (_) | | | | | (_| | | | | (_| | + \__,_|\__|\__|_| \__,_|\___|\__|_|\___/|_| |_| \__,_|_| |_|\__,_| + + _ _ __ __ + _ __ ___ _ __ _ _| |___(_) ___ _ __ \ \ / /__ _ _ +| '__/ _ \ '_ \| | | | / __| |/ _ \| '_ \ \ V / _ \| | | | +| | | __/ |_) | |_| | \__ \ | (_) | | | |_ | | (_) | |_| | +|_| \___| .__/ \__,_|_|___/_|\___/|_| |_(_) |_|\___/ \__,_| + |_| + _ + ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___ + / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \ +| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/ + \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___| + + _ _ _ _ _ + _ __ ___ ___ _ __ | | ___ | |_| |__ (_)_ __| |_ _ _ +| '_ \ / _ \/ _ \| '_ \| |/ _ \ | __| '_ \| | '__| __| | | | +| |_) | __/ (_) | |_) | | __/ | |_| | | | | | | |_| |_| |_ +| .__/ \___|\___/| .__/|_|\___| \__|_| |_|_|_| \__|\__, ( ) +|_| |_| |___/|/ + __ _ _ _ + / _| ___ _ __| |_ _ _ | |_(_)_ __ ___ ___ ___ +| |_ / _ \| '__| __| | | | | __| | '_ ` _ \ / _ \/ __| +| _| (_) | | | |_| |_| | | |_| | | | | | | __/\__ \ +|_| \___/|_| \__|\__, | \__|_|_| |_| |_|\___||___/ + |___/ + _ _ _ + __| | _____ ___ __ | |_| |__ ___ _ _ ___ __ _ _ __ ___ + / _` |/ _ \ \ /\ / / '_ \ | __| '_ \ / _ \ | | | |/ _ \/ _` | '__/ __| +| (_| | (_) \ V V /| | | | | |_| | | | __/ | |_| | __/ (_| | | \__ \_ + \__,_|\___/ \_/\_/ |_| |_| \__|_| |_|\___| \__, |\___|\__,_|_| |___( ) + |___/ |/ + _ + __ _ _ __ __| | + / _` | '_ \ / _` | +| (_| | | | | (_| | + \__,_|_| |_|\__,_| + + _ _ _ +| |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __ +| __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \ +| |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | | + \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_| + |___/ + _ _ _ + __ _ _ __ ___ (_) __ _| |__ | | ___ + / _` | '_ ` _ \| |/ _` | '_ \| |/ _ \ +| (_| | | | | | | | (_| | |_) | | __/ + \__,_|_| |_| |_|_|\__,_|_.__/|_|\___| + + _ _ _ _ _ _ +| |__ _ _ ___| |_ __ _ _ __ __| | ___ _ __ ___ | (_) | _____ +| '_ \| | | / __| __/ _` | '_ \ / _` |/ _ \ '__/ __| | | | |/ / _ \ +| |_) | |_| \__ \ || (_| | | | | (_| | __/ | \__ \_ | | | < __/ +|_.__/ \__, |___/\__\__,_|_| |_|\__,_|\___|_| |___( ) |_|_|_|\_\___| + |___/ |/ + _ _ _ _ _ _ _ +| |_| |__ ___ ___| |__ ___ _ __ ___ | (_) __ _| |__ | |_ ___ +| __| '_ \ / _ \ / __| '_ \ / _ \| '__/ _ \ | | |/ _` | '_ \| __/ __| +| |_| | | | __/ \__ \ | | | (_) | | | __/ | | | (_| | | | | |_\__ \ + \__|_| |_|\___| |___/_| |_|\___/|_| \___| |_|_|\__, |_| |_|\__|___/ + |___/ + __ _ _ _ _ + ___ / _| | |_ _____ ___ __ ___ | |_| |__ __ _| |_ __ _ + / _ \| |_ | __/ _ \ \ /\ / / '_ \/ __| | __| '_ \ / _` | __| / _` | +| (_) | _| | || (_) \ V V /| | | \__ \ | |_| | | | (_| | |_ | (_| | + \___/|_| \__\___/ \_/\_/ |_| |_|___/ \__|_| |_|\__,_|\__| \__,_| + + _ _ + ___ __ _(_) | ___ _ __ +/ __|/ _` | | |/ _ \| '__| +\__ \ (_| | | | (_) | | +|___/\__,_|_|_|\___/|_| + + _ _ _ _ + _ __ __ _ ___ ___ ___ ___ __ _| |_ ___| |_ __ _| |_ ___ __| | +| '_ \ / _` / __/ __|/ _ \/ __| / _` | __| / __| __/ _` | __/ _ \/ _` | +| |_) | (_| \__ \__ \ __/\__ \ | (_| | |_ \__ \ || (_| | || __/ (_| | +| .__/ \__,_|___/___/\___||___/ \__,_|\__| |___/\__\__,_|\__\___|\__,_| +|_| + _ _ _ _ +| |_(_)_ __ ___ ___ ___ | |__ _ _| |_ _ __ _____ _____ _ __ +| __| | '_ ` _ \ / _ \/ __| | '_ \| | | | __| | '_ \ / _ \ \ / / _ \ '__| +| |_| | | | | | | __/\__ \ | |_) | |_| | |_ | | | | __/\ V / __/ | + \__|_|_| |_| |_|\___||___/ |_.__/ \__,_|\__| |_| |_|\___| \_/ \___|_| + + _ _ _ _ _ + ___ __ _| | |___ __ _| |_ ___ _ __ | |_| |__ ___ + / __/ _` | | / __| / _` | __| / _ \| '_ \ | __| '_ \ / _ \ +| (_| (_| | | \__ \ | (_| | |_ | (_) | | | | | |_| | | | __/ + \___\__,_|_|_|___/ \__,_|\__| \___/|_| |_| \__|_| |_|\___| + + _ + _ __ ___ __ _ _ _| | __ _ _ __ _ __ _ _ _ __ +| '__/ _ \/ _` | | | | |/ _` | '__| | '__| | | | '_ \ +| | | __/ (_| | |_| | | (_| | | | | | |_| | | | |_ +|_| \___|\__, |\__,_|_|\__,_|_| |_| \__,_|_| |_(_) + |___/ + ____ _ + / ___|___ _ ____ _____ _ __ ___ ___| |_ _ +| | / _ \| '_ \ \ / / _ \ '__/ __|/ _ \ | | | | +| |__| (_) | | | \ V / __/ | \__ \ __/ | |_| |_ + \____\___/|_| |_|\_/ \___|_| |___/\___|_|\__, ( ) + |___/|/ + _ _ _ _ _ _ + __ _| | | ___ ___ _ __ ___(_) __| | ___ _ __ __ _| |_(_) ___ _ __ ___ + / _` | | | / __/ _ \| '_ \/ __| |/ _` |/ _ \ '__/ _` | __| |/ _ \| '_ \/ __| +| (_| | | | | (_| (_) | | | \__ \ | (_| | __/ | | (_| | |_| | (_) | | | \__ \ + \__,_|_|_| \___\___/|_| |_|___/_|\__,_|\___|_| \__,_|\__|_|\___/|_| |_|___/ + + __ _ _ + ___ / _| ___ _____ __ __ _ ___(_) __| | ___ _ _ ___ _ _ + / _ \| |_ / __|/ _ \ \/ / / _` / __| |/ _` |/ _ \ | | | |/ _ \| | | | +| (_) | _| \__ \ __/> < | (_| \__ \ | (_| | __/_ | |_| | (_) | |_| | + \___/|_| |___/\___/_/\_\ \__,_|___/_|\__,_|\___( ) \__, |\___/ \__,_| + |/ |___/ + _ + ___ __ _ _ __ _ __ ___ ___ ___| |_ ___ ___ _ __ ___ ___ + / __/ _` | '_ \ | '_ ` _ \ / _ \/ _ \ __| / __|/ _ \| '_ ` _ \ / _ \ +| (_| (_| | | | | | | | | | | __/ __/ |_ \__ \ (_) | | | | | | __/ + \___\__,_|_| |_| |_| |_| |_|\___|\___|\__| |___/\___/|_| |_| |_|\___| + + _ _ _ + ___ | |_| |__ ___ _ __ _ __ ___ ___ _ __ | | ___ + / _ \| __| '_ \ / _ \ '__| | '_ \ / _ \/ _ \| '_ \| |/ _ \ +| (_) | |_| | | | __/ | | |_) | __/ (_) | |_) | | __/ + \___/ \__|_| |_|\___|_| | .__/ \___|\___/| .__/|_|\___| + |_| |_| + _ _ + ___ _ __ ___ ___ ___ _ __ | |___ _(_) ___ ___ + / _ \| '_ \ / __/ _ \ / _ \| '__| | __\ \ /\ / / |/ __/ _ \ +| (_) | | | | (_| __/ | (_) | | | |_ \ V V /| | (_| __/ + \___/|_| |_|\___\___| \___/|_| \__| \_/\_/ |_|\___\___| + + _ _ _ _ + __ _ _ __ __| | | |_| |__ ___ _ _ _ __ ___ _ __ ___ __ _(_)_ __ + / _` | '_ \ / _` | | __| '_ \ / _ \ | | | | '__/ _ \ '_ ` _ \ / _` | | '_ \ +| (_| | | | | (_| | | |_| | | | __/ |_| | | | | __/ | | | | | (_| | | | | | + \__,_|_| |_|\__,_| \__|_| |_|\___|\__, | |_| \___|_| |_| |_|\__,_|_|_| |_| + |___/ + _ + _ __ ___ _ __ _ __ ___ __ _ _ __ ___ _ __ | |_ +| '_ \ / _ \ '__| '_ ` _ \ / _` | '_ \ / _ \ '_ \| __| +| |_) | __/ | | | | | | | (_| | | | | __/ | | | |_ +| .__/ \___|_| |_| |_| |_|\__,_|_| |_|\___|_| |_|\__| +|_| + _ __ _ +(_)_ __ / _| |_ _ ___ _ __ ___ ___ ___ ___ _ __ +| | '_ \| |_| | | | |/ _ \ '_ \ / __/ _ \/ __| / _ \| '_ \ +| | | | | _| | |_| | __/ | | | (_| __/\__ \ | (_) | | | | +|_|_| |_|_| |_|\__,_|\___|_| |_|\___\___||___/ \___/|_| |_| + + _ _ __ + _ _ ___ _ _ _ __ | (_)/ _| ___ +| | | |/ _ \| | | | '__| | | | |_ / _ \ +| |_| | (_) | |_| | | | | | _| __/_ + \__, |\___/ \__,_|_| |_|_|_| \___(_) + |___/ + _____ _ + | ____|_ _____ _ __ _ _ ___ _ __ ___ (_)___ + | _| \ \ / / _ \ '__| | | |/ _ \| '_ \ / _ \ | / __| + | |___ \ V / __/ | | |_| | (_) | | | | __/ | \__ \ + |_____| \_/ \___|_| \__, |\___/|_| |_|\___| |_|___/ + |___/ + __ _ _ _ + __ ___ ____ _ _ __ ___ ___ / _| | |_| |__ (_)___ + / _` \ \ /\ / / _` | '__/ _ \ / _ \| |_ | __| '_ \| / __| +| (_| |\ V V / (_| | | | __/ | (_) | _| | |_| | | | \__ \ + \__,_| \_/\_/ \__,_|_| \___| \___/|_| \__|_| |_|_|___/ + + _ _ + __| (_)___ ___ _ __ ___ _ __ __ _ _ __ ___ _ _ + / _` | / __|/ __| '__/ _ \ '_ \ / _` | '_ \ / __| | | | +| (_| | \__ \ (__| | | __/ |_) | (_| | | | | (__| |_| | + \__,_|_|___/\___|_| \___| .__/ \__,_|_| |_|\___|\__, | + |_| |___/ + _ _ _ _ +| |__ ___| |___ _____ ___ _ __ | |_| |__ ___ +| '_ \ / _ \ __\ \ /\ / / _ \/ _ \ '_ \ | __| '_ \ / _ \ +| |_) | __/ |_ \ V V / __/ __/ | | | | |_| | | | __/ +|_.__/ \___|\__| \_/\_/ \___|\___|_| |_| \__|_| |_|\___| + + _ _ + __ _ ___ __ _ _ _ __ _(_)_ __ | |_ __ _ _ __ ___ ___ + / _` |/ __/ _` | | | |/ _` | | '_ \| __/ _` | '_ \ / __/ _ \ +| (_| | (_| (_| | |_| | (_| | | | | | || (_| | | | | (_| __/ + \__,_|\___\__, |\__,_|\__,_|_|_| |_|\__\__,_|_| |_|\___\___| + |_| + + ___ ___ ___ _ __ +/ __|/ _ \/ _ \ '_ \ +\__ \ __/ __/ | | | +|___/\___|\___|_| |_| + + __ _ _ _ + __ _ ___ / _| __ _ _ __ ___ (_) (_) __ _ _ __ + / _` / __| | |_ / _` | '_ ` _ \| | | |/ _` | '__| +| (_| \__ \ | _| (_| | | | | | | | | | (_| | | + \__,_|___/ |_| \__,_|_| |_| |_|_|_|_|\__,_|_| + + _ _ +__ ____ _| | |_ __ __ _ _ __ ___ _ __ ___ _ __ +\ \ /\ / / _` | | | '_ \ / _` | '_ \ / _ \ '__| / _ \| '__| + \ V V / (_| | | | |_) | (_| | |_) | __/ | | (_) | | + \_/\_/ \__,_|_|_| .__/ \__,_| .__/ \___|_| \___/|_| + |_| |_| + _ _ _ __ _ _ +(_)_ __ ___| |_ __ _ _ __ | |_ / _|_ __(_) ___ _ __ __| | +| | '_ \/ __| __/ _` | '_ \| __| | |_| '__| |/ _ \ '_ \ / _` | +| | | | \__ \ || (_| | | | | |_ | _| | | | __/ | | | (_| |_ +|_|_| |_|___/\__\__,_|_| |_|\__| |_| |_| |_|\___|_| |_|\__,_(_) + + _____ _ _ _ _ +|_ _| |__ ___ ___| |__ ___ _ __ ___ (_) ___ __ _| | + | | | '_ \ / _ \ / __| '_ \ / _ \ '_ ` _ \| |/ __/ _` | | + | | | | | | __/ | (__| | | | __/ | | | | | | (_| (_| | | + |_| |_| |_|\___| \___|_| |_|\___|_| |_| |_|_|\___\__,_|_| + + _ _ _ _ _ _ _ _ + __ _ ___| |_(_) ___ _ __ (_) |_ ___ _ __ | |_ __ _(_) |___ (_)___ + / _` |/ __| __| |/ _ \| '_ \ | | __| / _ \ '_ \| __/ _` | | / __| | / __| +| (_| | (__| |_| | (_) | | | | | | |_ | __/ | | | || (_| | | \__ \ | \__ \ + \__,_|\___|\__|_|\___/|_| |_| |_|\__| \___|_| |_|\__\__,_|_|_|___/ |_|___/ + + _ _ _ +| | ___ ___ ___ __ _____ _ __| |_| |__ +| |/ _ \/ __/ __| \ \ /\ / / _ \| '__| __| '_ \ +| | __/\__ \__ \ \ V V / (_) | | | |_| | | | +|_|\___||___/___/ \_/\_/ \___/|_| \__|_| |_| + + _ _ _ _ + __ _ _ __ __ _| |_ _ ___(_)_ __ __ _ | |_| |__ __ _ _ __ + / _` | '_ \ / _` | | | | |_ / | '_ \ / _` | | __| '_ \ / _` | '_ \ +| (_| | | | | (_| | | |_| |/ /| | | | | (_| | | |_| | | | (_| | | | | + \__,_|_| |_|\__,_|_|\__, /___|_|_| |_|\__, | \__|_| |_|\__,_|_| |_| + |___/ |___/ + _ _ _ _ + ___ _ __ (_) ___ _ _(_)_ __ __ _ / \ | |_ __ _ _ __ _ _ + / _ \ '_ \ | |/ _ \| | | | | '_ \ / _` | / _ \| __| / _` | '_ \| | | | +| __/ | | || | (_) | |_| | | | | | (_| |_ / ___ \ |_ | (_| | | | | |_| | + \___|_| |_|/ |\___/ \__, |_|_| |_|\__, (_) /_/ \_\__| \__,_|_| |_|\__, | + |__/ |___/ |___/ |___/ + _ _ _ _ + _ __ __ _| |_ ___ | |_| |__ ___ ___ ___ ___(_)_ __ +| '__/ _` | __/ _ \ | __| '_ \ / _ \/ __|/ _ \ / __| \ \/ / +| | | (_| | || __/_ | |_| | | | __/\__ \ __/ \__ \ |> < +|_| \__,_|\__\___( ) \__|_| |_|\___||___/\___| |___/_/_/\_\ + |/ + _ _ _ + _ __ (_) ___ ___ ___ ___ __ _ _ __ ___ __ _| |__ ___ _ _| |_ +| '_ \| |/ _ \/ __/ _ \/ __| / _` | '__/ _ \ / _` | '_ \ / _ \| | | | __| +| |_) | | __/ (_| __/\__ \ | (_| | | | __/ | (_| | |_) | (_) | |_| | |_ +| .__/|_|\___|\___\___||___/ \__,_|_| \___| \__,_|_.__/ \___/ \__,_|\__| +|_| + _ _ _ _ + _ __ ___ ___ _ __ __ _(_) |_| |__ __ _| |__ ___ _ __ ___ +| '_ ` _ \ / _ \ '_ \ \ \ /\ / / | __| '_ \ \ \ /\ / / '_ \ / _ \| '_ ` _ \ +| | | | | | __/ | | | \ V V /| | |_| | | | \ V V /| | | | (_) | | | | | | +|_| |_| |_|\___|_| |_| \_/\_/ |_|\__|_| |_| \_/\_/ |_| |_|\___/|_| |_| |_| + + ___ __ _ _ +|_ _| / _| ___| | |_ __ _ _ __ + | | | |_ / _ \ | __| / _` | '_ \ + | | | _| __/ | |_ | (_| | | | | +|___| |_| \___|_|\__| \__,_|_| |_| + + _ _ _ _ +(_)_ __ ___ _ __ ___ ___ __| (_) __ _| |_ ___ +| | '_ ` _ \| '_ ` _ \ / _ \/ _` | |/ _` | __/ _ \ +| | | | | | | | | | | | __/ (_| | | (_| | || __/ +|_|_| |_| |_|_| |_| |_|\___|\__,_|_|\__,_|\__\___| + + _ _ + ___ _ _ _ __ ___ _ __ __ _| |_ | |_ ___ _ _ ___ ___ +/ __| | | | '_ ` _ \| '_ \ / _` | __| _____ | __/ _ \ | | | / __|/ _ \ +\__ \ |_| | | | | | | |_) | (_| | |_ |_____| | || (_) | | |_| \__ \ __/ +|___/\__, |_| |_| |_| .__/ \__,_|\__| \__\___/ \__,_|___/\___| + |___/ |_| + _ _ __ __ __ + __ _ ___ ___ (_)_ __ (_)_ __ __ _ ___ / _| | \/ | __ ___ __ + / _` | / __/ _ \| | '_ \| | '_ \ / _` | / _ \| |_ | |\/| |/ _` \ \/ / +| (_| | | (_| (_) | | | | | | | | | (_| | | (_) | _| | | | | (_| |> < + \__,_| \___\___/|_|_| |_|_|_| |_|\__, | \___/|_| |_| |_|\__,_/_/\_\ + |___/ + ____ _ _ _ +| __ ) ___ ___ _ __| |__ ___ | |__ _ __ ___ ( )___ +| _ \ / _ \/ _ \ '__| '_ \ / _ \| '_ \| '_ ` _ \|// __| +| |_) | __/ __/ | | |_) | (_) | | | | | | | | | \__ \ +|____/ \___|\___|_| |_.__/ \___/|_| |_|_| |_| |_| |___/ + + + _ __ ___ ___ _ __ ___ +| '_ ` _ \ / _ \| '__/ _ \ +| | | | | | (_) | | | __/ +|_| |_| |_|\___/|_| \___| + + _ _ __ _ _ + ___ __ _| |_(_)___ / _| __ _ ___| |_ ___ _ __ _ _ | |_ ___ +/ __|/ _` | __| / __| |_ / _` |/ __| __/ _ \| '__| | | | | __/ _ \ +\__ \ (_| | |_| \__ \ _| (_| | (__| || (_) | | | |_| | | || (_) | +|___/\__,_|\__|_|___/_| \__,_|\___|\__\___/|_| \__, | \__\___/ + |___/ + _ _ _ _ + _ __ ___ ___ | |_| |__ __ _ _ __ | |_| |__ ___ +| '_ ` _ \ / _ \ | __| '_ \ / _` | '_ \ | __| '_ \ / _ \ +| | | | | | __/ | |_| | | | (_| | | | | | |_| | | | __/ +|_| |_| |_|\___| \__|_| |_|\__,_|_| |_| \__|_| |_|\___| + + + ___ _ __ __ _ __ _ _ _ ___ __ _____ __ _ _ _ ___ + / _ \| '_ \ / _` |/ _` | | | |/ _ \ \ \ / / _ \ / _` | | | |/ _ \ +| (_) | |_) | (_| | (_| | |_| | __/ \ V / (_) | (_| | |_| | __/ + \___/| .__/ \__,_|\__, |\__,_|\___| \_/ \___/ \__, |\__,_|\___| + |_| |_| |___/ + _ _ _ _ _ _ _ +__ _____ _ __ __| | ( | )___ _ __ ___ _ __ __ _| |_| |__ _ _( | ) +\ \ /\ / / _ \| '__/ _` | V V/ _ \ '_ ` _ \| '_ \ / _` | __| '_ \| | | |V V + \ V V / (_) | | | (_| | | __/ | | | | | |_) | (_| | |_| | | | |_| | _ + \_/\_/ \___/|_| \__,_| \___|_| |_| |_| .__/ \__,_|\__|_| |_|\__, | (_) + |_| |___/ + _ _ _ _ _ + / \ | (_)___| |_ __ _(_)_ __ + _____ _____ / _ \ | | / __| __/ _` | | '__| + |_____|_____| / ___ \| | \__ \ || (_| | | | + /_/ \_\_|_|___/\__\__,_|_|_| + + ____ _ _ _ ____ _ __ __ _ _ + / ___|___ ___ | | _____ ( | ) ___|(_)_ __ | \/ | ___ _ __( | ) +| | / _ \ / _ \| |/ / _ \ V V\___ \| \ \/ / | |\/| |/ _ \ '_ \V V +| |__| (_) | (_) | < __/_ ___) | |> < | | | | __/ | | | + \____\___/ \___/|_|\_\___( ) |____/|_/_/\_\ |_| |_|\___|_| |_| + |/ diff --git a/externals/figlet/tests/res004.txt b/externals/figlet/tests/res004.txt new file mode 100644 index 0000000000..8ece9309ac --- /dev/null +++ b/externals/figlet/tests/res004.txt @@ -0,0 +1,120 @@ + __ _ _ _ __ + / /(_) ___ ___| |__ | | __\ \ +/ / | |/ _ \/ __| '_ \| |/ / \ \ +\ \ | | (_) \__ \ | | | < / / + \_\/ |\___/|___/_| |_|_|\_\/_/ + |__/ + _ _ _ ____ _ __ _ __ _ + (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| + | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ + _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| +|__/ \____/ + ___ _ _ ___ _ + / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | +/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + |___/ + + _ __ __/\__ + _____| '_ \ \ / +|_____| | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ +| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ +| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / +| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < +|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| +| __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + |_| + ___ _ +( ) \ ( ) + \|| ||/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ +| (_)_ __ ___ / | || | _ ( ) \ ( ) +| | | '_ \ / _ \ | | || |(_) \|| ||/ +| | | | | | __/ | |__ _| > > +|_|_|_| |_|\___| |_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ +/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| +\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ +| |_| |__ (_) ___| | _____ _ __ ___ +| __| '_ \| |/ __| |/ / _ \ '_ \/ __| +| |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ +/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ +\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ + __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | +| (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + _ _ + ___ ___ _ __(_)_ __ | |_ ___ +/ __|/ __| '__| | '_ \| __/ __| +\__ \ (__| | | | |_) | |_\__ \ +|___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ +| (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____ | | '_ \ + |_____|_____| | | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | +|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | +|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res005.txt b/externals/figlet/tests/res005.txt new file mode 100644 index 0000000000..0e0921ef31 --- /dev/null +++ b/externals/figlet/tests/res005.txt @@ -0,0 +1,120 @@ + __ _ _ _ __ + \ \| | _| |__ ___ ___ (_)/ / + \ \ |/ / '_ \/ __|/ _ \| / / + / / <| | | \__ \ (_) | \ \ + /_/|_|\_\_| |_|___/\___// |\_\ + |__/ + _ __ _ __ _ ____ _ _ _ + ___| |_ ___ / /__ ___ _| |/ _|_ __ (_) / __ \| | _| |__ ___ ___ (_) + / __| __/ _ \ / (_) \/ / | | | | |_| '_ \| |/ / _` | |/ / '_ \/ __|/ _ \| | + | (__| || __// / _ > <| |_| | | _| | | | | | (_| | <| | | \__ \ (_) | | + \___|\__\___/_/ (_)_/\_\\__,_|_|_| |_| |_|_|\ \__,_|_|\_\_| |_|___/\___// | + \____/ |__/ + _ __ _ _ _ _ __ + | |__ ___ \ \ __| | ___| |_ __ _| |_ ___ _ __ __ _ ___ | | / / + | '_ \/ __| \ \/ _` | / _ \ __/ _` | __/ _ \| '__/ _` |/ _ \| | / / + | | | \__ \ / / (_| || __/ || (_| | || (_) | | | (_| | (_) | |/ / + |_| |_|___/ /_/ \__,_(_)___|\__\__,_|\__\___/|_| \__, |\___/|_/_/ + |___/ + + __/\__ _ __ + \ / | '_ \ _____ + /_ _\ | | | |_____| + \/ |_| |_| + + _ __ _ _ _ __ + _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ / + (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / / + | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \ + (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + _ _ _ _ _ _ + __ ____ _| |_ _ __ _ _ ___ _| || | / | ___ _ __ (_) | + \ \/ / _` | __| '_ \| | | / __| (_) || |_| | / _ \ '_ \| | | + > < (_| | |_| | | | |_| \__ \ _|__ _| | | __/ | | | | | + /_/\_\__,_|\__|_| |_|\__, |___/ (_) |_| |_| \___|_| |_|_|_| + |___/ + + _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___ + | '__/ _` |/ _ \ '_ \ | '__/ _ \| '__| '__/ _ \ + | | | (_| | __/ | | | | | | (_) | | | | | __/ + |_| \__,_|\___|_| |_| |_| \___/|_| |_| \___| + + _ _ _ _ + _ __ ___| | _____ | |_ __| | ___| |_ ___ ___ _ ____ _____ _ __ _ _ + | '_ \ / _ \ |/ / _ \| __| / _` |/ _ \ __/ __/ _ \ '_ \ \/ / _ \ '_ \| | | | + | | | | __/ < (_) | |_ | (_| | __/ || (_| __/ |_) > < __/ | | | |_| | + |_| |_|\___|_|\_\___/ \__| \__,_|\___|\__\___\___| .__/_/\_\___|_| |_|\__,_| + |_| + ___ _ + ( ) \ ( ) + |/ | | \| + > > + | | + /_/ + _ __ _ _ _ __ + _ ___| |__ ___ __ _ _ __ __ _ \ \| | _| |__ ___ ___ (_)/ / + (_) _ \ '_ \ / __/ _` | '_ \ / _` | \ \ |/ / '_ \/ __|/ _ \| / / + | __/ | | | (_| (_| | |_) | (_| | / / <| | | \__ \ (_) | \ \ + (_)___|_| |_|\___\__,_| .__/ \__,_| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + ___ _ _ _ _ _ _ + ( ) \ ( ) _| || | / | ___ _ __ (_) | + |/ | | \| (_) || |_| | / _ \ '_ \| | | + > > _|__ _| | | __/ | | | | | + | | (_) |_| |_| \___|_| |_|_|_| + /_/ + _ _ _ _ __ _ _ _ __ + | |_ ___ | |_ __ ___| |__ | |_ \ \| | _| |__ ___ ___ (_)/ / + | __/ _ \| | '_ \ / _ \ '_ \| __| \ \ |/ / '_ \/ __|/ _ \| / / + | || (_) | | |_) | | __/ | | | |_ / / <| | | \__ \ (_) | \ \ + \__\___/|_| .__/ \___|_| |_|\__| /_/|_|\_\_| |_|___/\___// |\_\ + |_| |__/ + _ _ _ _ + ___ _ __ ___| | _____(_) |__ | |_ + / __| '_ \ / _ \ |/ / __| | '_ \| __| + \__ \ | | | __/ < (__| | | | | |_ + |___/_| |_|\___|_|\_\___|_|_| |_|\__| + + _ _ __ _ _ _ __ __ __ + ___ ___ ___ | |__ | |_ \ \ __| | | ___(_)/ _|/ _|_ _ ___ __ _ / / + / _ \/ __|/ _ \| '_ \| __| \ \/ _` | |/ _ \ | |_| |_| | | / __|/ _` / / + | __/\__ \ (_) | | | | |_ / / (_| | | __/ | _| _| |_| \__ \ (_| \ \ + \___||___/\___/|_| |_|\__| /_/ \__,_|_|\___|_|_| |_| \__,_|___/\__,_|\_\ + + _ _ _ _ _ + | | | ___| |__ ___ | |_( )_ __ ___ _ __ __ _ + | | |/ _ \ '_ \/ __| | __|/| '_ \ / _ \ '__/ _` | + | | | __/ | | \__ \ | |_ | | | | __/ | | (_| | + |_|_|\___|_| |_|___/ \__| |_| |_|\___|_| \__,_| + + _ _ + ___| |_ _ __ (_)_ __ ___ ___ + / __| __| '_ \| | '__/ __/ __| + \__ \ |_| |_) | | | | (__\__ \ + |___/\__| .__/|_|_| \___|___/ + |_| + _ _ _ __ _ _ __ + ___(_) |__ | |_ \ \| |__ ___(_)_ __ ___ / / + / __| | '_ \| __| \ \ '_ \ / __| | '__/ _ \/ / + \__ \ | | | | |_ / / | | | (__| | | | __/\ \ + |___/_|_| |_|\__| /_/|_| |_|\___|_|_| \___| \_\ + + _ _ _ _ _ + _ __ ___| | _____(_) |__ ___ | |_( )_ __ ___ __ ___ __ + | '_ \ / _ \ |/ / __| | '_ \ / __| | __|/| '_ \/ __|/ _` \ \ /\ / / + _| | | | __/ < (__| | | | | (__ | |_ | | | \__ \ (_| |\ V V / + (_)_| |_|\___|_|\_\___|_|_| |_|\___| \__| |_| |_|___/\__,_| \_/\_/ + + _ + _ __ (_) + | '_ \| | _____ _____ + | | | | | |_____|_____| + |_| |_|_| + + _ _ _ _ _ _ _ + | | _____ _____ __| | _ __ __ _(_) |__ ___ __| |_| || |_ + | |/ _ \ \ / / _ \/ _` |_____| '_ \ / _` | | '_ \ / _ \/ _` |_ .. _| + | | __/\ V / __/ (_| |_____| | | | (_| | | |_) | __/ (_| |_ _| + |_|\___| \_/ \___|\__,_| |_| |_|\__,_|_|_.__/ \___|\__,_| |_||_| + diff --git a/externals/figlet/tests/res006.txt b/externals/figlet/tests/res006.txt new file mode 100644 index 0000000000..8ece9309ac --- /dev/null +++ b/externals/figlet/tests/res006.txt @@ -0,0 +1,120 @@ + __ _ _ _ __ + / /(_) ___ ___| |__ | | __\ \ +/ / | |/ _ \/ __| '_ \| |/ / \ \ +\ \ | | (_) \__ \ | | | < / / + \_\/ |\___/|___/_| |_|_|\_\/_/ + |__/ + _ _ _ ____ _ __ _ __ _ + (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| + | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ + _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| +|__/ \____/ + ___ _ _ ___ _ + / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | +/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + |___/ + + _ __ __/\__ + _____| '_ \ \ / +|_____| | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ +| (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ +| | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / +| | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < +|_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| +| __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + |_| + ___ _ +( ) \ ( ) + \|| ||/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ +| (_)_ __ ___ / | || | _ ( ) \ ( ) +| | | '_ \ / _ \ | | || |(_) \|| ||/ +| | | | | | __/ | |__ _| > > +|_|_|_| |_|\___| |_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ +/ / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| +\ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ +| |_| |__ (_) ___| | _____ _ __ ___ +| __| '_ \| |/ __| |/ / _ \ '_ \/ __| +| |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ +/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ +\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ + __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | +| (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + _ _ + ___ ___ _ __(_)_ __ | |_ ___ +/ __|/ __| '__| | '_ \| __/ __| +\__ \ (__| | | | |_) | |_\__ \ +|___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ +| (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____ | | '_ \ + |_____|_____| | | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | +|_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | +|_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res007.txt b/externals/figlet/tests/res007.txt new file mode 100644 index 0000000000..3f467dc2fd --- /dev/null +++ b/externals/figlet/tests/res007.txt @@ -0,0 +1,120 @@ + __ _ _ _ __ + / /(_) ___ ___| |__ | | __\ \ + / / | |/ _ \/ __| '_ \| |/ / \ \ + \ \ | | (_) \__ \ | | | < / / + \_\/ |\___/|___/_| |_|_|\_\/_/ + |__/ + _ _ _ ____ _ __ _ __ _ + (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| + | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ + _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| + |__/ \____/ + ___ _ _ ___ _ + / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | + /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + |___/ + + _ __ __/\__ + _____| '_ \ \ / + |_____| | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ + / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) + \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ + | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ + | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / + | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < + |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| + | __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + |_| + ___ _ + ( ) \ ( ) + \|| ||/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ + / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) + \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ + | (_)_ __ ___ / | || | _ ( ) \ ( ) + | | | '_ \ / _ \ | | || |(_) \|| ||/ + | | | | | | __/ | |__ _| > > + |_|_|_| |_|\___| |_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ + / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| + \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ + | |_| |__ (_) ___| | _____ _ __ ___ + | __| '_ \| |/ __| |/ / _ \ '_ \/ __| + | |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ + / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ + \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ + __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | + | (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + _ _ + ___ ___ _ __(_)_ __ | |_ ___ + / __|/ __| '__| | '_ \| __/ __| + \__ \ (__| | | | |_) | |_\__ \ + |___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ + | (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____ | | '_ \ + |_____|_____| | | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | + |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | + |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res008.txt b/externals/figlet/tests/res008.txt new file mode 100644 index 0000000000..3048a10cfa --- /dev/null +++ b/externals/figlet/tests/res008.txt @@ -0,0 +1,120 @@ + __ _ _ _ __ + / /(_) ___ ___| |__ | | __\ \ + / / | |/ _ \/ __| '_ \| |/ / \ \ + \ \ | | (_) \__ \ | | | < / / + \_\/ |\___/|___/_| |_|_|\_\/_/ + |__/ + _ _ _ ____ _ __ _ __ _ + (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| + | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ + _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___| + |__/ \____/ + ___ _ _ ___ _ + / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | + /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| + |___/ + + _ __ __/\__ + _____| '_ \ \ / + |_____| | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ + / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) + \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ + | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ + | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / + | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < + |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| + | __/ | | | | (_) | | | | | | __/ (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ +| |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | + \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| + |_| + ___ _ + ( ) \ ( ) + \|| ||/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ + / / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) + \ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ + | (_)_ __ ___ / | || | _ ( ) \ ( ) + | | | '_ \ / _ \ | | || |(_) \|| ||/ + | | | | | | __/ | |__ _| > > + |_|_|_| |_|\___| |_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ + / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| + \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ + | |_| |__ (_) ___| | _____ _ __ ___ + | __| '_ \| |/ __| |/ / _ \ '_ \/ __| + | |_| | | | | (__| < __/ | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ + / // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ + \ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ + __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | + / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | + | (_| | | | __/ | | | | |_ \__ \ | | | __/ | | + \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| + + _ _ + ___ ___ _ __(_)_ __ | |_ ___ + / __|/ __| '__| | '_ \| __/ __| + \__ \ (__| | | | |_) | |_\__ \ + |___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ + | (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____ | | '_ \ + |_____|_____| | | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | + |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | + |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res009.txt b/externals/figlet/tests/res009.txt new file mode 100644 index 0000000000..57f8690c8c --- /dev/null +++ b/externals/figlet/tests/res009.txt @@ -0,0 +1,138 @@ + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __\ \ +/ / | | / _ \ / __|| '_ \ | |/ / \ \ +\ \ | || (_) |\__ \| | | || < / / + \_\_/ | \___/ |___/|_| |_||_|\_\/_/ + |__/ + _ _ _ ____ _ __ _ __ + (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _|| | _ _ __ __ _ / / + | | / _ \ / __|| '_ \ | |/ // / _` || || '_ \ | |_ | || | | |\ \/ /(_) / / + | || (_) |\__ \| | | || <| | (_| || || | | || _|| || |_| | > < _ / / + _/ | \___/ |___/|_| |_||_|\_\\ \__,_||_||_| |_||_| |_| \__,_|/_/\_\(_)/_/ +|__/ \____/ + _ __ _ _ _ + ___ | |_ ___ / /| | ___ __ _ _ __ ___ | |_ __ _ | |_ ___ + / _ \| __|/ __| / / | | / _ \ / _` || '__|/ _ \ | __|/ _` || __|/ _ \ +| __/| |_| (__ / / | || (_) || (_| || | | (_) || |_| (_| || |_| __/ _ + \___| \__|\___|/_/ |_| \___/ \__, ||_| \___/ \__|\__,_| \__|\___|(_) + |___/ + _ __ _ + __| |\ \ ___ | |__ _ __ __/\__ + / _` | \ \ / __|| '_ \ _____ | '_ \ \ / +| (_| | / / \__ \| | | | |_____|| | | | /_ _\ + \__,_|/_/ |___/|_| |_| |_| |_| \/ + + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __\ \ +/ / | | / _ \ / __|| '_ \ | |/ / \ \ +\ \ | || (_) |\__ \| | | || < / / + \_\_/ | \___/ |___/|_| |_||_|\_\/_/ + |__/ + _ _ _ _ _ _ + __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _ + / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_) +| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_ + \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_) + |_| + _ + ___ _ _ _ __ | |_ __ _ __ __ ___ _ __ _ __ ___ _ __ +/ __|| | | || '_ \ | __|/ _` |\ \/ / / _ \| '__|| '__|/ _ \ | '__| +\__ \| |_| || | | || |_| (_| | > < | __/| | | | | (_) || | +|___/ \__, ||_| |_| \__|\__,_|/_/\_\ \___||_| |_| \___/ |_| + |___/ + + _ __ ___ __ _ _ __ +| '_ \ / _ \ / _` || '__| +| | | || __/| (_| || | +|_| |_| \___| \__,_||_| + + _ _ + _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| | +| | | || '_ \ / _ \\ \/ /| '_ \ / _ \ / __|| __|/ _ \ / _` | +| |_| || | | || __/ > < | |_) || __/| (__ | |_| __/| (_| | + \__,_||_| |_| \___|/_/\_\| .__/ \___| \___| \__|\___| \__,_| + |_| + _ _ _ __ _ +| |_ ___ | | __ ___ _ __ ( )\ \ ( ) +| __|/ _ \ | |/ // _ \| '_ \ \| | ||/ +| |_| (_) || <| __/| | | | > > + \__|\___/ |_|\_\\___||_| |_| | | + /_/ + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __\ \ +/ / | | / _ \ / __|| '_ \ | |/ / \ \ +\ \ | || (_) |\__ \| | | || < / / + \_\_/ | \___/ |___/|_| |_||_|\_\/_/ + |__/ + _ _ _ _ _ _ + __ _ _ __ __ _ ___ | |__ ___ _ | |(_) _ __ ___ / || || | _ + / _` || '_ \ / _` | / __|| '_ \ / _ \(_) | || || '_ \ / _ \ | || || |_(_) +| (_| || |_) || (_| || (__ | | | || __/ _ | || || | | || __/ | ||__ _|_ + \__,_|| .__/ \__,_| \___||_| |_| \___|(_) |_||_||_| |_| \___| |_| |_| (_) + |_| + _ __ _ +( )\ \ ( ) + \| | ||/ + > > + | | + /_/ + __ _ _ _ __ _ _ _ _ + / / (_) ___ ___ | |__ | | __\ \ | |_ | |__ ___ _ __ | | ___ | |_ +/ / | | / _ \ / __|| '_ \ | |/ / \ \ | __|| '_ \ / _ \ | '_ \ | | / _ \ | __| +\ \ | || (_) |\__ \| | | || < / / | |_ | | | || __/ | |_) || || (_) || |_ + \_\_/ | \___/ |___/|_| |_||_|\_\/_/ \__||_| |_| \___| | .__/ |_| \___/ \__| + |__/ |_| + _ _ _ _ +| |_ | |__ (_) ___ | | __ ___ _ __ ___ +| __|| '_ \ | | / __|| |/ // _ \| '_ \ / __| +| |_ | | | || || (__ | <| __/| | | |\__ \ + \__||_| |_||_| \___||_|\_\\___||_| |_||___/ + + __ __ __ _ _ _ __ + / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \ +/ / / _` |/ __|| | | || |_ | |_ | | / _ \| | / _` | \ \ +\ \| (_| |\__ \| |_| || _|| _|| || __/| || (_| | / / + \_\\__,_||___/ \__,_||_| |_| |_| \___||_| \__,_|/_/ + + _ _ _ _ +| |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( )| |_ +| __|| '_ \ / _ \ / __| / _ \ / _` || '__|/ _ \| '_ \|/ | __| +| |_ | | | || (_) |\__ \| __/ | (_| || | | __/| | | | | |_ + \__||_| |_| \___/ |___/ \___| \__,_||_| \___||_| |_| \__| + + _ _ _ _ _ + ___ | |__ ___ | || | ___ ___ _ __ (_) _ __ | |_ ___ +/ __|| '_ \ / _ \| || | / __| / __|| '__|| || '_ \ | __|/ __| +\__ \| | | || __/| || | \__ \| (__ | | | || |_) || |_ \__ \ +|___/|_| |_| \___||_||_| |___/ \___||_| |_|| .__/ \__||___/ + |_| + __ _ _ __ _ _ _ + / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___ +/ / / _ \| '__|| | / __|| '_ \ \ \ | __|| '_ \ | |/ __| +\ \| __/| | | || (__ | | | | / / | |_ | | | || |\__ \ + \_\\___||_| |_| \___||_| |_|/_/ \__||_| |_||_||___/ + + _ _ _ _ _ +__ __ __ _ ___ _ __ ( )| |_ ___ | |__ (_) ___ | | __ ___ _ __ +\ \ /\ / // _` |/ __|| '_ \|/ | __| / __|| '_ \ | | / __|| |/ // _ \| '_ \ + \ V V /| (_| |\__ \| | | | | |_ | (__ | | | || || (__ | <| __/| | | | _ + \_/\_/ \__,_||___/|_| |_| \__| \___||_| |_||_| \___||_|\_\\___||_| |_|(_) + + _ + (_) _ __ + _____ _____ | || '_ \ + |_____||_____| | || | | | + |_||_| |_| + + _ _ _ _ _ _ + _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___ __ __ ___ +|_ .. _| / _` | / _ \| '_ \ | | / _` || '_ \ _____ / _` | / _ \\ \ / // _ \ +|_ _|| (_| || __/| |_) || || (_| || | | ||_____|| (_| || __/ \ V /| __/ + |_||_| \__,_| \___||_.__/ |_| \__,_||_| |_| \__,_| \___| \_/ \___| + + _ +| | +| | +| | +|_| + diff --git a/externals/figlet/tests/res010.txt b/externals/figlet/tests/res010.txt new file mode 100644 index 0000000000..43a2523636 --- /dev/null +++ b/externals/figlet/tests/res010.txt @@ -0,0 +1,156 @@ + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __ \ \ + / / | | / _ \ / __| | '_ \ | |/ / \ \ + \ \ | | | (_) | \__ \ | | | | | < / / + \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ + |__/ + _ _ _ ____ _ __ _ + (_) ___ ___ | |__ | | __ / __ \ (_) _ __ / _| | | _ _ + | | / _ \ / __| | '_ \ | |/ / / / _` | | | | '_ \ | |_ | | | | | | + | | | (_) | \__ \ | | | | | < | | (_| | | | | | | | | _| | | | |_| | + _/ | \___/ |___/ |_| |_| |_|\_\ \ \__,_| |_| |_| |_| |_| |_| \__,_| + |__/ \____/ + __ _ __ _ + __ __ _ / / ___ | |_ ___ / / | | ___ __ _ _ __ + \ \/ / (_) / / / _ \ | __| / __| / / | | / _ \ / _` | | '__| + > < _ / / | __/ | |_ | (__ / / | | | (_) | | (_| | | | + /_/\_\ (_) /_/ \___| \__| \___| /_/ |_| \___/ \__, | |_| + |___/ + _ _ _ __ _ + ___ | |_ __ _ | |_ ___ __| | \ \ ___ | |__ + / _ \ | __| / _` | | __| / _ \ / _` | \ \ / __| | '_ \ + | (_) | | |_ | (_| | | |_ | __/ _ | (_| | / / \__ \ | | | | + \___/ \__| \__,_| \__| \___| (_) \__,_| /_/ |___/ |_| |_| + + + _ __ __/\__ + _____ | '_ \ \ / + |_____| | | | | /_ _\ + |_| |_| \/ + + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __ \ \ + / / | | / _ \ / __| | '_ \ | |/ / \ \ + \ \ | | | (_) | \__ \ | | | | | < / / + \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ + |__/ + _ _ _ + __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___ + / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \ + | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/ + \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___| + |_| + _ _ _ _ + / | | || | _ ___ _ _ _ __ | |_ __ _ __ __ + | | | || |_ (_) / __| | | | | | '_ \ | __| / _` | \ \/ / + | | |__ _| _ \__ \ | |_| | | | | | | |_ | (_| | > < + |_| |_| (_) |___/ \__, | |_| |_| \__| \__,_| /_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ \ | '__| | '__| / _ \ | '__| | '_ \ / _ \ / _` | | '__| + | __/ | | | | | (_) | | | | | | | | __/ | (_| | | | + \___| |_| |_| \___/ |_| |_| |_| \___| \__,_| |_| + + _ _ + _ _ _ __ ___ __ __ _ __ ___ ___ | |_ ___ __| | + | | | | | '_ \ / _ \ \ \/ / | '_ \ / _ \ / __| | __| / _ \ / _` | + | |_| | | | | | | __/ > < | |_) | | __/ | (__ | |_ | __/ | (_| | + \__,_| |_| |_| \___| /_/\_\ | .__/ \___| \___| \__| \___| \__,_| + |_| + _ _ _ __ _ + | |_ ___ | | __ ___ _ __ ( ) \ \ ( ) + | __| / _ \ | |/ / / _ \ | '_ \ \| | | |/ + | |_ | (_) | | < | __/ | | | | > > + \__| \___/ |_|\_\ \___| |_| |_| | | + /_/ + __ _ _ _ __ + / / (_) ___ ___ | |__ | | __ \ \ + / / | | / _ \ / __| | '_ \ | |/ / \ \ + \ \ | | | (_) | \__ \ | | | | | < / / + \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ + |__/ + _ _ _ + __ _ _ __ __ _ ___ | |__ ___ _ | | (_) _ __ ___ + / _` | | '_ \ / _` | / __| | '_ \ / _ \ (_) | | | | | '_ \ / _ \ + | (_| | | |_) | | (_| | | (__ | | | | | __/ _ | | | | | | | | | __/ + \__,_| | .__/ \__,_| \___| |_| |_| \___| (_) |_| |_| |_| |_| \___| + |_| + _ _ _ _ __ _ + / | | || | _ ( ) \ \ ( ) + | | | || |_ (_) \| | | |/ + | | |__ _| _ > > + |_| |_| (_) | | + /_/ + __ _ _ _ __ _ _ + / / (_) ___ ___ | |__ | | __ \ \ | |_ | |__ ___ + / / | | / _ \ / __| | '_ \ | |/ / \ \ | __| | '_ \ / _ \ + \ \ | | | (_) | \__ \ | | | | | < / / | |_ | | | | | __/ + \_\ _/ | \___/ |___/ |_| |_| |_|\_\ /_/ \__| |_| |_| \___| + |__/ + _ _ + _ __ | | ___ | |_ + | '_ \ | | / _ \ | __| + | |_) | | | | (_) | | |_ + | .__/ |_| \___/ \__| + |_| + _ _ _ _ + | |_ | |__ (_) ___ | | __ ___ _ __ ___ + | __| | '_ \ | | / __| | |/ / / _ \ | '_ \ / __| + | |_ | | | | | | | (__ | < | __/ | | | | \__ \ + \__| |_| |_| |_| \___| |_|\_\ \___| |_| |_| |___/ + + __ __ __ _ _ _ __ + / / __ _ ___ _ _ / _| / _| (_) ___ | | __| | \ \ + / / / _` | / __| | | | | | |_ | |_ | | / _ \ | | / _` | \ \ + \ \ | (_| | \__ \ | |_| | | _| | _| | | | __/ | | | (_| | / / + \_\ \__,_| |___/ \__,_| |_| |_| |_| \___| |_| \__,_| /_/ + + _ _ _ _ + | |_ | |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) | |_ + | __| | '_ \ / _ \ / __| / _ \ / _` | | '__| / _ \ | '_ \ |/ | __| + | |_ | | | | | (_) | \__ \ | __/ | (_| | | | | __/ | | | | | |_ + \__| |_| |_| \___/ |___/ \___| \__,_| |_| \___| |_| |_| \__| + + _ _ _ _ _ + ___ | |__ ___ | | | | ___ ___ _ __ (_) _ __ | |_ ___ + / __| | '_ \ / _ \ | | | | / __| / __| | '__| | | | '_ \ | __| / __| + \__ \ | | | | | __/ | | | | \__ \ | (__ | | | | | |_) | | |_ \__ \ + |___/ |_| |_| \___| |_| |_| |___/ \___| |_| |_| | .__/ \__| |___/ + |_| + __ _ _ __ _ _ _ + / / ___ _ __ (_) ___ | |__ \ \ | |_ | |__ (_) ___ + / / / _ \ | '__| | | / __| | '_ \ \ \ | __| | '_ \ | | / __| + \ \ | __/ | | | | | (__ | | | | / / | |_ | | | | | | \__ \ + \_\ \___| |_| |_| \___| |_| |_| /_/ \__| |_| |_| |_| |___/ + + _ _ + __ __ __ _ ___ _ __ ( ) | |_ + \ \ /\ / / / _` | / __| | '_ \ |/ | __| + \ V V / | (_| | \__ \ | | | | | |_ + \_/\_/ \__,_| |___/ |_| |_| \__| + + _ _ _ + ___ | |__ (_) ___ | | __ ___ _ __ + / __| | '_ \ | | / __| | |/ / / _ \ | '_ \ + | (__ | | | | | | | (__ | < | __/ | | | | _ + \___| |_| |_| |_| \___| |_|\_\ \___| |_| |_| (_) + + _ + (_) _ __ + _____ _____ | | | '_ \ + |_____| |_____| | | | | | | + |_| |_| |_| + + _ _ _ _ _ _ + _| || |_ __| | ___ | |__ (_) __ _ _ __ __| | ___ + |_ .. _| / _` | / _ \ | '_ \ | | / _` | | '_ \ _____ / _` | / _ \ + |_ _| | (_| | | __/ | |_) | | | | (_| | | | | | |_____| | (_| | | __/ + |_||_| \__,_| \___| |_.__/ |_| \__,_| |_| |_| \__,_| \___| + + _ + __ __ ___ | | + \ \ / / / _ \ | | + \ V / | __/ | | + \_/ \___| |_| + diff --git a/externals/figlet/tests/res011.txt b/externals/figlet/tests/res011.txt new file mode 100644 index 0000000000..3b669a139d --- /dev/null +++ b/externals/figlet/tests/res011.txt @@ -0,0 +1,114 @@ + __ _ _ _ __ + / /(_) ___ ___| |__ | | _\ \ +/ / | |/ _ \/ __| '_ \| |/ /\ \ +\ \ | | (_) \__ | | | | < / / + \__/ |\___/|___|_| |_|_|\_/_/ + |__/ + _ _ _ ____ _ __ _ __ _ + (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / ___| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ | __/ __| + | | (_) \__ | | | | | | (_| | | | | | _| | |_| |> < _ / | __| || (__ + _/ |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___| +|__/ \____/ + ___ _ _ ___ _ + / | | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __ + / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ / __| '_ \ _____| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ \__ | | | |_____| | | | +/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/|___|_| |_| |_| |_| + |___/ + +__/\__ +\ / +/_ _\ + \/ + + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_ + \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ _ +| (_)_ __ ___/ | || | _ ___ _ _ _ __ | |_ __ ___ __ +| | | '_ \ / _ | | || |(_/ __| | | | '_ \| __/ _` \ \/ / +| | | | | | __| |__ __\__ | |_| | | | | || (_| |> < +|_|_|_| |_|\___|_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\ + |___/ + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__| +| __| | | | | (_) | | | | | | __| (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + _ _ _ _ + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __ +| | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \ +| |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | | + \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_| + |_| + ___ _ +( \ \( ) + \|| |/ + > > + | | + /_/ + __ _ _ _ __ _ + / /(_) ___ ___| |__ | | _\ \ __ _ _ __ __ _ ___| |__ ___ _ +/ / | |/ _ \/ __| '_ \| |/ /\ \/ _` | '_ \ / _` |/ __| '_ \ / _ (_) +\ \ | | (_) \__ | | | | < / | (_| | |_) | (_| | (__| | | | __/_ + \__/ |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + |__/ |_| + _ _ _ _ _ ___ _ +| (_)_ __ ___/ | || | _( \ \( ) +| | | '_ \ / _ | | || |(_)\|| |/ +| | | | | | __| |__ __ > > +|_|_|_| |_|\___|_| |_|(_) | | + /_/ + __ _ _ _ __ _ _ _ _ + / /(_) ___ ___| |__ | | _\ \| |_| |__ ___ _ __ | | ___ | |_ +/ / | |/ _ \/ __| '_ \| |/ /\ | __| '_ \ / _ | '_ \| |/ _ \| __| +\ \ | | (_) \__ | | | | < / | |_| | | | __| |_) | | (_) | |_ + \__/ |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ +| |_| |__ (_) ___| | _____ _ __ ___ +| __| '_ \| |/ __| |/ / _ | '_ \/ __| +| |_| | | | | (__| | __| | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + __ __ __ _ _ ___ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \| |_| |__ ___ ___ ___ +/ // _` / __| | | | |_| |_| |/ _ | |/ _` |\ | __| '_ \ / _ \/ __|/ _ \ +\ | (_| \__ | |_| | _| _| | __| | (_| |/ | |_| | | | (_) \__ | __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + _ _ _ _ _ _ _ + __ _ _ __ ___ _ __( | |_ ___| |__ ___| | |___ ___ _ __(_)_ __ | |_ ___ + / _` | '__/ _ | '_ |/| __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __| +| (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \ + \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/ + |_| + __ _ _ __ _ _ _ _ _ + / /___ _ __(_) ___| |__ \ \| |_| |__ (_)_____ ____ _ ___ _ __( | |_ +/ // _ | '__| |/ __| '_ \ \ | __| '_ \| / __\ \ /\ / / _` / __| '_ |/| __| +\ | __| | | | (__| | | |/ | |_| | | | \__ \\ V V | (_| \__ | | | || |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__| + + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ | '_ \ +| (__| | | | | (__| | __| | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ + (_)_ __ + _____ _____| | '_ \ +|_____|_____| | | | | + |_|_| |_| + + _ _ _ _ _ _ _ + _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | +|_ .. _|/ _` |/ _ | '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ | | +|_ _| (_| | __| |_) | | (_| | | | |_____| (_| | __/\ V | __| | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res012.txt b/externals/figlet/tests/res012.txt new file mode 100644 index 0000000000..3a25e26453 --- /dev/null +++ b/externals/figlet/tests/res012.txt @@ -0,0 +1,36 @@ + ┛┏━┃┏━┛┃ ┃┃ ┃ + ┃┃ ┃━━┃┏━┃┏┛ +<━┛━━┛━━┛┛ ┛┛ ┛> + ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃ ┃ ┃┃ ┃ ┛┏━┛━┏┛┏━┛ ┛┃ ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛ + ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃ ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃ ┛ ┃ ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛ +━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛ ━━┛━━┛┛ ┛┛┛ ━━┛ ┛ ━━┛┛ ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛ +┏━ ┏━┛┃ ┃ ┏━ ┛ ┛ +┃ ┃ ━━┃┏━┃ ━┛┃ ┃ ━┏┛ +━━ > ━━┛┛ ┛ ┛ ┛ ┛ ┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃ ┃ ┃ ┏━┛┃ ┃┏━ ━┏┛┏━┃┃ ┃ + ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃ ━━┃┛ ━━┃━┏┛┃ ┃ ┃ ┏━┃ ┛ +<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━━┛ ┛ ┛ ┛ ┛ ┛ ┛┛ ┛ +┏━┛┏━┃┏━┃┏━┃┏━┃ ┏━ ┏━┛┏━┃┏━┃ ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━ ━┏┛┏━┃┃ ┃┏━┛┏━ +┏━┛┏┏┛┏┏┛┃ ┃┏┏┛ ┃ ┃┏━┛┏━┃┏┏┛ ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃ ┃ ┏━┛┃ ┃ ┃ ┃ ┃┏┛ ┏━┛┃ ┃ +━━┛┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛┛ ┛━━┛┛ ┛┛ ━━┛━━┛ ┛ ━━┛━━ ┛ ━━┛┛ ┛━━┛┛ ┛ +┛ ━┃ ┛ + ┛ ┏┛ + ━┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃ ┃ ┃ ┛ ━┃ ┛ + ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃ ━━┃┛ ┛ ┏┛ +<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ━┏┛┃ ┃┏━┛ ┏━┃┃ ┏━┃━┏┛ ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛ + ┃┃ ┃━━┃┏━┃┏┛ ┃ ┏━┃┏━┛ ┏━┛┃ ┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃━━┃ +<━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛ ┛━━┛ ┛ ━━┛━━┛ ┛ ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛ + ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃ ┏━ ━┏┛┃ ┃┏━┃┏━┛┏━┛ ┏━┃┏━┃┏━┛┏━ ┛━┏┛ ┏━┛┃ ┃┏━┛┃ ┃ + ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃ ┃ ┃ ┃ ┏━┃┃ ┃━━┃┏━┛ ┏━┃┏┏┛┏━┛┃ ┃ ┃ ━━┃┏━┃┏━┛┃ ┃ +<┛ ┛━━┛━━┛┛ ┛ ┛━━┛━━┛━━ > ┛ ┛ ┛━━┛━━┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛ +┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛ +━━┃┃ ┏┏┛┃┏━┛ ┃ ━━┃ +━━┛━━┛┛ ┛┛┛ ┛ ━━┛ + ┏━┛┏━┃┛┏━┛┃ ┃ ━┏┛┃ ┃┛┏━┛ ┃┃┃┏━┃┏━┛┏━ ┛━┏┛ ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ + ┏━┛┏┏┛┃┃ ┏━┃ ┃ ┏━┃┃━━┃ ┃┃┃┏━┃━━┃┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃ +<━━┛┛ ┛┛━━┛┛ ┛> ┛ ┛ ┛┛━━┛ ━━┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛ + ┛┏━ ┏━ ┏━┛┏━ ┛┏━┃┏━ ┏━ ┏━┛┃ ┃┏━┛┃ + ━┛━┛ ┃┃ ┃ ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃ + ┛┛ ┛ #━━ ━━┛━━ ┛┛ ┛┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛ diff --git a/externals/figlet/tests/res013.txt b/externals/figlet/tests/res013.txt new file mode 100644 index 0000000000..6983f2faa4 --- /dev/null +++ b/externals/figlet/tests/res013.txt @@ -0,0 +1,132 @@ + __ _ _ _ __ + \ \ | | __| |__ ___ ___ (_) / / + \ \| |/ /| '_ \ / __| / _ \ | |/ / + / /| < | | | |\__ \| (_) || |\ \ + /_/ |_|\_\|_| |_||___/ \___/_/ | \_\ + |__/ + __ _ __ _ ____ _ _ _ + / /_ __ __ _ _ | | / _| _ __ (_) / __ \ | | __| |__ ___ ___ (_) + / /(_)\ \/ /| | | || || |_ | '_ \ | | / / _` || |/ /| '_ \ / __| / _ \ | | + / / _ > < | |_| || || _|| | | || || | (_| || < | | | |\__ \| (_) || | + /_/ (_)/_/\_\ \__,_||_||_| |_| |_||_| \ \__,_||_|\_\|_| |_||___/ \___/_/ | + \____/ |__/ + _ _ _ __ _ + ___ | |_ __ _ | |_ ___ _ __ __ _ ___ | | / /___ | |_ ___ + / _ \| __|/ _` || __|/ _ \ | '__|/ _` | / _ \ | | / // __|| __|/ _ \ + _| __/| |_| (_| || |_| (_) || | | (_| || (_) || | / /| (__ | |_| __/ + (_)\___| \__|\__,_| \__|\___/ |_| \__, | \___/ |_|/_/ \___| \__|\___| + |___/ + _ __ _ + __/\__ _ __ | |__ ___ \ \ __| | + \ / | '_ \ _____ | '_ \ / __| \ \ / _` | + /_ _\ | | | ||_____| | | | |\__ \ / /| (_| | + \/ |_| |_| |_| |_||___/ /_/ \__,_| + + _ __ _ _ _ __ + _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / / + (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ / + _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \ + (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\ + |_| |__/ + _ _ _ _ _ _ + __ __ __ _ | |_ _ __ _ _ ___ _ | || | / | ___ _ __ (_)| | + \ \/ // _` || __|| '_ \ | | | |/ __| (_)| || |_ | | / _ \| '_ \ | || | + > <| (_| || |_ | | | || |_| |\__ \ _ |__ _|| | | __/| | | || || | + /_/\_\\__,_| \__||_| |_| \__, ||___/ (_) |_| |_| \___||_| |_||_||_| + |___/ + + _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___ + | '__|/ _` | / _ \| '_ \ | '__|/ _ \ | '__|| '__|/ _ \ + | | | (_| || __/| | | | | | | (_) || | | | | __/ + |_| \__,_| \___||_| |_| |_| \___/ |_| |_| \___| + + _ _ + __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _ + / _` | / _ \| __|/ __|/ _ \| '_ \\ \/ // _ \| '_ \ | | | | + | (_| || __/| |_| (__| __/| |_) |> <| __/| | | || |_| | + \__,_| \___| \__|\___|\___|| .__//_/\_\\___||_| |_| \__,_| + |_| + _ __ _ _ _ + ( )\ \ ( ) _ __ ___ | | __ ___ | |_ + |/ | | \| | '_ \ / _ \| |/ // _ \ | __| + > > | | | || __/| <| (_) || |_ + | | |_| |_| \___||_|\_\\___/ \__| + /_/ + _ __ _ _ _ __ + _ ___ | |__ ___ __ _ _ __ __ _ \ \ | | __| |__ ___ ___ (_) / / + (_)/ _ \| '_ \ / __|/ _` || '_ \ / _` | \ \| |/ /| '_ \ / __| / _ \ | |/ / + _| __/| | | || (__| (_| || |_) || (_| | / /| < | | | |\__ \| (_) || |\ \ + (_)\___||_| |_| \___|\__,_|| .__/ \__,_| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\ + |_| |__/ + _ __ _ _ _ _ _ _ + ( )\ \ ( ) _ | || | / | ___ _ __ (_)| | + |/ | | \| (_)| || |_ | | / _ \| '_ \ | || | + > > _ |__ _|| | | __/| | | || || | + | | (_) |_| |_| \___||_| |_||_||_| + /_/ + _ _ _ _ __ _ _ _ __ + | |_ ___ | | _ __ ___ | |__ | |_ \ \ | | __| |__ ___ ___ (_) / / + | __|/ _ \ | || '_ \ / _ \| '_ \ | __| \ \| |/ /| '_ \ / __| / _ \ | |/ / + | |_| (_) || || |_) | | __/| | | || |_ / /| < | | | |\__ \| (_) || |\ \ + \__|\___/ |_|| .__/ \___||_| |_| \__| /_/ |_|\_\|_| |_||___/ \___/_/ | \_\ + |_| |__/ + _ _ _ _ + ___ _ __ ___ | | __ ___ (_)| |__ | |_ + / __|| '_ \ / _ \| |/ // __|| || '_ \ | __| + \__ \| | | || __/| <| (__ | || | | || |_ + |___/|_| |_| \___||_|\_\\___||_||_| |_| \__| + + __ _ _ _ __ __ __ + \ \ __| || | ___ (_) / _| / _| _ _ ___ __ _ / / + \ \ / _` || | / _ \| || |_ | |_ | | | |/ __| / _` |/ / + / /| (_| || || __/| || _|| _|| |_| |\__ \| (_| |\ \ + /_/ \__,_||_| \___||_||_| |_| \__,_||___/ \__,_| \_\ + + _ _ _ _ + | |_ ( )_ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_ + | __||/| '_ \ / _ \| '__|/ _` | / _ \/ __| / _ \ | '_ \ | __| + | |_ | | | || __/| | | (_| | | __/\__ \| (_) || | | || |_ + \__| |_| |_| \___||_| \__,_| \___||___/ \___/ |_| |_| \__| + + _ _ _ _ _ + ___ | |_ _ __ (_) _ __ ___ ___ | || | ___ | |__ ___ + / __|| __|| '_ \ | || '__|/ __|/ __| | || | / _ \| '_ \ / __| + \__ \| |_ | |_) || || | | (__ \__ \ | || || __/| | | |\__ \ + |___/ \__|| .__/ |_||_| \___||___/ |_||_| \___||_| |_||___/ + |_| + _ _ _ __ _ _ __ + ___ (_)| |__ | |_ \ \ | |__ ___ (_) _ __ ___ / / + / __|| || '_ \ | __| \ \| '_ \ / __|| || '__|/ _ \/ / + \__ \| || | | || |_ / /| | | || (__ | || | | __/\ \ + |___/|_||_| |_| \__| /_/ |_| |_| \___||_||_| \___| \_\ + + _ _ + | |_ ( )_ __ ___ __ _ __ __ + | __||/| '_ \ / __| / _` |\ \ /\ / / + | |_ | | | |\__ \| (_| | \ V V / + \__| |_| |_||___/ \__,_| \_/\_/ + + _ _ _ + _ __ ___ | | __ ___ (_)| |__ ___ + | '_ \ / _ \| |/ // __|| || '_ \ / __| + _ | | | || __/| <| (__ | || | | || (__ + (_)|_| |_| \___||_|\_\\___||_||_| |_| \___| + + _ + _ __ (_) + | '_ \ | | _____ _____ + | | | || | |_____||_____| + |_| |_||_| + + _ _ _ _ _ _ + __ __ ___ __| | _ __ __ _ (_)| |__ ___ __| | _| || |_ + \ \ / // _ \ / _` | _____ | '_ \ / _` || || '_ \ / _ \ / _` ||_ .. _| + \ V /| __/| (_| ||_____|| | | || (_| || || |_) || __/| (_| ||_ _| + \_/ \___| \__,_| |_| |_| \__,_||_||_.__/ \___| \__,_| |_||_| + + _ + | | ___ + | | / _ \ + | || __/ + |_| \___| + diff --git a/externals/figlet/tests/res014.txt b/externals/figlet/tests/res014.txt new file mode 100644 index 0000000000..545bbce996 --- /dev/null +++ b/externals/figlet/tests/res014.txt @@ -0,0 +1,144 @@ + __ __ __ _ __ + \ \ / /__ / /_ _____ ____ (_)/ / + \ \ / //_// __ \ / ___// __ \ / // / + / // ,< / / / /(__ )/ /_/ / / / \ \ + /_//_/|_|/_/ /_//____/ \____/__/ / \_\ + /___/ + __ ____ _ ______ __ __ _ + _ _ __ __ __ / // __/____ (_)/ ____ \ / /__ / /_ _____ ____ (_) + (_)| |/_// / / // // /_ / __ \ / // / __ `// //_// __ \ / ___// __ \ / / + _ _> < / /_/ // // __// / / // // / /_/ // ,< / / / /(__ )/ /_/ / / / + (_)/_/|_| \__,_//_//_/ /_/ /_//_/ \ \__,_//_/|_|/_/ /_//____/ \____/__/ / + \____/ /___/ + __ __ __ __ __ __ + / /_ ____ _ / /_ ____ _____ ____ _ ____ / / _/_/_____ / /_ ___ _/_/ + / __// __ `// __// __ \ / ___// __ `// __ \ / / _/_/ / ___// __// _ \ _/_/ + / /_ / /_/ // /_ / /_/ // / / /_/ // /_/ // /_/_/ / /__ / /_ / __/_/_/ + \__/ \__,_/ \__/ \____//_/ \__, / \____//_//_/ \___/ \__/ \___//_/ + /____/ + __ __ __ + __/|_ ____ / /_ _____ \ \ ____/ / ___ + | / / __ \ ______ / __ \ / ___/ \ \ / __ / / _ \ + /_ __| / / / //_____/ / / / /(__ ) / // /_/ /_ / __/ + |/ /_/ /_/ /_/ /_//____/ /_/ \__,_/(_)\___/ + + __ __ __ _ __ + \ \ / /__ / /_ _____ ____ (_)/ / + \ \ / //_// __ \ / ___// __ \ / // / + / // ,< / / / /(__ )/ /_/ / / / \ \ + /_//_/|_|/_/ /_//____/ \____/__/ / \_\ + /___/ + _ __ __ + ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _ + / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/ + / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ / + \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/ + /_/ + __ __ __ ___ + _ __ ____ _ / /_ ____ __ __ _____ _ / // / < / + | |/_// __ `// __// __ \ / / / // ___/ (_)/ // /_ / / + _> < / /_/ // /_ / / / // /_/ /(__ ) _ /__ __// / + /_/|_| \__,_/ \__//_/ /_/ \__, //____/ (_) /_/ /_/ + /____/ + + _____ ____ _ ___ ____ _____ ____ _____ _____ ___ + / ___// __ `// _ \ / __ \ / ___// __ \ / ___// ___// _ \ + / / / /_/ // __// / / / / / / /_/ // / / / / __/ + /_/ \__,_/ \___//_/ /_/ /_/ \____//_/ /_/ \___/ + + __ __ + ____/ /___ / /_ _____ ___ ____ _ __ ___ ____ __ __ + / __ // _ \ / __// ___// _ \ / __ \ | |/_// _ \ / __ \ / / / / + / /_/ // __// /_ / /__ / __// /_/ /_> < / __// / / // /_/ / + \__,_/ \___/ \__/ \___/ \___// .___//_/|_| \___//_/ /_/ \__,_/ + /_/ + _ _ _ __ __ + ( )| |( ) ____ ___ / /__ ____ / /_ + |/ / / V / __ \ / _ \ / //_// __ \ / __/ + _>_> / / / // __// ,< / /_/ // /_ + _/_/ /_/ /_/ \___//_/|_| \____/ \__/ + /_/ + __ __ __ _ __ + \ \ / /__ / /_ _____ ____ (_)/ / + \ \ / //_// __ \ / ___// __ \ / // / + / // ,< / / / /(__ )/ /_/ / / / \ \ + /_//_/|_|/_/ /_//____/ \____/__/ / \_\ + /___/ + _ __ __ + ___ ____ (_)/ / _ ___ / /_ _____ ____ _ ____ ____ _ + / _ \ / __ \ / // / (_)/ _ \ / __ \ / ___// __ `// __ \ / __ `/ + / __// / / // // / _ / __// / / // /__ / /_/ // /_/ // /_/ / + \___//_/ /_//_//_/ (_) \___//_/ /_/ \___/ \__,_// .___/ \__,_/ + /_/ + _ _ _ __ __ ___ + ( )| |( ) _ / // / < / + |/ / / V (_)/ // /_ / / + _>_> _ /__ __// / + _/_/ (_) /_/ /_/ + /_/ + __ __ __ __ __ _ __ + ___ / /_ / /_ \ \ / /__ / /_ _____ ____ (_)/ / + / _ \ / __ \ / __/ \ \ / //_// __ \ / ___// __ \ / // / + / __// / / // /_ / // ,< / / / /(__ )/ /_/ / / / \ \ + \___//_/ /_/ \__/ /_//_/|_|/_/ /_//____/ \____/__/ / \_\ + /___/ + __ _ __ __ __ __ + _____ ____ ___ / /__ _____ (_)/ /_ / /_ / /_ ____ / /____ + / ___// __ \ / _ \ / //_// ___// // __ \ / __/ / __// __ \ / // __ \ + (__ )/ / / // __// ,< / /__ / // / / // /_ / /_ / /_/ // // /_/ / + /____//_/ /_/ \___//_/|_| \___//_//_/ /_/ \__/ \__/ \____//_// .___/ + /_/ + __ __ __ _ ____ ____ __ + \ \ ____/ // /___ (_)/ __// __/__ __ _____ ____ _ / / + \ \ / __ // // _ \ / // /_ / /_ / / / // ___// __ `// / + / // /_/ // // __// // __// __// /_/ /(__ )/ /_/ / \ \ + /_/ \__,_//_/ \___//_//_/ /_/ \__,_//____/ \__,_/ \_\ + + __ _ __ __ + / /_( )____ ___ _____ ____ _ ___ _____ ____ / /_ / /_ + / __/|// __ \ / _ \ / ___// __ `/ / _ \ / ___// __ \ / __ \ / __/ + / /_ / / / // __// / / /_/ / / __/(__ )/ /_/ // / / // /_ + \__/ /_/ /_/ \___//_/ \__,_/ \___//____/ \____//_/ /_/ \__/ + + __ _ __ __ __ + _____ / /_ ____ (_)_____ _____ _____ / // /___ / /_ _____ + / ___// __// __ \ / // ___// ___// ___/ / // // _ \ / __ \ / ___/ + (__ )/ /_ / /_/ // // / / /__ (__ ) / // // __// / / /(__ ) + /____/ \__// .___//_//_/ \___//____/ /_//_/ \___//_/ /_//____/ + /_/ + _ __ __ __ __ _ __ + _____ (_)/ /_ / /_ \ \ / /_ _____ (_)_____ ___ / / + / ___// // __ \ / __/ \ \ / __ \ / ___// // ___// _ \/ / + (__ )/ // / / // /_ / // / / // /__ / // / / __/\ \ + /____//_//_/ /_/ \__/ /_//_/ /_/ \___//_//_/ \___/ \_\ + + __ _ + / /_( )____ _____ ____ _ _ __ + / __/|// __ \ / ___// __ `/| | /| / / + / /_ / / / /(__ )/ /_/ / | |/ |/ / + \__/ /_/ /_//____/ \__,_/ |__/|__/ + + __ _ __ + ____ ___ / /__ _____ (_)/ /_ _____ + / __ \ / _ \ / //_// ___// // __ \ / ___/ + _ / / / // __// ,< / /__ / // / / // /__ + (_)/_/ /_/ \___//_/|_| \___//_//_/ /_/ \___/ + + _ + ____ (_) + / __ \ / / ______ ______ + / / / // / /_____//_____/ + /_/ /_//_/ + + __ _ __ __ __ __ + _ __ ___ ____/ / ____ ____ _ (_)/ /_ ___ ____/ /__/ // /_ + | | / // _ \ / __ /______ / __ \ / __ `// // __ \ / _ \ / __ //_ _ __/ + | |/ // __// /_/ //_____// / / // /_/ // // /_/ // __// /_/ //_ _ __/ + |___/ \___/ \__,_/ /_/ /_/ \__,_//_//_.___/ \___/ \__,_/ /_//_/ + + __ + / /___ + / // _ \ + / // __/ + /_/ \___/ + diff --git a/externals/figlet/tests/res015.txt b/externals/figlet/tests/res015.txt new file mode 100644 index 0000000000..de7bcd4570 --- /dev/null +++ b/externals/figlet/tests/res015.txt @@ -0,0 +1,156 @@ + __ _ _ _ __ + \ \ | | __ | |__ ___ ___ (_) / / + \ \ | |/ / | '_ \ / __| / _ \ | | / / + / / | < | | | | \__ \ | (_) | | | \ \ + /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\ + |__/ + _ __ _ ____ _ _ _ + _ _ | | / _| _ __ (_) / __ \ | | __ | |__ ___ ___ (_) + | | | | | | | |_ | '_ \ | | / / _` | | |/ / | '_ \ / __| / _ \ | | + | |_| | | | | _| | | | | | | | | (_| | | < | | | | \__ \ | (_) | | | + \__,_| |_| |_| |_| |_| |_| \ \__,_| |_|\_\ |_| |_| |___/ \___/ _/ | + \____/ |__/ + _ __ _ __ + _ __ __ _ ___ | | / / ___ | |_ ___ / / _ __ __ + | '__| / _` | / _ \ | | / / / __| | __| / _ \ / / (_) \ \/ / + | | | (_| | | (_) | | | / / | (__ | |_ | __/ / / _ > < + |_| \__, | \___/ |_| /_/ \___| \__| \___| /_/ (_) /_/\_\ + |___/ + _ __ _ _ _ + | |__ ___ \ \ __| | ___ | |_ __ _ | |_ ___ + | '_ \ / __| \ \ / _` | / _ \ | __| / _` | | __| / _ \ + | | | | \__ \ / / | (_| | _ | __/ | |_ | (_| | | |_ | (_) | + |_| |_| |___/ /_/ \__,_| (_) \___| \__| \__,_| \__| \___/ + + + __/\__ _ __ + \ / | '_ \ _____ + /_ _\ | | | | |_____| + \/ |_| |_| + + __ _ _ _ __ + \ \ | | __ | |__ ___ ___ (_) / / + \ \ | |/ / | '_ \ / __| / _ \ | | / / + / / | < | | | | \__ \ | (_) | | | \ \ + /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\ + |__/ + _ _ _ + ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _ + / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` | + | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| | + \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_| + |_| + _ _ _ _ + __ __ __ _ | |_ _ __ _ _ ___ _ | || | / | + \ \/ / / _` | | __| | '_ \ | | | | / __| (_) | || |_ | | + > < | (_| | | |_ | | | | | |_| | \__ \ _ |__ _| | | + /_/\_\ \__,_| \__| |_| |_| \__, | |___/ (_) |_| |_| + |___/ + + _ __ __ _ ___ _ __ _ __ ___ _ __ _ __ ___ + | '__| / _` | / _ \ | '_ \ | '__| / _ \ | '__| | '__| / _ \ + | | | (_| | | __/ | | | | | | | (_) | | | | | | __/ + |_| \__,_| \___| |_| |_| |_| \___/ |_| |_| \___| + + _ _ + __| | ___ | |_ ___ ___ _ __ __ __ ___ _ __ _ _ + / _` | / _ \ | __| / __| / _ \ | '_ \ \ \/ / / _ \ | '_ \ | | | | + | (_| | | __/ | |_ | (__ | __/ | |_) | > < | __/ | | | | | |_| | + \__,_| \___| \__| \___| \___| | .__/ /_/\_\ \___| |_| |_| \__,_| + |_| + _ __ _ _ _ + ( ) \ \ ( ) _ __ ___ | | __ ___ | |_ + |/ | | \| | '_ \ / _ \ | |/ / / _ \ | __| + > > | | | | | __/ | < | (_) | | |_ + | | |_| |_| \___| |_|\_\ \___/ \__| + /_/ + __ _ _ _ __ + \ \ | | __ | |__ ___ ___ (_) / / + \ \ | |/ / | '_ \ / __| / _ \ | | / / + / / | < | | | | \__ \ | (_) | | | \ \ + /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\ + |__/ + _ _ _ + ___ _ __ (_) | | _ ___ | |__ ___ __ _ _ __ __ _ + / _ \ | '_ \ | | | | (_) / _ \ | '_ \ / __| / _` | | '_ \ / _` | + | __/ | | | | | | | | _ | __/ | | | | | (__ | (_| | | |_) | | (_| | + \___| |_| |_| |_| |_| (_) \___| |_| |_| \___| \__,_| | .__/ \__,_| + |_| + _ __ _ _ _ _ + ( ) \ \ ( ) _ | || | / | + |/ | | \| (_) | || |_ | | + > > _ |__ _| | | + | | (_) |_| |_| + /_/ + _ _ __ _ _ _ __ + ___ | |__ | |_ \ \ | | __ | |__ ___ ___ (_) / / + / _ \ | '_ \ | __| \ \ | |/ / | '_ \ / __| / _ \ | | / / + | __/ | | | | | |_ / / | < | | | | \__ \ | (_) | | | \ \ + \___| |_| |_| \__| /_/ |_|\_\ |_| |_| |___/ \___/ _/ | \_\ + |__/ + _ _ + | |_ ___ | | _ __ + | __| / _ \ | | | '_ \ + | |_ | (_) | | | | |_) | + \__| \___/ |_| | .__/ + |_| + _ _ _ _ + ___ _ __ ___ | | __ ___ (_) | |__ | |_ + / __| | '_ \ / _ \ | |/ / / __| | | | '_ \ | __| + \__ \ | | | | | __/ | < | (__ | | | | | | | |_ + |___/ |_| |_| \___| |_|\_\ \___| |_| |_| |_| \__| + + __ _ _ _ __ __ __ + \ \ __| | | | ___ (_) / _| / _| _ _ ___ __ _ / / + \ \ / _` | | | / _ \ | | | |_ | |_ | | | | / __| / _` | / / + / / | (_| | | | | __/ | | | _| | _| | |_| | \__ \ | (_| | \ \ + /_/ \__,_| |_| \___| |_| |_| |_| \__,_| |___/ \__,_| \_\ + + _ _ _ _ + | |_ ( ) _ __ ___ _ __ __ _ ___ ___ ___ | |__ | |_ + | __| |/ | '_ \ / _ \ | '__| / _` | / _ \ / __| / _ \ | '_ \ | __| + | |_ | | | | | __/ | | | (_| | | __/ \__ \ | (_) | | | | | | |_ + \__| |_| |_| \___| |_| \__,_| \___| |___/ \___/ |_| |_| \__| + + _ _ _ _ _ + ___ | |_ _ __ (_) _ __ ___ ___ | | | | ___ | |__ ___ + / __| | __| | '_ \ | | | '__| / __| / __| | | | | / _ \ | '_ \ / __| + \__ \ | |_ | |_) | | | | | | (__ \__ \ | | | | | __/ | | | | \__ \ + |___/ \__| | .__/ |_| |_| \___| |___/ |_| |_| \___| |_| |_| |___/ + |_| + _ _ _ __ _ _ __ + ___ (_) | |__ | |_ \ \ | |__ ___ (_) _ __ ___ / / + / __| | | | '_ \ | __| \ \ | '_ \ / __| | | | '__| / _ \ / / + \__ \ | | | | | | | |_ / / | | | | | (__ | | | | | __/ \ \ + |___/ |_| |_| |_| \__| /_/ |_| |_| \___| |_| |_| \___| \_\ + + _ _ + | |_ ( ) _ __ ___ __ _ __ __ + | __| |/ | '_ \ / __| / _` | \ \ /\ / / + | |_ | | | | \__ \ | (_| | \ V V / + \__| |_| |_| |___/ \__,_| \_/\_/ + + _ _ _ + _ __ ___ | | __ ___ (_) | |__ ___ + | '_ \ / _ \ | |/ / / __| | | | '_ \ / __| + _ | | | | | __/ | < | (__ | | | | | | | (__ + (_) |_| |_| \___| |_|\_\ \___| |_| |_| |_| \___| + + _ + _ __ (_) + | '_ \ | | _____ _____ + | | | | | | |_____| |_____| + |_| |_| |_| + + _ _ _ _ _ _ + ___ __| | _ __ __ _ (_) | |__ ___ __| | _| || |_ + / _ \ / _` | _____ | '_ \ / _` | | | | '_ \ / _ \ / _` | |_ .. _| + | __/ | (_| | |_____| | | | | | (_| | | | | |_) | | __/ | (_| | |_ _| + \___| \__,_| |_| |_| \__,_| |_| |_.__/ \___| \__,_| |_||_| + + _ + | | ___ __ __ + | | / _ \ \ \ / / + | | | __/ \ V / + |_| \___| \_/ + diff --git a/externals/figlet/tests/res016.txt b/externals/figlet/tests/res016.txt new file mode 100644 index 0000000000..cf70546d5f --- /dev/null +++ b/externals/figlet/tests/res016.txt @@ -0,0 +1,152 @@ + ___ _ _ __ + / (_) | | | | \ \ + / / _ ___ ___| |__ | | __\ \ + < < | |/ _ \/ __| '_ \| |/ / > > + \ \| | (_) \__ | | | | < / / + \_| |\___/|___|_| |_|_|\_/_/ + _/ | + |__/ + _ _ _ _ __ _ __ _ + (_) | | | | ____ (_) / _| | _ / / | | + _ ___ ___| |__ | | __/ __ \ _ _ __ | |_| |_ ___ _(_) / ___| |_ ___ + | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| _| | | | \ \/ / / / _ | __/ __| + | | (_) \__ | | | | | | (_| | | | | | | | | |_| |> < _ / | __| || (__ + | |\___/|___|_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_/_/ \___|\__\___| + _/ | \____/ + |__/ + ___ _ _ ___ _ + / | | | | | | | \ \ | | + / /| | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| |\ \ ___| |__ + / / | |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` | > / __| '_ \ + / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ /\__ | | | | + /_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_\__,_/_/ |___|_| |_| + __/ | + |___/ + _ + /\| |/\ + ______ _ __ \ ` ' / + |______| '_ \|_ _| + | | | |/ , . \ + |_| |_|\/|_|\/ + + + ___ _ _ __ _ + / (_) | | | | \ \ | | _ + / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_) + < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \ + \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_ + \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + _/ | | | + |__/ |_| + _ _ __ _ _ _ + | (_) /_ | || | _ | | + | |_ _ __ ___ | | || |(_)___ _ _ _ __ | |_ __ ___ __ + | | | '_ \ / _ \| |__ _|/ __| | | | '_ \| __/ _` \ \/ / + | | | | | | __/| | | | _\__ | |_| | | | | || (_| |> < + |_|_|_| |_|\___||_| |_|(_|___/\__, |_| |_|\__\__,_/_/\_\ + __/ | + |___/ + + + ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ + / _ | '__| '__/ _ \| '__| '_ \ / _ \/ _` | '__| + | __| | | | | (_) | | | | | | __| (_| | | + \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| + + + _ _ _ _ + | | | | | | | + _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | |_ ___ | | _____ _ __ + | | | | '_ \ / _ \ \/ | '_ \ / _ \/ __| __/ _ \/ _` | __/ _ \| |/ / _ | '_ \ + | |_| | | | | __/> <| |_) | __| (__| || __| (_| | || (_) | | __| | | | + \__,_|_| |_|\___/_/\_| .__/ \___|\___|\__\___|\__,_|\__\___/|_|\_\___|_| |_| + | | + |_| + ___ _ + ( \ \( ) + \|| |/ + \ \ + / / + | | + /_/ + + ___ _ _ __ _ + / (_) | | | | \ \ | | _ + / / _ ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___(_) + < < | |/ _ \/ __| '_ \| |/ / > >/ _` | '_ \ / _` |/ __| '_ \ / _ \ + \ \| | (_) \__ | | | | < / /| (_| | |_) | (_| | (__| | | | __/_ + \_| |\___/|___|_| |_|_|\_/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) + _/ | | | + |__/ |_| + _ _ __ _ _ ___ _ + | (_) /_ | || | _( \ \( ) + | |_ _ __ ___ | | || |(_)\|| |/ + | | | '_ \ / _ \| |__ _| \ \ + | | | | | | __/| | | | _ / / + |_|_|_| |_|\___||_| |_|(_) | | + /_/ + + ___ _ _ __ _ _ _ _ + / (_) | | | | \ \ | | | | | | | | + / / _ ___ ___| |__ | | __\ \| |_| |__ ___ _ __ | | ___ | |_ + < < | |/ _ \/ __| '_ \| |/ / > | __| '_ \ / _ | '_ \| |/ _ \| __| + \ \| | (_) \__ | | | | < / /| |_| | | | __| |_) | | (_) | |_ + \_| |\___/|___|_| |_|_|\_/_/ \__|_| |_|\___| .__/|_|\___/ \__| + _/ | | | + |__/ |_| + _ _ _ _ + | | | | (_) | | + | |_| |__ _ ___| | _____ _ __ ___ + | __| '_ \| |/ __| |/ / _ | '_ \/ __| + | |_| | | | | (__| | __| | | \__ \ + \__|_| |_|_|\___|_|\_\___|_| |_|___/ + + + __ __ __ _ _ ___ _ _ + / / / _|/ _(_) | | | \ \ | | | | + / / __ _ ___ _ _| |_| |_ _ ___| | __| |\ \| |_| |__ ___ ___ ___ + < < / _` / __| | | | _| _| |/ _ | |/ _` | > | __| '_ \ / _ \/ __|/ _ \ + \ | (_| \__ | |_| | | | | | | __| | (_| |/ /| |_| | | | (_) \__ | __/ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| + + + _ _ _ _ _ _ _ + ( | | | | | | | (_) | | + __ _ _ __ ___ _ __|/| |_ ___| |__ ___| | |___ ___ _ __ _ _ __ | |_ ___ + / _` | '__/ _ | '_ \ | __/ __| '_ \ / _ | | / __|/ __| '__| | '_ \| __/ __| + | (_| | | | __| | | || |_\__ | | | | __| | \__ | (__| | | | |_) | |_\__ \ + \__,_|_| \___|_| |_| \__|___|_| |_|\___|_|_|___/\___|_| |_| .__/ \__|___/ + | | + |_| + __ _ _ __ _ _ _ _ _ + / / (_) | | \ \ | | | | (_) ( | | + / / ___ _ __ _ ___| |__ \ \| |_| |__ _ _____ ____ _ ___ _ __|/| |_ + < < / _ | '__| |/ __| '_ \ > | __| '_ \| / __\ \ /\ / / _` / __| '_ \ | __| + \ | __| | | | (__| | | |/ /| |_| | | | \__ \\ V V | (_| \__ | | | || |_ + \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___|_| |_| \__| + + + _ _ _ + | | (_) | | + ___| |__ _ ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ | '_ \ + | (__| | | | | (__| | __| | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + + _ + (_) + ______ ______ _ _ __ + |______|______| | '_ \ + | | | | | + |_|_| |_| + + + _ _ _ _ _ _ _ + _| || |_ | | | | (_) | | | | + |_ __ _| __| | ___| |__ _ __ _ _ __ ______ __| | _____ _____| | + _| || |_ / _` |/ _ | '_ \| |/ _` | '_ |______/ _` |/ _ \ \ / / _ | | + |_ __ _| (_| | __| |_) | | (_| | | | | | (_| | __/\ V | __| | + |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + + diff --git a/externals/figlet/tests/res017.txt b/externals/figlet/tests/res017.txt new file mode 100644 index 0000000000..3296f8c60b --- /dev/null +++ b/externals/figlet/tests/res017.txt @@ -0,0 +1,36 @@ + ┛┏━┃┏━┛┃ ┃┃ ┃ + ┃┃ ┃━━┃┏━┃┏┛ + <━┛━━┛━━┛┛ ┛┛ ┛> + ┛┏━┃┏━┛┃ ┃┃ ┃┏━┃┛┏━ ┏━┛┃ ┃ ┃┃ ┃ ┛┏━┛━┏┛┏━┛ ┛┃ ┏━┃┏━┛┏━┃┏━┃━┏┛┏━┃━┏┛┏━┛ + ┃┃ ┃━━┃┏━┃┏┛ ┃┛┛┃┃ ┃┏━┛┃ ┃ ┃ ┛ ┛ ┛ ┏━┛ ┃ ┃ ┛ ┃ ┃ ┃┃ ┃┏┏┛┃ ┃ ┃ ┏━┃ ┃ ┏━┛ + ━┛━━┛━━┛┛ ┛┛ ┛━━┛┛┛ ┛┛ ━━┛━━┛┛ ┛┛┛ ━━┛ ┛ ━━┛┛ ━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛ + ┏━ ┏━┛┃ ┃ ┏━ ┛ ┛ + ┃ ┃ ━━┃┏━┃ ━┛┃ ┃ ━┏┛ + ━━> ━━┛┛ ┛ ┛ ┛ ┛ ┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃┃ ┃ ┏━┛┃ ┃┏━━┏┛┏━┃┃ ┃ + ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃━━┃┛ ━━┃━┏┛┃ ┃┃ ┏━┃ ┛ + <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━━┛ ┛ ┛ ┛┛ ┛ ┛┛ ┛ + ┏━┛┏━┃┏━┃┏━┃┏━┃ ┏━ ┏━┛┏━┃┏━┃ ┃ ┃┏━ ┏━┛┃ ┃┏━┃┏━┛┏━┛━┏┛┏━┛┏━ ━┏┛┏━┃┃ ┃┏━┛┏━ + ┏━┛┏┏┛┏┏┛┃ ┃┏┏┛ ┃ ┃┏━┛┏━┃┏┏┛ ┃ ┃┃ ┃┏━┛ ┛ ┏━┛┏━┛┃ ┃ ┏━┛┃ ┃ ┃ ┃ ┃┏┛ ┏━┛┃ ┃ + ━━┛┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛┛ ┛━━┛┛ ┛┛ ━━┛━━┛ ┛ ━━┛━━ ┛ ━━┛┛ ┛━━┛┛ ┛ + ┛━┃┛ + ┛┏┛ + ━┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ┏━┃┏━┃┏━┃┏━┛┃ ┃┏━┛ ┃ ┛┏━ ┏━┛ ━┃┃ ┃ ┛━┃┛ + ┃┃ ┃━━┃┏━┃┏┛ ┏━┃┏━┛┏━┃┃ ┏━┃┏━┛┛ ┃ ┃┃ ┃┏━┛ ┃━━┃┛ ┛┏┛ + <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛┛ ┛ ┛━━┛┛ ┛━━┛┛ ━━┛┛┛ ┛━━┛ ━━┛ ┛┛ ━┛ + ┛┏━┃┏━┛┃ ┃┃ ┃ ━┏┛┃ ┃┏━┛ ┏━┃┃ ┏━┃━┏┛ ━┏┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ ┏━┛ + ┃┃ ┃━━┃┏━┃┏┛ ┃ ┏━┃┏━┛ ┏━┛┃ ┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃━━┃ + <━┛━━┛━━┛┛ ┛┛ ┛> ┛ ┛ ┛━━┛ ┛ ━━┛━━┛ ┛ ┛ ┛ ┛┛━━┛┛ ┛━━┛┛ ┛━━┛ + ┏━┃┏━┛┃ ┃┏━┛┏━┛┛┏━┛┃ ┏━ ━┏┛┃ ┃┏━┃┏━┛┏━┛ ┏━┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┏━┛┃ ┃ + ┏━┃━━┃┃ ┃┏━┛┏━┛┃┏━┛┃ ┃ ┃ ┃ ┏━┃┃ ┃━━┃┏━┛ ┏━┃┏┏┛┏━┛┃ ┃ ┃ ━━┃┏━┃┏━┛┃ ┃ + <┛ ┛━━┛━━┛┛ ┛ ┛━━┛━━┛━━> ┛ ┛ ┛━━┛━━┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛ + ┏━┛┏━┛┏━┃┛┏━┃━┏┛┏━┛ + ━━┃┃ ┏┏┛┃┏━┛ ┃ ━━┃ + ━━┛━━┛┛ ┛┛┛ ┛ ━━┛ + ┏━┛┏━┃┛┏━┛┃ ┃ ━┏┛┃ ┃┛┏━┛ ┃┃┃┏━┃┏━┛┏━┛━┏┛ ┏━┛┃ ┃┛┏━┛┃ ┃┏━┛┏━ + ┏━┛┏┏┛┃┃ ┏━┃ ┃ ┏━┃┃━━┃ ┃┃┃┏━┃━━┃┃ ┃ ┃ ┃ ┏━┃┃┃ ┏┛ ┏━┛┃ ┃ + <━━┛┛ ┛┛━━┛┛ ┛> ┛ ┛ ┛┛━━┛ ━━┛┛ ┛━━┛┛ ┛ ┛ ━━┛┛ ┛┛━━┛┛ ┛━━┛┛ ┛┛ + ┛┏━ ┏━ ┏━┛┏━ ┛┏━┃┏━ ┏━ ┏━┛┃ ┃┏━┛┃ + ━┛━┛ ┃┃ ┃ ┃ ┃┏━┛┏━┃┃┏━┃┃ ┃━┛┃ ┃┏━┛┃ ┃┏━┛┃ + ┛┛ ┛ #━━ ━━┛━━ ┛┛ ┛┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛ diff --git a/externals/figlet/tests/res018.txt b/externals/figlet/tests/res018.txt new file mode 100644 index 0000000000..7551e081ed --- /dev/null +++ b/externals/figlet/tests/res018.txt @@ -0,0 +1,27 @@ + ┏━┏━┃ ┃ ┃ ┏━┏━┃ ┃ ┏━┃┛┏━┏━┃ ┃ ┃ ┃ ┏━━┏┏━┛ ┃ ┏━┏━┏━┏━━┏┏━━┏┏━┛ ┏━ ┏━┃ ┃┏━ + ┃ ━━┏━┏┛ ┃ ━━┏━┏┛┃┛┛┃┃ ┏━┃ ┃ ┃┛ ┛ ┛┏━┛┃┃ ┛┃ ┃ ┃ ┏┏┃ ┃┃┏━┃┃┏━┛ ┃ ┃━━┏━━┃ ┃ + <━━━━━┛ ┛ ┛>━━━━━┛ ┛ ━━┛┛┛ ┛ ━━━━┛ ┛┛┛ ━━┛┛━━┛ ━━━━━━┛ ━━┛┛┛ ┛┛━━┛┛━━>━━┛ ┛┛ ┛ + ┛ ┛ + ━┏┛ + ┛ ┛ + ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃ ┛┏━┏━━┃ ┃ ┏━┃ ┏━┏┏━┃ ┏━┏━┏━┏━┏━┏━┏━┏━┏━┃ + ┃ ━━┏━┏┛ ┏━┏━┏━┃ ┏━┏━┛┛┃ ┃┃ ┏━┛━━┃┛━━━┏┃ ┃┏━┃┛┏━┏┏┏┏┃ ┏┏┃ ┏━┏━┏┏┛ + <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━━┛┛┛ ┛┛ ┛ ━━┛ ┛ ━━┛ ┛ ━━┛ ┛ ┛ + ┃ ┏━┏━┃ ┏━┏━┏━━┏┏━┏━━┏┏━┃ ┏━┏━━┃┛ + ┃ ┃ ┏━┛┛┏━┏━┃ ┃┏━┃ ┃┃┃ ┏┛┏━┃ ┃┏┛ + ━━┛ ━━┛ ┛ ━━━━┛┛━━━━ ┛━━┛ ━━┛ ━┛ + ┏━┏━┃ ┃ ┃ ┏━┏━┏━┏━┃ ┏━┛ ┃ ┛┏━┏━━┃ ┃ ━┃┛ + ┃ ━━┏━┏┛ ┏━┏━┏━┃ ┏━┏━┛┛┃ ┃┃ ┏━┛━━┃┛ ┏┛ + <━━━━━┛ ┛ ┛>┛ ┛ ┛ ━━┛ ━━┛┛━━┛┛┛ ━━━━┛┛┛━┛ + ┏━┏━┃ ┃ ┃ ━┏┃ ┏━┏━┃ ┏━━┏━┏┃ ┃┛┏━┃ ┏━┏━┏━┛ + ┃ ━━┏━┏┛ ┃┏━┏━┏━┃ ┃ ┃┃ ┃┏━┃┃┃ ┏┛┏━┃ ━━┃ + <━━━━━┛ ┛ ┛> ┛┛ ━━┛ ━━━━┛┛ ┛┛ ┛┛━━┛ ━━┛ ━━┛ + ┏━┏━┃ ┏━┏━┛┛┏━┃ ┏━ ━┏┃ ┏━┏━┏━┏━┏━┏━┏━┛━┏┏━┃ ┏━┃ ┃ ┏━┏━┏━┃┛┏━━┏┏━┛ + ┏━━━┃ ┏━┏━┛┃┏━┃ ┃ ┃ ┃┏━┃ ━━┏━┏━┏┏┏━┃ ┃ ┃━━┏━┏━┃ ┃ ━━┃ ┏┏┛┃┏━┛┃━━┃ + <┛ ━━━━┛ ┛ ┛━━━━━━> ┛┛ ━━━━━━┛ ┛ ━━┛ ┛ ┛━━┛ ━━━━━━━━━━┛ ┛┛┛ ┛━━┛ + ┏━┏━┃┛┏━┃ ┃ ━┏┃ ┃┛┏━┃┃┏━┏━┏━┛━┏┏━┃ ┃┛┏━┃ ┏━┏━ + ┏━┏┏┛┃┃ ┏━┃ ┃┏━┃┃━━┃┃┏━━━┃ ┃ ┃┃ ┏━┃┃┃ ┏┛┏━┃ ┃ + <━━┛ ┛┛━━┛ ┛> ┛┛ ┛┛━━━━┛ ━━┛ ┛ ┛━━┛ ┛┛━━┛ ━━┛ ┛┛ + ┛┏━ ┏━┏━┏━ ┛┏━┏━ ┏━┏━┃ ┏━┃ + ━━┛┃┃ ┃ ┃ ┏━┏━┃┃┏━┃ ━┃ ┏━┃ ┏━┃ + ┛┛ ┛#━━━━━━ ┛┛ ┛ ┛━━━━┛┛━━━━┛ diff --git a/externals/figlet/tests/res019.txt b/externals/figlet/tests/res019.txt new file mode 100644 index 0000000000..b1c4ee3688 --- /dev/null +++ b/externals/figlet/tests/res019.txt @@ -0,0 +1,36 @@ + ┃ ┃┃ ┃┏━┛┏━┃ ┛ + ┏┛ ┏━┃━━┃┃ ┃ ┃ +>┛ ┛┛ ┛━━┛━━┛━┛< + ┏━┛━┏┛┏━┃━┏┛┏━┃┏━┃┏━┛┏━┃┃ ┛┏━┛━┏┛┏━┛ ┛ ┃ ┃┃ ┃┃ ┏━┛┏━ ┛┏━┃┃ ┃┃ ┃┏━┛┏━┃ ┛ + ┏━┛ ┃ ┏━┃ ┃ ┃ ┃┏┏┛┃ ┃┃ ┃┃ ┛ ┃ ┃ ┏━┛ ┛ ┛ ┛ ┃ ┃┃ ┏━┛┃ ┃┃┃┛┛┏┛ ┏━┃━━┃┃ ┃ ┃ +┛━━┛ ┛ ┛ ┛ ┛ ━━┛┛ ┛━━┛━━┛━━┛┛ ━━┛ ┛ ━━┛┛ ┛┛ ┛━━┛━━┛┛ ┛ ┛┛━━┛┛ ┛┛ ┛━━┛━━┛━┛ +┛ ┛ ┏━ ┃ ┃┏━┛ ┏━ +━┏┛ ┃ ┃━┛ ┏━┃━━┃ ┃ ┃ +┛ ┛ ┛ ┛ ┛ ┛━━┛ >━━ +┃ ┃┏━┃━┏┛┏━ ┃ ┃┏━┛ ┃ ┃━┃ ┏━┛┏━ ┛┃ ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃ ┃ ┃┃ ┃┏━┛┏━┃ ┛ + ┛ ┏━┃ ┃ ┃ ┃━┏┛━━┃ ┛━━┃ ┃ ┏━┛┃ ┃┃┃ ┛┏━┛┏━┃┃ ┏━┃┏━┛┏━┃ ┏┛ ┏━┃━━┃┃ ┃ ┃ +┛ ┛┛ ┛ ┛ ┛ ┛ ┛ ━━┛ ┛ ┛━━┛ ━━┛┛ ┛┛━━┛ ┛━━┛┛ ┛━━┛┛ ┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛< +┏━ ┏━┛┃ ┃┏━┃━┏┛ ┏━ ┏━┛━┏┛┏━┛┏━┛┏━┃┃ ┃┏━┛┏━ ┃ ┃ ┏━┃┏━┃┏━┛┏━ ┏━┃┏━┃┏━┃┏━┃┏━┛ +┃ ┃┏━┛┏┛ ┃ ┃ ┃ ┃ ┃┏━┛ ┃ ┃ ┏━┛┏━┛ ┛ ┏━┛┃ ┃┃ ┃ ┏┏┛┏━┃┏━┛┃ ┃ ┏┏┛┃ ┃┏┏┛┏┏┛┏━┛ +┛ ┛━━┛┛ ┛━━┛ ┛ ━━ ━━┛ ┛ ━━┛━━┛┛ ┛ ┛━━┛┛ ┛━━┛ ┛ ┛┛ ┛━━┛┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛━━┛ +┛━┃ ┛ + ┏┛ ┛ + ━┛ +┛━┃ ┛ ┃ ┃━┃ ┏━┛┏━ ┛┃ ┏━┛┃ ┃┏━┛┏━┃┏━┃┏━┃ ┃ ┃┃ ┃┏━┛┏━┃ ┛ + ┏┛ ┛ ┛━━┃ ┃ ┏━┛┃ ┃┃┃ ┛┏━┛┏━┃┃ ┏━┃┏━┛┏━┃ ┏┛ ┏━┃━━┃┃ ┃ ┃ + ━┛ ┛ ┛━━┛ ━━┛┛ ┛┛━━┛ ┛━━┛┛ ┛━━┛┛ ┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛< +┏━┛┏━ ┏━┛┃ ┃┏━┛┛┃ ┃━┏┛ ━┏┛┏━┃┃ ┏━┃ ┏━┛┃ ┃━┏┛ ┃ ┃┃ ┃┏━┛┏━┃ ┛ +━━┃┃ ┃┏━┛┏┛ ┃ ┃┏━┃ ┃ ┃ ┃ ┃┃ ┏━┛ ┏━┛┏━┃ ┃ ┏┛ ┏━┃━━┃┃ ┃ ┃ +━━┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛ ┛ ┛ ━━┛━━┛┛ ━━┛┛ ┛ ┛ >┛ ┛┛ ┛━━┛━━┛━┛< +┃ ┃ ┏━┛┃ ┃┏━┛ ━┏┛┛┏━ ┏━┛┏━┃┏━┃ ┏━┛┏━┛┏━┃┃ ┃━┏┛ ┏━ ┃ ┏━┛┛┏━┛┏━┛┃ ┃┏━┛┏━┃ +┃ ┃ ┏━┛┏━┃━━┃ ┃ ┃ ┃┏━┛┏┏┛┏━┃ ┏━┛━━┃┃ ┃┏━┃ ┃ ┃ ┃┃ ┏━┛┃┏━┛┏━┛┃ ┃━━┃┏━┃ +━━┛━━┛━━┛┛ ┛━━┛ ┛ ┛ ┛━━┛┛ ┛┛ ┛ ━━┛━━┛━━┛┛ ┛ ┛ >━━ ━━┛━━┛┛┛ ┛ ━━┛━━┛┛ ┛< +┏━┛━┏┛┏━┃┛┏━┃┏━┛┏━┛ +━━┃ ┃ ┏━┛┃┏┏┛┃ ━━┃ +━━┛ ┛ ┛ ┛┛ ┛━━┛━━┛ + ┏━ ┏━┛┃ ┃┏━┛┛┃ ┃┏━┛ ━┏┛┛┏━ ┏━┛┏━┃┃┃┃ ┏━┛┛┃ ┃━┏┛ ┃ ┃┏━┛┛┏━┃┏━┛ + ┃ ┃┏━┛┏┛ ┃ ┃┏━┃┃ ┃ ┃ ┃━━┃┏━┃┃┃┃ ━━┃┃┏━┃ ┃ ┏━┃┃ ┃┏┏┛┏━┛ +┛┛ ┛━━┛┛ ┛━━┛┛┛ ┛━━┛ ┛ ┛ ┛━━┛┛ ┛━━┛ ━━┛┛┛ ┛ ┛ >┛ ┛━━┛┛┛ ┛━━┛< +┃ ┏━┛┃ ┃┏━┛┏━ ┏━ ┏━┃┛┏━ ┏━┛┏━ ┏━ ┛ +┃ ┏━┛┃ ┃┏━┛┃ ┃━┛┃ ┃┏━┃┃┏━┃┏━┛┃ ┃ ┃ ┃┃ ━┛━┛ +━━┛━━┛ ┛ ━━┛━━ ┛ ┛┛ ┛┛━━ ━━┛━━ # ┛ ┛┛ diff --git a/externals/figlet/tests/res020.txt b/externals/figlet/tests/res020.txt new file mode 100644 index 0000000000..4de016c0e1 --- /dev/null +++ b/externals/figlet/tests/res020.txt @@ -0,0 +1,140 @@ + _ _ + /o | | | | \ +/ __ , | | | | \ +\ | / \_/ \_|/ \ |/_) / + \|/\__/ \/ | |_/| \_// + /| + \| + _ _ _ _ + o | | | | ____ o | | | | o / + __ , | | | | / __,\ _ _ | | | | /_ _|_ __ + | / \_/ \_|/ \ |/_) | / | || / |/ | |/ |/ | | /\/ /|/ | / + |/\__/ \/ | |_/| \_/| \_/|/ |_/ | |_/|__/|__/ \_/|_/ /\_/o/ |__/|_/\___/ +/| \____/ |\ +\| |/ + _ _ + /| | | \ | | + / | | __ __, ,_ __ _|_ __, _|_ _ __| \ , | | + / |/ / \_/ | / | / \_| / | | |/ / | / / \_|/ \ +/ |__/\__/ \_/|/ |_/\__/ |_/\_/|_/|_/|__/o\_/|_// \/ | |_/ + /| + \| + + + _ _ \|/ +-----/ |/ | --*-- + | |_/ /|\ + + + _ _ _ + /o | | | | \ | | o +/ __ , | | | | \ __, _ __, __ | | _ +\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/ + \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o + /| /| + \| \| + _ , +| | o /|| | o +| | _ _ _ ||__|_ , _ _ _|_ __, +|/ | / |/ | |/ | | / \_| | / |/ | | / | /\/ +|__/|_/ | |_/|__/ | | o \/ \_/|/ | |_/|_/\_/|_/ /\_/ + /| + \| + + + _ ,_ ,_ __ ,_ _ _ _ __, ,_ +|/ / | / | / \_/ | / |/ | |/ / | / | +|__/ |_/ |_/\__/ |_/ | |_/|__/\_/|_/ |_/ + + + _ + | | | + _ _ _ _ _ __ _|_ _ __| _|_ __ | | _ _ _ +| | / |/ | |/ /\/ |/ \_|/ / | |/ / | | / \_|/_) |/ / |/ | + \_/|_/ | |_/|__/ /\_/|__/ |__/\___/|_/|__/\_/|_/ |_/\__/ | \_/|__/ | |_/ + /| + \| +o o +\\ / + | + > + | + / + + _ _ _ + /o | | | | \ | | o +/ __ , | | | | \ __, _ __, __ | | _ +\ | / \_/ \_|/ \ |/_) / / | |/ \_/ | / |/ \ |/ + \|/\__/ \/ | |_/| \_// \_/|_/|__/ \_/|_/\___/| |_/|__/o + /| /| + \| \| + _ , o o +| | o /|| | o \\ / +| | _ _ _ ||__|_ | +|/ | / |/ | |/ | | > +|__/|_/ | |_/|__/ | | o | + / + + _ _ _ _ + /o | | | | \ | | | | +/ __ , | | | | \ _|_ | | _ _ | | __ _|_ +\ | / \_/ \_|/ \ |/_) / | |/ \ |/ |/ \_|/ / \_| + \|/\__/ \/ | |_/| \_// |_/| |_/|__/ |__/ |__/\__/ |_/ + /| /| + \| \| + _ _ + | | o | | +_|_ | | __ | | _ _ _ , + | |/ \ | / |/_) |/ / |/ | / \_ + |_/| |_/|_/\___/| \_/|__/ | |_/ \/ + + + _ _ _ _ + / | | | | o | | | \ | | +/ __, , | | | | _ | | __| \ _|_ | | __ , _ +\ / | / \_| | |/ |/ | |/ |/ / | / | |/ \ / \_/ \_|/ + \\_/|_/ \/ \_/|_/|__/|__/|_/|__/|__/\_/|_// |_/| |_/\__/ \/ |__/ + |\ |\ + |/ |/ + o _ _ _ + / | | | | | | + __, ,_ _ _ _ _|_ , | | _ | | | | +/ | / | |/ / |/ | | / \_|/ \ |/ |/ |/ +\_/|_/ |_/|__/ | |_/ |_/ \/ | |_/|__/|__/|__/ + + + + o + , __ ,_ _ _|_ , +/ \_/ / | | |/ \_| / \_ + \/ \___/ |_/|_/|__/ |_/ \/ + /| + \| + _ _ + / o | | \ | | o +/ _ ,_ __ | | \ _|_ | | , +\ |/ / | | / |/ \ / | |/ \ | / \_ + \|__/ |_/|_/\___/| |_// |_/| |_/|_/ \/ + + + o _ _ + / | | o | | + __, , _ _ _|_ __ | | __ | | _ _ _ +| | |_/ | / \_/ |/ | | / |/ \ | / |/_) |/ / |/ | + \/ \/ \_/|_/ \/ | |_/ |_/ \___/| |_/|_/\___/| \_/|__/ | |_/o + + + + o + _ _ + ---------- | / |/ | + |_/ | |_/ + + + _ _ + | | | | | o | | | +--+--+-- __| _ | | __, _ _ __| _ _ | | +--+--+--/ | |/ |/ \_| / | / |/ |-----/ | |/ | |_|/ |/ + | | \_/|_/|__/\_/ |_/\_/|_/ | |_/ \_/|_/|__/ \/ |__/|__/ + + diff --git a/externals/figlet/tests/res021.txt b/externals/figlet/tests/res021.txt new file mode 100644 index 0000000000..b083225dbe --- /dev/null +++ b/externals/figlet/tests/res021.txt @@ -0,0 +1,36 @@ + __ _ _ _ __ _ _ _ ____ _ __ _ __ _ ___ _ _ ___ _ __ _ _ _ __ + / /(_) ___ ___| |__ | | __\ \ (_) ___ ___| |__ | | __/ __ \(_)_ __ / _| |_ ___ ___ / /__| |_ ___ / / | ___ __ _ _ __ ___ | |_ __ _| |_ ___ __| \ \ ___| |__ _ __ __/\__ / /(_) ___ ___| |__ | | __\ \ +/ / | |/ _ \/ __| '_ \| |/ / \ \ | |/ _ \/ __| '_ \| |/ / / _` | | '_ \| |_| | | | \ \/ (_) / / _ \ __/ __| / /| |/ _ \ / _` | '__/ _ \| __/ _` | __/ _ \ / _` |\ \ / __| '_ \ _____| '_ \ \ / / / | |/ _ \/ __| '_ \| |/ / \ \ +\ \ | | (_) \__ \ | | | < / / | | (_) \__ \ | | | < | (_| | | | | | _| | |_| |> < _ / / __/ || (__ / / | | (_) | (_| | | | (_) | || (_| | || __/| (_| |/ / \__ \ | | | |_____| | | | /_ _\ \ \ | | (_) \__ \ | | | < / / + \_\/ |\___/|___/_| |_|_|\_\/_/ _/ |\___/|___/_| |_|_|\_\ \__,_|_|_| |_|_| |_|\__,_/_/\_(_)_/ \___|\__\___/_/ |_|\___/ \__, |_| \___/ \__\__,_|\__\___(_)__,_/_/ |___/_| |_| |_| |_| \/ \_\/ |\___/|___/_| |_|_|\_\/_/ + |__/ |__/ \____/ |___/ |__/ + _ _ _ _ _ _ _ _ _ _ _ ___ _ + __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ___ _ _ _ __ | |_ __ ___ __ ___ _ __ _ __ ___ _ __ _ __ ___ __ _ _ __ _ _ _ __ _____ ___ __ ___ ___| |_ ___ __| | | |_ ___ | | _____ _ __ ( ) \ ( ) + / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) / __| | | | '_ \| __/ _` \ \/ / / _ \ '__| '__/ _ \| '__| | '_ \ / _ \/ _` | '__| | | | | '_ \ / _ \ \/ / '_ \ / _ \/ __| __/ _ \/ _` | | __/ _ \| |/ / _ \ '_ \ \|| ||/ +| (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| \__ \ |_| | | | | || (_| |> < | __/ | | | | (_) | | | | | | __/ (_| | | | |_| | | | | __/> <| |_) | __/ (__| || __/ (_| | | || (_) | < __/ | | | > > + \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) |___/\__, |_| |_|\__\__,_/_/\_\ \___|_| |_| \___/|_| |_| |_|\___|\__,_|_| \__,_|_| |_|\___/_/\_\ .__/ \___|\___|\__\___|\__,_| \__\___/|_|\_\___|_| |_| | | + |_| |___/ |_| /_/ + __ _ _ _ __ _ _ _ _ _ _ ___ _ __ _ _ _ __ _ _ _ _ _ _ _ _ + / /(_) ___ ___| |__ | | __\ \ __ _ _ __ __ _ ___| |__ ___ _ | (_)_ __ ___ / | || | _ ( ) \ ( ) / /(_) ___ ___| |__ | | __\ \ | |_| |__ ___ _ __ | | ___ | |_ | |_| |__ (_) ___| | _____ _ __ ___ +/ / | |/ _ \/ __| '_ \| |/ / \ \ / _` | '_ \ / _` |/ __| '_ \ / _ (_) | | | '_ \ / _ \ | | || |(_) \|| ||/ / / | |/ _ \/ __| '_ \| |/ / \ \ | __| '_ \ / _ \ | '_ \| |/ _ \| __| | __| '_ \| |/ __| |/ / _ \ '_ \/ __| +\ \ | | (_) \__ \ | | | < / / | (_| | |_) | (_| | (__| | | | __/_ | | | | | | __/ | |__ _| > > \ \ | | (_) \__ \ | | | < / / | |_| | | | __/ | |_) | | (_) | |_ | |_| | | | | (__| < __/ | | \__ \ + \_\/ |\___/|___/_| |_|_|\_\/_/ \__,_| .__/ \__,_|\___|_| |_|\___(_) |_|_|_| |_|\___| |_| |_|(_) | | \_\/ |\___/|___/_| |_|_|\_\/_/ \__|_| |_|\___| | .__/|_|\___/ \__| \__|_| |_|_|\___|_|\_\___|_| |_|___/ + |__/ |_| /_/ |__/ |_| + __ __ __ _ _ ___ _ _ _ _ _ _ _ _ _ __ _ _ __ _ _ _ _ _ + / /__ _ ___ _ _ / _|/ _(_) ___| | __| \ \ | |_| |__ ___ ___ ___ __ _ _ __ ___ _ __ ( ) |_ ___| |__ ___| | | ___ ___ _ __(_)_ __ | |_ ___ / /___ _ __(_) ___| |__ \ \ | |_| |__ (_)___ __ ____ _ ___ _ __ ( ) |_ +/ // _` / __| | | | |_| |_| |/ _ \ |/ _` |\ \ | __| '_ \ / _ \/ __|/ _ \ / _` | '__/ _ \ '_ \|/| __| / __| '_ \ / _ \ | | / __|/ __| '__| | '_ \| __/ __| / // _ \ '__| |/ __| '_ \ \ \ | __| '_ \| / __| \ \ /\ / / _` / __| '_ \|/| __| +\ \ (_| \__ \ |_| | _| _| | __/ | (_| |/ / | |_| | | | (_) \__ \ __/ | (_| | | | __/ | | | | |_ \__ \ | | | __/ | | \__ \ (__| | | | |_) | |_\__ \ \ \ __/ | | | (__| | | |/ / | |_| | | | \__ \ \ V V / (_| \__ \ | | | | |_ + \_\__,_|___/\__,_|_| |_| |_|\___|_|\__,_/_/ \__|_| |_|\___/|___/\___| \__,_|_| \___|_| |_| \__| |___/_| |_|\___|_|_| |___/\___|_| |_| .__/ \__|___/ \_\___|_| |_|\___|_| |_/_/ \__|_| |_|_|___/ \_/\_/ \__,_|___/_| |_| \__| + |_| + _ _ _ + ___| |__ (_) ___| | _____ _ __ + / __| '_ \| |/ __| |/ / _ \ '_ \ +| (__| | | | | (__| < __/ | | |_ + \___|_| |_|_|\___|_|\_\___|_| |_(_) + + _ _ _ _ _ _ _ _ + (_)_ __ _| || |_ __| | ___| |__ (_) __ _ _ __ __| | _____ _____| | + _____ _____ | | '_ \ |_ .. _|/ _` |/ _ \ '_ \| |/ _` | '_ \ _____ / _` |/ _ \ \ / / _ \ | + |_____|_____| | | | | | |_ _| (_| | __/ |_) | | (_| | | | |_____| (_| | __/\ V / __/ | + |_|_| |_| |_||_| \__,_|\___|_.__/|_|\__,_|_| |_| \__,_|\___| \_/ \___|_| + diff --git a/externals/figlet/tests/res022.txt b/externals/figlet/tests/res022.txt new file mode 100644 index 0000000000..fb6147b2d9 --- /dev/null +++ b/externals/figlet/tests/res022.txt @@ -0,0 +1,1314 @@ + __ + / / +/ / +\ \ + \_\ + + + ( + | + | + _/ + |__ + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + _ + | | + | | + | + |_| + +__ +\ \ + \ \ + / / +/_/ + + + ( + | + | + _/ + |__ + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + _ + | | + | | + | + |_| + + + / + / + | | + \ + \ + _ +(_) +| | +| | +|_| + + + _ + | ' + | | + |_| + + _ + / + | | + | + |_| + + _ +| | +| | +| | +|_| + + + _ + | | + | | + \_ + + + __ + \ \ + > + /_/ + + + _ +(_) + _ +(_) + + + + / + / + /_/ + + + _ + / + | + \_ + + _ + | | + | _ + | | + \_ + + + _ + / + | ( + \_ + + + + / + / + /_/ + + _ +| | +| | +| | +|_| + + + _ + / + | ( + \_ + + + _ + / + | ( + \_ + |_ + + _ + | ' + | | + |_| + + + _ + / + | ( + \_ + + _ + | | + | _ + | | + \_ + + + _ + / + | ( + \_ + + _ + | | + | _ + | | + \_ + + + _ + / + | + \_ + + + + + _ +(_) + + + _ + / + | ( + \_ + +__ +\ \ + \ \ + / / +/_/ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + + + __ + |__ + + + + _ + | ' + | | + |_| + + + __/ + \ + /_ + \ + + __ + / / +/ / +\ \ + \_\ + + + ( + | + | + _/ + |__ + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + _ + | | + | | + | + |_| + +__ +\ \ + \ \ + / / +/_/ + + + _ + / + | ( + \_ + + + _ + | ' + | | + | . + |_| + + _ + / + | ( + \_ + + + _ + / + | ( + \_ + + _ + | | + | ' + | | + |_| + + + _ + / + | + \_ + + + _ +(_) + _ +(_) + + _ +| | +| | +| | +|_| + + _ +(_) +| | +| | +|_| + + + _ + | ' + | | + |_| + + + _ + / + | + \_ + + _ +/ | +| | +| | +|_| + + _ + | | + | | + |__ + + + + _ +(_) + _ +(_) + + + __ + / _ + \__ + |__ + + + _ + | | + | | + \_ + |_ + + _ + | ' + | | + |_| + + _ + | | + | _ + | | + \_ + + + _ + / + | ( + \_ + + + __ + \ \ + > + /_/ + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + + _ + | ' + | | + |_| + + + _ + / + | ( + \_ + + + _ + | ' + | | + |_| + + + _ + | ' + | | + |_| + + + _ + / + | + \_ + + + _ + / + | ( + \_ + + + _ + | ' + | | + |_| + + + _ + | | + | | + \_ + + + _ + | ' + | | + |_| + + + _ + / + | + \_ + + + __ + \ \ + > + /_/ + + + _ + | ' + | | + | . + |_| + + _ + / + | + \_ + + + _ + / + | ( + \_ + + _ + | | + | _ + | | + \_ + + + _ + / + | + \_ + + + _ + / + | ( + \_ + + _ + | | + | _ + | | + \_ + + + _ + / + | ( + \_ + + _ + | | + | | + | + |_| + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + _ +( ) + \| + + + + __ + \ \ + | + > + | + /_/ + _ +( ) +|/ + + + + __ + / / +/ / +\ \ + \_\ + + + ( + | + | + _/ + |__ + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + _ + | | + | | + | + |_| + +__ +\ \ + \ \ + / / +/_/ + + + _ + / + | ( + \_ + + + _ + | ' + | | + | . + |_| + + _ + / + | ( + \_ + + + _ + / + | ( + \_ + + _ + | | + | ' + | | + |_| + + + _ + / + | + \_ + + + _ +(_) + _ +(_) + + _ +| | +| | +| | +|_| + + _ +(_) +| | +| | +|_| + + + _ + | ' + | | + |_| + + + _ + / + | + \_ + + _ +/ | +| | +| | +|_| + + _ + | | + | | + |__ + + + + _ +(_) + _ +(_) + + _ +( ) + \| + + + + __ + \ \ + | + > + | + /_/ + _ +( ) +|/ + + + + __ + / / +/ / +\ \ + \_\ + + + ( + | + | + _/ + |__ + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + _ + | | + | | + | + |_| + +__ +\ \ + \ \ + / / +/_/ + + _ + | | + | _ + | | + \_ + + _ + | | + | ' + | | + |_| + + + _ + / + | + \_ + + + _ + | ' + | | + | . + |_| + _ +| | +| | +| | +|_| + + + _ + / + | ( + \_ + + _ + | | + | _ + | | + \_ + + _ + | | + | _ + | | + \_ + + _ + | | + | ' + | | + |_| + + _ +(_) +| | +| | +|_| + + + _ + / + | ( + \_ + + _ + | | + | | + | + |_| + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + + __ + / _ + \__ + |__ + + __ + / / +/ / +\ \ + \_\ + + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + + _ + | | + | | + \_ + + _ + / + | | + | + |_| + + _ + / + | | + | + |_| + + _ +(_) +| | +| | +|_| + + + _ + / + | + \_ + + _ +| | +| | +| | +|_| + + + _ + / + | ( + \_ + +__ +\ \ + \ \ + / / +/_/ + + _ + | | + | _ + | | + \_ + + _ + | | + | ' + | | + |_| + + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + + _ + / + | + \_ + + + _ + / + | ( + \_ + + + _ + | ' + | | + |_| + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + _ +( ) +|/ + + + + _ + | | + | _ + | | + \_ + + + __ + / _ + \__ + |__ + + _ + | | + | ' + | | + |_| + + + _ + / + | + \_ + + _ +| | +| | +| | +|_| + + _ +| | +| | +| | +|_| + + + __ + / _ + \__ + |__ + + + _ + / + | ( + \_ + + + _ + | ' + | | + |_| + + _ +(_) +| | +| | +|_| + + + _ + | ' + | | + | . + |_| + _ + | | + | _ + | | + \_ + + + __ + / _ + \__ + |__ + + __ + / / +/ / +\ \ + \_\ + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + _ +(_) +| | +| | +|_| + + + _ + / + | ( + \_ + + _ + | | + | ' + | | + |_| + +__ +\ \ + \ \ + / / +/_/ + + _ + | | + | _ + | | + \_ + + _ + | | + | ' + | | + |_| + + _ +(_) +| | +| | +|_| + + + __ + / _ + \__ + |__ + + + __ + \ \ + \ + \ + + + _ + / + | ( + \_ + + + __ + / _ + \__ + |__ + + + _ + | ' + | | + |_| + + _ +( ) +|/ + + + + _ + | | + | _ + | | + \_ + + + _ + / + | ( + \_ + + _ + | | + | ' + | | + |_| + + _ +(_) +| | +| | +|_| + + + _ + / + | ( + \_ + + _ + | | + | | + | + |_| + + + _ + / + | + \_ + + + _ + | ' + | | + |_| + + + + + _ +(_) + + + + + + + + + + __ + |__ + + + + + __ + |__ + + + _ +(_) +| | +| | +|_| + + + _ + | ' + | | + |_| + + + _| + |_ + |_ + | + + + _ + / + | ( + \_ + + + _ + / + | + \_ + + _ + | | + | ' + | | + |_. + + _ +(_) +| | +| | +|_| + + + _ + / + | ( + \_ + + + _ + | ' + | | + |_| + + + + __ + |__ + + + + _ + / + | ( + \_ + + + _ + / + | + \_ + + + __ + \ \ + \ + \ + + + _ + / + | + \_ + + _ +| | +| | +| | +|_| + diff --git a/externals/figlet/tests/res023.txt b/externals/figlet/tests/res023.txt new file mode 100644 index 0000000000..d4d7a719dd --- /dev/null +++ b/externals/figlet/tests/res023.txt @@ -0,0 +1,90 @@ + __ _ _ _ __ + / / (_) ___ ___| |_ | |__\ \ + < < | |/ _ \(_-<| ' \ | / / > > + \_\_/ |\___//__/|_||_||_\_\/_/ + |__/ + _ _ _ ____ _ __ _ _ __ _ + (_) ___ ___| |_ | |__ / __ \ (_) _ _ / _|| | _ _ __ __(_) / /___ | |_ + | |/ _ \(_-<| ' \ | / // / _` || || ' \ | _|| || || |\ \ / _ / // -_)| _| + _/ |\___//__/|_||_||_\_\\ \__,_||_||_||_||_| |_| \_,_|/_\_\(_)/_/ \___| \__| + |__/ \____/ + __ _ _ _ _ __ _ + __ / /| | ___ __ _ _ _ ___ | |_ __ _ | |_ ___ __| |\ \ ___| |_ + / _| / / | |/ _ \/ _` || '_|/ _ \| _|/ _` || _|/ -_) _ / _` | > > (_-<| ' \ + \__|/_/ |_|\___/\__, ||_| \___/ \__|\__,_| \__|\___|(_)\__,_|/_/ /__/|_||_| + |___/ + __ _ _ _ __ + ___ _ _ _/\_ / / (_) ___ ___| |_ | |__\ \ + |___|| ' \ > < < < | |/ _ \(_-<| ' \ | / / > > + |_||_| \/ \_\_/ |\___//__/|_||_||_\_\/_/ + |__/ + _ _ _ _ _ _ _ _ + __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_) + / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_ + \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_) + |_| + _ + ___ _ _ _ _ | |_ __ _ __ __ ___ _ _ _ _ ___ _ _ + (_-<| || || ' \| _|/ _` |\ \ / / -_)| '_|| '_|/ _ \| '_| + /__/ \_, ||_||_|\__|\__,_|/_\_\ \___||_| |_| \___/|_| + |__/ + _ _ + _ _ ___ __ _ _ _ _ _ _ _ ___ __ __ _ __ ___ __ | |_ ___ __| | + | ' \ / -_)/ _` || '_| | || || ' \ / -_)\ \ /| '_ \/ -_)/ _|| _|/ -_)/ _` | + |_||_|\___|\__,_||_| \_,_||_||_|\___|/_\_\| .__/\___|\__| \__|\___|\__,_| + |_| + _ _ _ __ _ __ _ _ _ __ + | |_ ___ | |__ ___ _ _ ( )\ \ ( ) / / (_) ___ ___| |_ | |__\ \ + | _|/ _ \| / // -_)| ' \ \| | |_|/ < < | |/ _ \(_-<| ' \ | / / > > + \__|\___/|_\_\\___||_||_| | | \_\_/ |\___//__/|_||_||_\_\/_/ + /_/ |__/ + _ _ _ _ _ _ _ _ _ __ _ + __ _ _ __ __ _ __ | |_ ___ (_) | |(_) _ _ ___ / || | |(_) ( )\ \ ( ) + / _` || '_ \/ _` |/ _|| ' \ / -_) _ | || || ' \ / -_) | ||_ _|_ \| | |_|/ + \__,_|| .__/\__,_|\__||_||_|\___|(_) |_||_||_||_|\___| |_| |_|(_) | | + |_| /_/ + __ _ _ _ __ _ _ _ _ + / / (_) ___ ___| |_ | |__\ \ | |_ | |_ ___ _ __ | | ___ | |_ + < < | |/ _ \(_-<| ' \ | / / > > | _|| ' \ / -_) | '_ \| |/ _ \| _| + \_\_/ |\___//__/|_||_||_\_\/_/ \__||_||_|\___| | .__/|_|\___/ \__| + |__/ |_| + _ _ _ _ + | |_ | |_ (_) __ | |__ ___ _ _ ___ + | _|| ' \ | |/ _|| / // -_)| ' \ (_-< + \__||_||_||_|\__||_\_\\___||_||_|/__/ + + __ __ __ _ _ _ __ _ _ + / / __ _ ___ _ _ / _| / _|(_) ___ | | __| |\ \ | |_ | |_ ___ ___ ___ + < < / _` |(_-<| || || _|| _|| |/ -_)| |/ _` | > > | _|| ' \ / _ \(_- > + /__/\__||_| |_|| .__/ \__|/__/ \_\\___||_| |_|\__||_||_|/_/ + |_| + _ _ _ _ _ + | |_ | |_ (_) ___ __ __ __ __ _ ___ _ _ ( )| |_ + | _|| ' \ | |(_-< \ V V // _` |(_-<| ' \|/ | _| + \__||_||_||_|/__/ \_/\_/ \__,_|/__/|_||_| \__| + + _ _ _ + __ | |_ (_) __ | |__ ___ _ _ + / _|| ' \ | |/ _|| / // -_)| ' \ _ + \__||_||_||_|\__||_\_\\___||_||_|(_) + + _ + ___ ___ (_) _ _ + |___||___| | || ' \ + |_||_||_| + + _ _ _ _ _ _ _ + _| | |_ __| | ___ | |__ (_) __ _ _ _ ___ __| | ___ __ __ ___ | | + |_ . _|/ _` |/ -_)| '_ \| |/ _` || ' \|___|/ _` |/ -_)\ V // -_)| | + |_ _|\__,_|\___||_.__/|_|\__,_||_||_| \__,_|\___| \_/ \___||_| + |_|_| diff --git a/externals/figlet/tests/res024.txt b/externals/figlet/tests/res024.txt new file mode 100644 index 0000000000..8f1923cef1 --- /dev/null +++ b/externals/figlet/tests/res024.txt @@ -0,0 +1,39 @@ +fonts/646-ca.flc +fonts/646-ca2.flc +fonts/646-cn.flc +fonts/646-cu.flc +fonts/646-de.flc +fonts/646-dk.flc +fonts/646-es.flc +fonts/646-es2.flc +fonts/646-fr.flc +fonts/646-gb.flc +fonts/646-hu.flc +fonts/646-irv.flc +fonts/646-it.flc +fonts/646-jp.flc +fonts/646-kr.flc +fonts/646-no.flc +fonts/646-no2.flc +fonts/646-pt.flc +fonts/646-pt2.flc +fonts/646-se.flc +fonts/646-se2.flc +fonts/646-yu.flc +fonts/8859-2.flc +fonts/8859-3.flc +fonts/8859-4.flc +fonts/8859-5.flc +fonts/8859-7.flc +fonts/8859-8.flc +fonts/8859-9.flc +fonts/frango.flc +fonts/hz.flc +fonts/ilhebrew.flc +fonts/jis0201.flc +fonts/koi8r.flc +fonts/moscow.flc +fonts/upper.flc +fonts/ushebrew.flc +fonts/uskata.flc +fonts/utf8.flc diff --git a/externals/figlet/tests/res025.txt b/externals/figlet/tests/res025.txt new file mode 100644 index 0000000000..12b3f95496 --- /dev/null +++ b/externals/figlet/tests/res025.txt @@ -0,0 +1,8 @@ +########## ## # # + ### ## ########## ####### ########## + # ## # # # # ## + # ## # ## # ## # + # # ## # ## # + # # ## # ## ## + # # ## ########## # + diff --git a/externals/figlet/tests/res026.txt b/externals/figlet/tests/res026.txt new file mode 100644 index 0000000000..12b3f95496 --- /dev/null +++ b/externals/figlet/tests/res026.txt @@ -0,0 +1,8 @@ +########## ## # # + ### ## ########## ####### ########## + # ## # # # # ## + # ## # ## # ## # + # # ## # ## # + # # ## # ## ## + # # ## ########## # + diff --git a/externals/figlet/tests/res027.txt b/externals/figlet/tests/res027.txt new file mode 100644 index 0000000000..7f6545f865 --- /dev/null +++ b/externals/figlet/tests/res027.txt @@ -0,0 +1,430 @@ + .--. .--. .---. .---. .-'''-. ,-----. .-./`) + | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``) + | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-` + |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' ) + | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_) + | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_) + | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-. + | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._) + `--' `'-' '(_,_) '---' `-...-' '-----' `-..-' + + + (``--._ + `-._ _\ + ( ` )\ + (_{;}_)) + (_,_)/ + .-' / + (_.---' + + + _-_'''-. .--. .--. .---. .---. .-'''-. ,-----. .-./`) + ( ' ) \ | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') + (_{;}_) '| (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _) + .(_,_)--. ||(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \ + | | / || (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`| + ' | /| |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' + \ \____/ | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / + \ / | | \ / (_{;}_)| | \ / '. \_/``".' \ / + `'-...-' `--' `'-' '(_,_) '---' `-...-' '-----' `-..-' + + _ _ _____ __ ___ _ .---. ________ ,---. .--..-./`) + ( ` ) \ _\ / /.' | | | | ,_| | || \ | |\ .-.') + (_{;}_).-./ ). / ' | .' | |,-./ ) | .----'| , \ | |/ `-' \ + (_,_) \ '_ .') .' .' '_ | |\ '_ '`) | _|____ | |\_ \| | `-'`"` + (_ (_) _) ' ' ( \.-.| > (_) ) |_( )_ || _( )_\ | .---. + _ / \ \ ' (`. _` /|( . .-' (_ o._)__|| (_ o _) | | | + _( )_ `-'`-' \ | (_ (_) _) `-'`-'|___ |(_,_) | (_,_)\ | | | + (_ o _)/ / \ \ \ / . \ / | \| | | | | | | | + (_,_)'--' '----' ``-'`-'' `--------`'---' '--' '--' '---' + + .---. _ _ _______ ,---------. .-''-. _ _ + | ,_| ( ' ) / __ \\ \ .'_ _ \ ( ' ) + ,-./ ) (_{;}_) | ,_/ \__)`--. ,---'/ ( ` ) ' (_{;}_) + \ '_ '`) (_,_),-./ ) | \ . (_ o _) | (_,_) + > (_) ) // \ '_ '`) :_ _: | (_,_)___| // + ( . .-' // > (_) ) __ (_I_) ' \ .---. // + `-'`-'|___ ,-'/ ( . .-'_/ ) (_(=)_) \ `-' /,-'/ + | \) ( `-'`-' / (_I_) \ /) ( + `--------``---' `._____.' '---' `'-..-' `---' + + ____ ,---------. ,-----. .-------. .-_'''-. ,-----. + .' __ `.\ \ .' .-, '. | _ _ \ '_( )_ \ .' .-, '. + / ' \ \`--. ,---'/ ,-.| \ _ \ | ( ' ) | |(_ o _)| ' / ,-.| \ _ \ + |___| / | | \ ; \ '_ / | :|(_ o _) / . (_,_)/___| ; \ '_ / | : + _.-` | :_ _: | _`,/ \ _/ || (_,_).' __ | | .-----.| _`,/ \ _/ | + .' _ | (_I_) : ( '\_/ \ ;| |\ \ | |' \ '- .': ( '\_/ \ ; + | _( )_ | (_(=)_) \ `"/ \ ) / | | \ `' / \ `-'` | \ `"/ \ ) / + \ (_ o _) / (_I_) '. \_/``".' | | \ / \ / '. \_/``".' + '.(_,_).' '---' '-----' ''-' `'-' `'-...-' '-----' + + .---. .---. .-'''-. ______ .-''-. ,---------. + | | |_ _| / _ \ (``--._ | _ `''. .'_ _ \\ \ + | | ( ' ) (`' )/`--' `-._ _\ | _ | ) _ \ / ( ` ) '`--. ,---' + | '-(_{;}_)(_ o _). ( ` )\ |( ''_' ) | . (_ o _) | | \ + | (_,_) (_,_). '. (_{;}_))| . (_) `. | | (_,_)___| :_ _: + | _ _--. | .---. \ : (_,_)/ |(_ ._) '_ _' \ .---. (_I_) + |( ' ) | | \ `-' | .-' / | (_.\.' /( ` )\ `-' / (_(=)_) + (_{;}_)| | \ / (_.---' | .'(_{;}_)\ / (_I_) + '(_,_) '---' `-...-' '-----'` (_,_) `'-..-' '---' + + ,---. .--. + .-, | \ | | + ,-.| \ _ | , \ | | + \ '_ / | | |\_ \| | _ _ _ _ + _`,/ \ _/ | _( )_\ | ( ' )--( ' ) + ( '\_/ \ | (_ o _) |(_{;}_)(_{;}_) + `"/ \ ) | (_,_)\ | (_,_)--(_,_) + \_/``" | | | | + '--' '--' + + .--. .--. .---. .---. .-'''-. ,-----. .-./`) + | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``) + | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-` + |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' ) + | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_) + | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_) + | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-. + | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._) + `--' `'-' '(_,_) '---' `-...-' '-----' `-..-' + + + (``--._ + `-._ _\ + ( ` )\ + (_{;}_)) + (_,_)/ + .-' / + (_.---' + + + _ _ .-''-. .---. .---. _______ ____ .-------. ____ + ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `. + (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \ + (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / | + | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` | + _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ | + _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ | + (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) / + (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).' + + _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---. + ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_| + (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ ) + (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`) + /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) ) + _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-' + _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___ + (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \ + (_,_) '-' '---' `'-..-' '--' '--' '---' `--------` + + _____ __ ____ ,---------. ,---. .--. ____ __ .-'''-. + \ _\ / / .' __ `.\ \| \ | | \ \ / // _ \ + .-./ ). / ' / ' \ \`--. ,---'| , \ | | \ _. / '(`' )/`--' + \ '_ .') .' |___| / | | \ | |\_ \| | _( )_ .'(_ o _). + (_ (_) _) ' _.-` | :_ _: | _( )_\ | ___(_ o _)' (_,_). '. + / \ \ .' _ | (_I_) | (_ o _) || |(_,_)' .---. \ : + `-'`-' \ | _( )_ | (_(=)_) | (_,_)\ || `-' / \ `-' | + / / \ \\ (_ o _) / (_I_) | | | | \ / \ / + '--' '----''.(_,_).' '---' '--' '--' `-..-' `-...-' + + .-------. ,-----. .-------. .-------. .-''-. + | _ _ \ .' .-, '. | _ _ \ | _ _ \ .'_ _ \ + | ( ' ) | / ,-.| \ _ \ | ( ' ) | | ( ' ) | / ( ` ) ' + |(_ o _) / ; \ '_ / | :|(_ o _) / |(_ o _) / . (_ o _) | + | (_,_).' __ | _`,/ \ _/ || (_,_).' __ | (_,_).' __ | (_,_)___| + | |\ \ | |: ( '\_/ \ ;| |\ \ | || |\ \ | |' \ .---. + | | \ `' / \ `"/ \ ) / | | \ `' /| | \ `' / \ `-' / + | | \ / '. \_/``".' | | \ / | | \ / \ / + ''-' `'-' '-----' ''-' `'-' ''-' `'-' `'-..-' + + .-------. ____ .-''-. ,---. .--. + | _ _ \ .' __ `. .'_ _ \ | \ | | + | ( ' ) | / ' \ \ / ( ` ) '| , \ | | + |(_ o _) / |___| / |. (_ o _) || |\_ \| | + | (_,_).' __ _.-` || (_,_)___|| _( )_\ | + | |\ \ | |.' _ |' \ .---.| (_ o _) | + | | \ `' /| _( )_ | \ `-' /| (_,_)\ | + | | \ / \ (_ o _) / \ / | | | | + ''-' `'-' '.(_,_).' `'-..-' '--' '--' + + .-''-. .-------. _____ __ .-''-. ,---. .--. ___ _ + .'_ _ \ \ _(`)_ \\ _\ / /.'_ _ \ | \ | |.' | | | + / ( ` ) '| (_ o._)|.-./ ). / '/ ( ` ) '| , \ | || .' | | + . (_ o _) || (_,_) /\ '_ .') .'. (_ o _) || |\_ \| |.' '_ | | + | (_,_)___|| '-.-'(_ (_) _) ' | (_,_)___|| _( )_\ |' ( \.-.| + ' \ .---.| | / \ \' \ .---.| (_ o _) |' (`. _` /| + \ `-' /| | `-'`-' \\ `-' /| (_,_)\ || (_ (_) _) + \ / / ) / / \ \\ / | | | | \ / . \ / + `'-..-' `---' '--' '----'`'-..-' '--' '--' ``-'`-'' + + ______ .-''-. ,---------. _______ + | _ `''. .'_ _ \\ \ / __ \ + | _ | ) _ \ / ( ` ) '`--. ,---'| ,_/ \__) + |( ''_' ) |. (_ o _) | | \ ,-./ ) + | . (_) `. || (_,_)___| :_ _: \ '_ '`) + |(_ ._) '' \ .---. (_I_) > (_) ) __ + | (_.\.' / \ `-' / (_(=)_)( . .-'_/ ) + | .' \ / (_I_) `-'`-' / + '-----'` `'-..-' '---' `._____.' + + ,---. .--. .-''-. .--. .--. ,-----. ,---------. + | \ | | .'_ _ \ | | _/ / .' .-, '.\ \ + | , \ | | / ( ` ) '| (`' ) / / ,-.| \ _ \`--. ,---' + | |\_ \| |. (_ o _) ||(_ ()_) ; \ '_ / | : | \ + | _( )_\ || (_,_)___|| (_,_) __ | _`,/ \ _/ | :_ _: + | (_ o _) |' \ .---.| |\ \ | |: ( '\_/ \ ; (_I_) + | (_,_)\ | \ `-' /| | \ `' / \ `"/ \ ) / (_(=)_) + | | | | \ / | | \ / '. \_/``".' (_I_) + '--' '--' `'-..-' `--' `'-' '-----' '---' + + _ _ .----, _ _ + ( ' )`-, ( (_I_) + (_{;}_) _\_ \(_(=)_) + (_,_) ( ' ) \(_I_) + (_{;}_) ( )/ + (_,_) / + / / + .-` ( + '----` + + .--. .--. .---. .---. .-'''-. ,-----. .-./`) + | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``) + | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-` + |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' ) + | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_) + | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_) + | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-. + | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._) + `--' `'-' '(_,_) '---' `-...-' '-----' `-..-' + + + (``--._ + `-._ _\ + ( ` )\ + (_{;}_)) + (_,_)/ + .-' / + (_.---' + + + _ _ .-''-. .---. .---. _______ ____ .-------. ____ + ( ` ) .'_ _ \ | | |_ _| / __ \ .' __ `. \ _(`)_ \ .' __ `. + (_{;}_)/ ( ` ) '| | ( ' ) | ,_/ \__) / ' \ \| (_ o._)|/ ' \ \ + (_,_). (_ o _) || '-(_{;}_),-./ ) |___| / || (_,_) /|___| / | + | (_,_)___|| (_,_) \ '_ '`) _.-` || '-.-' _.-` | + _ ' \ .---.| _ _--. | > (_) ) __ .' _ || | .' _ | + _( )_ \ `-' /|( ' ) | | ( . .-'_/ )| _( )_ || | | _( )_ | + (_ o _) \ / (_{;}_)| | `-'`-' / \ (_ o _) // ) \ (_ o _) / + (_,_) `'-..-' '(_,_) '---' `._____.' '.(_,_).' `---' '.(_,_).' + + _ _ ,---. ,---. .-''-. ,---. .--..-./`) .---. + ( ` ) /,--.| /_ | .'_ _ \ | \ | |\ .-.') | ,_| + (_{;}_) //_ || ,_ | / ( ` ) '| , \ | |/ `-' \,-./ ) + (_,_) /_( )_|| ,-./ )| . (_ o _) || |\_ \| | `-'`"`\ '_ '`) + /(_ o _)| \ '_ '`) | (_,_)___|| _( )_\ | .---. > (_) ) + _ / /(_,_)||_ > (_) ) ' \ .---.| (_ o _) | | | ( . .-' + _( )_ / `-----' ||( . .-' \ `-' /| (_,_)\ | | | `-'`-'|___ + (_ o _)`-------|||-' `-'`-'| \ / | | | | | | | \ + (_,_) '-' '---' `'-..-' '--' '--' '---' `--------` + + _ _ .----, _ _ + ( ' )`-, ( (_I_) + (_{;}_) _\_ \(_(=)_) + (_,_) ( ' ) \(_I_) + (_{;}_) ( )/ + (_,_) / + / / + .-` ( + '----` + + .--. .--. .---. .---. .-'''-. ,-----. .-./`) + | | _/ / | | |_ _| / _ \ .' .-, '. \ '_ .') _.--``) + | (`' ) / | | ( ' ) (`' )/`--' / ,-.| \ _ \ (_ (_) _)/_ _.-` + |(_ ()_) | '-(_{;}_)(_ o _). ; \ '_ / | : / . \/( ' ) + | (_,_) __ | (_,_) (_,_). '. | _`,/ \ _/ | ___ |-'`|((_{;}_) + | |\ \ | || _ _--. | .---. \ :: ( '\_/ \ ;| | | ' \(_,_) + | | \ `' /|( ' ) | | \ `-' | \ `"/ \ ) / | `-' / \ `-. + | | \ / (_{;}_)| | \ / '. \_/``".' \ / `---._) + `--' `'-' '(_,_) '---' `-...-' '-----' `-..-' + + .-''-. .---. .---.,---------. + .'_ _ \ | | |_ _|\ \ (``--._ + / ( ` ) '| | ( ' ) `--. ,---' `-._ _\ + . (_ o _) || '-(_{;}_) | \ ( ` )\ + | (_,_)___|| (_,_) :_ _: (_{;}_)) + ' \ .---.| _ _--. | (_I_) (_,_)/ + \ `-' /|( ' ) | | (_(=)_) .-' / + \ / (_{;}_)| | (_I_) (_.---' + `'-..-' '(_,_) '---' '---' + + ,---------. ,-----. .---. .-------. + \ \ .' .-, '. | ,_| \ _(`)_ \ + `--. ,---'/ ,-.| \ _ \ ,-./ ) | (_ o._)| + | \ ; \ '_ / | :\ '_ '`) | (_,_) / + :_ _: | _`,/ \ _/ | > (_) ) | '-.-' + (_I_) : ( '\_/ \ ;( . .-' | | + (_(=)_) \ `"/ \ ) / `-'`-'|___ | | + (_I_) '. \_/``".' | \/ ) + '---' '-----' `--------``---' + + .-''-. .--. .--. _______ .-./`) .---. .---.,---------. + .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _|\ \ + / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) `--. ,---' + . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_) | \ + | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) :_ _: + ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | (_I_) + \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | (_(=)_) + \ / | | \ / `-'`-' / | | (_{;}_)| | (_I_) + `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' '---' + + .-'''-. ,---. .--. + / _ \| \ | | + (`' )/`--'| , \ | | + (_ o _). | |\_ \| | + (_,_). '. | _( )_\ | + .---. \ :| (_ o _) | + \ `-' || (_,_)\ | + \ / | | | | + `-...-' '--' '--' + + .-./`) ________ ________ ___ _ .-'''-. ____ + \ .-.')| || |.' | | | / _ \ .' __ `. _.--``) + / `-' \| .----'| .----'| .' | | (`' )/`--'/ ' \ \ /_ _.-` + `-'`"`| _|____ | _|____ .' '_ | |(_ o _). |___| / | /( ' ) + .---. |_( )_ ||_( )_ |' ( \.-.| (_,_). '. _.-` |((_{;}_) + | | (_ o._)__|(_ o._)__|' (`. _` /|.---. \ :.' _ | \(_,_) + | | |(_,_) |(_,_) | (_ (_) _)\ `-' || _( )_ | \ `-. + | | | | | | \ / . \ / \ / \ (_ o _) / `---._) + '---' '---' '---' ``-'`-'' `-...-' '.(_,_).' + + ______ .---. .-''-. + (``--._ | _ `''. | ,_| .'_ _ \ + `-._ _\ | _ | ) _ \,-./ ) / ( ` ) ' + ( ` )\ |( ''_' ) |\ '_ '`) . (_ o _) | + (_{;}_))| . (_) `. | > (_) ) | (_,_)___| + (_,_)/ |(_ ._) '( . .-' ' \ .---. + .-' / | (_.\.' / `-'`-'|___\ `-' / + (_.---' | .' | \\ / + '-----'` `--------` `'-..-' + + .-''-. .-'''-. ,-----. .---. .---.,---------. + .'_ _ \ / _ \ .' .-, '. | | |_ _|\ \ + / ( ` ) ' (`' )/`--' / ,-.| \ _ \ | | ( ' ) `--. ,---' + . (_ o _) |(_ o _). ; \ '_ / | :| '-(_{;}_) | \ + | (_,_)___| (_,_). '. | _`,/ \ _/ || (_,_) :_ _: + ' \ .---..---. \ :: ( '\_/ \ ;| _ _--. | (_I_) + \ `-' /\ `-' | \ `"/ \ ) / |( ' ) | | (_(=)_) + \ / \ / '. \_/``".' (_{;}_)| | (_I_) + `'-..-' `-...-' '-----' '(_,_) '---' '---' + + ,---------. _ _ ,---. .--. .-''-. .-------. ____ + \ \ ( ' ) | \ | | .'_ _ \ | _ _ \ .' __ `. + `--. ,---'(_{;}_)| , \ | | / ( ` ) '| ( ' ) | / ' \ \ + | \ (_,_) | |\_ \| |. (_ o _) ||(_ o _) / |___| / | + :_ _: | _( )_\ || (_,_)___|| (_,_).' __ _.-` | + (_I_) | (_ o _) |' \ .---.| |\ \ | |.' _ | + (_(=)_) | (_,_)\ | \ `-' /| | \ `' /| _( )_ | + (_I_) | | | | \ / | | \ / \ (_ o _) / + '---' '--' '--' `'-..-' ''-' `'-' '.(_,_).' + + .---. .---. .-''-. .---. .---. .-'''-. + | ,_| | ,_| .'_ _ \ | | |_ _| / _ \ + ,-./ ) ,-./ ) / ( ` ) '| | ( ' ) (`' )/`--' + \ '_ '`) \ '_ '`) . (_ o _) || '-(_{;}_)(_ o _). + > (_) ) > (_) ) | (_,_)___|| (_,_) (_,_). '. + ( . .-' ( . .-' ' \ .---.| _ _--. | .---. \ : + `-'`-'|___`-'`-'|___\ `-' /|( ' ) | | \ `-' | + | \| \\ / (_{;}_)| | \ / + `--------``--------` `'-..-' '(_,_) '---' `-...-' + + .-'''-. ,---------. .-------. .-./`) .-------. _______ .-'''-. + / _ \\ \\ _(`)_ \\ .-.')| _ _ \ / __ \ / _ \ + (`' )/`--' `--. ,---'| (_ o._)|/ `-' \| ( ' ) | | ,_/ \__) (`' )/`--' +(_ o _). | \ | (_,_) / `-'`"`|(_ o _) / ,-./ ) (_ o _). + (_,_). '. :_ _: | '-.-' .---. | (_,_).' __ \ '_ '`) (_,_). '. +.---. \ : (_I_) | | | | | |\ \ | | > (_) ) __ .---. \ : +\ `-' | (_(=)_) | | | | | | \ `' /( . .-'_/ )\ `-' | + \ / (_I_) / ) | | | | \ / `-'`-' / \ / + `-...-' '---' `---' '---' ''-' `'-' `._____.' `-...-' + + .---. .---. _______ .-./`) .-------. .-''-. +(``--._ | | |_ _| / __ \ \ .-.')| _ _ \ .'_ _ \ _.--``) + `-._ _\ | | ( ' ) | ,_/ \__)/ `-' \| ( ' ) | / ( ` ) ' /_ _.-` + ( ` )\ | '-(_{;}_),-./ ) `-'`"`|(_ o _) / . (_ o _) | /( ' ) + (_{;}_))| (_,_) \ '_ '`) .---. | (_,_).' __ | (_,_)___|((_{;}_) + (_,_)/ | _ _--. | > (_) ) __ | | | |\ \ | |' \ .---. \(_,_) + .-' / |( ' ) | | ( . .-'_/ )| | | | \ `' / \ `-' / \ `-. +(_.---' (_{;}_)| | `-'`-' / | | | | \ / \ / `---._) + '(_,_) '---' `._____.' '---' ''-' `'-' `'-..-' + + .-'''-. .-./`) .---. .---.,---------. + / _ \\ .-.')| | |_ _|\ \ + (`' )/`--'/ `-' \| | ( ' ) `--. ,---' + (_ o _). `-'`"`| '-(_{;}_) | \ + (_,_). '. .---. | (_,_) :_ _: + .---. \ : | | | _ _--. | (_I_) + \ `-' | | | |( ' ) | | (_(=)_) + \ / | | (_{;}_)| | (_I_) + `-...-' '---' '(_,_) '---' '---' + + ,---------. _ _ ,---. .--. .-'''-. ____ .--. .--. + \ \ ( ' ) | \ | | / _ \ .' __ `. | |_ | | + `--. ,---'(_{;}_)| , \ | | (`' )/`--'/ ' \ \| _( )_ | | + | \ (_,_) | |\_ \| |(_ o _). |___| / ||(_ o _) | | + :_ _: | _( )_\ | (_,_). '. _.-` || (_,_) \ | | + (_I_) | (_ o _) |.---. \ :.' _ || |/ \| | + (_(=)_) | (_,_)\ |\ `-' || _( )_ || ' /\ ` | + (_I_) | | | | \ / \ (_ o _) /| / \ | + '---' '--' '--' `-...-' '.(_,_).' `---' `---` + + .-''-. .--. .--. _______ .-./`) .---. .---. _______ + .'_ _ \ | | _/ / / __ \ \ .-.')| | |_ _| / __ \ + / ( ` ) '| (`' ) / | ,_/ \__)/ `-' \| | ( ' ) | ,_/ \__) + . (_ o _) ||(_ ()_) ,-./ ) `-'`"`| '-(_{;}_),-./ ) + | (_,_)___|| (_,_) __ \ '_ '`) .---. | (_,_) \ '_ '`) + ' \ .---.| |\ \ | | > (_) ) __ | | | _ _--. | > (_) ) __ + \ `-' /| | \ `' /( . .-'_/ )| | |( ' ) | | ( . .-'_/ ) + \ / | | \ / `-'`-' / | | (_{;}_)| | `-'`-' / + `'-..-' `--' `'-' `._____.' '---' '(_,_) '---' `._____.' + + ,---. .--. + | \ | | + | , \ | | + | |\_ \| | + | _( )_\ | + _ _ | (_ o _) | + ( ` ) | (_,_)\ | + (_{;}_)| | | | + (_,_) '--' '--' + + ,---. .--..-./`) + | \ | |\ .-.') + | , \ | |/ `-' \ + | |\_ \| | `-'`"` _ _ _ _ _ _ _ _ + | _( )_\ | .---. ( ' )--( ' ) ( ' )--( ' ) + | (_ o _) | | | (_{;}_)(_{;}_)(_{;}_)(_{;}_) + | (_,_)\ | | | (_,_)--(_,_) (_,_)--(_,_) + | | | | | | + '--' '--' '---' + + ,---. .--. ____ .-./`) _______ .-''-. ______ + | \ | | .' __ `. \ .-.')\ ____ \ .'_ _ \ | _ `''. + | , \ | |/ ' \ \/ `-' \| | \ | / ( ` ) '| _ | ) _ \ + | |\_ \| ||___| / | `-'`"`| |____/ / . (_ o _) ||( ''_' ) | + | _( )_\ | _.-` | .---. | _ _ '. | (_,_)___|| . (_) `. | + | (_ o _) |.' _ | | | | ( ' ) \' \ .---.|(_ ._) ' + | (_,_)\ || _( )_ | | | | (_{;}_) | \ `-' /| (_.\.' / + | | | |\ (_ o _) / | | | (_,_) / \ / | .' + '--' '--' '.(_,_).' '---' /_______.' `'-..-' '-----'` + + .---. .-''-. ,---. ,---. .-''-. ______ + | ,_| .'_ _ \ | / | | .'_ _ \ | _ `''. + ,-./ ) / ( ` ) '| | | .'/ ( ` ) '| _ | ) _ \ + \ '_ '`) . (_ o _) || | _ | |. (_ o _) ||( ''_' ) | _ _ _ _ + > (_) ) | (_,_)___|| _( )_ || (_,_)___|| . (_) `. | ( ' )--( ' ) + ( . .-' ' \ .---.\ (_ o._) /' \ .---.|(_ ._) '(_{;}_)(_{;}_) + `-'`-'|___\ `-' / \ (_,_) / \ `-' /| (_.\.' / (_,_)--(_,_) + | \\ / \ / \ / | .' + `--------` `'-..-' `---` `'-..-' '-----'` + diff --git a/externals/figlet/utf8.c b/externals/figlet/utf8.c new file mode 100644 index 0000000000..b8338c1ea8 --- /dev/null +++ b/externals/figlet/utf8.c @@ -0,0 +1,326 @@ +#ifdef TLF_FONTS +/* + * Copyright (c) 2007 Alexey Vatchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +#include + +#include +#include /* for htonl() */ + +#include "utf8.h" + +#define _NXT 0x80 +#define _SEQ2 0xc0 +#define _SEQ3 0xe0 +#define _SEQ4 0xf0 +#define _SEQ5 0xf8 +#define _SEQ6 0xfc + +#define _BOM 0xfeff + +static int __wchar_forbitten(wchar_t sym); +static int __utf8_forbitten(u_char octet); + +static int +__wchar_forbitten(wchar_t sym) +{ + + /* Surrogate pairs */ + if (sym >= 0xd800 && sym <= 0xdfff) + return (-1); + + return (0); +} + +static int +__utf8_forbitten(u_char octet) +{ + + switch (octet) { + case 0xc0: + case 0xc1: + case 0xf5: + case 0xff: + return (-1); + } + + return (0); +} + +/* + * DESCRIPTION + * This function translates UTF-8 string into UCS-4 string (all symbols + * will be in local machine byte order). + * + * It takes the following arguments: + * in - input UTF-8 string. It can be null-terminated. + * insize - size of input string in bytes. + * out - result buffer for UCS-4 string. If out is NULL, + * function returns size of result buffer. + * outsize - size of out buffer in wide characters. + * + * RETURN VALUES + * The function returns size of result buffer (in wide characters). + * Zero is returned in case of error. + * + * CAVEATS + * 1. If UTF-8 string contains zero symbols, they will be translated + * as regular symbols. + * 2. If UTF8_IGNORE_ERROR or UTF8_SKIP_BOM flag is set, sizes may vary + * when `out' is NULL and not NULL. It's because of special UTF-8 + * sequences which may result in forbitten (by RFC3629) UNICODE + * characters. So, the caller must check return value every time and + * not prepare buffer in advance (\0 terminate) but after calling this + * function. + */ +size_t +utf8_to_wchar(const char *in, size_t insize, wchar_t *out, size_t outsize, + int flags) +{ + u_char *p, *lim; + wchar_t *wlim, high; + size_t n, total, i, n_bits; + + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + return (0); + + total = 0; + p = (u_char *)in; + lim = p + insize; + wlim = out + outsize; + + for (; p < lim; p += n) { + if (__utf8_forbitten(*p) != 0 && + (flags & UTF8_IGNORE_ERROR) == 0) + return (0); + + /* + * Get number of bytes for one wide character. + */ + n = 1; /* default: 1 byte. Used when skipping bytes. */ + if ((*p & 0x80) == 0) + high = (wchar_t)*p; + else if ((*p & 0xe0) == _SEQ2) { + n = 2; + high = (wchar_t)(*p & 0x1f); + } else if ((*p & 0xf0) == _SEQ3) { + n = 3; + high = (wchar_t)(*p & 0x0f); + } else if ((*p & 0xf8) == _SEQ4) { + n = 4; + high = (wchar_t)(*p & 0x07); + } else if ((*p & 0xfc) == _SEQ5) { + n = 5; + high = (wchar_t)(*p & 0x03); + } else if ((*p & 0xfe) == _SEQ6) { + n = 6; + high = (wchar_t)(*p & 0x01); + } else { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + continue; + } + + /* does the sequence header tell us truth about length? */ + if (lim - p <= n - 1) { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + n = 1; + continue; /* skip */ + } + + /* + * Validate sequence. + * All symbols must have higher bits set to 10xxxxxx + */ + if (n > 1) { + for (i = 1; i < n; i++) { + if ((p[i] & 0xc0) != _NXT) + break; + } + if (i != n) { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + n = 1; + continue; /* skip */ + } + } + + total++; + + if (out == NULL) + continue; + + if (out >= wlim) + return (0); /* no space left */ + + *out = 0; + n_bits = 0; + for (i = 1; i < n; i++) { + *out |= (wchar_t)(p[n - i] & 0x3f) << n_bits; + n_bits += 6; /* 6 low bits in every byte */ + } + *out |= high << n_bits; + + if (*out == 0) /* return at end of string */ + break; + + if (__wchar_forbitten(*out) != 0) { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); /* forbitten character */ + else { + total--; + out--; + } + } else if (*out == _BOM && (flags & UTF8_SKIP_BOM) != 0) { + total--; + out--; + } + + out++; + } + + return (total); +} + +/* + * DESCRIPTION + * This function translates UCS-4 symbols (given in local machine + * byte order) into UTF-8 string. + * + * It takes the following arguments: + * in - input unicode string. It can be null-terminated. + * insize - size of input string in wide characters. + * out - result buffer for utf8 string. If out is NULL, + * function returns size of result buffer. + * outsize - size of result buffer. + * + * RETURN VALUES + * The function returns size of result buffer (in bytes). Zero is returned + * in case of error. + * + * CAVEATS + * If UCS-4 string contains zero symbols, they will be translated + * as regular symbols. + */ +size_t +wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize, + int flags) +{ + wchar_t *w, *wlim, ch; + u_char *p, *lim, *oc; + size_t total, n; + + if (in == NULL || insize == 0 || (outsize == 0 && out != NULL)) + return (0); + + w = (wchar_t *)in; + wlim = w + insize; + p = (u_char *)out; + lim = p + outsize; + total = 0; + for (; w < wlim; w++) { + if (__wchar_forbitten(*w) != 0) { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + else + continue; + } + + if (*w == _BOM && (flags & UTF8_SKIP_BOM) != 0) + continue; + + if (*w < 0) { + if ((flags & UTF8_IGNORE_ERROR) == 0) + return (0); + continue; + } else if (*w <= 0x0000007f) + n = 1; + else if (*w <= 0x000007ff) + n = 2; + else if (*w <= 0x0000ffff) + n = 3; + else if (*w <= 0x001fffff) + n = 4; + else if (*w <= 0x03ffffff) + n = 5; + else /* if (*w <= 0x7fffffff) */ + n = 6; + + total += n; + + if (out == NULL) + continue; + + if (lim - p <= n - 1) + return (0); /* no space left */ + + /* make it work under different endians */ + ch = htonl(*w); + oc = (u_char *)&ch; + switch (n) { + case 1: + *p = oc[3]; + break; + + case 2: + p[1] = _NXT | (oc[3] & 0x3f); + p[0] = _SEQ2 | (oc[3] >> 6) | ((oc[2] & 0x07) << 2); + break; + + case 3: + p[2] = _NXT | (oc[3] & 0x3f); + p[1] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[0] = _SEQ3 | ((oc[2] & 0xf0) >> 4); + break; + + case 4: + p[3] = _NXT | (oc[3] & 0x3f); + p[2] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[1] = _NXT | ((oc[2] & 0xf0) >> 4) | + ((oc[1] & 0x03) << 4); + p[0] = _SEQ4 | ((oc[1] & 0x1f) >> 2); + break; + + case 5: + p[4] = _NXT | (oc[3] & 0x3f); + p[3] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[2] = _NXT | ((oc[2] & 0xf0) >> 4) | + ((oc[1] & 0x03) << 4); + p[1] = _NXT | (oc[1] >> 2); + p[0] = _SEQ5 | (oc[0] & 0x03); + break; + + case 6: + p[5] = _NXT | (oc[3] & 0x3f); + p[4] = _NXT | (oc[3] >> 6) | ((oc[2] & 0x0f) << 2); + p[3] = _NXT | (oc[2] >> 4) | ((oc[1] & 0x03) << 4); + p[2] = _NXT | (oc[1] >> 2); + p[1] = _NXT | (oc[0] & 0x3f); + p[0] = _SEQ6 | ((oc[0] & 0x40) >> 6); + break; + } + + /* + * NOTE: do not check here for forbitten UTF-8 characters. + * They cannot appear here because we do proper convertion. + */ + + p += n; + } + + return (total); +} +#endif /* TLF_FONTS */ diff --git a/externals/figlet/utf8.h b/externals/figlet/utf8.h new file mode 100644 index 0000000000..a3e09bdee8 --- /dev/null +++ b/externals/figlet/utf8.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2007 Alexey Vatchenko + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * utf8: implementation of UTF-8 charset encoding (RFC3629). + */ +#ifndef _UTF8_H_ +#define _UTF8_H_ + +#include + +#include + +#define UTF8_IGNORE_ERROR 0x01 +#define UTF8_SKIP_BOM 0x02 + +#ifdef __cplusplus +extern "C" { +#endif + +size_t utf8_to_wchar(const char *in, size_t insize, wchar_t *out, + size_t outsize, int flags); +size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, + size_t outsize, int flags); + +#ifdef __cplusplus +} +#endif + +#endif /* !_UTF8_H_ */ diff --git a/externals/figlet/zipio.c b/externals/figlet/zipio.c new file mode 100644 index 0000000000..f7406d952a --- /dev/null +++ b/externals/figlet/zipio.c @@ -0,0 +1,818 @@ +/* + * zipio.c - stdio emulation library for reading zip files + * + * Version 1.1.2 + */ + +/* + * Copyright (C) 1995, Edward B. Hamrick + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the copyright holders + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. The copyright + * holders makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Changes from 1.1 to 1.1.1: + * Changed "z*" functions to "Z*" to avoid namespace pollution. + * Added "zungetc" macro. + * Added definitions of SEEK_SET, SEEK_CUR, SEEK_END for the Posixly challenged + * John Cowan + * + * Changes from 1.1.1 to 1.1.2: + * Relicensed under the MIT license, with consent of the copyright holders. + * Avoid usage of unitialized "length" variable in _Zgetc + * Claudio Matsuoka (Jan 11 2011) + */ + +/* + * Refer to zipio.h for a description of this package. + */ + +/* + * The .zip file header is described below. It consists of + * 30 fixed bytes, followed by two variable length fields + * whose length is contained in the first 30 bytes. After this + * header, the data is stored (in deflate format if the compression + * method is 8). + * + * The crc-32 field is the crc on the uncompressed data. + * + * .zip file header: + * + * local file header signature 4 bytes (0x04034b50) + * version needed to extract 2 bytes + * general purpose bit flag 2 bytes + * compression method 2 bytes + * last mod file time 2 bytes + * last mod file date 2 bytes + * crc-32 4 bytes + * compressed size 4 bytes + * uncompressed size 4 bytes + * filename length 2 bytes + * extra field length 2 bytes + * + * filename (variable size) + * extra field (variable size) + * + * These fields are described in more detail in appnote.txt + * in the pkzip 1.93 distribution. + */ + +#include +#ifdef MEMCPY +#include +#endif + +#include "zipio.h" +#include "inflate.h" +#include "crc.h" + +/* + * Macros for constants + */ + +#ifndef NULL +#define NULL ((void *) 0) +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef ZIPSIGNATURE +#define ZIPSIGNATURE 0x04034b50L +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + + +/* + * Buffer size macros + * + * The following constants are optimized for large-model + * (but not flat model) Windows with virtual memory. It + * will work fine on unix and flat model Windows as well. + * + * The constant BUFFERTHRESHOLD determines when memory + * buffering changes to file buffering. + * + * Assumptions: + * + * 1) INPBUFSIZE + OUTBUFSIZE + sizeof(void *) * PTRBUFSIZE + delta < 64K + * + * 2) OUTBUFSIZE = 32K * N (related to inflate's 32K window size) + * + * 2) Max in-memory file size is OUTBUFSIZE * PTRBUFSIZE + * which is 64 MBytes by default (32K * 2K). + * + */ + +#ifndef BUFFERTHRESHOLD +#define BUFFERTHRESHOLD (256 * 1024L) +#endif + +#ifndef INPBUFSIZE +#define INPBUFSIZE ( 8 * 1024 ) +#endif + +#ifndef PTRBUFSIZE +#define PTRBUFSIZE ( 2 * 1024 ) +#endif + +#ifndef OUTBUFSIZE +#define OUTBUFSIZE ((unsigned int) ( 32 * 1024L)) +#endif + +#define MAXFILESIZE (OUTBUFSIZE * (long) PTRBUFSIZE) + +/* + * Macro for short-hand reference to ZipioState (from ZFILE *) + */ + +#define ZS ((struct ZipioState *) stream) + +/* + * Macro to manipulate Zgetc() cache + */ + +#define CACHEINIT \ + zs->ptr = NULL; \ + zs->len = 0; + +#define CACHEUPDATE \ + if (ZS->ptr) \ + { \ + ZS->fileposition &= ~((long) (OUTBUFSIZE-1)); \ + ZS->fileposition += ZS->ptr - ZS->getbuf; \ + ZS->ptr = NULL; \ + } \ + ZS->len = 0; + +/* + * Macros for run-time type identification + */ + +#ifndef RUNTIMEENABLE +#define RUNTIMEENABLE 0 +#endif + +#if RUNTIMEENABLE +#define ZIPIOSTATETYPE 0x0110f00fL +#define RUNTIMEINIT \ + zs->runtimetypeid1 = ZIPIOSTATETYPE; \ + zs->runtimetypeid2 = ZIPIOSTATETYPE; + +#define RUNTIMECHECK \ + if (!ZS || (ZS->runtimetypeid1 != ZIPIOSTATETYPE) \ + || (ZS->runtimetypeid2 != ZIPIOSTATETYPE)) return -1; +#else +#define RUNTIMEINIT +#define RUNTIMECHECK +#endif + +/* + * Macros for converting bytes to unsigned integers + */ + +#define GETUINT4(ptr, i4) \ + { \ + i4 = (((unsigned long) *(((unsigned char *) (ptr)) + 0)) ) | \ + (((unsigned long) *(((unsigned char *) (ptr)) + 1)) << 8) | \ + (((unsigned long) *(((unsigned char *) (ptr)) + 2)) << 16) | \ + (((unsigned long) *(((unsigned char *) (ptr)) + 3)) << 24) ; \ + } + +#define GETUINT2(ptr, i2) \ + { \ + i2 = (((unsigned int) *(((unsigned char *) (ptr)) + 0)) ) | \ + (((unsigned int) *(((unsigned char *) (ptr)) + 1)) << 8) ; \ + } + +/* Structure to hold state for decoding zip files */ +struct ZipioState { + + /* Fields overlaid with ZFILE structure */ + int len; /* length of Zgetc cache */ + unsigned char *ptr; /* pointer to Zgetc cache */ + + /* Fields invisible to users of ZFILE structure */ + + unsigned long runtimetypeid1; /* to detect run-time errors */ + int errorencountered; /* error encountered flag */ + + /* Buffering state */ + unsigned char inpbuf[INPBUFSIZE]; /* inp buffer from zip file */ + unsigned char *ptrbuf[PTRBUFSIZE]; /* pointers to in-memory bufs */ + + unsigned char getbuf[OUTBUFSIZE]; /* buffer for use by Zgetc */ + long getoff; /* starting offset of getbuf */ + + FILE *tmpfil; /* file ptr to temp file */ + + /* Amount of input data inflated */ + unsigned long inpinf; + unsigned long outinf; + + /* Zip file header */ + unsigned long sign; /* local file header signature (0x04034b50) */ + unsigned int vers; /* version needed to extract 2 bytes */ + unsigned int flag; /* general purpose bit flag 2 bytes */ + unsigned int comp; /* compression method 2 bytes */ + unsigned int mtim; /* last mod file time 2 bytes */ + unsigned int mdat; /* last mod file date 2 bytes */ + unsigned long crc3; /* crc-32 4 bytes */ + unsigned long csiz; /* compressed size 4 bytes */ + unsigned long usiz; /* uncompressed size 4 bytes */ + unsigned int flen; /* filename length 2 bytes */ + unsigned int elen; /* extra field length 2 bytes */ + + /* Application state */ + FILE *OpenFile; /* currently open file */ + + void *inflatestate; /* current state for inflate */ + + unsigned long fileposition; /* current file position */ + + unsigned long filecrc; /* current crc */ + + unsigned long runtimetypeid2; /* to detect run-time errors */ +}; + +/* + * Utility routines to handle uncompressed file buffers + */ + +/* Initialize buffering */ +static void BufferInitialize( + struct ZipioState *zs, + int doinflate +) +{ + zs->getoff = -1; + zs->tmpfil = NULL; + + /* + * If not inflating, use the input file + */ + + if (!doinflate) + { + zs->tmpfil = zs->OpenFile; + + /* Get the uncompressed file size */ + fseek(zs->tmpfil, 0, SEEK_END); + zs->usiz = ftell(zs->tmpfil); + zs->outinf = zs->usiz; + + /* Start at the beginning */ + fseek(zs->tmpfil, 0, SEEK_SET); + } + + /* If there's no file open, see if it's big enough for temp file */ + if (!zs->tmpfil) + { + if (zs->usiz >= BUFFERTHRESHOLD) + zs->tmpfil = tmpfile(); + } + + /* If there's no file open, then use memory buffering */ + if (!zs->tmpfil) + { + int i; + + for (i=0; iptrbuf[i] = NULL; + } +} + +/* pump data till length bytes of file are inflated or error encountered */ +static int BufferPump(struct ZipioState *zs, long length) +{ + size_t inplen, ret; + + /* Check to see if the length is valid */ + if (length > zs->usiz) return TRUE; + + /* Loop till enough data is pumped */ + while (!zs->errorencountered && (zs->outinf < length)) + { + /* Compute how much data to read */ + if ((zs->csiz - zs->inpinf) < INPBUFSIZE) + inplen = (size_t) (zs->csiz - zs->inpinf); + else + inplen = INPBUFSIZE; + + if (inplen <= 0) return TRUE; + + /* Read some data from the file */ + ret = fread(zs->inpbuf, 1, inplen, zs->OpenFile); + if (ret != inplen) return TRUE; + + /* Update how much data has been read from the file */ + zs->inpinf += inplen; + + /* Pump this data into the decompressor */ + if (InflatePutBuffer(zs->inflatestate, zs->inpbuf, inplen)) return TRUE; + } + + return FALSE; +} + +/* Read from the buffer */ +static int BufferRead( + struct ZipioState *zs, + long offset, + unsigned char *buffer, + long length +) +{ + /* + * Make sure enough bytes have been inflated + * Note that the correction for reading past EOF has to + * be done before calling this routine + */ + + if (BufferPump(zs, offset+length)) return TRUE; + + /* If using file buffering, just get the data from the file */ + if (zs->tmpfil) + { + if (fseek(zs->tmpfil, offset, SEEK_SET)) return TRUE; + if (fread(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE; + } + /* If no temp file, use memory buffering */ + else + { + unsigned int i; + unsigned int off, len; + unsigned char *ptr; + + long tmpoff; + unsigned char *tmpbuf; + long tmplen; + + /* Save copies of offset, buffer and length for the loop */ + tmpoff = offset; + tmpbuf = buffer; + tmplen = length; + + /* Validate the transfer */ + if (tmpoff+tmplen > MAXFILESIZE) return TRUE; + + /* Loop till done */ + while (tmplen) + { + /* Get a pointer to the next block */ + i = (unsigned int) (tmpoff / OUTBUFSIZE); + ptr = zs->ptrbuf[i]; + if (!ptr) return TRUE; + + /* Get the offset,length for this block */ + off = (unsigned int) (tmpoff & (OUTBUFSIZE-1)); + len = OUTBUFSIZE - off; + if (len > tmplen) len = (unsigned int) tmplen; + + /* Get the starting pointer for the transfer */ + ptr += off; + + /* Copy the data for this block */ +#ifdef MEMCPY + memcpy(tmpbuf, ptr, len); +#else + for (i=0; itmpfil) + { + if (fseek(zs->tmpfil, zs->outinf, SEEK_SET)) return TRUE; + if (fwrite(buffer, 1, (size_t) length, zs->tmpfil) != length) return TRUE; + } + /* If no temp file, use memory buffering */ + else + { + unsigned int i; + unsigned int off, len; + unsigned char *ptr; + + long tmpoff; + unsigned char *tmpbuf; + long tmplen; + + /* Save copies of outinf, buffer and length for the loop */ + tmpoff = zs->outinf; + tmpbuf = buffer; + tmplen = length; + + /* Validate the transfer */ + if (tmpoff+tmplen > MAXFILESIZE) return TRUE; + + /* Loop till done */ + while (tmplen) + { + /* Get a pointer to the next block */ + i = (unsigned int) (tmpoff / OUTBUFSIZE); + ptr = zs->ptrbuf[i]; + if (!ptr) + { + ptr = (unsigned char *) malloc(OUTBUFSIZE); + if (!ptr) return TRUE; + zs->ptrbuf[i] = ptr; + } + + /* Get the offset,length for this block */ + off = (unsigned int) (tmpoff & (OUTBUFSIZE-1)); + len = OUTBUFSIZE - off; + if (len > tmplen) len = (unsigned int) tmplen; + + /* Get the starting pointer for the transfer */ + ptr += off; + + /* Copy the data for this block */ +#ifdef MEMCPY + memcpy(ptr, tmpbuf, len); +#else + for (i=0; ioutinf += length; + + /* return success */ + return FALSE; +} + +/* Terminate buffering */ +static void BufferTerminate( + struct ZipioState *zs +) +{ + /* If reading directly from the uncompressed file, just mark with NULL */ + if (zs->tmpfil == zs->OpenFile) + { + zs->tmpfil = NULL; + } + /* If using the a temporary file, close it */ + else if (zs->tmpfil) + { + fclose(zs->tmpfil); + zs->tmpfil = NULL; + } + /* If doing memory buffering, free the buffers */ + else + { + int i; + + for (i=0; iptrbuf[i]) free(zs->ptrbuf[i]); + } +} + +/* + * callout routines for InflateInitialize + */ + +static int inflate_putbuffer( /* returns 0 on success */ + void *stream, /* opaque ptr from Initialize */ + unsigned char *buffer, /* buffer to put */ + long length /* length of buffer */ +) +{ + RUNTIMECHECK; + + /* If the write will go past the end of file, return an error */ + if (ZS->outinf + length > ZS->usiz) return TRUE; + + /* Update the CRC */ + ZS->filecrc = CrcUpdate(ZS->filecrc, buffer, length); + + /* Append to the buffer */ + if (BufferAppend(ZS, buffer, length)) return TRUE; + + /* Return success */ + return FALSE; +} + +static void *inflate_malloc(long length) +{ + return malloc((size_t) length); +} + +static void inflate_free(void *buffer) +{ + free(buffer); +} + +ZFILE *Zopen(const char *path, const char *mode) +{ + struct ZipioState *zs; + + long inplen; + + /* Allocate the ZipioState memory area */ + zs = (struct ZipioState *) malloc(sizeof(struct ZipioState)); + if (!zs) return NULL; + + /* Set up the initial values of the inflate state */ + + CACHEINIT; + + RUNTIMEINIT; + + zs->errorencountered = FALSE; + + zs->inpinf = 0; + zs->outinf = 0; + + zs->fileposition = 0; + + zs->filecrc = 0xffffffffL; + + /* Open the real file */ + zs->OpenFile = fopen(path, mode); + if (!zs->OpenFile) + { + free(zs); + return NULL; + } + + /* Read the first input buffer */ + if ((inplen = (long) fread(zs->inpbuf, 1, INPBUFSIZE, zs->OpenFile)) >= 30) + { + GETUINT4(zs->inpbuf+ 0, zs->sign); + GETUINT2(zs->inpbuf+ 4, zs->vers); + GETUINT2(zs->inpbuf+ 6, zs->flag); + GETUINT2(zs->inpbuf+ 8, zs->comp); + GETUINT2(zs->inpbuf+10, zs->mtim); + GETUINT2(zs->inpbuf+12, zs->mdat); + GETUINT4(zs->inpbuf+14, zs->crc3); + GETUINT4(zs->inpbuf+18, zs->csiz); + GETUINT4(zs->inpbuf+22, zs->usiz); + GETUINT2(zs->inpbuf+26, zs->flen); + GETUINT2(zs->inpbuf+28, zs->elen); + +#ifdef PRINTZIPHEADER + fprintf(stderr, "local file header signature hex %8lx\n", zs->sign); + fprintf(stderr, "version needed to extract %8d\n" , zs->vers); + fprintf(stderr, "general purpose bit flag hex %8x\n" , zs->flag); + fprintf(stderr, "compression method %8d\n" , zs->comp); + fprintf(stderr, "last mod file time %8d\n" , zs->mtim); + fprintf(stderr, "last mod file date %8d\n" , zs->mdat); + fprintf(stderr, "crc-32 hex %8lx\n", zs->crc3); + fprintf(stderr, "compressed size %8ld\n", zs->csiz); + fprintf(stderr, "uncompressed size %8ld\n", zs->usiz); + fprintf(stderr, "filename length %8d\n" , zs->flen); + fprintf(stderr, "extra field length %8d\n" , zs->elen); +#endif + } + else + { + zs->sign = 0; + } + + /* + * If the file isn't a zip file, set up to read it normally + */ + if ((zs->sign != ZIPSIGNATURE) || + (zs->flag & 1) || + (zs->comp != 8) || + (inplen <= 30 + zs->flen + zs->elen) ) + { + /* Initialize buffering */ + BufferInitialize(zs, FALSE); + + zs->inflatestate = NULL; + } + else + { + /* Initialize buffering */ + BufferInitialize(zs, TRUE); + + zs->inflatestate = InflateInitialize( + (void *) zs, + inflate_putbuffer, + inflate_malloc, + inflate_free + ); + + if (InflatePutBuffer(zs->inflatestate, + zs->inpbuf+30+zs->flen+zs->elen, + inplen-30-zs->flen-zs->elen + ) + ) + zs->errorencountered = TRUE; + + zs->inpinf += inplen-30-zs->flen-zs->elen; + } + + /* Return this state info to the caller */ + return (ZFILE *) zs; +} + +int _Zgetc(ZFILE *stream) +{ + long offset, length; + + int off; + + RUNTIMECHECK; + + if (ZS->errorencountered) return -1; + + CACHEUPDATE; + + /* If already at EOF, return */ + if (ZS->fileposition >= ZS->usiz) return -1; + + /* If data isn't in current outbuf, get it */ + offset = ZS->fileposition & ~((long) (OUTBUFSIZE-1)); + length = ZS->usiz - offset; + if (length > OUTBUFSIZE) length = OUTBUFSIZE; + + if (ZS->getoff != offset) + { + if (BufferRead(ZS, offset, ZS->getbuf, length)) return -1; + + ZS->getoff = offset; + } + + /* Set up the cache */ + off = (int) (ZS->fileposition & (OUTBUFSIZE-1)); + ZS->len = (int) (length - off); + ZS->ptr = ZS->getbuf + off; + + /* Return the character */ + ZS->len--; + return *(ZS->ptr++); +} + +size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream) +{ + long length; + + RUNTIMECHECK; + + if (ZS->errorencountered) return 0; + + CACHEUPDATE; + + /* Compute the length requested */ + length = size * (long) n; + + /* Adjust the length to account for premature EOF */ + if (ZS->fileposition+length > ZS->usiz) + length = ZS->usiz - ZS->fileposition; + + /* If the length is zero, then just return an EOF error */ + if (length <= 0) return 0; + + /* Make the length a multiple of size */ + length /= size; + length *= size; + + /* If the length is zero, then just return an EOF error */ + if (length <= 0) return 0; + + /* Read from the buffer */ + if (BufferRead(ZS, ZS->fileposition, (unsigned char *) ptr, length)) + return 0; + + /* Update the file position */ + ZS->fileposition += length; + + /* Return the number of items transferred */ + return (size_t) (length / size); +} + +int Zseek(ZFILE *stream, long offset, int whence) +{ + long newoffset; + + RUNTIMECHECK; + + if (ZS->errorencountered) return -1; + + CACHEUPDATE; + + if (whence == SEEK_SET) + { + newoffset = offset; + } + else if (whence == SEEK_CUR) + { + newoffset = ZS->fileposition + offset; + } + else if (whence == SEEK_END) + { + newoffset = ZS->fileposition + ZS->usiz; + } + else + { + return -1; + } + + if ((newoffset < 0) || (newoffset > ZS->usiz)) return -1; + + ZS->fileposition = newoffset; + + return 0; +} + +long Ztell(ZFILE *stream) +{ + RUNTIMECHECK; + + if (ZS->errorencountered) return -1; + + CACHEUPDATE; + + return ZS->fileposition; +} + +int Zclose(ZFILE *stream) +{ + int ret; + + RUNTIMECHECK; + + CACHEUPDATE; + + /* terminate the inflate routines, and check for errors */ + if (ZS->inflatestate) + { + if (InflateTerminate(ZS->inflatestate)) + ZS->errorencountered = TRUE; + + /* Check that the CRC is OK */ + if (ZS->filecrc != (ZS->crc3 ^ 0xffffffffL)) + ZS->errorencountered = TRUE; + } + + /* save the final error status */ + ret = ZS->errorencountered; + + /* terminate the buffering */ + BufferTerminate(ZS); + + /* free the ZipioState structure */ + free(ZS); + + /* return the final error status */ + return ret; +} diff --git a/externals/figlet/zipio.h b/externals/figlet/zipio.h new file mode 100644 index 0000000000..12289d6581 --- /dev/null +++ b/externals/figlet/zipio.h @@ -0,0 +1,104 @@ +/* + * zipio.h - stdio emulation library for reading zip files + * + * Version 1.1.2 + */ + +/* + * Copyright (C) 1995, Edward B. Hamrick + * + * Permission to use, copy, modify, and distribute this software and + * its documentation for any purpose and without fee is hereby granted, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear in + * supporting documentation, and that the name of the copyright holders + * not be used in advertising or publicity pertaining to distribution of + * the software without specific, written prior permission. The copyright + * holders makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS + * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, + * IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT + * OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF + * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +/* + * Changes from 1.1 to 1.1.1: + * Changed "z*" functions to "Z*" to avoid namespace pollution. + * Added "zungetc" macro. + * John Cowan + * + * Changes from 1.1.1 to 1.1.2: + * Relicensed under the MIT license, with consent of the copyright holders. + * Claudio Matsuoka (Jan 11 2011) + */ + +/* + * This library of routines has the same calling sequence as + * the stdio.h routines for reading files. If these routines + * detect that they are reading from a zip file, they transparently + * unzip the file and make the application think they're reading + * from the uncompressed file. + * + * Note that this library is designed to work for zip files that + * use the deflate compression method, and to read the first file + * within the zip archive. + * + * There are a number of tunable parameters in the reference + * implementation relating to in-memory decompression and the + * use of temporary files. + * + * Particular care was taken to make the Zgetc() macro work + * as efficiently as possible. When reading an uncompressed + * file with Zgetc(), it has exactly the same performance as + * when using getc(). WHen reading a compressed file with + * Zgetc(), it has the same performance as fread(). The total + * CPU overhead for decompression is about 50 cycles per byte. + * + * The Zungetc() macro is quite limited. It ignores the character + * specified for pushback, and essentially just forces the last + * character read to be re-read. This is essential when parsing + * numbers and such. (1.1.1) + * + * There are a few stdio routines that aren't represented here, but + * they can be layered on top of these routines if needed. + */ + +#ifndef __ZIPIO_H +#define __ZIPIO_H + +#include + +typedef struct { + int len; + unsigned char *ptr; +} ZFILE; + +#define Zgetc(f) \ + ((--((f)->len) >= 0) \ + ? (unsigned char)(*(f)->ptr++) \ + : _Zgetc (f)) + +#define Zungetc(c,f) \ + ((f)->ptr--, (f)->len++, (c)) + +#ifdef __cplusplus +extern "C" { +#endif + +ZFILE *Zopen(const char *path, const char *mode); +int _Zgetc(ZFILE *stream); +size_t Zread(void *ptr, size_t size, size_t n, ZFILE *stream); +int Zseek(ZFILE *stream, long offset, int whence); +long Ztell(ZFILE *stream); +int Zclose(ZFILE *stream); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/externals/javelin b/externals/javelin deleted file mode 160000 index 6ad17a5932..0000000000 --- a/externals/javelin +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6ad17a59326690ed11c4b72c506a6218e438cad9 diff --git a/externals/mimemailparser/MimeMailParser.class.php b/externals/mimemailparser/MimeMailParser.class.php index 3ce0ee49c7..914f50888e 100644 --- a/externals/mimemailparser/MimeMailParser.class.php +++ b/externals/mimemailparser/MimeMailParser.class.php @@ -111,6 +111,14 @@ public function setStream($stream) { * @param $data String */ public function setText($data) { + // NOTE: This has been modified for Phabricator. If the input data does not + // end in a newline, Mailparse fails to include the last line in the mail + // body. This happens somewhere deep, deep inside the mailparse extension, + // so adding a newline here seems like the most straightforward fix. + if (!preg_match('/\n\z/', $data)) { + $data = $data."\n"; + } + $this->resource = mailparse_msg_create(); // does not parse incrementally, fast memory hog might explode mailparse_msg_parse($this->resource, $data); @@ -195,23 +203,23 @@ public function getMessageBody($type = 'text') { ); if (in_array($type, array_keys($mime_types))) { foreach($this->parts as $part) { - $disposition = $this->getPartContentDisposition($part); - if ($disposition == 'attachment') { - // text/plain parts with "Content-Disposition: attachment" are - // attachments, not part of the text body. - continue; - } + $disposition = $this->getPartContentDisposition($part); + if ($disposition == 'attachment') { + // text/plain parts with "Content-Disposition: attachment" are + // attachments, not part of the text body. + continue; + } if ($this->getPartContentType($part) == $mime_types[$type]) { - $headers = $this->getPartHeaders($part); - // Concatenate all the matching parts into the body text. For example, - // if a user sends a message with some text, then an image, and then - // some more text, the text body of the email gets split over several - // attachments. + $headers = $this->getPartHeaders($part); + // Concatenate all the matching parts into the body text. For example, + // if a user sends a message with some text, then an image, and then + // some more text, the text body of the email gets split over several + // attachments. $body .= $this->decode( $this->getPartBody($part), array_key_exists('content-transfer-encoding', $headers) - ? $headers['content-transfer-encoding'] - : ''); + ? $headers['content-transfer-encoding'] + : ''); } } } else { @@ -243,20 +251,42 @@ public function getMessageBodyHeaders($type = 'text') { return $headers; } - /** * Returns the attachments contents in order of appearance * @return Array * @param $type Object[optional] */ public function getAttachments() { + // NOTE: This has been modified for Phabricator. Some mail clients do not + // send attachments with "Content-Disposition" headers. $attachments = array(); $dispositions = array("attachment","inline"); - foreach($this->parts as $part) { + $non_attachment_types = array("text/plain", "text/html"); + $nonameIter = 0; + foreach ($this->parts as $part) { $disposition = $this->getPartContentDisposition($part); - if (in_array($disposition, $dispositions)) { + $filename = 'noname'; + if (isset($part['disposition-filename'])) { + $filename = $part['disposition-filename']; + } elseif (isset($part['content-name'])) { + // if we have no disposition but we have a content-name, it's a valid attachment. + // we simulate the presence of an attachment disposition with a disposition filename + $filename = $part['content-name']; + $disposition = 'attachment'; + } elseif (!in_array($part['content-type'], $non_attachment_types, true) + && substr($part['content-type'], 0, 10) !== 'multipart/' + ) { + // if we cannot get it with getMessageBody, we assume it is an attachment + $disposition = 'attachment'; + } + + if (in_array($disposition, $dispositions) && isset($filename) === true) { + if ($filename == 'noname') { + $nonameIter++; + $filename = 'noname'.$nonameIter; + } $attachments[] = new MimeMailParser_attachment( - $part['disposition-filename'], + $filename, $this->getPartContentType($part), $this->getAttachmentStream($part), $disposition, @@ -405,7 +435,7 @@ private function getPartBodyFromText(&$part) { private function getAttachmentStream(&$part) { $temp_fp = tmpfile(); - array_key_exists('content-transfer-encoding', $part['headers']) ? $encoding = $part['headers']['content-transfer-encoding'] : $encoding = ''; + array_key_exists('content-transfer-encoding', $part['headers']) ? $encoding = $part['headers']['content-transfer-encoding'] : $encoding = ''; if ($temp_fp) { if ($this->stream) { @@ -437,21 +467,21 @@ private function getAttachmentStream(&$part) { } - /** - * Decode the string depending on encoding type. - * @return String the decoded string. - * @param $encodedString The string in its original encoded state. - * @param $encodingType The encoding type from the Content-Transfer-Encoding header of the part. - */ - private function decode($encodedString, $encodingType) { - if (strtolower($encodingType) == 'base64') { - return base64_decode($encodedString); - } else if (strtolower($encodingType) == 'quoted-printable') { - return quoted_printable_decode($encodedString); - } else { - return $encodedString; - } - } + /** + * Decode the string depending on encoding type. + * @return String the decoded string. + * @param $encodedString The string in its original encoded state. + * @param $encodingType The encoding type from the Content-Transfer-Encoding header of the part. + */ + private function decode($encodedString, $encodingType) { + if (strtolower($encodingType) == 'base64') { + return base64_decode($encodedString); + } else if (strtolower($encodingType) == 'quoted-printable') { + return quoted_printable_decode($encodedString); + } else { + return $encodedString; + } + } } diff --git a/externals/mimemailparser/attachment.class.php b/externals/mimemailparser/attachment.class.php index d56aba1f8d..2631a4fc44 100644 --- a/externals/mimemailparser/attachment.class.php +++ b/externals/mimemailparser/attachment.class.php @@ -102,7 +102,7 @@ public function read($bytes = 2082) { /** * Retrieve the file content in one go - * Once you retreive the content you cannot use MimeMailParser_attachment::read() + * Once you retrieve the content you cannot use MimeMailParser_attachment::read() * @return String */ public function getContent() { diff --git a/externals/octicons/LICENSE b/externals/octicons/LICENSE new file mode 100644 index 0000000000..4cf2020ce7 --- /dev/null +++ b/externals/octicons/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2012-2016 GitHub, Inc. + +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/octicons/README.md b/externals/octicons/README.md new file mode 100644 index 0000000000..84edd84dce --- /dev/null +++ b/externals/octicons/README.md @@ -0,0 +1,194 @@ +# GitHub Octicons + +[![NPM version](https://img.shields.io/npm/v/octicons.svg)](https://www.npmjs.org/package/octicons) +[![Build Status](https://travis-ci.org/primer/octicons.svg?branch=master)](https://travis-ci.org/primer/octicons) + +> Octicons are a scalable set of icons handcrafted with <3 by GitHub. + +## Install + +**NOTE:** The compiled files are located in `/build/`. This directory is located in the published npm package. Which means you can access it when you `npm install octicons`. You can also build this directory by following the [building octicons directions](#building-octicons). The files in the `/lib/` directory are the raw source files and are not compiled or optimized. + +#### NPM + +This repository is distributed with [npm][npm]. After [installing npm][install-npm], you can install `octicons` with this command. + +``` +$ npm install --save octicons +``` + +## Usage + +For all the usages, we recommend using the CSS located in `./build/octicons.css`. This is some simple CSS to normalize the icons and inherit colors. + +### Spritesheet + +With a [SVG sprite icon system](https://css-tricks.com/svg-sprites-use-better-icon-fonts/) you can include the sprite sheet located `./build/sprite.octicons.svg` after you [build the icons](#building-octicons) or from the npm package. There is a demo of how to use the spritesheet in the build directory also. + +### Node + +After installing `npm install octicons` you can access the icons like this. + +```js +var octicons = require("octicons") +octicons.alert +// { keywords: [ 'warning', 'triangle', 'exclamation', 'point' ], +// path: '', +// height: '16', +// width: '16', +// symbol: 'alert', +// options: +// { version: '1.1', +// width: '16', +// height: '16', +// viewBox: '0 0 16 16', +// class: 'octicon octicon-alert', +// 'aria-hidden': 'true' }, +// toSVG: [Function] } +``` + +There will be a key for every icon, with `keywords` and `svg`. + +#### `octicons.alert.symbol` + +Returns the string of the symbol name + +```js +octicons.x.symbol +// "x" +``` + +#### `octicons.person.path` + +Path returns the string representation of the path of the icon. + +```js +octicons.x.path +// +``` + +#### `octicons.issue.options` + +This is a json object of all the `options` that will be added to the output tag. + +```js +octicons.x.options +// { version: '1.1', width: '12', height: '16', viewBox: '0 0 12 16', class: 'octicon octicon-x', 'aria-hidden': 'true' } +``` + +#### `octicons.alert.width` + +Width is the icon's true width. Based on the svg view box width. _Note, this doesn't change if you scale it up with size options, it only is the natural width of the icon_ + +#### `octicons.alert.height` + +Height is the icon's true height. Based on the svg view box height. _Note, this doesn't change if you scale it up with size options, it only is the natural height of the icon_ + +#### `keywords` + +Returns an array of keywords for the icon. The data [comes from the octicons repository](https://github.com/primer/octicons/blob/master/lib/data.json). Consider contributing more aliases for the icons. + +```js +octicons.x.keywords +// ["remove", "close", "delete"] +``` + +#### `octicons.alert.toSVG()` + +Returns a string of the svg tag + +```js +octicons.x.toSVG() +// +``` + +The `.toSVG()` method accepts an optional `options` object. This is used to add CSS classnames, a11y options, and sizing. + +##### class + +Add more CSS classes to the `` tag. + +```js +octicons.x.toSVG({ "class": "close" }) +// +``` + +##### aria-label + +Add accessibility `aria-label` to the icon. + +```js +octicons.x.toSVG({ "aria-label": "Close the window" }) +// +``` + +##### width & height + +Size the SVG icon larger using `width` & `height` independently or together. + +```js +octicons.x.toSVG({ "width": 45 }) +// +``` + +#### `octicons.alert.toSVGUse()` + +Returns a string of the svg tag with the `` tag, for use with the spritesheet located in the /build/ directory. + +```js +octicons.x.toSVGUse() +// +``` + +### Ruby + +If your environment is Ruby on Rails, we have a [octicons_helper](https://github.com/primer/octicons_helper) gem available that renders SVG in your page. The octicons_helper uses the [octicons_gem](https://github.com/primer/octicons_gem) to do the computing and reading of the SVG files. + +### Jekyll + +For jekyll, there's a [jekyll-octicons](https://github.com/primer/jekyll-octicons) plugin available. This works exactly like the octicons_helper. + +## Changing, adding, or deleting icons + +1. Open the [Sketch document][sketch-document] in `/lib/`. Each icon exists as an artboard within our master Sketch document. If you’re adding an icon, duplicate one of the artboards and add your shapes to it. Be sure to give your artboard a name that makes sense. +2. Once you’re happy with your icon set, choose File > Export… +3. Choose all the artboards you’d like to export and then press “Export” +4. Export to `/lib/svg/` + +You’ll next need to build your Octicons. + +## Building Octicons + +All the files you need will be in the `/build/` directory already, but if you’ve made changes to the `/lib/` directory and need to regenerate, follow these steps: + +1. Open the Octicons directory in Terminal +2. `npm install` to install all dependencies for the project. +3. Run the command `npm run build`. This will run the grunt task to build the SVGs, placing them in the `/build/` directory. + +## Publishing + +If you have access to publish this repository, these are the steps to publishing. If you need access, contact [#design-systems](https://github.slack.com/archives/design-systems). + +1. Update the [CHANGELOG.md](./CHANGELOG.md) with relevant version number and any updates made to the repository. +2. `npm version ` Run [npm version](https://docs.npmjs.com/cli/version) inputing the relevant version type. The versioning is [semver](http://semver.org/), so version appropriately based on what has changed. +3. `npm publish` This will publish the new version to npmjs.org +4. `git push && git push --tags` Push all these changes to origin. + +## License + +(c) 2012-2016 GitHub, Inc. + +When using the GitHub logos, be sure to follow the [GitHub logo guidelines](https://github.com/logos). + +_SVG License:_ [SIL OFL 1.1](http://scripts.sil.org/OFL) +Applies to all SVG files + +_Code License:_ [MIT](./LICENSE) +Applies to all other files + +[primer]: https://github.com/primer/primer +[docs]: http://primercss.io/ +[npm]: https://www.npmjs.com/ +[install-npm]: https://docs.npmjs.com/getting-started/installing-node +[sass]: http://sass-lang.com/ +[sketch-document]: https://github.com/primer/octicons/blob/master/lib/octicons-master.sketch diff --git a/externals/pear-figlet/Text/Figlet.php b/externals/pear-figlet/Text/Figlet.php new file mode 100644 index 0000000000..f8c888e4f7 --- /dev/null +++ b/externals/pear-figlet/Text/Figlet.php @@ -0,0 +1,502 @@ + +* @author Christian Weiske +* @license http://www.php.net/license PHP License +* @version CVS: $Id$ +* @link http://pear.php.net/package/Text_Figlet +*/ + +/** +* ASCII art text creation +* +* Project home page (Russian): http://bolknote.ru/files/figlet/ +* +* PHP Version 4 +* +* @category Text +* @package Text_Figlet +* @author Evgeny Stepanischev +* @author Christian Weiske +* @license http://www.php.net/license PHP License +* @link http://pear.php.net/package/Text_Figlet +*/ +class Text_Figlet +{ + /** + * Height of a letter + * + * @var integer + * + * @access protected + */ + var $height; + + /** + * Letter baseline + * + * @var integer + * + * @access protected + */ + var $oldlayout; + + /** + * Flag - RTL (right to left) or LTR (left to right) text direction + * + * @var integer + * + * @access protected + */ + var $rtol; + + /** + * Information about special 'hardblank' character + * + * @var integer + * + * @access protected + */ + var $hardblank; + + /** + * Is used for keeping font + * + * @var array + * + * @access protected + */ + var $font; + + /** + * Flag is true if smushing occured in letters printing cycle + * + * @var integer + * + * @access protected + */ + var $smush_flag; + + /** + * Comment lines buffer + * + * @var string + * + * @access public + */ + + var $font_comment; + + + /** + * Load user font. Must be invoked first. + * Automatically tries the Text_Figlet font data directory + * as long as no path separator is in the filename. + * + * @param string $filename font file name + * @param bool $loadgerman (optional) load German character set or not + * + * @access public + * @return mixed PEAR_Error or true for success + */ + function loadFont($filename, $loadgerman = true) + { + $this->font = array(); + if (!file_exists($filename)) { + return self::raiseError('Figlet font file "' + . $filename + . '" cannot be found', 1); + } + + $this->font_comment = ''; + + // If Gzip compressed font + if (substr($filename, -3, 3) == '.gz') { + $filename = 'compress.zlib://' . $filename; + $compressed = true; + + if (!function_exists('gzcompress')) { + return self::raiseError('Cannot load gzip compressed fonts since' + . ' gzcompress() is not available.', + 3); + } + } else { + $compressed = false; + } + + if (!($fp = fopen($filename, 'rb'))) { + return self::raiseError('Cannot open figlet font file ' . $filename, 2); + } + + if (!$compressed) { + /* ZIPed font */ + if (fread($fp, 2) == 'PK') { + fclose($fp); + + $zip = new ZipArchive(); + $open_flag = 0; + // The RDONLY flag was only introduced in 7.4.3. + if (defined('ZipArchive::RDONLY')) { + $open_flag = ZipArchive::RDONLY; + } + $open_result = $zip->open($filename, $open_flag); + if ($open_result !== true) { + return self::raiseError('Cannot open figlet font file ' . + $filename . ', got error: ' . $open_result, 2); + } + + $name = $zip->getNameIndex(0); + $zip->close(); + + if (!($fp = fopen('zip://' . realpath($filename) . '#' . $name, 'rb'))) { + return self::raiseError('Cannot open figlet font file ' . $filename, 2); + } + + $compressed = true; + } else { + flock($fp, LOCK_SH); + rewind($fp); + } + } + + // flf2a$ 6 5 20 15 3 0 143 229 + // | | | | | | | | | | + // / / | | | | | | | \ + // Signature / / | | | | | \ Codetag_Count + // Hardblank / / | | | \ Full_Layout + // Height / | | \ Print_Direction + // Baseline / \ Comment_Lines + // Max_Length Old_Layout + + + $header = explode(' ', fgets($fp, 2048)); + + if (substr($header[0], 0, 5) <> 'flf2a') { + return self::raiseError('Unknown FIGlet font format.', 4); + } + + @list ($this->hardblank, $this->height,,, + $this->oldlayout, $cmt_count, $this->rtol) = $header; + + $this->hardblank = substr($this->hardblank, -1, 1); + + for ($i = 0; $i < $cmt_count; $i++) { + $this->font_comment .= fgets($fp, 2048); + } + + // ASCII charcters + for ($i = 32; $i < 127; $i++) { + $this->font[$i] = $this->_char($fp); + } + + foreach (array(196, 214, 220, 228, 246, 252, 223) as $i) { + if ($loadgerman) { + $letter = $this->_char($fp); + + // Invalid character but main font is loaded and I can use it + if ($letter === false) { + fclose($fp); + return true; + } + + // Load if it is not blank only + if (trim(implode('', $letter)) <> '') { + $this->font[$i] = $letter; + } + } else { + $this->_skip($fp); + } + } + + // Extented characters + for ($n = 0; !feof($fp); $n++) { + list ($i) = explode(' ', rtrim(fgets($fp, 1024)), 2); + if ($i == '') { + continue; + } + + // If comment + if (preg_match('/^\-0x/i', $i)) { + $this->_skip($fp); + } else { + // If Unicode + if (preg_match('/^0x/i', $i)) { + $i = hexdec(substr($i, 2)); + } else { + // If octal + if ($i[0] === '0' && $i !== '0' || substr($i, 0, 2) == '-0') { + $i = octdec($i); + } + } + + $letter = $this->_char($fp); + + // Invalid character but main font is loaded and I can use it + if ($letter === false) { + fclose($fp); + return true; + } + + $this->font[$i] = $letter; + } + } + + fclose($fp); + return true; + } + + + + /** + * Print string using font loaded by LoadFont method + * + * @param string $str string for printing + * @param bool $inhtml (optional) output mode + * - HTML (true) or plain text (false) + * + * @access public + * @return string contains + */ + function lineEcho($str, $inhtml = false) + { + $out = array(); + + for ($i = 0; $ihardblank, '/'); + $sp = "$hb\\x00\\s"; + + // If chosen character not found try to use default + // If default character is not defined skip it + + if (!isset($this->font[$lt])) { + if (isset($this->font[0])) { + $lt = 0; + } else { + continue; + } + } + + for ($j = 0; $j < $this->height; $j++) { + $line = $this->font[$lt][$j]; + + // Replace hardblanks + if (isset($out[$j])) { + if ($this->rtol) { + $out[$j] = $line . $out[$j]; + } else { + $out[$j] .= $line; + } + } else { + $out[$j] = $line; + } + } + + if ($this->oldlayout > -1 && $i) { + // Calculate minimal distance between two last letters + + $mindiff = -1; + + for ($j = 0; $j < $this->height; $j++) { + if (preg_match("/\S(\s*\\x00\s*)\S/", $out[$j], $r)) { + if ($mindiff == -1) { + $mindiff = strlen($r[1]); + } else { + $mindiff = min($mindiff, strlen($r[1])); + } + } + } + + // Remove spaces between two last letter + // dec mindiff for exclude \x00 symbol + + if (--$mindiff > 0) { + for ($j = 0; $j < $this->height; $j++) { + if (preg_match("/\\x00(\s{0,{$mindiff}})/", $out[$j], $r)) { + $l = strlen($r[1]); + $b = $mindiff - $l; + $out[$j] = preg_replace("/\s{0,$b}\\x00\s{{$l}}/", + "\0", + $out[$j], + 1); + } + } + } + // Smushing + + $this->smush_flag = 0; + + for ($j = 0; $j < $this->height; $j++) { + $out[$j] = preg_replace_callback("#([^$sp])\\x00([^$sp])#", + array(&$this, '_rep'), + $out[$j]); + } + + // Remove one space if smushing + // and remove all \x00 except tail whenever + + if ($this->smush_flag) { + $pat = array("/\s\\x00(?!$)|\\x00\s/", "/\\x00(?!$)/"); + $rep = array('', ''); + } else { + $pat = "/\\x00(?!$)/"; + $rep = ''; + } + + for ($j = 0; $j<$this->height; $j++) { + $out[$j] = preg_replace($pat, $rep, $out[$j]); + } + } + } + + $trans = array("\0" => '', $this->hardblank => ' '); + $str = strtr(implode("\n", $out), $trans); + + if ($inhtml) { + self::raiseError( + 'Do not use the HTML escaping provided by this class in '. + 'a Phabricator context.'); + } + + return $str; + } + + + + /** + * It is preg_replace callback function that makes horizontal letter smushing + * + * @param array $r preg_replace matches array + * + * @return string + * @access private + */ + function _rep($r) + { + if ($this->oldlayout & 1 && $r[1] == $r[2]) { + $this->smush_flag = 1; + return $r[1]; + } + + if ($this->oldlayout & 2) { + $symb = '|/\\[]{}()<>'; + + if ($r[1] == '_' && strpos($symb, $r[2]) !== false || + $r[2] == '_' && strpos($symb, $r[1]) !== false) { + $this->smush_flag = 1; + return $r[1]; + } + } + + if ($this->oldlayout & 4) { + $classes = '|/\\[]{}()<>'; + + if (($left = strpos($classes, $r[1])) !== false) { + if (($right = strpos($classes, $r[2])) !== false) { + $this->smush_flag = 1; + return $right > $left ? $r[2] : $r[1]; + } + } + } + + if ($this->oldlayout & 8) { + $t = array('[' => ']', ']' => '[', '{' => '}', '}' => '{', + '(' => ')', ')' => '('); + + if (isset($t[$r[2]]) && $r[1] == $t[$r[2]]) { + $this->smush_flag = 1; + return '|'; + } + } + + if ($this->oldlayout & 16) { + $t = array("/\\" => '|', "\\/" => 'Y', '><' => 'X'); + + if (isset($t[$r[1].$r[2]])) { + $this->smush_flag = 1; + return $t[$r[1].$r[2]]; + } + } + + if ($this->oldlayout & 32) { + if ($r[1] == $r[2] && $r[1] == $this->hardblank) { + $this->smush_flag = 1; + return $this->hardblank; + } + } + + return $r[1]."\00".$r[2]; + } + + + + /** + * Function loads one character in the internal array from file + * + * @param resource &$fp handle of font file + * + * @return mixed lines of the character or false if foef occured + * @access private + */ + function _char(&$fp) + { + $out = array(); + + for ($i = 0; $i < $this->height; $i++) { + if (feof($fp)) { + return false; + } + + $line = rtrim(fgets($fp, 2048), "\r\n"); + if (preg_match('/(.){1,2}$/', $line, $r)) { + $line = str_replace($r[1], '', $line); + } + + $line .= "\x00"; + + $out[] = $line; + } + + return $out; + } + + + + /** + * Function for skipping one character in a font file + * + * @param resource &$fp handle of font file + * + * @return boolean always return true + * @access private + */ + function _skip(&$fp) + { + for ($i = 0; $i<$this->height && !feof($fp); $i++) { + fgets($fp, 2048); + } + + return true; + } + + + private static function raiseError($message, $code = 1) { + throw new Exception($message); + } +} \ No newline at end of file diff --git a/externals/pear-figlet/docs/README.TXT b/externals/pear-figlet/docs/README.TXT new file mode 100644 index 0000000000..544a5259a9 --- /dev/null +++ b/externals/pear-figlet/docs/README.TXT @@ -0,0 +1,26 @@ +FIGlet project home page: http://www.figlet.org/ +You can download FIGlet fonts from: ftp://ftp.figlet.org/pub/figlet/fonts/ +Project home page (Russian): http://bolknote.ru/files/figlet/ + +Notes: +1. There are no support flc and vertical smushing. +2. But horizontal smushing is supported. +3. Default character (0x00) is supported. +4. German symbols are supported. +5. It is supported Unicode as %uHHHH, HHHH - a hex code of a character (UCS-2). +7. RTL and LTR text directions are suppoted. +8. Windows and Unix font formats are supported. +9. Incomplete fonts are supported (for example dwhistled.flf). +10. Gzipped fonts supported as .flf.gz (zlib PHP extension required) +11. ZIPed fonts supported (ZIP PHP extension required) + ` +Usage: + + include_once 'Text/Figlet.php'; + + $figlet = new Text_Figlet(); + if (PEAR::isError($error = $figlet->LoadFont('slant.flf'))) { + echo 'Error: ', $error->getMessage(); + } else { + echo $figlet->LineEcho("Hello, world!"); + } \ No newline at end of file diff --git a/externals/pear-figlet/docs/examples/hello_world.php b/externals/pear-figlet/docs/examples/hello_world.php new file mode 100644 index 0000000000..849c997fb3 --- /dev/null +++ b/externals/pear-figlet/docs/examples/hello_world.php @@ -0,0 +1,35 @@ +LoadFont('makisupa.flf'); +if (PEAR::isError($error)) { + echo 'Error: ' . $error->getMessage() . "\n"; +} else { + echo $figlet->LineEcho(utf8tofiglet('Hello, world!')) . "\n"; +} +?> \ No newline at end of file diff --git a/externals/pear-figlet/fonts/makisupa.flf b/externals/pear-figlet/fonts/makisupa.flf new file mode 100644 index 0000000000..6ed7e1e6df --- /dev/null +++ b/externals/pear-figlet/fonts/makisupa.flf @@ -0,0 +1,2877 @@ +flf2a_ 16 16 100 -1 3 0 0 73 +Converted Makisupa (http://www.greywolfwebworks.com/fonts.html) +by Evgeny Stepanischev http://bolknote.ru/ 2010.07.08 +GPL and OFL license. +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_@@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_** _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##**## _@ +_##**## _@ +_##**## _@ +_##**## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ ##* ##* _@ +_*##**##** _@ +_######### _@ +_######### _@ +_ ##* ##* _@ +_*##**##** _@ +_######### _@ +_######### _@ +_ ##* ##* _@ +_ _@ +_@@ +_ *## _@ +_ *##* _@ +_*#####* _@ +_#######* _@ +_###**##* _@ +_###* ##* _@ +_######* _@ +_*###### _@ +_ ***##* _@ +_###**##* _@ +_#######* _@ +_*#####* _@ +_ *###* _@ +_ *## _@ +_ _@ +_@@ +_*##* #** _@ +_#### *### _@ +_#### #### _@ +_####*###* _@ +_######## _@ +_*######* _@ +_ **###* _@ +_ *###* _@ +_ *###* _@ +_ *######* _@ +_*######## _@ +_*##*##*## _@ +_###*##### _@ +_*#* *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *####* _@ +_ ######* _@ +_ ###*##* _@ +_ ###*##* _@ +_ *####* _@ +_*#####*##* _@ +_#########* _@ +_##* ####* _@ +_###*#####* _@ +_*######### _@ +_ *####**#* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_###** _@ +_*#### _@ +_ *### _@ +_ _@ +_ _@ +_@@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ *##* _@ +_*###* _@ +_###* _@ +_##* _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ *# _@ +_#### _@ +_*### _@ +_#### _@ +_ *# _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***##**** _@ +_######### _@ +_######### _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##* _@ +_##* _@ +_*# _@ +_** _@ +_#* _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_********* _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_** _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ *#* _@ +_ *### _@ +_ *##* _@ +_ *###* _@ +_ *##* _@ +_ *### _@ +_ ###* _@ +_ *### _@ +_ ###* _@ +_ *##* _@ +_*###* _@ +_*##* _@ +_###* _@ +_*#* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##*## *## _@ +_##*## *## _@ +_##*** *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_*###* _@ +_####* _@ +_**##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_**###** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_ *### _@ +_ *######* _@ +_*######* _@ +_###**** _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_ *### _@ +_ #####* _@ +_ #####* _@ +_ ***### _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_ *##* _@ +_ *###* _@ +_ *####* _@ +_ *#####* _@ +_ *######* _@ +_ *####*##* _@ +_ ####**##* _@ +_*########* _@ +_*########* _@ +_ *##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_#######* _@ +_########* _@ +_******### _@ +_ *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_ *#* _@ +_ *## _@ +_ ### _@ +_ *##* _@ +_ *## _@ +_ ##* _@ +_*######* _@ +_########* _@ +_######### _@ +_##* *### _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_******### _@ +_ ###* _@ +_ *### _@ +_ *##* _@ +_ ###* _@ +_ *##* _@ +_ *##* _@ +_ ### _@ +_ *##* _@ +_ ### _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_###* *### _@ +_*#######* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_###**#### _@ +_*######## _@ +_ *######* _@ +_ *### _@ +_ *##* _@ +_ *###* _@ +_ *### _@ +_ ###* _@ +_ *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##* _@ +_##* _@ +_** _@ +_ _@ +_ _@ +_ _@ +_** _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ _@ +_** _@ +_##* _@ +_##* _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##* _@ +_##* _@ +_*# _@ +_** _@ +_#* _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ *#* _@ +_ *### _@ +_ *###* _@ +_*###* _@ +_###* _@ +_###* _@ +_*###* _@ +_ *###* _@ +_ *### _@ +_ *#* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_********* _@ +_######### _@ +_######### _@ +_ _@ +_********* _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_*#* _@ +_###* _@ +_*###* _@ +_ *###* _@ +_ *### _@ +_ *### _@ +_ *###* _@ +_*###* _@ +_###* _@ +_*#* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_ *### _@ +_ *####* _@ +_ *####* _@ +_ *###** _@ +_ *##* _@ +_ ** _@ +_ ** _@ +_ *## _@ +_ *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ *####** _@ +_ *##*#*##* _@ +_ ##**#**#* _@ +_*#* #*# *# _@ +_*# ### *# _@ +_*#* #*# *# _@ +_ ## # #*## _@ +_ *### ###* _@ +_ *#####* _@ +_ *** _@ +_ _@ +_@@ +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_#######* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_########* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_########* _@ +_#######* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* _@ +_##* _@ +_##* _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_######* _@ +_#######* _@ +_###*####* _@ +_##* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_###*####* _@ +_#######* _@ +_######* _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_##* _@ +_#######* _@ +_#######* _@ +_###**** _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_##* _@ +_#######* _@ +_#######* _@ +_###**** _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* _@ +_##* ##### _@ +_##* ##### _@ +_##* **### _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*######## _@ +_ *####### _@ +_ _@ +_@@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_######### _@ +_######### _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***###*** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_ *##### _@ +_ *##### _@ +_ **### _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_##* *## _@ +_##* *## _@ +_##* ### _@ +_##* *##* _@ +_##* ###* _@ +_##* *##* _@ +_#######* _@ +_####### _@ +_###*###* _@ +_##* *### _@ +_##* *##* _@ +_##* ### _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_##* *## _@ +_### ### _@ +_###* *### _@ +_####*#### _@ +_######### _@ +_######### _@ +_##*###*## _@ +_##*###*## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_##* *## _@ +_### *## _@ +_###* *## _@ +_####* *## _@ +_####* *## _@ +_#####**## _@ +_######*## _@ +_##*###### _@ +_##**##### _@ +_##* *#### _@ +_##* *#### _@ +_##* *### _@ +_##* ### _@ +_##* *## _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_#######* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_########* _@ +_#######* _@ +_###**** _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *#### _@ +_##* ##### _@ +_####*#### _@ +_*######## _@ +_ *######* _@ +_ _@ +_@@ +_#######* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_########* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ *#####* _@ +_ *#######* _@ +_ ###***### _@ +_ ##* *## _@ +_ ##* *## _@ +_ ###* _@ +_ *######* _@ +_ *######* _@ +_ ****### _@ +_ ##* *## _@ +_ ##* *## _@ +_ ###***### _@ +_ *#######* _@ +_ *#####* _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_### ### _@ +_*##* *##* _@ +_ ###*### _@ +_ *#####* _@ +_ ##### _@ +_ *###* _@ +_ ##* _@ +_ _@ +_@@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##*###*## _@ +_##*###*## _@ +_######### _@ +_######### _@ +_####*#### _@ +_###* *### _@ +_### ### _@ +_##* *## _@ +_ _@ +_@@ +_##* *## _@ +_### ### _@ +_###* *### _@ +_*### ###* _@ +_ ###*### _@ +_ *#####* _@ +_ ##### _@ +_ ##### _@ +_ *#####* _@ +_ ###*### _@ +_*### ###* _@ +_###* *### _@ +_### ### _@ +_##* *## _@ +_ _@ +_@@ +_##* ##* _@ +_##* ##* _@ +_##* ##* _@ +_##* *##* _@ +_### *##* _@ +_###**###* _@ +_*######* _@ +_ *####* _@ +_ *##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +_######### _@ +_######### _@ +_*****###* _@ +_ *###* _@ +_ ###* _@ +_ *### _@ +_ ###* _@ +_ *### _@ +_ ###* _@ +_ *### _@ +_*###* _@ +_*###***** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_###** _@ +_#####* _@ +_#####* _@ +_ _@ +_ _@ +_@@ +_*#* _@ +_###* _@ +_*##* _@ +_*###* _@ +_ *##* _@ +_ ###* _@ +_ *### _@ +_ ###* _@ +_ *### _@ +_ *##* _@ +_ *###* _@ +_ *##* _@ +_ *### _@ +_ *#* _@ +_ _@ +_@@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***##* _@ +_#####* _@ +_#####* _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ *#* _@ +_*###* _@ +_##*## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_********** _@ +_########## _@ +_########## _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_*#* _@ +_###* _@ +_ *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_#####* _@ +_######* _@ +_##**### _@ +_##* *## _@ +_####### _@ +_######* _@ +_##**### _@ +_##* *## _@ +_##**### _@ +_######* _@ +_#####* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* _@ +_##* _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_#####* _@ +_######* _@ +_##*#### _@ +_##* ### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* ### _@ +_##*#### _@ +_######* _@ +_#####* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##*#### _@ +_##*#### _@ +_##***## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *##### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####### _@ +_####### _@ +_##***## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_***##** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *#### _@ +_ *#### _@ +_ ***## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##**### _@ +_##**##* _@ +_#####* _@ +_#####* _@ +_##*### _@ +_##**##* _@ +_##* ### _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_### ### _@ +_###*### _@ +_####### _@ +_####### _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_### *## _@ +_###**## _@ +_####*## _@ +_####*## _@ +_####### _@ +_##*#### _@ +_##*#### _@ +_##**### _@ +_##* ### _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_#####* _@ +_######* _@ +_##**### _@ +_##* *## _@ +_####### _@ +_######* _@ +_##**** _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_##*#### _@ +_####### _@ +_*###### _@ +_ *####* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_#####* _@ +_######* _@ +_##**### _@ +_##* *## _@ +_####### _@ +_######* _@ +_##**### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_#####* _@ +_*#####* _@ +_ ***### _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ ##### _@ +_ *###* _@ +_ *#* _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####### _@ +_####### _@ +_####### _@ +_####### _@ +_###*### _@ +_### ### _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_##* *## _@ +_##* *## _@ +_*##*##* _@ +_*#####* _@ +_ ##### _@ +_ *###* _@ +_ ##### _@ +_*#####* _@ +_*##*##* _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_### ##* _@ +_### ##* _@ +_### *##* _@ +_###**##* _@ +_*###### _@ +_ *####* _@ +_ *##* _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_####### _@ +_####### _@ +_****##* _@ +_ ###* _@ +_ *##* _@ +_ ### _@ +_ *##* _@ +_*### _@ +_*##**** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +_ ##* _@ +_ *##* _@ +_*###* _@ +_*###* _@ +_ *##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ####* _@ +_ *#### _@ +_ *### _@ +_ _@ +_ _@ +_@@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_ _@ +_@@ +_ ##* _@ +_ ##* _@ +_ ###* _@ +_ ###* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ *##* _@ +_*###* _@ +_###* _@ +_##* _@ +_ _@ +_ _@ +_@@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ **** _@ +_*#####*#* _@ +_######### _@ +_*****###* _@ +_ _@ +_@@ +_ *##* _@ +_ *####* _@ +_*######* _@ +_#### ###* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_###***##* _@ +_########* _@ +_########* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_### ##* _@ +_ _@ +_@@ +_ *####* _@ +_*######* _@ +_####*###* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_###* *##* _@ +_####*###* _@ +_*######* _@ +_ *####* _@ +_ _@ +_@@ +_### ##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_###* *##* _@ +_####*###* _@ +_*######* _@ +_ *####* _@ +_ _@ +_@@ +_ _@ +_ *# *# _@ +_ * * _@ +_ *###* _@ +_*#####* _@ +_####### _@ +_### *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +_ _@ +_ *# *# _@ +_ * * _@ +_ *####* _@ +_*###### _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *####* _@ +_ _@ +_@@ +_ _@ +_ *# *# _@ +_ * * _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *####* _@ +_ _@ +_@@ +_##* *## _@ +_##* *### _@ +_########* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_##* *###* _@ +_##**###* _@ +_ *###* _@ +_ ###* _@ +_ *#* _@ +_ _@ +_ _@ +_@@ +0x45e EXT +_ *## _@ +_ *## _@ +_ *####* _@ +_#######* _@ +_###**##* _@ +_### ##* _@ +_### _@ +_### _@ +_### ##* _@ +_###**##* _@ +_#######* _@ +_*#####* _@ +_ *#### _@ +_ *## _@ +_ _@ +_@@ +0x408 EXT +_ *#####* _@ +_ *#######* _@ +_ ###***### _@ +_ ##* *## _@ +_ ##* *## _@ +_*##* _@ +_####### _@ +_####### _@ +_*###*** _@ +_ ##* _@ +_ ##* _@ +_*###*** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +0x490 EXT +_##* *## _@ +_##* *## _@ +_##* *## _@ +_### *### _@ +_###**#### _@ +_*####### _@ +_ *##### _@ +_ *### _@ +_ ###### _@ +_ ###### _@ +_ **##** _@ +_ ###### _@ +_ ###### _@ +_ **##** _@ +_ _@ +_@@ +0xa4 EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_##**## _@ +_###### _@ +_*#**#* _@ +_*#**#* _@ +_###### _@ +_##**## _@ +_ _@ +_@@ +0x2030 EXT +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ #****# _@ +_ ###### _@ +_ _@ +_@@ +0x457 EXT +_ ##* _@ +_ ##* _@ +_ ** _@ +_ *** _@ +_ *##* _@ +_ *###* _@ +_ *##### _@ +_*#####* _@ +_###*** _@ +_##* *## _@ +_##* *## _@ +_####*#### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x40e EXT +_##* _@ +_##* _@ +_** _@ +_ _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_@@ +0xa7 EXT +_### *## _@ +_####* _@ +_*#####* _@ +_####### _@ +_##***## _@ +_##***## _@ +_####### _@ +_*#####* _@ +_ *#### _@ +_##**### _@ +_###*### _@ +_*#####* _@ +_ *####* _@ +_ _@ +_ _@ +_@@ +0xb6 EXT +_ *############# _@ +_ *############## _@ +_*########***###* _@ +_*########* ##* _@ +_*########* ##* _@ +_*########* ##* _@ +_ *#######* ##* _@ +_ *######* ##* _@ +_ *##* ##* _@ +_ ##* ##* _@ +_ ##* ##* _@ +_ ##* ##* _@ +_ ##* ##* _@ +_ ##* ##* _@ +_ _@ +_@@ +0xb5 EXT +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_########* _@ +_##* _@ +_##* _@ +_##* _@ +_ _@ +_ _@ +_@@ +0xa9 EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ *####** _@ +_ *#######* _@ +_ ##*#####* _@ +_*#**#**#*# _@ +_*# *# ***# _@ +_*#**#**#*# _@ +_ ## ###*## _@ +_ *##***##* _@ +_ *#####* _@ +_ *** _@ +_ _@ +_@@ +0xae EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ *####** _@ +_ *##***##* _@ +_ ##*###*#* _@ +_*#* #*# *# _@ +_*# ### *# _@ +_*#* #*# *# _@ +_ ## # #*## _@ +_ *##* ###* _@ +_ *#####* _@ +_ *** _@ +_ _@ +_@@ +0x45b EXT +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ #****# _@ +_ ###### _@ +_ _@ +_@@ +0x40a EXT +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ # *# _@ +_ #****# _@ +_ ###### _@ +_ _@ +_@@ +0x42f EXT +_##* *## _@ +_##* *### _@ +_########* _@ +_########* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *### _@ +_##* *###* _@ +_##**###* _@ +_ *###* _@ +_ ###* _@ +_ *#* _@ +_ _@ +_ _@ +_@@ +0x410 EXT +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x411 EXT +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x412 EXT +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x413 EXT +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x414 EXT +_ *##* _@ +_ *####* _@ +_*######* _@ +_#### ###* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_###***##* _@ +_########* _@ +_########* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_### ##* _@ +_ _@ +_@@ +0x415 EXT +_ *###* _@ +_ *#####* _@ +_*###*###* _@ +_###* *### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_######### _@ +_######### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x416 EXT +_ *###*######### _@ +_ *############## _@ +_*###*####******* _@ +_###* *### _@ +_##* *## _@ +_##* *##* _@ +_##* *####### _@ +_###***######## _@ +_#########***** _@ +_######### _@ +_##* *## _@ +_##* *##******* _@ +_##* *######### _@ +_##* *######### _@ +_ _@ +_@@ +0x417 EXT +_##* *##* _@ +_##* ##* _@ +_##* ##* _@ +_##* _@ +_##* _@ +_##* _@ +_##* ##* _@ +_##* *##* _@ +_###**###* _@ +_*######* _@ +_ *####* _@ +_ ##* _@ +_ ##* _@ +_ _@ +_ _@ +_@@ +0x418 EXT +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_##* _@ +_#######* _@ +_#######* _@ +_###**** _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x419 EXT +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_##* _@ +_#######* _@ +_#######* _@ +_###**** _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x41a EXT +_######### _@ +_######### _@ +_###****** _@ +_##* _@ +_##* _@ +_##* _@ +_####### _@ +_####### _@ +_###**** _@ +_##* _@ +_##* _@ +_###****** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x41b EXT +_#########* _@ +_#########* _@ +_###******* _@ +_### _@ +_### _@ +_###* _@ +_######## _@ +_######## _@ +_###***** _@ +_### _@ +_### _@ +_###******* _@ +_#########* _@ +_#########* _@ +_ _@ +_@@ +0x41c EXT +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***###*** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x41d EXT +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***###*** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x41e EXT +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***###*** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x41f EXT +_######### _@ +_######### _@ +_***###*** _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_ ##* _@ +_***###*** _@ +_######### _@ +_######### _@ +_ _@ +_@@ +0x420 EXT +_ *#####* _@ +_ *######* _@ +_ *##**###* _@ +_ *## *###* _@ +_ *## *##* _@ +_ *## ##* _@ +_###### ##* _@ +_###### ##* _@ +_**##** ##* _@ +_ *## *##* _@ +_ *## *###* _@ +_ *##**###* _@ +_ *######* _@ +_ *#####* _@ +_ _@ +_@@ +0x421 EXT +_##* *## _@ +_### *## _@ +_###* *## _@ +_####* *## _@ +_####* *## _@ +_#####**## _@ +_######*## _@ +_##*###### _@ +_##**##### _@ +_##* ##### _@ +_##* *#### _@ +_##* *### _@ +_##* ### _@ +_##* *## _@ +_ _@ +_@@ +0x422 EXT +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####*#### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x423 EXT +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####*#### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x424 EXT +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x425 EXT +_ *#####* _@ +_*#######* _@ +_###***### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x426 EXT +_ *####* _@ +_*######* _@ +_####*###* _@ +_###* *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_###* *##* _@ +_####*###* _@ +_*######* _@ +_ *####* _@ +_ _@ +_@@ +0x427 EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_*#* *#* _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_*#* *#* _@ +_ _@ +_@@ +0x428 EXT +_ *######* _@ +_*######## _@ +_###**#### _@ +_##* *#### _@ +_##* ##### _@ +_##**##### _@ +_##*###### _@ +_######*## _@ +_#####**## _@ +_##### *## _@ +_####* *## _@ +_####**### _@ +_########* _@ +_*######* _@ +_ _@ +_@@ +0x429 EXT +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####*#### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x42a EXT +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_####*#### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x42b EXT +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###***### _@ +_*#######* _@ +_ *#####* _@ +_ _@ +_@@ +0x42c EXT +_### ##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_### *##* _@ +_###* *##* _@ +_####*###* _@ +_*######* _@ +_ *####* _@ +_ _@ +_@@ +0x430 EXT +_ ##* _@ +_ ### _@ +_ ** _@ +_ *###* _@ +_*#####* _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x431 EXT +_ *## _@ +_ ### _@ +_ ** _@ +_ *###* _@ +_*#####* _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x432 EXT +_ *##* _@ +_ #*## _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x433 EXT +_####### _@ +_*#*#### _@ +_ *** _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x434 EXT +_ _@ +_ *# *# _@ +_ * * _@ +_ *###* _@ +_*#####* _@ +_####### _@ +_### *## _@ +_##* *## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_ _@ +_@@ +0x435 EXT +_ *## _@ +_ *## _@ +_ _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* ## _@ +_##***## _@ +_####### _@ +_####### _@ +_##* *## _@ +_##* ## _@ +_##* ## _@ +_ _@ +_@@ +0x436 EXT +_ _@ +_ _@ +_ _@ +_ *##########* _@ +_*###########* _@ +_###*###***** _@ +_##* *##* _@ +_##* ###### _@ +_##***###### _@ +_#######**** _@ +_#######* _@ +_##* *##***** _@ +_##* #######* _@ +_##* #######* _@ +_ _@ +_@@ +0x437 EXT +_ *####* _@ +_*###### _@ +_###*###* _@ +_### *##* _@ +_### ##* _@ +_### _@ +_### _@ +_### ##* _@ +_###**##* _@ +_#######* _@ +_ *####* _@ +_ *## _@ +_ *## _@ +_ _@ +_ _@ +_@@ +0x438 EXT +_ ##* _@ +_ *## _@ +_ ** _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +0x439 EXT +_ *## _@ +_ ##* _@ +_ ** _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +0x43a EXT +_ *##* _@ +_ #*## _@ +_ _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +0x43b EXT +_ _@ +_ *# *# _@ +_ * * _@ +_####### _@ +_#######* _@ +_##***** _@ +_##* _@ +_###### _@ +_###### _@ +_##**** _@ +_##* _@ +_##***** _@ +_#######* _@ +_####### _@ +_ _@ +_@@ +0x43c EXT +_ ##* _@ +_ *## _@ +_ ** _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_***##** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +0x43d EXT +_ *## _@ +_ ##* _@ +_ ** _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_***##** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +0x43e EXT +_ *##* _@ +_ #*## _@ +_ _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_***##** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +0x43f EXT +_ _@ +_ *# *# _@ +_ * * _@ +_####### _@ +_####### _@ +_***##** _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_ *## _@ +_***##** _@ +_####### _@ +_####### _@ +_ _@ +_@@ +0x440 EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ ## * _@ +_ *# ** _@ +_*#**#*#*# * _@ +_ #**#####*# _@ +_ # ######## _@ +_ ##*##**### _@ +_ *### _@ +_ _@ +_ _@ +_@@ +0x441 EXT +_####### _@ +_*#*#### _@ +_ *** _@ +_##* *## _@ +_### *## _@ +_###**## _@ +_####*## _@ +_####*## _@ +_####### _@ +_##*#### _@ +_##*#### _@ +_##**### _@ +_##* ### _@ +_##* *## _@ +_ _@ +_@@ +0x442 EXT +_ ##* _@ +_ *## _@ +_ ** _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +0x443 EXT +_ *## _@ +_ ##* _@ +_ ** _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +0x444 EXT +_ *##* _@ +_ #*## _@ +_ _@ +_ *#### _@ +_*###### _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *#### _@ +_ _@ +_@@ +0x445 EXT +_####### _@ +_*#*#### _@ +_ *** _@ +_ *###* _@ +_*#####* _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +0x446 EXT +_ _@ +_ *# *# _@ +_ * * _@ +_ *####* _@ +_*###### _@ +_###*### _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *####* _@ +_ _@ +_@@ +0x447 EXT +_ _@ +_ _@ +_ _@ +_ _@ +_ _@ +_ ##* _@ +_ ##* _@ +_ *** _@ +_********* _@ +_######### _@ +_######### _@ +_ *** _@ +_ ##* _@ +_ ##* _@ +_ _@ +_@@ +0x448 EXT +_ _@ +_ _@ +_ _@ +_ *##### _@ +_*###### _@ +_###*### _@ +_##*#### _@ +_##*#### _@ +_####### _@ +_####*## _@ +_####*## _@ +_###*### _@ +_######* _@ +_#####* _@ +_ _@ +_@@ +0x449 EXT +_ ##* _@ +_ *## _@ +_ ** _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +0x44a EXT +_ *## _@ +_ ##* _@ +_ ** _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*#####* _@ +_ *###* _@ +_ _@ +_@@ +0x44b EXT +_ *##* _@ +_ #*## _@ +_ _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *#### _@ +_ _@ +_@@ +0x44c EXT +_ _@ +_ *# *# _@ +_ * * _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_##* *## _@ +_###*### _@ +_*###### _@ +_ *####* _@ +_ _@ +_@@ diff --git a/externals/phpmailer/class.phpmailer-lite.php b/externals/phpmailer/class.phpmailer-lite.php index e5ba969993..335625ebad 100644 --- a/externals/phpmailer/class.phpmailer-lite.php +++ b/externals/phpmailer/class.phpmailer-lite.php @@ -42,6 +42,102 @@ class PHPMailerLite { + public static function newFromMessage( + PhabricatorMailExternalMessage $message) { + + $mailer = new self($use_exceptions = true); + + // By default, PHPMailerLite sends one mail per recipient. We handle + // combining or separating To and Cc higher in the stack, so tell it to + // send mail exactly like we ask. + $mailer->SingleTo = false; + + $mailer->CharSet = 'utf-8'; + $mailer->Encoding = 'base64'; + + $subject = $message->getSubject(); + if ($subject !== null) { + $mailer->Subject = $subject; + } + + $from_address = $message->getFromAddress(); + if ($from_address) { + $mailer->SetFrom( + $from_address->getAddress(), + (string)$from_address->getDisplayName(), + $crazy_side_effects = false); + } + + $reply_address = $message->getReplyToAddress(); + if ($reply_address) { + $mailer->AddReplyTo( + $reply_address->getAddress(), + (string)$reply_address->getDisplayName()); + } + + $to_addresses = $message->getToAddresses(); + if ($to_addresses) { + foreach ($to_addresses as $address) { + $mailer->AddAddress( + $address->getAddress(), + (string)$address->getDisplayName()); + } + } + + $cc_addresses = $message->getCCAddresses(); + if ($cc_addresses) { + foreach ($cc_addresses as $address) { + $mailer->AddCC( + $address->getAddress(), + (string)$address->getDisplayName()); + } + } + + $headers = $message->getHeaders(); + if ($headers) { + foreach ($headers as $header) { + $name = $header->getName(); + $value = $header->getValue(); + + if (phutil_utf8_strtolower($name) === 'message-id') { + $mailer->MessageID = $value; + } else { + $mailer->AddCustomHeader("{$name}: {$value}"); + } + } + } + + $attachments = $message->getAttachments(); + if ($attachments) { + foreach ($attachments as $attachment) { + $mailer->AddStringAttachment( + $attachment->getData(), + $attachment->getFilename(), + 'base64', + $attachment->getMimeType()); + } + } + + $text_body = $message->getTextBody(); + if ($text_body !== null) { + $mailer->Body = $text_body; + } + + $html_body = $message->getHTMLBody(); + if ($html_body !== null) { + $mailer->IsHTML(true); + $mailer->Body = $html_body; + if ($text_body !== null) { + $mailer->AltBody = $text_body; + } + } + + return $mailer; + } + + + + ///////////////////////////////////////////////// // PROPERTIES, PUBLIC ///////////////////////////////////////////////// @@ -491,13 +587,7 @@ public function Send() { switch($this->Mailer) { case 'amazon-ses': - $toArr = array(); - foreach($this->to as $t) { - $toArr[] = $this->AddrFormat($t); - } - $to = implode(', ', $toArr); return $this->customMailer->executeSend( - "To: ".$to."\n". $header. $body); @@ -532,36 +622,20 @@ protected function SendmailSend($header, $body) { } else { $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); } + if ($this->SingleTo === true) { foreach ($this->SingleToArray as $key => $val) { - if(!@$mail = popen($sendmail, 'w')) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fputs($mail, "To: " . $val . "\n"); - fputs($mail, $header); - fputs($mail, $body); - $result = pclose($mail); - // implement call back function if it exists - $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); - if($result != 0) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } + $mail = new ExecFuture('%C', $sendmail); + $mail->write("To: {$val}\n", true); + $mail->write($header.$body); + $mail->resolvex(); } } else { - if(!@$mail = popen($sendmail, 'w')) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } - fputs($mail, $header); - fputs($mail, $body); - $result = pclose($mail); - // implement call back function if it exists - $isSent = ($result == 0) ? 1 : 0; - $this->doCallback($isSent,$this->to,$this->cc,$this->bcc,$this->Subject,$body); - if($result != 0) { - throw new phpmailerException($this->Lang('execute') . $this->Sendmail, self::STOP_CRITICAL); - } + $mail = new ExecFuture('%C', $sendmail); + $mail->write($header.$body); + $mail->resolvex(); } + return true; } @@ -678,6 +752,10 @@ public function AddrAppend($type, $addr) { $addr_str .= implode(', ', $addresses); $addr_str .= $this->LE; + // NOTE: This is a narrow hack to fix an issue with 1000+ characters of + // recipients, described in T12372. + $addr_str = wordwrap($addr_str, 75, "\n "); + return $addr_str; } diff --git a/externals/phpmailer/class.phpmailer.php b/externals/phpmailer/class.phpmailer.php new file mode 100644 index 0000000000..69f9c45ba5 --- /dev/null +++ b/externals/phpmailer/class.phpmailer.php @@ -0,0 +1,2320 @@ +exceptions = ($exceptions == true); + } + + /** + * Sets message type to HTML. + * @param bool $ishtml + * @return void + */ + public function IsHTML($ishtml = true) { + if ($ishtml) { + $this->ContentType = 'text/html'; + } else { + $this->ContentType = 'text/plain'; + } + } + + /** + * Sets Mailer to send message using SMTP. + * @return void + */ + public function IsSMTP() { + $this->Mailer = 'smtp'; + } + + /** + * Sets Mailer to send message using PHP mail() function. + * @return void + */ + public function IsMail() { + $this->Mailer = 'mail'; + } + + /** + * Sets Mailer to send message using the $Sendmail program. + * @return void + */ + public function IsSendmail() { + if (!stristr(ini_get('sendmail_path'), 'sendmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + /** + * Sets Mailer to send message using the qmail MTA. + * @return void + */ + public function IsQmail() { + if (stristr(ini_get('sendmail_path'), 'qmail')) { + $this->Sendmail = '/var/qmail/bin/sendmail'; + } + $this->Mailer = 'sendmail'; + } + + ///////////////////////////////////////////////// + // METHODS, RECIPIENTS + ///////////////////////////////////////////////// + + /** + * Adds a "To" address. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddAddress($address, $name = '') { + return $this->AddAnAddress('to', $address, $name); + } + + /** + * Adds a "Cc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddCC($address, $name = '') { + return $this->AddAnAddress('cc', $address, $name); + } + + /** + * Adds a "Bcc" address. + * Note: this function works with the SMTP mailer on win32, not with the "mail" mailer. + * @param string $address + * @param string $name + * @return boolean true on success, false if address already used + */ + public function AddBCC($address, $name = '') { + return $this->AddAnAddress('bcc', $address, $name); + } + + /** + * Adds a "Reply-to" address. + * @param string $address + * @param string $name + * @return boolean + */ + public function AddReplyTo($address, $name = '') { + return $this->AddAnAddress('ReplyTo', $address, $name); + } + + /** + * Adds an address to one of the recipient arrays + * Addresses that have been added already return false, but do not throw exceptions + * @param string $kind One of 'to', 'cc', 'bcc', 'ReplyTo' + * @param string $address The email address to send to + * @param string $name + * @return boolean true on success, false if address already used or invalid in some way + * @access private + */ + private function AddAnAddress($kind, $address, $name = '') { + if (!preg_match('/^(to|cc|bcc|ReplyTo)$/', $kind)) { + echo 'Invalid recipient array: ' . kind; + return false; + } + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!self::ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + echo $this->Lang('invalid_address').': '.$address; + return false; + } + if ($kind != 'ReplyTo') { + if (!isset($this->all_recipients[strtolower($address)])) { + array_push($this->$kind, array($address, $name)); + $this->all_recipients[strtolower($address)] = true; + return true; + } + } else { + if (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = array($address, $name); + return true; + } + } + return false; +} + +/** + * Set the From and FromName properties + * @param string $address + * @param string $name + * @return boolean + */ + public function SetFrom($address, $name = '',$auto=1) { + $address = trim($address); + $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim + if (!self::ValidateAddress($address)) { + $this->SetError($this->Lang('invalid_address').': '. $address); + if ($this->exceptions) { + throw new phpmailerException($this->Lang('invalid_address').': '.$address); + } + echo $this->Lang('invalid_address').': '.$address; + return false; + } + $this->From = $address; + $this->FromName = $name; + if ($auto) { + if (empty($this->ReplyTo)) { + $this->AddAnAddress('ReplyTo', $address, $name); + } + if (empty($this->Sender)) { + $this->Sender = $address; + } + } + return true; + } + + /** + * Check that a string looks roughly like an email address should + * Static so it can be used without instantiation + * Tries to use PHP built-in validator in the filter extension (from PHP 5.2), falls back to a reasonably competent regex validator + * Conforms approximately to RFC2822 + * @link http://www.hexillion.com/samples/#Regex Original pattern found here + * @param string $address The email address to check + * @return boolean + * @static + * @access public + */ + public static function ValidateAddress($address) { + if (function_exists('filter_var')) { //Introduced in PHP 5.2 + if(filter_var($address, FILTER_VALIDATE_EMAIL) === FALSE) { + return false; + } else { + return true; + } + } else { + return preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $address); + } + } + + ///////////////////////////////////////////////// + // METHODS, MAIL SENDING + ///////////////////////////////////////////////// + + /** + * Creates message and assigns Mailer. If the message is + * not sent successfully then it returns false. Use the ErrorInfo + * variable to view description of the error. + * @return bool + */ + public function Send() { + try { + if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) { + throw new phpmailerException($this->Lang('provide_address'), self::STOP_CRITICAL); + } + + // Set whether the message is multipart/alternative + if(!empty($this->AltBody)) { + $this->ContentType = 'multipart/alternative'; + } + + $this->error_count = 0; // reset errors + $this->SetMessageType(); + $header = $this->CreateHeader(); + $body = $this->CreateBody(); + + if (empty($this->Body)) { + throw new phpmailerException($this->Lang('empty_message'), self::STOP_CRITICAL); + } + + // digitally sign with DKIM if enabled + if ($this->DKIM_domain && $this->DKIM_private) { + $header_dkim = $this->DKIM_Add($header,$this->Subject,$body); + $header = str_replace("\r\n","\n",$header_dkim) . $header; + } + + // Choose the mailer and send through it + switch($this->Mailer) { + case 'sendmail': + return $this->SendmailSend($header, $body); + case 'smtp': + return $this->SmtpSend($header, $body); + default: + return $this->MailSend($header, $body); + } + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + echo $e->getMessage()."\n"; + return false; + } + } + + /** + * Sends mail using the $Sendmail program. + * @param string $header The message headers + * @param string $body The message body + * @access protected + * @return bool + */ + protected function SendmailSend($header, $body) { + if ($this->Sender != '') { + $sendmail = sprintf("%s -oi -f %s -t", escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender)); + } else { + $sendmail = sprintf("%s -oi -t", escapeshellcmd($this->Sendmail)); + } + + if ($this->SingleTo === true) { + foreach ($this->SingleToArray as $key => $val) { + $mail = new ExecFuture('%C', $sendmail); + $mail->write("To: {$val}\n", true); + $mail->write($header.$body); + $mail->resolvex(); + } + } else { + $mail = new ExecFuture('%C', $sendmail); + $mail->write($header.$body); + $mail->resolvex(); + } + + return true; + } + + /** + * Sends mail using the PHP mail() function. + * @param string $header The message headers + * @param string $body The message body + * @access protected + * @return bool + */ + protected function MailSend($header, $body) { + $toArr = array(); + foreach($this->to as $t) { + $toArr[] = $this->AddrFormat($t); + } + $to = implode(', ', $toArr); + + $params = sprintf("-oi -f %s", $this->Sender); + if ($this->Sender != '' && strlen(ini_get('safe_mode'))< 1) { + $old_from = ini_get('sendmail_from'); + ini_set('sendmail_from', $this->Sender); + if ($this->SingleTo === true && count($toArr) > 1) { + foreach ($toArr as $key => $val) { + $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + } + } else { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + } + } else { + if ($this->SingleTo === true && count($toArr) > 1) { + foreach ($toArr as $key => $val) { + $rt = @mail($val, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header, $params); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent,$val,$this->cc,$this->bcc,$this->Subject,$body); + } + } else { + $rt = @mail($to, $this->EncodeHeader($this->SecureHeader($this->Subject)), $body, $header); + // implement call back function if it exists + $isSent = ($rt == 1) ? 1 : 0; + $this->doCallback($isSent,$to,$this->cc,$this->bcc,$this->Subject,$body); + } + } + if (isset($old_from)) { + ini_set('sendmail_from', $old_from); + } + if(!$rt) { + throw new phpmailerException($this->Lang('instantiate'), self::STOP_CRITICAL); + } + return true; + } + + /** + * Sends mail via SMTP using PhpSMTP + * Returns false if there is a bad MAIL FROM, RCPT, or DATA input. + * @param string $header The message headers + * @param string $body The message body + * @uses SMTP + * @access protected + * @return bool + */ + protected function SmtpSend($header, $body) { + require_once $this->PluginDir . 'class.smtp.php'; + $bad_rcpt = array(); + + if(!$this->SmtpConnect()) { + throw new phpmailerException($this->Lang('smtp_connect_failed'), self::STOP_CRITICAL); + } + $smtp_from = ($this->Sender == '') ? $this->From : $this->Sender; + if(!$this->smtp->Mail($smtp_from)) { + throw new phpmailerException($this->Lang('from_failed') . $smtp_from, self::STOP_CRITICAL); + } + + // Attempt to send attach all recipients + foreach($this->to as $to) { + if (!$this->smtp->Recipient($to[0])) { + $bad_rcpt[] = $to[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent,$to[0],'','',$this->Subject,$body); + } + } + foreach($this->cc as $cc) { + if (!$this->smtp->Recipient($cc[0])) { + $bad_rcpt[] = $cc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent,'',$cc[0],'',$this->Subject,$body); + } + } + foreach($this->bcc as $bcc) { + if (!$this->smtp->Recipient($bcc[0])) { + $bad_rcpt[] = $bcc[0]; + // implement call back function if it exists + $isSent = 0; + $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + } else { + // implement call back function if it exists + $isSent = 1; + $this->doCallback($isSent,'','',$bcc[0],$this->Subject,$body); + } + } + + + if (count($bad_rcpt) > 0 ) { //Create error message for any bad addresses + $badaddresses = implode(', ', $bad_rcpt); + throw new phpmailerException($this->Lang('recipients_failed') . $badaddresses); + } + if(!$this->smtp->Data($header . $body)) { + throw new phpmailerException($this->Lang('data_not_accepted'), self::STOP_CRITICAL); + } + if($this->SMTPKeepAlive == true) { + $this->smtp->Reset(); + } + return true; + } + + /** + * Initiates a connection to an SMTP server. + * Returns false if the operation failed. + * @uses SMTP + * @access public + * @return bool + */ + public function SmtpConnect() { + if(is_null($this->smtp)) { + $this->smtp = new SMTP(); + } + + $this->smtp->do_debug = $this->SMTPDebug; + $hosts = explode(';', $this->Host); + $index = 0; + $connection = $this->smtp->Connected(); + + // Retry while there is no connection + try { + while($index < count($hosts) && !$connection) { + $hostinfo = array(); + if (preg_match('/^(.+):([0-9]+)$/', $hosts[$index], $hostinfo)) { + $host = $hostinfo[1]; + $port = $hostinfo[2]; + } else { + $host = $hosts[$index]; + $port = $this->Port; + } + + $tls = ($this->SMTPSecure == 'tls'); + $ssl = ($this->SMTPSecure == 'ssl'); + + if ($this->smtp->Connect(($ssl ? 'ssl://':'').$host, $port, $this->Timeout)) { + + $hello = ($this->Helo != '' ? $this->Helo : $this->ServerHostname()); + $this->smtp->Hello($hello); + + if ($tls) { + if (!$this->smtp->StartTLS()) { + throw new phpmailerException($this->Lang('tls')); + } + + //We must resend HELO after tls negotiation + $this->smtp->Hello($hello); + } + + $connection = true; + if ($this->SMTPAuth) { + if (!$this->smtp->Authenticate($this->Username, $this->Password)) { + throw new phpmailerException($this->Lang('authenticate')); + } + } + } + $index++; + if (!$connection) { + throw new phpmailerException($this->Lang('connect_host')); + } + } + } catch (phpmailerException $e) { + $this->smtp->Reset(); + throw $e; + } + return true; + } + + /** + * Closes the active SMTP session if one exists. + * @return void + */ + public function SmtpClose() { + if(!is_null($this->smtp)) { + if($this->smtp->Connected()) { + $this->smtp->Quit(); + $this->smtp->Close(); + } + } + } + + /** + * Sets the language for all class error messages. + * Returns false if it cannot load the language file. The default language is English. + * @param string $langcode ISO 639-1 2-character language code (e.g. Portuguese: "br") + * @param string $lang_path Path to the language file directory + * @access public + */ + function SetLanguage($langcode = 'en', $lang_path = 'language/') { + //Define full set of translatable strings + $PHPMAILER_LANG = array( + 'provide_address' => 'You must provide at least one recipient email address.', + 'mailer_not_supported' => ' mailer is not supported.', + 'execute' => 'Could not execute: ', + 'instantiate' => 'Could not instantiate mail function.', + 'authenticate' => 'SMTP Error: Could not authenticate.', + 'from_failed' => 'The following From address failed: ', + 'recipients_failed' => 'SMTP Error: The following recipients failed: ', + 'data_not_accepted' => 'SMTP Error: Data not accepted.', + 'connect_host' => 'SMTP Error: Could not connect to SMTP host.', + 'file_access' => 'Could not access file: ', + 'file_open' => 'File Error: Could not open file: ', + 'encoding' => 'Unknown encoding: ', + 'signing' => 'Signing Error: ', + 'smtp_error' => 'SMTP server error: ', + 'empty_message' => 'Message body empty', + 'invalid_address' => 'Invalid address', + 'variable_set' => 'Cannot set or reset variable: ' + ); + //Overwrite language-specific strings. This way we'll never have missing translations - no more "language string failed to load"! + $l = true; + if ($langcode != 'en') { //There is no English translation file + $l = @include $lang_path.'phpmailer.lang-'.$langcode.'.php'; + } + $this->language = $PHPMAILER_LANG; + return ($l == true); //Returns false if language not found + } + + /** + * Return the current array of language strings + * @return array + */ + public function GetTranslations() { + return $this->language; + } + + ///////////////////////////////////////////////// + // METHODS, MESSAGE CREATION + ///////////////////////////////////////////////// + + /** + * Creates recipient headers. + * @access public + * @return string + */ + public function AddrAppend($type, $addr) { + $addr_str = $type . ': '; + $addresses = array(); + foreach ($addr as $a) { + $addresses[] = $this->AddrFormat($a); + } + $addr_str .= implode(', ', $addresses); + $addr_str .= $this->LE; + + return $addr_str; + } + + /** + * Formats an address correctly. + * @access public + * @return string + */ + public function AddrFormat($addr) { + if (empty($addr[1])) { + return $this->SecureHeader($addr[0]); + } else { + return $this->EncodeHeader($this->SecureHeader($addr[1]), 'phrase') . " <" . $this->SecureHeader($addr[0]) . ">"; + } + } + + /** + * Wraps message for use with mailers that do not + * automatically perform wrapping and for quoted-printable. + * Original written by philippe. + * @param string $message The message to wrap + * @param integer $length The line length to wrap to + * @param boolean $qp_mode Whether to run in Quoted-Printable mode + * @access public + * @return string + */ + public function WrapText($message, $length, $qp_mode = false) { + $soft_break = ($qp_mode) ? sprintf(" =%s", $this->LE) : $this->LE; + // If utf-8 encoding is used, we will need to make sure we don't + // split multibyte characters when we wrap + $is_utf8 = (strtolower($this->CharSet) == "utf-8"); + + $message = $this->FixEOL($message); + if (substr($message, -1) == $this->LE) { + $message = substr($message, 0, -1); + } + + $line = explode($this->LE, $message); + $message = ''; + for ($i=0 ;$i < count($line); $i++) { + $line_part = explode(' ', $line[$i]); + $buf = ''; + for ($e = 0; $e $length)) { + $space_left = $length - strlen($buf) - 1; + if ($e != 0) { + if ($space_left > 20) { + $len = $space_left; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + $buf .= ' ' . $part; + $message .= $buf . sprintf("=%s", $this->LE); + } else { + $message .= $buf . $soft_break; + } + $buf = ''; + } + while (strlen($word) > 0) { + $len = $length; + if ($is_utf8) { + $len = $this->UTF8CharBoundary($word, $len); + } elseif (substr($word, $len - 1, 1) == "=") { + $len--; + } elseif (substr($word, $len - 2, 1) == "=") { + $len -= 2; + } + $part = substr($word, 0, $len); + $word = substr($word, $len); + + if (strlen($word) > 0) { + $message .= $part . sprintf("=%s", $this->LE); + } else { + $buf = $part; + } + } + } else { + $buf_o = $buf; + $buf .= ($e == 0) ? $word : (' ' . $word); + + if (strlen($buf) > $length and $buf_o != '') { + $message .= $buf_o . $soft_break; + $buf = $word; + } + } + } + $message .= $buf . $this->LE; + } + + return $message; + } + + /** + * Finds last character boundary prior to maxLength in a utf-8 + * quoted (printable) encoded string. + * Original written by Colin Brown. + * @access public + * @param string $encodedText utf-8 QP text + * @param int $maxLength find last character boundary prior to this length + * @return int + */ + public function UTF8CharBoundary($encodedText, $maxLength) { + $foundSplitPos = false; + $lookBack = 3; + while (!$foundSplitPos) { + $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack); + $encodedCharPos = strpos($lastChunk, "="); + if ($encodedCharPos !== false) { + // Found start of encoded character byte within $lookBack block. + // Check the encoded byte value (the 2 chars after the '=') + $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2); + $dec = hexdec($hex); + if ($dec < 128) { // Single byte character. + // If the encoded char was found at pos 0, it will fit + // otherwise reduce maxLength to start of the encoded char + $maxLength = ($encodedCharPos == 0) ? $maxLength : + $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec >= 192) { // First byte of a multi byte character + // Reduce maxLength to split at start of character + $maxLength = $maxLength - ($lookBack - $encodedCharPos); + $foundSplitPos = true; + } elseif ($dec < 192) { // Middle byte of a multi byte character, look further back + $lookBack += 3; + } + } else { + // No encoded character found + $foundSplitPos = true; + } + } + return $maxLength; + } + + + /** + * Set the body wrapping. + * @access public + * @return void + */ + public function SetWordWrap() { + if($this->WordWrap < 1) { + return; + } + + switch($this->message_type) { + case 'alt': + case 'alt_attachments': + $this->AltBody = $this->WrapText($this->AltBody, $this->WordWrap); + break; + default: + $this->Body = $this->WrapText($this->Body, $this->WordWrap); + break; + } + } + + /** + * Assembles message header. + * @access public + * @return string The assembled header + */ + public function CreateHeader() { + $result = ''; + + // Set the boundaries + $uniq_id = md5(uniqid(time())); + $this->boundary[1] = 'b1_' . $uniq_id; + $this->boundary[2] = 'b2_' . $uniq_id; + + $result .= $this->HeaderLine('Date', self::RFCDate()); + if($this->Sender == '') { + $result .= $this->HeaderLine('Return-Path', trim($this->From)); + } else { + $result .= $this->HeaderLine('Return-Path', trim($this->Sender)); + } + + // To be created automatically by mail() + if($this->Mailer != 'mail') { + if ($this->SingleTo === true) { + foreach($this->to as $t) { + $this->SingleToArray[] = $this->AddrFormat($t); + } + } else { + if(count($this->to) > 0) { + $result .= $this->AddrAppend('To', $this->to); + } elseif (count($this->cc) == 0) { + $result .= $this->HeaderLine('To', 'undisclosed-recipients:;'); + } + } + } + + $from = array(); + $from[0][0] = trim($this->From); + $from[0][1] = $this->FromName; + $result .= $this->AddrAppend('From', $from); + + // sendmail and mail() extract Cc from the header before sending + if(count($this->cc) > 0) { + $result .= $this->AddrAppend('Cc', $this->cc); + } + + // sendmail and mail() extract Bcc from the header before sending + if((($this->Mailer == 'sendmail') || ($this->Mailer == 'mail')) && (count($this->bcc) > 0)) { + $result .= $this->AddrAppend('Bcc', $this->bcc); + } + + if(count($this->ReplyTo) > 0) { + $result .= $this->AddrAppend('Reply-to', $this->ReplyTo); + } + + // mail() sets the subject itself + if($this->Mailer != 'mail') { + $result .= $this->HeaderLine('Subject', $this->EncodeHeader($this->SecureHeader($this->Subject))); + } + + if($this->MessageID != '') { + $result .= $this->HeaderLine('Message-ID',$this->MessageID); + } + $result .= $this->HeaderLine('X-Priority', $this->Priority); + $result .= $this->HeaderLine('X-Mailer', 'PHPMailer '.$this->Version.' (phpmailer.sourceforge.net)'); + + if($this->ConfirmReadingTo != '') { + $result .= $this->HeaderLine('Disposition-Notification-To', '<' . trim($this->ConfirmReadingTo) . '>'); + } + + // Add custom headers + for($index = 0; $index < count($this->CustomHeader); $index++) { + $result .= $this->HeaderLine(trim($this->CustomHeader[$index][0]), $this->EncodeHeader(trim($this->CustomHeader[$index][1]))); + } + if (!$this->sign_key_file) { + $result .= $this->HeaderLine('MIME-Version', '1.0'); + $result .= $this->GetMailMIME(); + } + + return $result; + } + + /** + * Returns the message MIME. + * @access public + * @return string + */ + public function GetMailMIME() { + $result = ''; + switch($this->message_type) { + case 'plain': + $result .= $this->HeaderLine('Content-Transfer-Encoding', $this->Encoding); + $result .= sprintf("Content-Type: %s; charset=\"%s\"", $this->ContentType, $this->CharSet); + break; + case 'attachments': + case 'alt_attachments': + if($this->InlineImageExists()){ + $result .= sprintf("Content-Type: %s;%s\ttype=\"text/html\";%s\tboundary=\"%s\"%s", 'multipart/related', $this->LE, $this->LE, $this->boundary[1], $this->LE); + } else { + $result .= $this->HeaderLine('Content-Type', 'multipart/mixed;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + } + break; + case 'alt': + $result .= $this->HeaderLine('Content-Type', 'multipart/alternative;'); + $result .= $this->TextLine("\tboundary=\"" . $this->boundary[1] . '"'); + break; + } + + if($this->Mailer != 'mail') { + $result .= $this->LE.$this->LE; + } + + return $result; + } + + /** + * Assembles the message body. Returns an empty string on failure. + * @access public + * @return string The assembled message body + */ + public function CreateBody() { + $body = ''; + + if ($this->sign_key_file) { + $body .= $this->GetMailMIME(); + } + + $this->SetWordWrap(); + + switch($this->message_type) { + case 'alt': + $body .= $this->GetBoundary($this->boundary[1], '', 'text/plain', ''); + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[1], '', 'text/html', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[1]); + break; + case 'plain': + $body .= $this->EncodeString($this->Body, $this->Encoding); + break; + case 'attachments': + $body .= $this->GetBoundary($this->boundary[1], '', '', ''); + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE; + $body .= $this->AttachAll(); + break; + case 'alt_attachments': + $body .= sprintf("--%s%s", $this->boundary[1], $this->LE); + $body .= sprintf("Content-Type: %s;%s" . "\tboundary=\"%s\"%s", 'multipart/alternative', $this->LE, $this->boundary[2], $this->LE.$this->LE); + $body .= $this->GetBoundary($this->boundary[2], '', 'text/plain', '') . $this->LE; // Create text body + $body .= $this->EncodeString($this->AltBody, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->GetBoundary($this->boundary[2], '', 'text/html', '') . $this->LE; // Create the HTML body + $body .= $this->EncodeString($this->Body, $this->Encoding); + $body .= $this->LE.$this->LE; + $body .= $this->EndBoundary($this->boundary[2]); + $body .= $this->AttachAll(); + break; + } + + if ($this->IsError()) { + $body = ''; + } elseif ($this->sign_key_file) { + try { + $file = tempnam('', 'mail'); + file_put_contents($file, $body); //TODO check this worked + $signed = tempnam("", "signed"); + if (@openssl_pkcs7_sign($file, $signed, "file://".$this->sign_cert_file, array("file://".$this->sign_key_file, $this->sign_key_pass), NULL)) { + @unlink($file); + @unlink($signed); + $body = file_get_contents($signed); + } else { + @unlink($file); + @unlink($signed); + throw new phpmailerException($this->Lang("signing").openssl_error_string()); + } + } catch (phpmailerException $e) { + $body = ''; + if ($this->exceptions) { + throw $e; + } + } + } + + return $body; + } + + /** + * Returns the start of a message boundary. + * @access private + */ + private function GetBoundary($boundary, $charSet, $contentType, $encoding) { + $result = ''; + if($charSet == '') { + $charSet = $this->CharSet; + } + if($contentType == '') { + $contentType = $this->ContentType; + } + if($encoding == '') { + $encoding = $this->Encoding; + } + $result .= $this->TextLine('--' . $boundary); + $result .= sprintf("Content-Type: %s; charset = \"%s\"", $contentType, $charSet); + $result .= $this->LE; + $result .= $this->HeaderLine('Content-Transfer-Encoding', $encoding); + $result .= $this->LE; + + return $result; + } + + /** + * Returns the end of a message boundary. + * @access private + */ + private function EndBoundary($boundary) { + return $this->LE . '--' . $boundary . '--' . $this->LE; + } + + /** + * Sets the message type. + * @access private + * @return void + */ + private function SetMessageType() { + if(count($this->attachment) < 1 && strlen($this->AltBody) < 1) { + $this->message_type = 'plain'; + } else { + if(count($this->attachment) > 0) { + $this->message_type = 'attachments'; + } + if(strlen($this->AltBody) > 0 && count($this->attachment) < 1) { + $this->message_type = 'alt'; + } + if(strlen($this->AltBody) > 0 && count($this->attachment) > 0) { + $this->message_type = 'alt_attachments'; + } + } + } + + /** + * Returns a formatted header line. + * @access public + * @return string + */ + public function HeaderLine($name, $value) { + return $name . ': ' . $value . $this->LE; + } + + /** + * Returns a formatted mail line. + * @access public + * @return string + */ + public function TextLine($value) { + return $value . $this->LE; + } + + ///////////////////////////////////////////////// + // CLASS METHODS, ATTACHMENTS + ///////////////////////////////////////////////// + + /** + * Adds an attachment from a path on the filesystem. + * Returns false if the file could not be found + * or accessed. + * @param string $path Path to the attachment. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + try { + if ( !@is_file($path) ) { + throw new phpmailerException($this->Lang('file_access') . $path, self::STOP_CONTINUE); + } + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + + } catch (phpmailerException $e) { + $this->SetError($e->getMessage()); + if ($this->exceptions) { + throw $e; + } + echo $e->getMessage()."\n"; + if ( $e->getCode() == self::STOP_CRITICAL ) { + return false; + } + } + return true; + } + + /** + * Return the current array of attachments + * @return array + */ + public function GetAttachments() { + return $this->attachment; + } + + /** + * Attaches all fs, string, and binary attachments to the message. + * Returns an empty string on failure. + * @access private + * @return string + */ + private function AttachAll() { + // Return text of body + $mime = array(); + $cidUniq = array(); + $incl = array(); + + // Add all attachments + foreach ($this->attachment as $attachment) { + // Check for string attachment + $bString = $attachment[5]; + if ($bString) { + $string = $attachment[0]; + } else { + $path = $attachment[0]; + } + + if (in_array($attachment[0], $incl)) { continue; } + $filename = $attachment[1]; + $name = $attachment[2]; + $encoding = $attachment[3]; + $type = $attachment[4]; + $disposition = $attachment[6]; + $cid = $attachment[7]; + $incl[] = $attachment[0]; + if ( $disposition == 'inline' && isset($cidUniq[$cid]) ) { continue; } + $cidUniq[$cid] = true; + + $mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE); + $mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $this->EncodeHeader($this->SecureHeader($name)), $this->LE); + $mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE); + + if($disposition == 'inline') { + $mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE); + } + + $mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $this->EncodeHeader($this->SecureHeader($name)), $this->LE.$this->LE); + + // Encode as string attachment + if($bString) { + $mime[] = $this->EncodeString($string, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } else { + $mime[] = $this->EncodeFile($path, $encoding); + if($this->IsError()) { + return ''; + } + $mime[] = $this->LE.$this->LE; + } + } + + $mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE); + + return join('', $mime); + } + + /** + * Encodes attachment in requested format. + * Returns an empty string on failure. + * @param string $path The full path to the file + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @see EncodeFile() + * @access private + * @return string + */ + private function EncodeFile($path, $encoding = 'base64') { + try { + if (!is_readable($path)) { + throw new phpmailerException($this->Lang('file_open') . $path, self::STOP_CONTINUE); + } + if (function_exists('get_magic_quotes')) { + function get_magic_quotes() { + return false; + } + } + if (PHP_VERSION < 6) { + $magic_quotes = get_magic_quotes_runtime(); + set_magic_quotes_runtime(0); + } + $file_buffer = file_get_contents($path); + $file_buffer = $this->EncodeString($file_buffer, $encoding); + if (PHP_VERSION < 6) { set_magic_quotes_runtime($magic_quotes); } + return $file_buffer; + } catch (Exception $e) { + $this->SetError($e->getMessage()); + return ''; + } + } + + /** + * Encodes string to requested format. + * Returns an empty string on failure. + * @param string $str The text to encode + * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' + * @access public + * @return string + */ + public function EncodeString ($str, $encoding = 'base64') { + $encoded = ''; + switch(strtolower($encoding)) { + case 'base64': + $encoded = chunk_split(base64_encode($str), 76, $this->LE); + break; + case '7bit': + case '8bit': + $encoded = $this->FixEOL($str); + //Make sure it ends with a line break + if (substr($encoded, -(strlen($this->LE))) != $this->LE) + $encoded .= $this->LE; + break; + case 'binary': + $encoded = $str; + break; + case 'quoted-printable': + $encoded = $this->EncodeQP($str); + break; + default: + $this->SetError($this->Lang('encoding') . $encoding); + break; + } + return $encoded; + } + + /** + * Encode a header string to best (shortest) of Q, B, quoted or none. + * @access public + * @return string + */ + public function EncodeHeader($str, $position = 'text') { + $x = 0; + + switch (strtolower($position)) { + case 'phrase': + if (!preg_match('/[\200-\377]/', $str)) { + // Can't use addslashes as we don't know what value has magic_quotes_sybase + $encoded = addcslashes($str, "\0..\37\177\\\""); + if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { + return ($encoded); + } else { + return ("\"$encoded\""); + } + } + $x = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches); + break; + case 'comment': + $x = preg_match_all('/[()"]/', $str, $matches); + // Fall-through + case 'text': + default: + $x += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches); + break; + } + + if ($x == 0) { + return ($str); + } + + $maxlen = 75 - 7 - strlen($this->CharSet); + // Try to select the encoding which should produce the shortest output + if (strlen($str)/3 < $x) { + $encoding = 'B'; + if (function_exists('mb_strlen') && $this->HasMultiBytes($str)) { + // Use a custom function which correctly encodes and wraps long + // multibyte strings without breaking lines within a character + $encoded = $this->Base64EncodeWrapMB($str); + } else { + $encoded = base64_encode($str); + $maxlen -= $maxlen % 4; + $encoded = trim(chunk_split($encoded, $maxlen, "\n")); + } + } else { + $encoding = 'Q'; + $encoded = $this->EncodeQ($str, $position); + $encoded = $this->WrapText($encoded, $maxlen, true); + $encoded = str_replace('='.$this->LE, "\n", trim($encoded)); + } + + $encoded = preg_replace('/^(.*)$/m', " =?".$this->CharSet."?$encoding?\\1?=", $encoded); + $encoded = trim(str_replace("\n", $this->LE, $encoded)); + + return $encoded; + } + + /** + * Checks if a string contains multibyte characters. + * @access public + * @param string $str multi-byte text to wrap encode + * @return bool + */ + public function HasMultiBytes($str) { + if (function_exists('mb_strlen')) { + return (strlen($str) > mb_strlen($str, $this->CharSet)); + } else { // Assume no multibytes (we can't handle without mbstring functions anyway) + return false; + } + } + + /** + * Correctly encodes and wraps long multibyte strings for mail headers + * without breaking lines within a character. + * Adapted from a function by paravoid at http://uk.php.net/manual/en/function.mb-encode-mimeheader.php + * @access public + * @param string $str multi-byte text to wrap encode + * @return string + */ + public function Base64EncodeWrapMB($str) { + $start = "=?".$this->CharSet."?B?"; + $end = "?="; + $encoded = ""; + + $mb_length = mb_strlen($str, $this->CharSet); + // Each line must have length <= 75, including $start and $end + $length = 75 - strlen($start) - strlen($end); + // Average multi-byte ratio + $ratio = $mb_length / strlen($str); + // Base64 has a 4:3 ratio + $offset = $avgLength = floor($length * $ratio * .75); + + for ($i = 0; $i < $mb_length; $i += $offset) { + $lookBack = 0; + + do { + $offset = $avgLength - $lookBack; + $chunk = mb_substr($str, $i, $offset, $this->CharSet); + $chunk = base64_encode($chunk); + $lookBack++; + } + while (strlen($chunk) > $length); + + $encoded .= $chunk . $this->LE; + } + + // Chomp the last linefeed + $encoded = substr($encoded, 0, -strlen($this->LE)); + return $encoded; + } + + /** + * Encode string to quoted-printable. + * Only uses standard PHP, slow, but will always work + * @access public + * @param string $string the text to encode + * @param integer $line_max Number of chars allowed on a line before wrapping + * @return string + */ + public function EncodeQPphp( $input = '', $line_max = 76, $space_conv = false) { + $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); + $lines = preg_split('/(?:\r\n|\r|\n)/', $input); + $eol = "\r\n"; + $escape = '='; + $output = ''; + while( list(, $line) = each($lines) ) { + $linlen = strlen($line); + $newline = ''; + for($i = 0; $i < $linlen; $i++) { + $c = substr( $line, $i, 1 ); + $dec = ord( $c ); + if ( ( $i == 0 ) && ( $dec == 46 ) ) { // convert first point in the line into =2E + $c = '=2E'; + } + if ( $dec == 32 ) { + if ( $i == ( $linlen - 1 ) ) { // convert space at eol only + $c = '=20'; + } else if ( $space_conv ) { + $c = '=20'; + } + } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required + $h2 = floor($dec/16); + $h1 = floor($dec%16); + $c = $escape.$hex[$h2].$hex[$h1]; + } + if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted + $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay + $newline = ''; + // check if newline first character will be point or not + if ( $dec == 46 ) { + $c = '=2E'; + } + } + $newline .= $c; + } // end of for + $output .= $newline.$eol; + } // end of while + return $output; + } + + /** + * Encode string to RFC2045 (6.7) quoted-printable format + * Uses a PHP5 stream filter to do the encoding about 64x faster than the old version + * Also results in same content as you started with after decoding + * @see EncodeQPphp() + * @access public + * @param string $string the text to encode + * @param integer $line_max Number of chars allowed on a line before wrapping + * @param boolean $space_conv Dummy param for compatibility with existing EncodeQP function + * @return string + * @author Marcus Bointon + */ + public function EncodeQP($string, $line_max = 76, $space_conv = false) { + if (function_exists('quoted_printable_encode')) { //Use native function if it's available (>= PHP5.3) + return quoted_printable_encode($string); + } + $filters = stream_get_filters(); + if (!in_array('convert.*', $filters)) { //Got convert stream filter? + return $this->EncodeQPphp($string, $line_max, $space_conv); //Fall back to old implementation + } + $fp = fopen('php://temp/', 'r+'); + $string = preg_replace('/\r\n?/', $this->LE, $string); //Normalise line breaks + $params = array('line-length' => $line_max, 'line-break-chars' => $this->LE); + $s = stream_filter_append($fp, 'convert.quoted-printable-encode', STREAM_FILTER_READ, $params); + fputs($fp, $string); + rewind($fp); + $out = stream_get_contents($fp); + stream_filter_remove($s); + $out = preg_replace('/^\./m', '=2E', $out); //Encode . if it is first char on a line, workaround for bug in Exchange + fclose($fp); + return $out; + } + + /** + * NOTE: Phabricator patch to remove use of "/e". See D2147. + */ + private function encodeQCallback(array $matches) { + return '='.sprintf('%02X', ord($matches[1])); + } + + /** + * Encode string to q encoding. + * @link http://tools.ietf.org/html/rfc2047 + * @param string $str the text to encode + * @param string $position Where the text is going to be used, see the RFC for what that means + * @access public + * @return string + */ + public function EncodeQ ($str, $position = 'text') { + + // NOTE: Phabricator patch to remove use of "/e". See D2147. + + // There should not be any EOL in the string + $encoded = preg_replace('/[\r\n]*/', '', $str); + + switch (strtolower($position)) { + case 'phrase': + $encoded = preg_replace_callback( + "/([^A-Za-z0-9!*+\/ -])/", + array($this, 'encodeQCallback'), + $encoded); + break; + case 'comment': + $encoded = preg_replace_callback( + "/([\(\)\"])/", + array($this, 'encodeQCallback'), + $encoded); + break; + case 'text': + default: + // Replace every high ascii, control =, ? and _ characters + $encoded = preg_replace_callback( + '/([\000-\011\013\014\016-\037\075\077\137\177-\377])/', + array($this, 'encodeQCallback'), + $encoded); + break; + } + + // Replace every spaces to _ (more readable than =20) + $encoded = str_replace(' ', '_', $encoded); + + return $encoded; + } + + /** + * Adds a string or binary attachment (non-filesystem) to the list. + * This method can be used to attach ascii or binary data, + * such as a BLOB record from a database. + * @param string $string String attachment data. + * @param string $filename Name of the attachment. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return void + */ + public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream') { + // Append to $attachment array + $this->attachment[] = array( + 0 => $string, + 1 => $filename, + 2 => basename($filename), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => 'attachment', + 7 => 0 + ); + } + + /** + * Adds an embedded attachment. This can include images, sounds, and + * just about any other document. Make sure to set the $type to an + * image type. For JPEG images use "image/jpeg" and for GIF images + * use "image/gif". + * @param string $path Path to the attachment. + * @param string $cid Content ID of the attachment. Use this to identify + * the Id for accessing the image in an HTML form. + * @param string $name Overrides the attachment name. + * @param string $encoding File encoding (see $Encoding). + * @param string $type File extension (MIME) type. + * @return bool + */ + public function AddEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = 'application/octet-stream') { + + if ( !@is_file($path) ) { + $this->SetError($this->Lang('file_access') . $path); + return false; + } + + $filename = basename($path); + if ( $name == '' ) { + $name = $filename; + } + + // Append to $attachment array + $this->attachment[] = array( + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => 'inline', + 7 => $cid + ); + + return true; + } + + /** + * Returns true if an inline attachment is present. + * @access public + * @return bool + */ + public function InlineImageExists() { + foreach($this->attachment as $attachment) { + if ($attachment[6] == 'inline') { + return true; + } + } + return false; + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MESSAGE RESET + ///////////////////////////////////////////////// + + /** + * Clears all recipients assigned in the TO array. Returns void. + * @return void + */ + public function ClearAddresses() { + foreach($this->to as $to) { + unset($this->all_recipients[strtolower($to[0])]); + } + $this->to = array(); + } + + /** + * Clears all recipients assigned in the CC array. Returns void. + * @return void + */ + public function ClearCCs() { + foreach($this->cc as $cc) { + unset($this->all_recipients[strtolower($cc[0])]); + } + $this->cc = array(); + } + + /** + * Clears all recipients assigned in the BCC array. Returns void. + * @return void + */ + public function ClearBCCs() { + foreach($this->bcc as $bcc) { + unset($this->all_recipients[strtolower($bcc[0])]); + } + $this->bcc = array(); + } + + /** + * Clears all recipients assigned in the ReplyTo array. Returns void. + * @return void + */ + public function ClearReplyTos() { + $this->ReplyTo = array(); + } + + /** + * Clears all recipients assigned in the TO, CC and BCC + * array. Returns void. + * @return void + */ + public function ClearAllRecipients() { + $this->to = array(); + $this->cc = array(); + $this->bcc = array(); + $this->all_recipients = array(); + } + + /** + * Clears all previously set filesystem, string, and binary + * attachments. Returns void. + * @return void + */ + public function ClearAttachments() { + $this->attachment = array(); + } + + /** + * Clears all custom headers. Returns void. + * @return void + */ + public function ClearCustomHeaders() { + $this->CustomHeader = array(); + } + + ///////////////////////////////////////////////// + // CLASS METHODS, MISCELLANEOUS + ///////////////////////////////////////////////// + + /** + * Adds the error message to the error container. + * @access protected + * @return void + */ + protected function SetError($msg) { + $this->error_count++; + if ($this->Mailer == 'smtp' and !is_null($this->smtp)) { + $lasterror = $this->smtp->getError(); + if (!empty($lasterror) and array_key_exists('smtp_msg', $lasterror)) { + $msg .= '

' . $this->Lang('smtp_error') . $lasterror['smtp_msg'] . "

\n"; + } + } + $this->ErrorInfo = $msg; + } + + /** + * Returns the proper RFC 822 formatted date. + * @access public + * @return string + * @static + */ + public static function RFCDate() { + $tz = date('Z'); + $tzs = ($tz < 0) ? '-' : '+'; + $tz = abs($tz); + $tz = (int)($tz/3600)*100 + ($tz%3600)/60; + $result = sprintf("%s %s%04d", date('D, j M Y H:i:s'), $tzs, $tz); + + return $result; + } + + /** + * Returns the server hostname or 'localhost.localdomain' if unknown. + * @access private + * @return string + */ + private function ServerHostname() { + if (!empty($this->Hostname)) { + $result = $this->Hostname; + } elseif (isset($_SERVER['SERVER_NAME'])) { + $result = $_SERVER['SERVER_NAME']; + } else { + $result = 'localhost.localdomain'; + } + + return $result; + } + + /** + * Returns a message in the appropriate language. + * @access private + * @return string + */ + private function Lang($key) { + if(count($this->language) < 1) { + $this->SetLanguage('en'); // set the default language + } + + if(isset($this->language[$key])) { + return $this->language[$key]; + } else { + return 'Language string failed to load: ' . $key; + } + } + + /** + * Returns true if an error occurred. + * @access public + * @return bool + */ + public function IsError() { + return ($this->error_count > 0); + } + + /** + * Changes every end of line from CR or LF to CRLF. + * @access private + * @return string + */ + private function FixEOL($str) { + $str = str_replace("\r\n", "\n", $str); + $str = str_replace("\r", "\n", $str); + $str = str_replace("\n", $this->LE, $str); + return $str; + } + + /** + * Adds a custom header. + * @access public + * @return void + */ + public function AddCustomHeader($custom_header) { + $this->CustomHeader[] = explode(':', $custom_header, 2); + } + + /** + * Evaluates the message and returns modifications for inline images and backgrounds + * @access public + * @return $message + */ + public function MsgHTML($message, $basedir = '') { + preg_match_all("/(src|background)=\"(.*)\"/Ui", $message, $images); + if(isset($images[2])) { + foreach($images[2] as $i => $url) { + // do not change urls for absolute images (thanks to corvuscorax) + if (!preg_match('#^[A-z]+://#',$url)) { + $filename = basename($url); + $directory = dirname($url); + ($directory == '.')?$directory='':''; + $cid = 'cid:' . md5($filename); + $ext = pathinfo($filename, PATHINFO_EXTENSION); + $mimeType = self::_mime_types($ext); + if ( strlen($basedir) > 1 && substr($basedir,-1) != '/') { $basedir .= '/'; } + if ( strlen($directory) > 1 && substr($directory,-1) != '/') { $directory .= '/'; } + if ( $this->AddEmbeddedImage($basedir.$directory.$filename, md5($filename), $filename, 'base64',$mimeType) ) { + $message = preg_replace("/".$images[1][$i]."=\"".preg_quote($url, '/')."\"/Ui", $images[1][$i]."=\"".$cid."\"", $message); + } + } + } + } + $this->IsHTML(true); + $this->Body = $message; + $textMsg = trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/s','',$message))); + if (!empty($textMsg) && empty($this->AltBody)) { + $this->AltBody = html_entity_decode($textMsg); + } + if (empty($this->AltBody)) { + $this->AltBody = 'To view this email message, open it in a program that understands HTML!' . "\n\n"; + } + } + + /** + * Gets the MIME type of the embedded or inline image + * @param string File extension + * @access public + * @return string MIME type of ext + * @static + */ + public static function _mime_types($ext = '') { + $mimes = array( + 'hqx' => 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'doc' => 'application/msword', + 'bin' => 'application/macbinary', + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => 'application/octet-stream', + 'class' => 'application/octet-stream', + 'psd' => 'application/octet-stream', + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => 'application/pdf', + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'wbxml' => 'application/vnd.wap.wbxml', + 'wmlc' => 'application/vnd.wap.wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'php' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => 'application/x-tar', + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => 'application/zip', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => 'audio/mpeg', + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => 'audio/x-wav', + 'bmp' => 'image/bmp', + 'gif' => 'image/gif', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'jpe' => 'image/jpeg', + 'png' => 'image/png', + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => 'text/plain', + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'doc' => 'application/msword', + 'word' => 'application/msword', + 'xl' => 'application/excel', + 'eml' => 'message/rfc822' + ); + return (!isset($mimes[strtolower($ext)])) ? 'application/octet-stream' : $mimes[strtolower($ext)]; + } + + /** + * Set (or reset) Class Objects (variables) + * + * Usage Example: + * $page->set('X-Priority', '3'); + * + * @access public + * @param string $name Parameter Name + * @param mixed $value Parameter Value + * NOTE: will not work with arrays, there are no arrays to set/reset + * @todo Should this not be using __set() magic function? + */ + public function set($name, $value = '') { + try { + if (isset($this->$name) ) { + $this->$name = $value; + } else { + throw new phpmailerException($this->Lang('variable_set') . $name, self::STOP_CRITICAL); + } + } catch (Exception $e) { + $this->SetError($e->getMessage()); + if ($e->getCode() == self::STOP_CRITICAL) { + return false; + } + } + return true; + } + + /** + * Strips newlines to prevent header injection. + * @access public + * @param string $str String + * @return string + */ + public function SecureHeader($str) { + $str = str_replace("\r", '', $str); + $str = str_replace("\n", '', $str); + return trim($str); + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param string $key_filename Parameter File Name + * @param string $key_pass Password for private key + */ + public function Sign($cert_filename, $key_filename, $key_pass) { + $this->sign_cert_file = $cert_filename; + $this->sign_key_file = $key_filename; + $this->sign_key_pass = $key_pass; + } + + /** + * Set the private key file and password to sign the message. + * + * @access public + * @param string $key_filename Parameter File Name + * @param string $key_pass Password for private key + */ + public function DKIM_QP($txt) { + $tmp=""; + $line=""; + for ($i=0;$iDKIM_private); + if ($this->DKIM_passphrase!='') { + $privKey = openssl_pkey_get_private($privKeyStr,$this->DKIM_passphrase); + } else { + $privKey = $privKeyStr; + } + if (openssl_sign($s, $signature, $privKey)) { + return base64_encode($signature); + } + } + + /** + * Generate DKIM Canonicalization Header + * + * @access public + * @param string $s Header + */ + public function DKIM_HeaderC($s) { + $s=preg_replace("/\r\n\s+/"," ",$s); + $lines=explode("\r\n",$s); + foreach ($lines as $key=>$line) { + list($heading,$value)=explode(":",$line,2); + $heading=strtolower($heading); + $value=preg_replace("/\s+/"," ",$value) ; // Compress useless spaces + $lines[$key]=$heading.":".trim($value) ; // Don't forget to remove WSP around the value + } + $s=implode("\r\n",$lines); + return $s; + } + + /** + * Generate DKIM Canonicalization Body + * + * @access public + * @param string $body Message Body + */ + public function DKIM_BodyC($body) { + if ($body == '') return "\r\n"; + // stabilize line endings + $body=str_replace("\r\n","\n",$body); + $body=str_replace("\n","\r\n",$body); + // END stabilize line endings + while (substr($body,strlen($body)-4,4) == "\r\n\r\n") { + $body=substr($body,0,strlen($body)-2); + } + return $body; + } + + /** + * Create the DKIM header, body, as new header + * + * @access public + * @param string $headers_line Header lines + * @param string $subject Subject + * @param string $body Body + */ + public function DKIM_Add($headers_line,$subject,$body) { + $DKIMsignatureType = 'rsa-sha1'; // Signature & hash algorithms + $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body + $DKIMquery = 'dns/txt'; // Query method + $DKIMtime = time() ; // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone) + $subject_header = "Subject: $subject"; + $headers = explode("\r\n",$headers_line); + foreach($headers as $header) { + if (strpos($header,'From:') === 0) { + $from_header=$header; + } elseif (strpos($header,'To:') === 0) { + $to_header=$header; + } + } + $from = str_replace('|','=7C',$this->DKIM_QP($from_header)); + $to = str_replace('|','=7C',$this->DKIM_QP($to_header)); + $subject = str_replace('|','=7C',$this->DKIM_QP($subject_header)) ; // Copied header fields (dkim-quoted-printable + $body = $this->DKIM_BodyC($body); + $DKIMlen = strlen($body) ; // Length of body + $DKIMb64 = base64_encode(pack("H*", sha1($body))) ; // Base64 of packed binary SHA-1 hash of body + $ident = ($this->DKIM_identity == '')? '' : " i=" . $this->DKIM_identity . ";"; + $dkimhdrs = "DKIM-Signature: v=1; a=" . $DKIMsignatureType . "; q=" . $DKIMquery . "; l=" . $DKIMlen . "; s=" . $this->DKIM_selector . ";\r\n". + "\tt=" . $DKIMtime . "; c=" . $DKIMcanonicalization . ";\r\n". + "\th=From:To:Subject;\r\n". + "\td=" . $this->DKIM_domain . ";" . $ident . "\r\n". + "\tz=$from\r\n". + "\t|$to\r\n". + "\t|$subject;\r\n". + "\tbh=" . $DKIMb64 . ";\r\n". + "\tb="; + $toSign = $this->DKIM_HeaderC($from_header . "\r\n" . $to_header . "\r\n" . $subject_header . "\r\n" . $dkimhdrs); + $signed = $this->DKIM_Sign($toSign); + return "X-PHPMAILER-DKIM: phpmailer.worxware.com\r\n".$dkimhdrs.$signed."\r\n"; + } + + protected function doCallback($isSent,$to,$cc,$bcc,$subject,$body) { + if (!empty($this->action_function) && function_exists($this->action_function)) { + $params = array($isSent,$to,$cc,$bcc,$subject,$body); + call_user_func_array($this->action_function,$params); + } + } +} + +class phpmailerException extends Exception { + public function errorMessage() { + $errorMsg = '' . $this->getMessage() . "
\n"; + return $errorMsg; + } +} +?> diff --git a/externals/phpmailer/class.pop3.php b/externals/phpmailer/class.pop3.php new file mode 100644 index 0000000000..f9fd3b2edb --- /dev/null +++ b/externals/phpmailer/class.pop3.php @@ -0,0 +1,407 @@ +pop_conn = 0; + $this->connected = false; + $this->error = null; + } + + /** + * Combination of public events - connect, login, disconnect + * @access public + * @param string $host + * @param integer $port + * @param integer $tval + * @param string $username + * @param string $password + */ + public function Authorise ($host, $port = false, $tval = false, $username, $password, $debug_level = 0) { + $this->host = $host; + + // If no port value is passed, retrieve it + if ($port == false) { + $this->port = $this->POP3_PORT; + } else { + $this->port = $port; + } + + // If no port value is passed, retrieve it + if ($tval == false) { + $this->tval = $this->POP3_TIMEOUT; + } else { + $this->tval = $tval; + } + + $this->do_debug = $debug_level; + $this->username = $username; + $this->password = $password; + + // Refresh the error log + $this->error = null; + + // Connect + $result = $this->Connect($this->host, $this->port, $this->tval); + + if ($result) { + $login_result = $this->Login($this->username, $this->password); + + if ($login_result) { + $this->Disconnect(); + + return true; + } + + } + + // We need to disconnect regardless if the login succeeded + $this->Disconnect(); + + return false; + } + + /** + * Connect to the POP3 server + * @access public + * @param string $host + * @param integer $port + * @param integer $tval + * @return boolean + */ + public function Connect ($host, $port = false, $tval = 30) { + // Are we already connected? + if ($this->connected) { + return true; + } + + /* + On Windows this will raise a PHP Warning error if the hostname doesn't exist. + Rather than supress it with @fsockopen, let's capture it cleanly instead + */ + + set_error_handler(array(&$this, 'catchWarning')); + + // Connect to the POP3 server + $this->pop_conn = fsockopen($host, // POP3 Host + $port, // Port # + $errno, // Error Number + $errstr, // Error Message + $tval); // Timeout (seconds) + + // Restore the error handler + restore_error_handler(); + + // Does the Error Log now contain anything? + if ($this->error && $this->do_debug >= 1) { + $this->displayErrors(); + } + + // Did we connect? + if ($this->pop_conn == false) { + // It would appear not... + $this->error = array( + 'error' => "Failed to connect to server $host on port $port", + 'errno' => $errno, + 'errstr' => $errstr + ); + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + + return false; + } + + // Increase the stream time-out + + // Check for PHP 4.3.0 or later + if (version_compare(phpversion(), '5.0.0', 'ge')) { + stream_set_timeout($this->pop_conn, $tval, 0); + } else { + // Does not work on Windows + if (substr(PHP_OS, 0, 3) !== 'WIN') { + socket_set_timeout($this->pop_conn, $tval, 0); + } + } + + // Get the POP3 server response + $pop3_response = $this->getResponse(); + + // Check for the +OK + if ($this->checkResponse($pop3_response)) { + // The connection is established and the POP3 server is talking + $this->connected = true; + return true; + } + + } + + /** + * Login to the POP3 server (does not support APOP yet) + * @access public + * @param string $username + * @param string $password + * @return boolean + */ + public function Login ($username = '', $password = '') { + if ($this->connected == false) { + $this->error = 'Not connected to POP3 server'; + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + } + + if (empty($username)) { + $username = $this->username; + } + + if (empty($password)) { + $password = $this->password; + } + + $pop_username = "USER $username" . $this->CRLF; + $pop_password = "PASS $password" . $this->CRLF; + + // Send the Username + $this->sendString($pop_username); + $pop3_response = $this->getResponse(); + + if ($this->checkResponse($pop3_response)) { + // Send the Password + $this->sendString($pop_password); + $pop3_response = $this->getResponse(); + + if ($this->checkResponse($pop3_response)) { + return true; + } else { + return false; + } + } else { + return false; + } + } + + /** + * Disconnect from the POP3 server + * @access public + */ + public function Disconnect () { + $this->sendString('QUIT'); + + fclose($this->pop_conn); + } + + ///////////////////////////////////////////////// + // Private Methods + ///////////////////////////////////////////////// + + /** + * Get the socket response back. + * $size is the maximum number of bytes to retrieve + * @access private + * @param integer $size + * @return string + */ + private function getResponse ($size = 128) { + $pop3_response = fgets($this->pop_conn, $size); + + return $pop3_response; + } + + /** + * Send a string down the open socket connection to the POP3 server + * @access private + * @param string $string + * @return integer + */ + private function sendString ($string) { + $bytes_sent = fwrite($this->pop_conn, $string, strlen($string)); + + return $bytes_sent; + } + + /** + * Checks the POP3 server response for +OK or -ERR + * @access private + * @param string $string + * @return boolean + */ + private function checkResponse ($string) { + if (substr($string, 0, 3) !== '+OK') { + $this->error = array( + 'error' => "Server reported an error: $string", + 'errno' => 0, + 'errstr' => '' + ); + + if ($this->do_debug >= 1) { + $this->displayErrors(); + } + + return false; + } else { + return true; + } + + } + + /** + * If debug is enabled, display the error message array + * @access private + */ + private function displayErrors () { + echo '
';
+
+    foreach ($this->error as $single_error) {
+      print_r($single_error);
+    }
+
+    echo '
'; + } + + /** + * Takes over from PHP for the socket warning handler + * @access private + * @param integer $errno + * @param string $errstr + * @param string $errfile + * @param integer $errline + */ + private function catchWarning ($errno, $errstr, $errfile, $errline) { + $this->error[] = array( + 'error' => "Connecting to the POP3 server raised a PHP warning: ", + 'errno' => $errno, + 'errstr' => $errstr + ); + } + + // End of class +} +?> \ No newline at end of file diff --git a/externals/phpmailer/class.smtp.php b/externals/phpmailer/class.smtp.php new file mode 100644 index 0000000000..c2ca1cb3b8 --- /dev/null +++ b/externals/phpmailer/class.smtp.php @@ -0,0 +1,814 @@ +smtp_conn = 0; + $this->error = null; + $this->helo_rply = null; + + $this->do_debug = 0; + } + + ///////////////////////////////////////////////// + // CONNECTION FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Connect to the server specified on the port specified. + * If the port is not specified use the default SMTP_PORT. + * If tval is specified then a connection will try and be + * established with the server for that number of seconds. + * If tval is not specified the default is 30 seconds to + * try on the connection. + * + * SMTP CODE SUCCESS: 220 + * SMTP CODE FAILURE: 421 + * @access public + * @return bool + */ + public function Connect($host, $port = 0, $tval = 30) { + // set the error val to null so there is no confusion + $this->error = null; + + // make sure we are __not__ connected + if($this->connected()) { + // already connected, generate error + $this->error = array("error" => "Already connected to a server"); + return false; + } + + if(empty($port)) { + $port = $this->SMTP_PORT; + } + + // connect to the smtp server + $this->smtp_conn = @fsockopen($host, // the host of the server + $port, // the port to use + $errno, // error number if any + $errstr, // error message if any + $tval); // give up after ? secs + // verify we connected properly + if(empty($this->smtp_conn)) { + $this->error = array("error" => "Failed to connect to server", + "errno" => $errno, + "errstr" => $errstr); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF . '
'; + } + return false; + } + + // SMTP server can take longer to respond, give longer timeout for first read + // Windows does not have support for this timeout function + if(substr(PHP_OS, 0, 3) != "WIN") + socket_set_timeout($this->smtp_conn, $tval, 0); + + // get any announcement + $announce = $this->get_lines(); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $announce . $this->CRLF . '
'; + } + + return true; + } + + /** + * Initiate a TLS communication with the server. + * + * SMTP CODE 220 Ready to start TLS + * SMTP CODE 501 Syntax error (no parameters allowed) + * SMTP CODE 454 TLS not available due to temporary reason + * @access public + * @return bool success + */ + public function StartTLS() { + $this->error = null; # to avoid confusion + + if(!$this->connected()) { + $this->error = array("error" => "Called StartTLS() without being connected"); + return false; + } + + fputs($this->smtp_conn,"STARTTLS" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 220) { + $this->error = + array("error" => "STARTTLS not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + // Begin encrypted connection + if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) { + return false; + } + + return true; + } + + /** + * Performs SMTP authentication. Must be run after running the + * Hello() method. Returns true if successfully authenticated. + * @access public + * @return bool + */ + public function Authenticate($username, $password) { + // Start authentication + fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "AUTH not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + // Send encoded username + fputs($this->smtp_conn, base64_encode($username) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 334) { + $this->error = + array("error" => "Username not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + // Send encoded password + fputs($this->smtp_conn, base64_encode($password) . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($code != 235) { + $this->error = + array("error" => "Password not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + return true; + } + + /** + * Returns true if connected to a server otherwise false + * @access public + * @return bool + */ + public function Connected() { + if(!empty($this->smtp_conn)) { + $sock_status = socket_get_status($this->smtp_conn); + if($sock_status["eof"]) { + // the socket is valid but we are not connected + if($this->do_debug >= 1) { + echo "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected"; + } + $this->Close(); + return false; + } + return true; // everything looks good + } + return false; + } + + /** + * Closes the socket and cleans up the state of the class. + * It is not considered good to use this function without + * first trying to use QUIT. + * @access public + * @return void + */ + public function Close() { + $this->error = null; // so there is no confusion + $this->helo_rply = null; + if(!empty($this->smtp_conn)) { + // close the connection and cleanup + fclose($this->smtp_conn); + $this->smtp_conn = 0; + } + } + + ///////////////////////////////////////////////// + // SMTP COMMANDS + ///////////////////////////////////////////////// + + /** + * Issues a data command and sends the msg_data to the server + * finializing the mail transaction. $msg_data is the message + * that is to be send with the headers. Each header needs to be + * on a single line followed by a with the message headers + * and the message body being seperated by and additional . + * + * Implements rfc 821: DATA + * + * SMTP CODE INTERMEDIATE: 354 + * [data] + * . + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 552,554,451,452 + * SMTP CODE FAILURE: 451,554 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + public function Data($msg_data) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Data() without being connected"); + return false; + } + + fputs($this->smtp_conn,"DATA" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 354) { + $this->error = + array("error" => "DATA command not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + /* the server is ready to accept data! + * according to rfc 821 we should not send more than 1000 + * including the CRLF + * characters on a single line so we will break the data up + * into lines by \r and/or \n then if needed we will break + * each of those into smaller lines to fit within the limit. + * in addition we will be looking for lines that start with + * a period '.' and append and additional period '.' to that + * line. NOTE: this does not count towards limit. + */ + + // normalize the line breaks so we know the explode works + $msg_data = str_replace("\r\n","\n",$msg_data); + $msg_data = str_replace("\r","\n",$msg_data); + $lines = explode("\n",$msg_data); + + /* we need to find a good way to determine is headers are + * in the msg_data or if it is a straight msg body + * currently I am assuming rfc 822 definitions of msg headers + * and if the first field of the first line (':' sperated) + * does not contain a space then it _should_ be a header + * and we can process all lines before a blank "" line as + * headers. + */ + + $field = substr($lines[0],0,strpos($lines[0],":")); + $in_headers = false; + if(!empty($field) && !strstr($field," ")) { + $in_headers = true; + } + + $max_line_length = 998; // used below; set here for ease in change + + while(list(,$line) = @each($lines)) { + $lines_out = null; + if($line == "" && $in_headers) { + $in_headers = false; + } + // ok we need to break this line up into several smaller lines + while(strlen($line) > $max_line_length) { + $pos = strrpos(substr($line,0,$max_line_length)," "); + + // Patch to fix DOS attack + if(!$pos) { + $pos = $max_line_length - 1; + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos); + } else { + $lines_out[] = substr($line,0,$pos); + $line = substr($line,$pos + 1); + } + + /* if processing headers add a LWSP-char to the front of new line + * rfc 822 on long msg headers + */ + if($in_headers) { + $line = "\t" . $line; + } + } + $lines_out[] = $line; + + // send the lines to the server + while(list(,$line_out) = @each($lines_out)) { + if(strlen($line_out) > 0) + { + if(substr($line_out, 0, 1) == ".") { + $line_out = "." . $line_out; + } + } + fputs($this->smtp_conn,$line_out . $this->CRLF); + } + } + + // message data has been sent + fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 250) { + $this->error = + array("error" => "DATA not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + return true; + } + + /** + * Sends the HELO command to the smtp server. + * This makes sure that we and the server are in + * the same known state. + * + * Implements from rfc 821: HELO + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500, 501, 504, 421 + * @access public + * @return bool + */ + public function Hello($host = '') { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Hello() without being connected"); + return false; + } + + // if hostname for HELO was not specified send default + if(empty($host)) { + // determine appropriate default to send to server + $host = "localhost"; + } + + // Send extended hello first (RFC 2821) + if(!$this->SendHello("EHLO", $host)) { + if(!$this->SendHello("HELO", $host)) { + return false; + } + } + + return true; + } + + /** + * Sends a HELO/EHLO command. + * @access private + * @return bool + */ + private function SendHello($hello, $host) { + fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER: " . $rply . $this->CRLF . '
'; + } + + if($code != 250) { + $this->error = + array("error" => $hello . " not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + $this->helo_rply = $rply; + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. + * + * Implements rfc 821: MAIL FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,421 + * @access public + * @return bool + */ + public function Mail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Mail() without being connected"); + return false; + } + + $useVerp = ($this->do_verp ? "XVERP" : ""); + fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 250) { + $this->error = + array("error" => "MAIL not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + return true; + } + + /** + * Sends the quit command to the server and then closes the socket + * if there is no error or the $close_on_error argument is true. + * + * Implements from rfc 821: QUIT + * + * SMTP CODE SUCCESS: 221 + * SMTP CODE ERROR : 500 + * @access public + * @return bool + */ + public function Quit($close_on_error = true) { + $this->error = null; // so there is no confusion + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Quit() without being connected"); + return false; + } + + // send the quit command to the server + fputs($this->smtp_conn,"quit" . $this->CRLF); + + // get any good-bye messages + $byemsg = $this->get_lines(); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $byemsg . $this->CRLF . '
'; + } + + $rval = true; + $e = null; + + $code = substr($byemsg,0,3); + if($code != 221) { + // use e as a tmp var cause Close will overwrite $this->error + $e = array("error" => "SMTP server rejected quit command", + "smtp_code" => $code, + "smtp_rply" => substr($byemsg,4)); + $rval = false; + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF . '
'; + } + } + + if(empty($e) || $close_on_error) { + $this->Close(); + } + + return $rval; + } + + /** + * Sends the command RCPT to the SMTP server with the TO: argument of $to. + * Returns true if the recipient was accepted false if it was rejected. + * + * Implements from rfc 821: RCPT TO: + * + * SMTP CODE SUCCESS: 250,251 + * SMTP CODE FAILURE: 550,551,552,553,450,451,452 + * SMTP CODE ERROR : 500,501,503,421 + * @access public + * @return bool + */ + public function Recipient($to) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Recipient() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 250 && $code != 251) { + $this->error = + array("error" => "RCPT not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + return true; + } + + /** + * Sends the RSET command to abort and transaction that is + * currently in progress. Returns true if successful false + * otherwise. + * + * Implements rfc 821: RSET + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE ERROR : 500,501,504,421 + * @access public + * @return bool + */ + public function Reset() { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called Reset() without being connected"); + return false; + } + + fputs($this->smtp_conn,"RSET" . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 250) { + $this->error = + array("error" => "RSET failed", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + + return true; + } + + /** + * Starts a mail transaction from the email address specified in + * $from. Returns true if successful or false otherwise. If True + * the mail transaction is started and then one or more Recipient + * commands may be called followed by a Data command. This command + * will send the message to the users terminal if they are logged + * in and send them an email. + * + * Implements rfc 821: SAML FROM: + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE SUCCESS: 552,451,452 + * SMTP CODE SUCCESS: 500,501,502,421 + * @access public + * @return bool + */ + public function SendAndMail($from) { + $this->error = null; // so no confusion is caused + + if(!$this->connected()) { + $this->error = array( + "error" => "Called SendAndMail() without being connected"); + return false; + } + + fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF); + + $rply = $this->get_lines(); + $code = substr($rply,0,3); + + if($this->do_debug >= 2) { + echo "SMTP -> FROM SERVER:" . $rply . $this->CRLF . '
'; + } + + if($code != 250) { + $this->error = + array("error" => "SAML not accepted from server", + "smtp_code" => $code, + "smtp_msg" => substr($rply,4)); + if($this->do_debug >= 1) { + echo "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF . '
'; + } + return false; + } + return true; + } + + /** + * This is an optional command for SMTP that this class does not + * support. This method is here to make the RFC821 Definition + * complete for this class and __may__ be implimented in the future + * + * Implements from rfc 821: TURN + * + * SMTP CODE SUCCESS: 250 + * SMTP CODE FAILURE: 502 + * SMTP CODE ERROR : 500, 503 + * @access public + * @return bool + */ + public function Turn() { + $this->error = array("error" => "This method, TURN, of the SMTP ". + "is not implemented"); + if($this->do_debug >= 1) { + echo "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF . '
'; + } + return false; + } + + /** + * Get the current error + * @access public + * @return array + */ + public function getError() { + return $this->error; + } + + ///////////////////////////////////////////////// + // INTERNAL FUNCTIONS + ///////////////////////////////////////////////// + + /** + * Read in as many lines as possible + * either before eof or socket timeout occurs on the operation. + * With SMTP we can tell if we have more lines to read if the + * 4th character is '-' symbol. If it is a space then we don't + * need to read anything else. + * @access private + * @return string + */ + private function get_lines() { + $data = ""; + while($str = @fgets($this->smtp_conn,515)) { + if($this->do_debug >= 4) { + echo "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF . '
'; + echo "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF . '
'; + } + $data .= $str; + if($this->do_debug >= 4) { + echo "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF . '
'; + } + // if 4th character is a space, we are done reading, break the loop + if(substr($str,3,1) == " ") { break; } + } + return $data; + } + +} + +?> \ No newline at end of file diff --git a/externals/phpqrcode/LICENSE b/externals/phpqrcode/LICENSE new file mode 100644 index 0000000000..1883303261 --- /dev/null +++ b/externals/phpqrcode/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/externals/phpqrcode/README b/externals/phpqrcode/README new file mode 100644 index 0000000000..a022fb5e72 --- /dev/null +++ b/externals/phpqrcode/README @@ -0,0 +1,45 @@ +This is PHP implementation of QR Code 2-D barcode generator. It is pure-php +LGPL-licensed implementation based on C libqrencode by Kentaro Fukuchi. + +== LICENSING == + +Copyright (C) 2010 by Dominik Dzienia + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 3 of the License, or any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. See the GNU Lesser General Public License (LICENSE file) +for more details. + +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +== INSTALATION AND USAGE == + + * INSTALL file + * http://sourceforge.net/apps/mediawiki/phpqrcode/index.php?title=Main_Page + +== CONTACT == + +Fell free to contact me via e-mail (deltalab at poczta dot fm) or using +folowing project pages: + + * http://sourceforge.net/projects/phpqrcode/ + * http://phpqrcode.sourceforge.net/ + +== ACKNOWLEDGMENTS == + +Based on C libqrencode library (ver. 3.1.1) +Copyright (C) 2006-2010 by Kentaro Fukuchi +http://megaui.net/fukuchi/works/qrencode/index.en.html + +QR Code is registered trademarks of DENSO WAVE INCORPORATED in JAPAN and other +countries. + +Reed-Solomon code encoder is written by Phil Karn, KA9Q. +Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + \ No newline at end of file diff --git a/externals/phpqrcode/VERSION b/externals/phpqrcode/VERSION new file mode 100644 index 0000000000..9f99279ea0 --- /dev/null +++ b/externals/phpqrcode/VERSION @@ -0,0 +1,2 @@ +1.1.4 +2010100721 \ No newline at end of file diff --git a/externals/phpqrcode/phpqrcode.php b/externals/phpqrcode/phpqrcode.php new file mode 100644 index 0000000000..54cde3ee9e --- /dev/null +++ b/externals/phpqrcode/phpqrcode.php @@ -0,0 +1,3312 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + + +/* + * Version: 1.1.4 + * Build: 2010100721 + */ + + + +//---- qrconst.php ----------------------------- + + + + + +/* + * PHP QR Code encoder + * + * Common constants + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + // Encoding modes + + define('QR_MODE_NUL', -1); + define('QR_MODE_NUM', 0); + define('QR_MODE_AN', 1); + define('QR_MODE_8', 2); + define('QR_MODE_KANJI', 3); + define('QR_MODE_STRUCTURE', 4); + + // Levels of error correction. + + define('QR_ECLEVEL_L', 0); + define('QR_ECLEVEL_M', 1); + define('QR_ECLEVEL_Q', 2); + define('QR_ECLEVEL_H', 3); + + // Supported output formats + + define('QR_FORMAT_TEXT', 0); + define('QR_FORMAT_PNG', 1); + + class qrstr { + public static function set(&$srctab, $x, $y, $repl, $replLen = false) { + $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl)); + } + } + + + +//---- merged_config.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Config file, tuned-up for merged verion + */ + + define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there + define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true + define('QR_LOG_DIR', false); // default error logs dir + + define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code + define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly + define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false + + define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images + + + + +//---- qrtools.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Toolset, handy and debug utilites. + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRtools { + + //---------------------------------------------------------------------- + public static function binarize($frame) + { + $len = count($frame); + foreach ($frame as &$frameLine) { + + for($i=0; $i<$len; $i++) { + $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0'; + } + } + + return $frame; + } + + //---------------------------------------------------------------------- + public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037') + { + $barcode_array = array(); + + if (!is_array($mode)) + $mode = explode(',', $mode); + + $eccLevel = 'L'; + + if (count($mode) > 1) { + $eccLevel = $mode[1]; + } + + $qrTab = QRcode::text($code, false, $eccLevel); + $size = count($qrTab); + + $barcode_array['num_rows'] = $size; + $barcode_array['num_cols'] = $size; + $barcode_array['bcode'] = array(); + + foreach ($qrTab as $line) { + $arrAdd = array(); + foreach(str_split($line) as $char) + $arrAdd[] = ($char=='1')?1:0; + $barcode_array['bcode'][] = $arrAdd; + } + + return $barcode_array; + } + + //---------------------------------------------------------------------- + public static function clearCache() + { + self::$frames = array(); + } + + //---------------------------------------------------------------------- + public static function buildCache() + { + QRtools::markTime('before_build_cache'); + + $mask = new QRmask(); + for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) { + $frame = QRspec::newFrame($a); + if (QR_IMAGE) { + $fileName = QR_CACHE_DIR.'frame_'.$a.'.png'; + QRimage::png(self::binarize($frame), $fileName, 1, 0); + } + + $width = count($frame); + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + for ($maskNo=0; $maskNo<8; $maskNo++) + $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true); + } + + QRtools::markTime('after_build_cache'); + } + + //---------------------------------------------------------------------- + public static function log($outfile, $err) + { + if (QR_LOG_DIR !== false) { + if ($err != '') { + if ($outfile !== false) { + file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } else { + file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND); + } + } + } + } + + //---------------------------------------------------------------------- + public static function dumpMask($frame) + { + $width = count($frame); + for($y=0;$y<$width;$y++) { + for($x=0;$x<$width;$x++) { + echo ord($frame[$y][$x]).','; + } + } + } + + //---------------------------------------------------------------------- + public static function markTime($markerId) + { + list($usec, $sec) = explode(" ", microtime()); + $time = ((float)$usec + (float)$sec); + + if (!isset($GLOBALS['qr_time_bench'])) + $GLOBALS['qr_time_bench'] = array(); + + $GLOBALS['qr_time_bench'][$markerId] = $time; + } + + //---------------------------------------------------------------------- + public static function timeBenchmark() + { + self::markTime('finish'); + + $lastTime = 0; + $startTime = 0; + $p = 0; + + echo ' + + '; + + foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) { + if ($p > 0) { + echo ''; + } else { + $startTime = $thisTime; + } + + $p++; + $lastTime = $thisTime; + } + + echo ' + + +
BENCHMARK
till '.$markerId.': '.number_format($thisTime-$lastTime, 6).'s
TOTAL: '.number_format($lastTime-$startTime, 6).'s
'; + } + + } + + //########################################################################## + + QRtools::markTime('start'); + + + + +//---- qrspec.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * QR Code specifications + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QRSPEC_VERSION_MAX', 40); + define('QRSPEC_WIDTH_MAX', 177); + + define('QRCAP_WIDTH', 0); + define('QRCAP_WORDS', 1); + define('QRCAP_REMINDER', 2); + define('QRCAP_EC', 3); + + class QRspec { + + public static $capacity = array( + array( 0, 0, 0, array( 0, 0, 0, 0)), + array( 21, 26, 0, array( 7, 10, 13, 17)), // 1 + array( 25, 44, 7, array( 10, 16, 22, 28)), + array( 29, 70, 7, array( 15, 26, 36, 44)), + array( 33, 100, 7, array( 20, 36, 52, 64)), + array( 37, 134, 7, array( 26, 48, 72, 88)), // 5 + array( 41, 172, 7, array( 36, 64, 96, 112)), + array( 45, 196, 0, array( 40, 72, 108, 130)), + array( 49, 242, 0, array( 48, 88, 132, 156)), + array( 53, 292, 0, array( 60, 110, 160, 192)), + array( 57, 346, 0, array( 72, 130, 192, 224)), //10 + array( 61, 404, 0, array( 80, 150, 224, 264)), + array( 65, 466, 0, array( 96, 176, 260, 308)), + array( 69, 532, 0, array( 104, 198, 288, 352)), + array( 73, 581, 3, array( 120, 216, 320, 384)), + array( 77, 655, 3, array( 132, 240, 360, 432)), //15 + array( 81, 733, 3, array( 144, 280, 408, 480)), + array( 85, 815, 3, array( 168, 308, 448, 532)), + array( 89, 901, 3, array( 180, 338, 504, 588)), + array( 93, 991, 3, array( 196, 364, 546, 650)), + array( 97, 1085, 3, array( 224, 416, 600, 700)), //20 + array(101, 1156, 4, array( 224, 442, 644, 750)), + array(105, 1258, 4, array( 252, 476, 690, 816)), + array(109, 1364, 4, array( 270, 504, 750, 900)), + array(113, 1474, 4, array( 300, 560, 810, 960)), + array(117, 1588, 4, array( 312, 588, 870, 1050)), //25 + array(121, 1706, 4, array( 336, 644, 952, 1110)), + array(125, 1828, 4, array( 360, 700, 1020, 1200)), + array(129, 1921, 3, array( 390, 728, 1050, 1260)), + array(133, 2051, 3, array( 420, 784, 1140, 1350)), + array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30 + array(141, 2323, 3, array( 480, 868, 1290, 1530)), + array(145, 2465, 3, array( 510, 924, 1350, 1620)), + array(149, 2611, 3, array( 540, 980, 1440, 1710)), + array(153, 2761, 3, array( 570, 1036, 1530, 1800)), + array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35 + array(161, 3034, 0, array( 600, 1120, 1680, 1980)), + array(165, 3196, 0, array( 630, 1204, 1770, 2100)), + array(169, 3362, 0, array( 660, 1260, 1860, 2220)), + array(173, 3532, 0, array( 720, 1316, 1950, 2310)), + array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40 + ); + + //---------------------------------------------------------------------- + public static function getDataLength($version, $level) + { + return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getECCLength($version, $level) + { + return self::$capacity[$version][QRCAP_EC][$level]; + } + + //---------------------------------------------------------------------- + public static function getWidth($version) + { + return self::$capacity[$version][QRCAP_WIDTH]; + } + + //---------------------------------------------------------------------- + public static function getRemainder($version) + { + return self::$capacity[$version][QRCAP_REMINDER]; + } + + //---------------------------------------------------------------------- + public static function getMinimumVersion($size, $level) + { + + for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) { + $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level]; + if($words >= $size) + return $i; + } + + return -1; + } + + //###################################################################### + + public static $lengthTableBits = array( + array(10, 12, 14), + array( 9, 11, 13), + array( 8, 16, 16), + array( 8, 10, 12) + ); + + //---------------------------------------------------------------------- + public static function lengthIndicator($mode, $version) + { + if ($mode == QR_MODE_STRUCTURE) + return 0; + + if ($version <= 9) { + $l = 0; + } else if ($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + return self::$lengthTableBits[$mode][$l]; + } + + //---------------------------------------------------------------------- + public static function maximumWords($mode, $version) + { + if($mode == QR_MODE_STRUCTURE) + return 3; + + if($version <= 9) { + $l = 0; + } else if($version <= 26) { + $l = 1; + } else { + $l = 2; + } + + $bits = self::$lengthTableBits[$mode][$l]; + $words = (1 << $bits) - 1; + + if($mode == QR_MODE_KANJI) { + $words *= 2; // the number of bytes is required + } + + return $words; + } + + // Error correction code ----------------------------------------------- + // Table of the error correction code (Reed-Solomon block) + // See Table 12-16 (pp.30-36), JIS X0510:2004. + + public static $eccTable = array( + array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)), + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1 + array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), + array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)), + array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5 + array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)), + array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)), + array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)), + array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)), + array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10 + array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)), + array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)), + array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)), + array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)), + array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15 + array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)), + array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)), + array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)), + array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)), + array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20 + array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)), + array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)), + array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)), + array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)), + array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25 + array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)), + array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)), + array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)), + array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)), + array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30 + array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)), + array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)), + array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)), + array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)), + array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35 + array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)), + array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)), + array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)), + array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)), + array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40 + ); + + //---------------------------------------------------------------------- + // CACHEABLE!!! + + public static function getEccSpec($version, $level, array &$spec) + { + if (count($spec) < 5) { + $spec = array(0,0,0,0,0); + } + + $b1 = self::$eccTable[$version][$level][0]; + $b2 = self::$eccTable[$version][$level][1]; + $data = self::getDataLength($version, $level); + $ecc = self::getECCLength($version, $level); + + if($b2 == 0) { + $spec[0] = $b1; + $spec[1] = (int)($data / $b1); + $spec[2] = (int)($ecc / $b1); + $spec[3] = 0; + $spec[4] = 0; + } else { + $spec[0] = $b1; + $spec[1] = (int)($data / ($b1 + $b2)); + $spec[2] = (int)($ecc / ($b1 + $b2)); + $spec[3] = $b2; + $spec[4] = $spec[1] + 1; + } + } + + // Alignment pattern --------------------------------------------------- + + // Positions of alignment patterns. + // This array includes only the second and the third position of the + // alignment patterns. Rest of them can be calculated from the distance + // between them. + + // See Table 1 in Appendix E (pp.71) of JIS X0510:2004. + + public static $alignmentPattern = array( + array( 0, 0), + array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5 + array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10 + array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15 + array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20 + array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25 + array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30 + array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35 + array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40 + ); + + + /** -------------------------------------------------------------------- + * Put an alignment marker. + * @param frame + * @param width + * @param ox,oy center coordinate of the pattern + */ + public static function putAlignmentMarker(array &$frame, $ox, $oy) + { + $finder = array( + "\xa1\xa1\xa1\xa1\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa0\xa1\xa0\xa1", + "\xa1\xa0\xa0\xa0\xa1", + "\xa1\xa1\xa1\xa1\xa1" + ); + + $yStart = $oy-2; + $xStart = $ox-2; + + for($y=0; $y<5; $y++) { + QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function putAlignmentPattern($version, &$frame, $width) + { + if($version < 2) + return; + + $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0]; + if($d < 0) { + $w = 2; + } else { + $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2); + } + + if($w * $w - 3 == 1) { + $x = self::$alignmentPattern[$version][0]; + $y = self::$alignmentPattern[$version][0]; + self::putAlignmentMarker($frame, $x, $y); + return; + } + + $cx = self::$alignmentPattern[$version][0]; + for($x=1; $x<$w - 1; $x++) { + self::putAlignmentMarker($frame, 6, $cx); + self::putAlignmentMarker($frame, $cx, 6); + $cx += $d; + } + + $cy = self::$alignmentPattern[$version][0]; + for($y=0; $y<$w-1; $y++) { + $cx = self::$alignmentPattern[$version][0]; + for($x=0; $x<$w-1; $x++) { + self::putAlignmentMarker($frame, $cx, $cy); + $cx += $d; + } + $cy += $d; + } + } + + // Version information pattern ----------------------------------------- + + // Version information pattern (BCH coded). + // See Table 1 in Appendix D (pp.68) of JIS X0510:2004. + + // size: [QRSPEC_VERSION_MAX - 6] + + public static $versionPattern = array( + 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d, + 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9, + 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, + 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64, + 0x27541, 0x28c69 + ); + + //---------------------------------------------------------------------- + public static function getVersionPattern($version) + { + if($version < 7 || $version > QRSPEC_VERSION_MAX) + return 0; + + return self::$versionPattern[$version -7]; + } + + // Format information -------------------------------------------------- + // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib) + + public static $formatInfo = array( + array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976), + array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0), + array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed), + array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b) + ); + + public static function getFormatInfo($mask, $level) + { + if($mask < 0 || $mask > 7) + return 0; + + if($level < 0 || $level > 3) + return 0; + + return self::$formatInfo[$level][$mask]; + } + + // Frame --------------------------------------------------------------- + // Cache of initial frames. + + public static $frames = array(); + + /** -------------------------------------------------------------------- + * Put a finder pattern. + * @param frame + * @param width + * @param ox,oy upper-left coordinate of the pattern + */ + public static function putFinderPattern(&$frame, $ox, $oy) + { + $finder = array( + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc1\xc1\xc1\xc0\xc1", + "\xc1\xc0\xc0\xc0\xc0\xc0\xc1", + "\xc1\xc1\xc1\xc1\xc1\xc1\xc1" + ); + + for($y=0; $y<7; $y++) { + QRstr::set($frame, $ox, $oy+$y, $finder[$y]); + } + } + + //---------------------------------------------------------------------- + public static function createFrame($version) + { + $width = self::$capacity[$version][QRCAP_WIDTH]; + $frameLine = str_repeat ("\0", $width); + $frame = array_fill(0, $width, $frameLine); + + // Finder pattern + self::putFinderPattern($frame, 0, 0); + self::putFinderPattern($frame, $width - 7, 0); + self::putFinderPattern($frame, 0, $width - 7); + + // Separator + $yOffset = $width - 7; + + for($y=0; $y<7; $y++) { + $frame[$y][7] = "\xc0"; + $frame[$y][$width - 8] = "\xc0"; + $frame[$yOffset][7] = "\xc0"; + $yOffset++; + } + + $setPattern = str_repeat("\xc0", 8); + + QRstr::set($frame, 0, 7, $setPattern); + QRstr::set($frame, $width-8, 7, $setPattern); + QRstr::set($frame, 0, $width - 8, $setPattern); + + // Format info + $setPattern = str_repeat("\x84", 9); + QRstr::set($frame, 0, 8, $setPattern); + QRstr::set($frame, $width - 8, 8, $setPattern, 8); + + $yOffset = $width - 8; + + for($y=0; $y<8; $y++,$yOffset++) { + $frame[$y][8] = "\x84"; + $frame[$yOffset][8] = "\x84"; + } + + // Timing pattern + + for($i=1; $i<$width-15; $i++) { + $frame[6][7+$i] = chr(0x90 | ($i & 1)); + $frame[7+$i][6] = chr(0x90 | ($i & 1)); + } + + // Alignment pattern + self::putAlignmentPattern($version, $frame, $width); + + // Version information + if($version >= 7) { + $vinf = self::getVersionPattern($version); + + $v = $vinf; + + for($x=0; $x<6; $x++) { + for($y=0; $y<3; $y++) { + $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + + $v = $vinf; + for($y=0; $y<6; $y++) { + for($x=0; $x<3; $x++) { + $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1)); + $v = $v >> 1; + } + } + } + + // and a little bit... + $frame[$width - 8][8] = "\x81"; + + return $frame; + } + + //---------------------------------------------------------------------- + public static function debug($frame, $binary_mode = false) + { + if ($binary_mode) { + + foreach ($frame as &$frameLine) { + $frameLine = join('  ', explode('0', $frameLine)); + $frameLine = join('██', explode('1', $frameLine)); + } + + ?> + +


        '; + echo join("
        ", $frame); + echo '






'; + + } else { + + foreach ($frame as &$frameLine) { + $frameLine = join(' ', explode("\xc0", $frameLine)); + $frameLine = join('', explode("\xc1", $frameLine)); + $frameLine = join(' ', explode("\xa0", $frameLine)); + $frameLine = join('', explode("\xa1", $frameLine)); + $frameLine = join('', explode("\x84", $frameLine)); //format 0 + $frameLine = join('', explode("\x85", $frameLine)); //format 1 + $frameLine = join('', explode("\x81", $frameLine)); //special bit + $frameLine = join(' ', explode("\x90", $frameLine)); //clock 0 + $frameLine = join('', explode("\x91", $frameLine)); //clock 1 + $frameLine = join(' ', explode("\x88", $frameLine)); //version + $frameLine = join('', explode("\x89", $frameLine)); //version + $frameLine = join('♦', explode("\x01", $frameLine)); + $frameLine = join('⋅', explode("\0", $frameLine)); + } + + ?> + + "; + echo join("
", $frame); + echo "
"; + + } + } + + //---------------------------------------------------------------------- + public static function serial($frame) + { + return gzcompress(join("\n", $frame), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + return explode("\n", gzuncompress($code)); + } + + //---------------------------------------------------------------------- + public static function newFrame($version) + { + if($version < 1 || $version > QRSPEC_VERSION_MAX) + return null; + + if(!isset(self::$frames[$version])) { + + $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + self::$frames[$version] = self::unserial(file_get_contents($fileName)); + } else { + self::$frames[$version] = self::createFrame($version); + file_put_contents($fileName, self::serial(self::$frames[$version])); + } + } else { + self::$frames[$version] = self::createFrame($version); + } + } + + if(is_null(self::$frames[$version])) + return null; + + return self::$frames[$version]; + } + + //---------------------------------------------------------------------- + public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; } + public static function rsBlockNum1($spec) { return $spec[0]; } + public static function rsDataCodes1($spec) { return $spec[1]; } + public static function rsEccCodes1($spec) { return $spec[2]; } + public static function rsBlockNum2($spec) { return $spec[3]; } + public static function rsDataCodes2($spec) { return $spec[4]; } + public static function rsEccCodes2($spec) { return $spec[2]; } + public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); } + public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; } + + } + + + +//---- qrimage.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Image output of code using GD2 + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('QR_IMAGE', true); + + class QRimage { + + //---------------------------------------------------------------------- + public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/png"); + ImagePng($image); + } else { + if($saveandprint===TRUE){ + ImagePng($image, $filename); + header("Content-type: image/png"); + ImagePng($image); + }else{ + ImagePng($image, $filename); + } + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85) + { + $image = self::image($frame, $pixelPerPoint, $outerFrame); + + if ($filename === false) { + Header("Content-type: image/jpeg"); + ImageJpeg($image, null, $q); + } else { + ImageJpeg($image, $filename, $q); + } + + ImageDestroy($image); + } + + //---------------------------------------------------------------------- + private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4) + { + $h = count($frame); + $w = strlen($frame[0]); + + $imgW = $w + 2*$outerFrame; + $imgH = $h + 2*$outerFrame; + + $base_image =ImageCreate($imgW, $imgH); + + $col[0] = ImageColorAllocate($base_image,255,255,255); + $col[1] = ImageColorAllocate($base_image,0,0,0); + + imagefill($base_image, 0, 0, $col[0]); + + for($y=0; $y<$h; $y++) { + for($x=0; $x<$w; $x++) { + if ($frame[$y][$x] == '1') { + ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); + } + } + } + + $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint); + ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH); + ImageDestroy($base_image); + + return $target_image; + } + } + + + +//---- qrinput.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input encoding class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('STRUCTURE_HEADER_BITS', 20); + define('MAX_STRUCTURED_SYMBOLS', 16); + + class QRinputItem { + + public $mode; + public $size; + public $data; + public $bstream; + + public function __construct($mode, $size, $data, $bstream = null) + { + $setData = array_slice($data, 0, $size); + + if (count($setData) < $size) { + $setData = array_merge($setData, array_fill(0,$size-count($setData),0)); + } + + if(!QRinput::check($mode, $size, $setData)) { + throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData)); + return null; + } + + $this->mode = $mode; + $this->size = $size; + $this->data = $setData; + $this->bstream = $bstream; + } + + //---------------------------------------------------------------------- + public function encodeModeNum($version) + { + try { + + $words = (int)($this->size / 3); + $bs = new QRbitstream(); + + $val = 0x1; + $bs->appendNum(4, $val); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (ord($this->data[$i*3 ]) - ord('0')) * 100; + $val += (ord($this->data[$i*3+1]) - ord('0')) * 10; + $val += (ord($this->data[$i*3+2]) - ord('0')); + $bs->appendNum(10, $val); + } + + if($this->size - $words * 3 == 1) { + $val = ord($this->data[$words*3]) - ord('0'); + $bs->appendNum(4, $val); + } else if($this->size - $words * 3 == 2) { + $val = (ord($this->data[$words*3 ]) - ord('0')) * 10; + $val += (ord($this->data[$words*3+1]) - ord('0')); + $bs->appendNum(7, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeAn($version) + { + try { + $words = (int)($this->size / 2); + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x02); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size); + + for($i=0; $i<$words; $i++) { + $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45; + $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1])); + + $bs->appendNum(11, $val); + } + + if($this->size & 1) { + $val = QRinput::lookAnTable(ord($this->data[$words * 2])); + $bs->appendNum(6, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeMode8($version) + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x4); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size); + + for($i=0; $i<$this->size; $i++) { + $bs->appendNum(8, ord($this->data[$i])); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeKanji($version) + { + try { + + $bs = new QRbitrtream(); + + $bs->appendNum(4, 0x8); + $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2)); + + for($i=0; $i<$this->size; $i+=2) { + $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]); + if($val <= 0x9ffc) { + $val -= 0x8140; + } else { + $val -= 0xc140; + } + + $h = ($val >> 8) * 0xc0; + $val = ($val & 0xff) + $h; + + $bs->appendNum(13, $val); + } + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function encodeModeStructure() + { + try { + $bs = new QRbitstream(); + + $bs->appendNum(4, 0x03); + $bs->appendNum(4, ord($this->data[1]) - 1); + $bs->appendNum(4, ord($this->data[0]) - 1); + $bs->appendNum(8, ord($this->data[2])); + + $this->bstream = $bs; + return 0; + + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function estimateBitStreamSizeOfEntry($version) + { + $bits = 0; + + if($version == 0) + $version = 1; + + switch($this->mode) { + case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break; + case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break; + case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break; + case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break; + case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS; + default: + return 0; + } + + $l = QRspec::lengthIndicator($this->mode, $version); + $m = 1 << $l; + $num = (int)(($this->size + $m - 1) / $m); + + $bits += $num * (4 + $l); + + return $bits; + } + + //---------------------------------------------------------------------- + public function encodeBitStream($version) + { + try { + + unset($this->bstream); + $words = QRspec::maximumWords($this->mode, $version); + + if($this->size > $words) { + + $st1 = new QRinputItem($this->mode, $words, $this->data); + $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words)); + + $st1->encodeBitStream($version); + $st2->encodeBitStream($version); + + $this->bstream = new QRbitstream(); + $this->bstream->append($st1->bstream); + $this->bstream->append($st2->bstream); + + unset($st1); + unset($st2); + + } else { + + $ret = 0; + + switch($this->mode) { + case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break; + case QR_MODE_AN: $ret = $this->encodeModeAn($version); break; + case QR_MODE_8: $ret = $this->encodeMode8($version); break; + case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break; + case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break; + + default: + break; + } + + if($ret < 0) + return -1; + } + + return $this->bstream->size(); + + } catch (Exception $e) { + return -1; + } + } + }; + + //########################################################################## + + class QRinput { + + public $items; + + private $version; + private $level; + + //---------------------------------------------------------------------- + public function __construct($version = 0, $level = QR_ECLEVEL_L) + { + if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) { + throw new Exception('Invalid version no'); + return NULL; + } + + $this->version = $version; + $this->level = $level; + } + + //---------------------------------------------------------------------- + public function getVersion() + { + return $this->version; + } + + //---------------------------------------------------------------------- + public function setVersion($version) + { + if($version < 0 || $version > QRSPEC_VERSION_MAX) { + throw new Exception('Invalid version no'); + return -1; + } + + $this->version = $version; + + return 0; + } + + //---------------------------------------------------------------------- + public function getErrorCorrectionLevel() + { + return $this->level; + } + + //---------------------------------------------------------------------- + public function setErrorCorrectionLevel($level) + { + if($level > QR_ECLEVEL_H) { + throw new Exception('Invalid ECLEVEL'); + return -1; + } + + $this->level = $level; + + return 0; + } + + //---------------------------------------------------------------------- + public function appendEntry(QRinputItem $entry) + { + $this->items[] = $entry; + } + + //---------------------------------------------------------------------- + public function append($mode, $size, $data) + { + try { + $entry = new QRinputItem($mode, $size, $data); + $this->items[] = $entry; + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + + public function insertStructuredAppendHeader($size, $index, $parity) + { + if( $size > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong size'); + } + + if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) { + throw new Exception('insertStructuredAppendHeader wrong index'); + } + + $buf = array($size, $index, $parity); + + try { + $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf); + array_unshift($this->items, $entry); + return 0; + } catch (Exception $e) { + return -1; + } + } + + //---------------------------------------------------------------------- + public function calcParity() + { + $parity = 0; + + foreach($this->items as $item) { + if($item->mode != QR_MODE_STRUCTURE) { + for($i=$item->size-1; $i>=0; $i--) { + $parity ^= $item->data[$i]; + } + } + } + + return $parity; + } + + //---------------------------------------------------------------------- + public static function checkModeNum($size, $data) + { + for($i=0; $i<$size; $i++) { + if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){ + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeNum($size) + { + $w = (int)$size / 3; + $bits = $w * 10; + + switch($size - $w * 3) { + case 1: + $bits += 4; + break; + case 2: + $bits += 7; + break; + default: + break; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static $anTable = array( + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1, + -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + ); + + //---------------------------------------------------------------------- + public static function lookAnTable($c) + { + return (($c > 127)?-1:self::$anTable[$c]); + } + + //---------------------------------------------------------------------- + public static function checkModeAn($size, $data) + { + for($i=0; $i<$size; $i++) { + if (self::lookAnTable(ord($data[$i])) == -1) { + return false; + } + } + + return true; + } + + //---------------------------------------------------------------------- + public static function estimateBitsModeAn($size) + { + $w = (int)($size / 2); + $bits = $w * 11; + + if($size & 1) { + $bits += 6; + } + + return $bits; + } + + //---------------------------------------------------------------------- + public static function estimateBitsMode8($size) + { + return $size * 8; + } + + //---------------------------------------------------------------------- + public function estimateBitsModeKanji($size) + { + return (int)(($size / 2) * 13); + } + + //---------------------------------------------------------------------- + public static function checkModeKanji($size, $data) + { + if($size & 1) + return false; + + for($i=0; $i<$size; $i+=2) { + $val = (ord($data[$i]) << 8) | ord($data[$i+1]); + if( $val < 0x8140 + || ($val > 0x9ffc && $val < 0xe040) + || $val > 0xebbf) { + return false; + } + } + + return true; + } + + /*********************************************************************** + * Validation + **********************************************************************/ + + public static function check($mode, $size, $data) + { + if($size <= 0) + return false; + + switch($mode) { + case QR_MODE_NUM: return self::checkModeNum($size, $data); break; + case QR_MODE_AN: return self::checkModeAn($size, $data); break; + case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break; + case QR_MODE_8: return true; break; + case QR_MODE_STRUCTURE: return true; break; + + default: + break; + } + + return false; + } + + + //---------------------------------------------------------------------- + public function estimateBitStreamSize($version) + { + $bits = 0; + + foreach($this->items as $item) { + $bits += $item->estimateBitStreamSizeOfEntry($version); + } + + return $bits; + } + + //---------------------------------------------------------------------- + public function estimateVersion() + { + $version = 0; + $prev = 0; + do { + $prev = $version; + $bits = $this->estimateBitStreamSize($prev); + $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if ($version < 0) { + return -1; + } + } while ($version > $prev); + + return $version; + } + + //---------------------------------------------------------------------- + public static function lengthOfCode($mode, $version, $bits) + { + $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version); + switch($mode) { + case QR_MODE_NUM: + $chunks = (int)($payload / 10); + $remain = $payload - $chunks * 10; + $size = $chunks * 3; + if($remain >= 7) { + $size += 2; + } else if($remain >= 4) { + $size += 1; + } + break; + case QR_MODE_AN: + $chunks = (int)($payload / 11); + $remain = $payload - $chunks * 11; + $size = $chunks * 2; + if($remain >= 6) + $size++; + break; + case QR_MODE_8: + $size = (int)($payload / 8); + break; + case QR_MODE_KANJI: + $size = (int)(($payload / 13) * 2); + break; + case QR_MODE_STRUCTURE: + $size = (int)($payload / 8); + break; + default: + $size = 0; + break; + } + + $maxsize = QRspec::maximumWords($mode, $version); + if($size < 0) $size = 0; + if($size > $maxsize) $size = $maxsize; + + return $size; + } + + //---------------------------------------------------------------------- + public function createBitStream() + { + $total = 0; + + foreach($this->items as $item) { + $bits = $item->encodeBitStream($this->version); + + if($bits < 0) + return -1; + + $total += $bits; + } + + return $total; + } + + //---------------------------------------------------------------------- + public function convertData() + { + $ver = $this->estimateVersion(); + if($ver > $this->getVersion()) { + $this->setVersion($ver); + } + + for(;;) { + $bits = $this->createBitStream(); + + if($bits < 0) + return -1; + + $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level); + if($ver < 0) { + throw new Exception('WRONG VERSION'); + return -1; + } else if($ver > $this->getVersion()) { + $this->setVersion($ver); + } else { + break; + } + } + + return 0; + } + + //---------------------------------------------------------------------- + public function appendPaddingBit(&$bstream) + { + $bits = $bstream->size(); + $maxwords = QRspec::getDataLength($this->version, $this->level); + $maxbits = $maxwords * 8; + + if ($maxbits == $bits) { + return 0; + } + + if ($maxbits - $bits < 5) { + return $bstream->appendNum($maxbits - $bits, 0); + } + + $bits += 4; + $words = (int)(($bits + 7) / 8); + + $padding = new QRbitstream(); + $ret = $padding->appendNum($words * 8 - $bits + 4, 0); + + if($ret < 0) + return $ret; + + $padlen = $maxwords - $words; + + if($padlen > 0) { + + $padbuf = array(); + for($i=0; $i<$padlen; $i++) { + $padbuf[$i] = ($i&1)?0x11:0xec; + } + + $ret = $padding->appendBytes($padlen, $padbuf); + + if($ret < 0) + return $ret; + + } + + $ret = $bstream->append($padding); + + return $ret; + } + + //---------------------------------------------------------------------- + public function mergeBitStream() + { + if($this->convertData() < 0) { + return null; + } + + $bstream = new QRbitstream(); + + foreach($this->items as $item) { + $ret = $bstream->append($item->bstream); + if($ret < 0) { + return null; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getBitStream() + { + + $bstream = $this->mergeBitStream(); + + if($bstream == null) { + return null; + } + + $ret = $this->appendPaddingBit($bstream); + if($ret < 0) { + return null; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function getByteStream() + { + $bstream = $this->getBitStream(); + if($bstream == null) { + return null; + } + + return $bstream->toByte(); + } + } + + + + + + +//---- qrbitstream.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Bitstream class + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRbitstream { + + public $data = array(); + + //---------------------------------------------------------------------- + public function size() + { + return count($this->data); + } + + //---------------------------------------------------------------------- + public function allocate($setLength) + { + $this->data = array_fill(0, $setLength, 0); + return 0; + } + + //---------------------------------------------------------------------- + public static function newFromNum($bits, $num) + { + $bstream = new QRbitstream(); + $bstream->allocate($bits); + + $mask = 1 << ($bits - 1); + for($i=0; $i<$bits; $i++) { + if($num & $mask) { + $bstream->data[$i] = 1; + } else { + $bstream->data[$i] = 0; + } + $mask = $mask >> 1; + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public static function newFromBytes($size, $data) + { + $bstream = new QRbitstream(); + $bstream->allocate($size * 8); + $p=0; + + for($i=0; $i<$size; $i++) { + $mask = 0x80; + for($j=0; $j<8; $j++) { + if($data[$i] & $mask) { + $bstream->data[$p] = 1; + } else { + $bstream->data[$p] = 0; + } + $p++; + $mask = $mask >> 1; + } + } + + return $bstream; + } + + //---------------------------------------------------------------------- + public function append(QRbitstream $arg) + { + if (is_null($arg)) { + return -1; + } + + if($arg->size() == 0) { + return 0; + } + + if($this->size() == 0) { + $this->data = $arg->data; + return 0; + } + + $this->data = array_values(array_merge($this->data, $arg->data)); + + return 0; + } + + //---------------------------------------------------------------------- + public function appendNum($bits, $num) + { + if ($bits == 0) + return 0; + + $b = QRbitstream::newFromNum($bits, $num); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function appendBytes($size, $data) + { + if ($size == 0) + return 0; + + $b = QRbitstream::newFromBytes($size, $data); + + if(is_null($b)) + return -1; + + $ret = $this->append($b); + unset($b); + + return $ret; + } + + //---------------------------------------------------------------------- + public function toByte() + { + + $size = $this->size(); + + if($size == 0) { + return array(); + } + + $data = array_fill(0, (int)(($size + 7) / 8), 0); + $bytes = (int)($size / 8); + + $p = 0; + + for($i=0; $i<$bytes; $i++) { + $v = 0; + for($j=0; $j<8; $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$i] = $v; + } + + if($size & 7) { + $v = 0; + for($j=0; $j<($size & 7); $j++) { + $v = $v << 1; + $v |= $this->data[$p]; + $p++; + } + $data[$bytes] = $v; + } + + return $data; + } + + } + + + + +//---- qrsplit.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Input splitting classes + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * The following data / specifications are taken from + * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004) + * or + * "Automatic identification and data capture techniques -- + * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + class QRsplit { + + public $dataStr = ''; + public $input; + public $modeHint; + + //---------------------------------------------------------------------- + public function __construct($dataStr, $input, $modeHint) + { + $this->dataStr = $dataStr; + $this->input = $input; + $this->modeHint = $modeHint; + } + + //---------------------------------------------------------------------- + public static function isdigitat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9'))); + } + + //---------------------------------------------------------------------- + public static function isalnumat($str, $pos) + { + if ($pos >= strlen($str)) + return false; + + return (QRinput::lookAnTable(ord($str[$pos])) >= 0); + } + + //---------------------------------------------------------------------- + public function identifyMode($pos) + { + if ($pos >= strlen($this->dataStr)) + return QR_MODE_NUL; + + $c = $this->dataStr[$pos]; + + if(self::isdigitat($this->dataStr, $pos)) { + return QR_MODE_NUM; + } else if(self::isalnumat($this->dataStr, $pos)) { + return QR_MODE_AN; + } else if($this->modeHint == QR_MODE_KANJI) { + + if ($pos+1 < strlen($this->dataStr)) + { + $d = $this->dataStr[$pos+1]; + $word = (ord($c) << 8) | ord($d); + if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) { + return QR_MODE_KANJI; + } + } + } + + return QR_MODE_8; + } + + //---------------------------------------------------------------------- + public function eatNum() + { + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + while(self::isdigitat($this->dataStr, $p)) { + $p++; + } + + $run = $p; + $mode = $this->identifyMode($p); + + if($mode == QR_MODE_8) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + if($mode == QR_MODE_AN) { + $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln + + QRinput::estimateBitsModeAn(1) // + 4 + la + - QRinput::estimateBitsModeAn($run + 1);// - 4 - la + if($dif > 0) { + return $this->eatAn(); + } + } + + $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatAn() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 0; + + while(self::isalnumat($this->dataStr, $p)) { + if(self::isdigitat($this->dataStr, $p)) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + + $dif = QRinput::estimateBitsModeAn($p) // + 4 + la + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsModeAn($q); // - 4 - la + + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + + if(!self::isalnumat($this->dataStr, $p)) { + $dif = QRinput::estimateBitsModeAn($run) + 4 + $la + + QRinput::estimateBitsMode8(1) // + 4 + l8 + - QRinput::estimateBitsMode8($run + 1); // - 4 - l8 + if($dif > 0) { + return $this->eat8(); + } + } + + $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eatKanji() + { + $p = 0; + + while($this->identifyMode($p) == QR_MODE_KANJI) { + $p += 2; + } + + $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr)); + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function eat8() + { + $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion()); + $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion()); + + $p = 1; + $dataStrLen = strlen($this->dataStr); + + while($p < $dataStrLen) { + + $mode = $this->identifyMode($p); + if($mode == QR_MODE_KANJI) { + break; + } + if($mode == QR_MODE_NUM) { + $q = $p; + while(self::isdigitat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else if($mode == QR_MODE_AN) { + $q = $p; + while(self::isalnumat($this->dataStr, $q)) { + $q++; + } + $dif = QRinput::estimateBitsMode8($p) // + 4 + l8 + + QRinput::estimateBitsModeAn($q - $p) + 4 + $la + - QRinput::estimateBitsMode8($q); // - 4 - l8 + if($dif < 0) { + break; + } else { + $p = $q; + } + } else { + $p++; + } + } + + $run = $p; + $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr)); + + if($ret < 0) + return -1; + + return $run; + } + + //---------------------------------------------------------------------- + public function splitString() + { + while (strlen($this->dataStr) > 0) + { + if($this->dataStr == '') + return 0; + + $mode = $this->identifyMode(0); + + switch ($mode) { + case QR_MODE_NUM: $length = $this->eatNum(); break; + case QR_MODE_AN: $length = $this->eatAn(); break; + case QR_MODE_KANJI: + if ($hint == QR_MODE_KANJI) + $length = $this->eatKanji(); + else $length = $this->eat8(); + break; + default: $length = $this->eat8(); break; + + } + + if($length == 0) return 0; + if($length < 0) return -1; + + $this->dataStr = substr($this->dataStr, $length); + } + } + + //---------------------------------------------------------------------- + public function toUpper() + { + $stringLen = strlen($this->dataStr); + $p = 0; + + while ($p<$stringLen) { + $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint); + if($mode == QR_MODE_KANJI) { + $p += 2; + } else { + if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) { + $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32); + } + $p++; + } + } + + return $this->dataStr; + } + + //---------------------------------------------------------------------- + public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true) + { + if(is_null($string) || $string == '\0' || $string == '') { + throw new Exception('empty string!!!'); + } + + $split = new QRsplit($string, $input, $modeHint); + + if(!$casesensitive) + $split->toUpper(); + + return $split->splitString(); + } + } + + + +//---- qrrscode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Reed-Solomon error correction support + * + * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q + * (libfec is released under the GNU Lesser General Public License.) + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsItem { + + public $mm; // Bits per symbol + public $nn; // Symbols per block (= (1<= $this->nn) { + $x -= $this->nn; + $x = ($x >> $this->mm) + ($x & $this->nn); + } + + return $x; + } + + //---------------------------------------------------------------------- + public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + // Common code for intializing a Reed-Solomon control block (char or int symbols) + // Copyright 2004 Phil Karn, KA9Q + // May be used under the terms of the GNU Lesser General Public License (LGPL) + + $rs = null; + + // Check parameter ranges + if($symsize < 0 || $symsize > 8) return $rs; + if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs; + if($prim <= 0 || $prim >= (1<<$symsize)) return $rs; + if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values! + if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding + + $rs = new QRrsItem(); + $rs->mm = $symsize; + $rs->nn = (1<<$symsize)-1; + $rs->pad = $pad; + + $rs->alpha_to = array_fill(0, $rs->nn+1, 0); + $rs->index_of = array_fill(0, $rs->nn+1, 0); + + // PHP style macro replacement ;) + $NN =& $rs->nn; + $A0 =& $NN; + + // Generate Galois field lookup tables + $rs->index_of[0] = $A0; // log(zero) = -inf + $rs->alpha_to[$A0] = 0; // alpha**-inf = 0 + $sr = 1; + + for($i=0; $i<$rs->nn; $i++) { + $rs->index_of[$sr] = $i; + $rs->alpha_to[$i] = $sr; + $sr <<= 1; + if($sr & (1<<$symsize)) { + $sr ^= $gfpoly; + } + $sr &= $rs->nn; + } + + if($sr != 1){ + // field generator polynomial is not primitive! + $rs = NULL; + return $rs; + } + + /* Form RS code generator polynomial from its roots */ + $rs->genpoly = array_fill(0, $nroots+1, 0); + + $rs->fcr = $fcr; + $rs->prim = $prim; + $rs->nroots = $nroots; + $rs->gfpoly = $gfpoly; + + /* Find prim-th root of 1, used in decoding */ + for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn) + ; // intentional empty-body loop! + + $rs->iprim = (int)($iprim / $prim); + $rs->genpoly[0] = 1; + + for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) { + $rs->genpoly[$i+1] = 1; + + // Multiply rs->genpoly[] by @**(root + x) + for ($j = $i; $j > 0; $j--) { + if ($rs->genpoly[$j] != 0) { + $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)]; + } else { + $rs->genpoly[$j] = $rs->genpoly[$j-1]; + } + } + // rs->genpoly[0] can never be zero + $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)]; + } + + // convert rs->genpoly[] to index form for quicker encoding + for ($i = 0; $i <= $nroots; $i++) + $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]]; + + return $rs; + } + + //---------------------------------------------------------------------- + public function encode_rs_char($data, &$parity) + { + $MM =& $this->mm; + $NN =& $this->nn; + $ALPHA_TO =& $this->alpha_to; + $INDEX_OF =& $this->index_of; + $GENPOLY =& $this->genpoly; + $NROOTS =& $this->nroots; + $FCR =& $this->fcr; + $PRIM =& $this->prim; + $IPRIM =& $this->iprim; + $PAD =& $this->pad; + $A0 =& $NN; + + $parity = array_fill(0, $NROOTS, 0); + + for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) { + + $feedback = $INDEX_OF[$data[$i] ^ $parity[0]]; + if($feedback != $A0) { + // feedback term is non-zero + + // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must + // always be for the polynomials constructed by init_rs() + $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback); + + for($j=1;$j<$NROOTS;$j++) { + $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])]; + } + } + + // Shift + array_shift($parity); + if($feedback != $A0) { + array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]); + } else { + array_push($parity, 0); + } + } + } + } + + //########################################################################## + + class QRrs { + + public static $items = array(); + + //---------------------------------------------------------------------- + public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad) + { + foreach(self::$items as $rs) { + if($rs->pad != $pad) continue; + if($rs->nroots != $nroots) continue; + if($rs->mm != $symsize) continue; + if($rs->gfpoly != $gfpoly) continue; + if($rs->fcr != $fcr) continue; + if($rs->prim != $prim) continue; + + return $rs; + } + + $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad); + array_unshift(self::$items, $rs); + + return $rs; + } + } + + + +//---- qrmask.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Masking + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + define('N1', 3); + define('N2', 3); + define('N3', 40); + define('N4', 10); + + class QRmask { + + public $runLength = array(); + + //---------------------------------------------------------------------- + public function __construct() + { + $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0); + } + + //---------------------------------------------------------------------- + public function writeFormatInformation($width, &$frame, $mask, $level) + { + $blacks = 0; + $format = QRspec::getFormatInfo($mask, $level); + + for($i=0; $i<8; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[8][$width - 1 - $i] = chr($v); + if($i < 6) { + $frame[$i][8] = chr($v); + } else { + $frame[$i + 1][8] = chr($v); + } + $format = $format >> 1; + } + + for($i=0; $i<7; $i++) { + if($format & 1) { + $blacks += 2; + $v = 0x85; + } else { + $v = 0x84; + } + + $frame[$width - 7 + $i][8] = chr($v); + if($i == 0) { + $frame[8][7] = chr($v); + } else { + $frame[8][6 - $i] = chr($v); + } + + $format = $format >> 1; + } + + return $blacks; + } + + //---------------------------------------------------------------------- + public function mask0($x, $y) { return ($x+$y)&1; } + public function mask1($x, $y) { return ($y&1); } + public function mask2($x, $y) { return ($x%3); } + public function mask3($x, $y) { return ($x+$y)%3; } + public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; } + public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; } + public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; } + public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; } + + //---------------------------------------------------------------------- + private function generateMaskNo($maskNo, $width, $frame) + { + $bitMask = array_fill(0, $width, array_fill(0, $width, 0)); + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if(ord($frame[$y][$x]) & 0x80) { + $bitMask[$y][$x] = 0; + } else { + $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y); + $bitMask[$y][$x] = ($maskFunc == 0)?1:0; + } + + } + } + + return $bitMask; + } + + //---------------------------------------------------------------------- + public static function serial($bitFrame) + { + $codeArr = array(); + + foreach ($bitFrame as $line) + $codeArr[] = join('', $line); + + return gzcompress(join("\n", $codeArr), 9); + } + + //---------------------------------------------------------------------- + public static function unserial($code) + { + $codeArr = array(); + + $codeLines = explode("\n", gzuncompress($code)); + foreach ($codeLines as $line) + $codeArr[] = str_split($line); + + return $codeArr; + } + + //---------------------------------------------------------------------- + public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) + { + $b = 0; + $bitMask = array(); + + $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat'; + + if (QR_CACHEABLE) { + if (file_exists($fileName)) { + $bitMask = self::unserial(file_get_contents($fileName)); + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo)) + mkdir(QR_CACHE_DIR.'mask_'.$maskNo); + file_put_contents($fileName, self::serial($bitMask)); + } + } else { + $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d); + } + + if ($maskGenOnly) + return; + + $d = $s; + + for($y=0; $y<$width; $y++) { + for($x=0; $x<$width; $x++) { + if($bitMask[$y][$x] == 1) { + $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]); + } + $b += (int)(ord($d[$y][$x]) & 1); + } + } + + return $b; + } + + //---------------------------------------------------------------------- + public function makeMask($width, $frame, $maskNo, $level) + { + $masked = array_fill(0, $width, str_repeat("\0", $width)); + $this->makeMaskNo($maskNo, $width, $frame, $masked); + $this->writeFormatInformation($width, $masked, $maskNo, $level); + + return $masked; + } + + //---------------------------------------------------------------------- + public function calcN1N3($length) + { + $demerit = 0; + + for($i=0; $i<$length; $i++) { + + if($this->runLength[$i] >= 5) { + $demerit += (N1 + ($this->runLength[$i] - 5)); + } + if($i & 1) { + if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) { + $fact = (int)($this->runLength[$i] / 3); + if(($this->runLength[$i-2] == $fact) && + ($this->runLength[$i-1] == $fact) && + ($this->runLength[$i+1] == $fact) && + ($this->runLength[$i+2] == $fact)) { + if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) { + $demerit += N3; + } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) { + $demerit += N3; + } + } + } + } + } + return $demerit; + } + + //---------------------------------------------------------------------- + public function evaluateSymbol($width, $frame) + { + $head = 0; + $demerit = 0; + + for($y=0; $y<$width; $y++) { + $head = 0; + $this->runLength[0] = 1; + + $frameY = $frame[$y]; + + if ($y>0) + $frameYM = $frame[$y-1]; + + for($x=0; $x<$width; $x++) { + if(($x > 0) && ($y > 0)) { + $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]); + $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]); + + if(($b22 | ($w22 ^ 1))&1) { + $demerit += N2; + } + } + if(($x == 0) && (ord($frameY[$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($x > 0) { + if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + for($x=0; $x<$width; $x++) { + $head = 0; + $this->runLength[0] = 1; + + for($y=0; $y<$width; $y++) { + if($y == 0 && (ord($frame[$y][$x]) & 1)) { + $this->runLength[0] = -1; + $head = 1; + $this->runLength[$head] = 1; + } else if($y > 0) { + if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) { + $head++; + $this->runLength[$head] = 1; + } else { + $this->runLength[$head]++; + } + } + } + + $demerit += $this->calcN1N3($head+1); + } + + return $demerit; + } + + + //---------------------------------------------------------------------- + public function mask($width, $frame, $level) + { + $minDemerit = PHP_INT_MAX; + $bestMaskNum = 0; + $bestMask = array(); + + $checked_masks = array(0,1,2,3,4,5,6,7); + + if (QR_FIND_FROM_RANDOM !== false) { + + $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9); + for ($i = 0; $i < $howManuOut; $i++) { + $remPos = rand (0, count($checked_masks)-1); + unset($checked_masks[$remPos]); + $checked_masks = array_values($checked_masks); + } + + } + + $bestMask = $frame; + + foreach($checked_masks as $i) { + $mask = array_fill(0, $width, str_repeat("\0", $width)); + + $demerit = 0; + $blacks = 0; + $blacks = $this->makeMaskNo($i, $width, $frame, $mask); + $blacks += $this->writeFormatInformation($width, $mask, $i, $level); + $blacks = (int)(100 * $blacks / ($width * $width)); + $demerit = (int)((int)(abs($blacks - 50) / 5) * N4); + $demerit += $this->evaluateSymbol($width, $mask); + + if($demerit < $minDemerit) { + $minDemerit = $demerit; + $bestMask = $mask; + $bestMaskNum = $i; + } + } + + return $bestMask; + } + + //---------------------------------------------------------------------- + } + + + + +//---- qrencode.php ----------------------------- + + + + +/* + * PHP QR Code encoder + * + * Main encoder classes. + * + * Based on libqrencode C library distributed under LGPL 2.1 + * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi + * + * PHP QR Code is distributed under LGPL 3 + * Copyright (C) 2010 Dominik Dzienia + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + + class QRrsblock { + public $dataLength; + public $data = array(); + public $eccLength; + public $ecc = array(); + + public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs) + { + $rs->encode_rs_char($data, $ecc); + + $this->dataLength = $dl; + $this->data = $data; + $this->eccLength = $el; + $this->ecc = $ecc; + } + }; + + //########################################################################## + + class QRrawcode { + public $version; + public $datacode = array(); + public $ecccode = array(); + public $blocks; + public $rsblocks = array(); //of RSblock + public $count; + public $dataLength; + public $eccLength; + public $b1; + + //---------------------------------------------------------------------- + public function __construct(QRinput $input) + { + $spec = array(0,0,0,0,0); + + $this->datacode = $input->getByteStream(); + if(is_null($this->datacode)) { + throw new Exception('null imput string'); + } + + QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec); + + $this->version = $input->getVersion(); + $this->b1 = QRspec::rsBlockNum1($spec); + $this->dataLength = QRspec::rsDataLength($spec); + $this->eccLength = QRspec::rsEccLength($spec); + $this->ecccode = array_fill(0, $this->eccLength, 0); + $this->blocks = QRspec::rsBlockNum($spec); + + $ret = $this->init($spec); + if($ret < 0) { + throw new Exception('block alloc error'); + return null; + } + + $this->count = 0; + } + + //---------------------------------------------------------------------- + public function init(array $spec) + { + $dl = QRspec::rsDataCodes1($spec); + $el = QRspec::rsEccCodes1($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + + $blockNo = 0; + $dataPos = 0; + $eccPos = 0; + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + if(QRspec::rsBlockNum2($spec) == 0) + return 0; + + $dl = QRspec::rsDataCodes2($spec); + $el = QRspec::rsEccCodes2($spec); + $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el); + + if($rs == NULL) return -1; + + for($i=0; $iecccode,$eccPos); + $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs); + $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc); + + $dataPos += $dl; + $eccPos += $el; + $blockNo++; + } + + return 0; + } + + //---------------------------------------------------------------------- + public function getCode() + { + $ret = null; + + if($this->count < $this->dataLength) { + $row = $this->count % $this->blocks; + $col = $this->count / $this->blocks; + if($col >= $this->rsblocks[0]->dataLength) { + $row += $this->b1; + } + $ret = $this->rsblocks[$row]->data[$col]; + } else if($this->count < $this->dataLength + $this->eccLength) { + $row = ($this->count - $this->dataLength) % $this->blocks; + $col = ($this->count - $this->dataLength) / $this->blocks; + $ret = $this->rsblocks[$row]->ecc[$col]; + } else { + return 0; + } + $this->count++; + + return $ret; + } + } + + //########################################################################## + + class QRcode { + + public $version; + public $width; + public $data; + + //---------------------------------------------------------------------- + public function encodeMask(QRinput $input, $mask) + { + if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) { + throw new Exception('wrong version'); + } + if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) { + throw new Exception('wrong level'); + } + + $raw = new QRrawcode($input); + + QRtools::markTime('after_raw'); + + $version = $raw->version; + $width = QRspec::getWidth($version); + $frame = QRspec::newFrame($version); + + $filler = new FrameFiller($width, $frame); + if(is_null($filler)) { + return NULL; + } + + // inteleaved data and ecc codes + for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) { + $code = $raw->getCode(); + $bit = 0x80; + for($j=0; $j<8; $j++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0)); + $bit = $bit >> 1; + } + } + + QRtools::markTime('after_filler'); + + unset($raw); + + // remainder bits + $j = QRspec::getRemainder($version); + for($i=0; $i<$j; $i++) { + $addr = $filler->next(); + $filler->setFrameAt($addr, 0x02); + } + + $frame = $filler->frame; + unset($filler); + + + // masking + $maskObj = new QRmask(); + if($mask < 0) { + + if (QR_FIND_BEST_MASK) { + $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel()); + } else { + $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel()); + } + } else { + $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel()); + } + + if($masked == NULL) { + return NULL; + } + + QRtools::markTime('after_mask'); + + $this->version = $version; + $this->width = $width; + $this->data = $masked; + + return $this; + } + + //---------------------------------------------------------------------- + public function encodeInput(QRinput $input) + { + return $this->encodeMask($input, -1); + } + + //---------------------------------------------------------------------- + public function encodeString8bit($string, $version, $level) + { + if(string == NULL) { + throw new Exception('empty string!'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string)); + if($ret < 0) { + unset($input); + return NULL; + } + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public function encodeString($string, $version, $level, $hint, $casesensitive) + { + + if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) { + throw new Exception('bad hint'); + return NULL; + } + + $input = new QRinput($version, $level); + if($input == NULL) return NULL; + + $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive); + if($ret < 0) { + return NULL; + } + + return $this->encodeInput($input); + } + + //---------------------------------------------------------------------- + public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodePNG($text, $outfile, $saveandprint=false); + } + + //---------------------------------------------------------------------- + public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encode($text, $outfile); + } + + //---------------------------------------------------------------------- + public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = QRencode::factory($level, $size, $margin); + return $enc->encodeRAW($text, $outfile); + } + } + + //########################################################################## + + class FrameFiller { + + public $width; + public $frame; + public $x; + public $y; + public $dir; + public $bit; + + //---------------------------------------------------------------------- + public function __construct($width, &$frame) + { + $this->width = $width; + $this->frame = $frame; + $this->x = $width - 1; + $this->y = $width - 1; + $this->dir = -1; + $this->bit = -1; + } + + //---------------------------------------------------------------------- + public function setFrameAt($at, $val) + { + $this->frame[$at['y']][$at['x']] = chr($val); + } + + //---------------------------------------------------------------------- + public function getFrameAt($at) + { + return ord($this->frame[$at['y']][$at['x']]); + } + + //---------------------------------------------------------------------- + public function next() + { + do { + + if($this->bit == -1) { + $this->bit = 0; + return array('x'=>$this->x, 'y'=>$this->y); + } + + $x = $this->x; + $y = $this->y; + $w = $this->width; + + if($this->bit == 0) { + $x--; + $this->bit++; + } else { + $x++; + $y += $this->dir; + $this->bit--; + } + + if($this->dir < 0) { + if($y < 0) { + $y = 0; + $x -= 2; + $this->dir = 1; + if($x == 6) { + $x--; + $y = 9; + } + } + } else { + if($y == $w) { + $y = $w - 1; + $x -= 2; + $this->dir = -1; + if($x == 6) { + $x--; + $y -= 8; + } + } + } + if($x < 0 || $y < 0) return null; + + $this->x = $x; + $this->y = $y; + + } while(ord($this->frame[$y][$x]) & 0x80); + + return array('x'=>$x, 'y'=>$y); + } + + } ; + + //########################################################################## + + class QRencode { + + public $casesensitive = true; + public $eightbit = false; + + public $version = 0; + public $size = 3; + public $margin = 4; + + public $structured = 0; // not supported yet + + public $level = QR_ECLEVEL_L; + public $hint = QR_MODE_8; + + //---------------------------------------------------------------------- + public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4) + { + $enc = new QRencode(); + $enc->size = $size; + $enc->margin = $margin; + + switch ($level.'') { + case '0': + case '1': + case '2': + case '3': + $enc->level = $level; + break; + case 'l': + case 'L': + $enc->level = QR_ECLEVEL_L; + break; + case 'm': + case 'M': + $enc->level = QR_ECLEVEL_M; + break; + case 'q': + case 'Q': + $enc->level = QR_ECLEVEL_Q; + break; + case 'h': + case 'H': + $enc->level = QR_ECLEVEL_H; + break; + } + + return $enc; + } + + //---------------------------------------------------------------------- + public function encodeRAW($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + return $code->data; + } + + //---------------------------------------------------------------------- + public function encode($intext, $outfile = false) + { + $code = new QRcode(); + + if($this->eightbit) { + $code->encodeString8bit($intext, $this->version, $this->level); + } else { + $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive); + } + + QRtools::markTime('after_encode'); + + if ($outfile!== false) { + file_put_contents($outfile, join("\n", QRtools::binarize($code->data))); + } else { + return QRtools::binarize($code->data); + } + } + + //---------------------------------------------------------------------- + public function encodePNG($intext, $outfile = false,$saveandprint=false) + { + try { + + ob_start(); + $tab = $this->encode($intext); + $err = ob_get_contents(); + ob_end_clean(); + + if ($err != '') + QRtools::log($outfile, $err); + + $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin)); + + QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint); + + } catch (Exception $e) { + + QRtools::log($outfile, $e->getMessage()); + + } + } + } + + diff --git a/externals/porter-stemmer/LICENSE b/externals/porter-stemmer/LICENSE new file mode 100644 index 0000000000..d4afc6cfa7 --- /dev/null +++ b/externals/porter-stemmer/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2005-2016 Richard Heyes (http://www.phpguru.org/) + +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/porter-stemmer/README.md b/externals/porter-stemmer/README.md new file mode 100644 index 0000000000..06bc417f9f --- /dev/null +++ b/externals/porter-stemmer/README.md @@ -0,0 +1,42 @@ +# Porter Stemmer by Richard Heyes + +# Installation (with composer) + +```json +{ + "require": { + "camspiers/porter-stemmer": "1.0.0" + } +} +``` + + $ composer install + +# Usage + +```php +$stem = Porter::Stem($word); +``` + +# License + +The MIT License (MIT) + +Copyright (c) 2005-2016 Richard Heyes (http://www.phpguru.org/) + +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/porter-stemmer/src/Porter.php b/externals/porter-stemmer/src/Porter.php new file mode 100644 index 0000000000..b8715dade1 --- /dev/null +++ b/externals/porter-stemmer/src/Porter.php @@ -0,0 +1,426 @@ + + * + * Originally available under the GPL 2 or greater. Relicensed with permission + * of original authors under the MIT License in 2016. + * + * All rights reserved. + * + * @package PorterStemmer + * @author Richard Heyes + * @author Jon Abernathy + * @copyright 2005-2016 Richard Heyes (http://www.phpguru.org/) + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ + +/** + * PHP 5 Implementation of the Porter Stemmer algorithm. Certain elements + * were borrowed from the (broken) implementation by Jon Abernathy. + * + * See http://tartarus.org/~martin/PorterStemmer/ for a description of the + * algorithm. + * + * Usage: + * + * $stem = PorterStemmer::Stem($word); + * + * How easy is that? + * + * @package PorterStemmer + * @author Richard Heyes + * @author Jon Abernathy + * @copyright 2005-2016 Richard Heyes (http://www.phpguru.org/) + * @license http://www.opensource.org/licenses/mit-license.html MIT License + */ +class Porter +{ + /** + * Regex for matching a consonant + * + * @var string + */ + private static $regex_consonant = '(?:[bcdfghjklmnpqrstvwxz]|(?<=[aeiou])y|^y)'; + + /** + * Regex for matching a vowel + * + * @var string + */ + private static $regex_vowel = '(?:[aeiou]|(? 1) { + self::replace($word, 'e', ''); + + } elseif (self::m(substr($word, 0, -1)) == 1) { + + if (!self::cvc(substr($word, 0, -1))) { + self::replace($word, 'e', ''); + } + } + } + + // Part b + if (self::m($word) > 1 AND self::doubleConsonant($word) AND substr($word, -1) == 'l') { + $word = substr($word, 0, -1); + } + + return $word; + } + + /** + * Replaces the first string with the second, at the end of the string + * + * If third arg is given, then the preceding string must match that m + * count at least. + * + * @param string $str String to check + * @param string $check Ending to check for + * @param string $repl Replacement string + * @param int $m Optional minimum number of m() to meet + * + * @return bool Whether the $check string was at the end of the $str + * string. True does not necessarily mean that it was + * replaced. + */ + private static function replace(&$str, $check, $repl, $m = null) + { + $len = 0 - strlen($check); + + if (substr($str, $len) == $check) { + $substr = substr($str, 0, $len); + if (is_null($m) OR self::m($substr) > $m) { + $str = $substr . $repl; + } + + return true; + } + + return false; + } + + /** + * What, you mean it's not obvious from the name? + * + * m() measures the number of consonant sequences in $str. if c is + * a consonant sequence and v a vowel sequence, and <..> indicates arbitrary + * presence, + * + * gives 0 + * vc gives 1 + * vcvc gives 2 + * vcvcvc gives 3 + * + * @param string $str The string to return the m count for + * + * @return int The m count + */ + private static function m($str) + { + $c = self::$regex_consonant; + $v = self::$regex_vowel; + + $str = preg_replace("#^$c+#", '', $str); + $str = preg_replace("#$v+$#", '', $str); + + preg_match_all("#($v+$c+)#", $str, $matches); + + return count($matches[1]); + } + + /** + * Returns true/false as to whether the given string contains two + * of the same consonant next to each other at the end of the string. + * + * @param string $str String to check + * + * @return bool Result + */ + private static function doubleConsonant($str) + { + $c = self::$regex_consonant; + + return preg_match("#$c{2}$#", $str, $matches) AND $matches[0][0] == $matches[0][1]; + } + + /** + * Checks for ending CVC sequence where second C is not W, X or Y + * + * @param string $str String to check + * + * @return bool Result + */ + private static function cvc($str) + { + $c = self::$regex_consonant; + $v = self::$regex_vowel; + + return preg_match("#($c$v$c)$#", $str, $matches) + AND strlen($matches[1]) == 3 + AND $matches[1][2] != 'w' + AND $matches[1][2] != 'x' + AND $matches[1][2] != 'y'; + } +} diff --git a/externals/raphael/g.raphael.js b/externals/raphael/g.raphael.js deleted file mode 100644 index 676f60860a..0000000000 --- a/externals/raphael/g.raphael.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @provides raphael-g - * @do-not-minify - */ -/*! - * g.Raphael 0.5 - Charting library, based on Raphaël - * - * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) - * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. - */ -Raphael.el.popup=function(d,k,h,g){var c=this.paper||this[0].paper,f,j,b,e,a;if(!c){return}switch(this.type){case"text":case"circle":case"ellipse":b=true;break;default:b=false}d=d==null?"up":d;k=k||5;f=this.getBBox();h=typeof h=="number"?h:(b?f.x+f.width/2:f.x);g=typeof g=="number"?g:(b?f.y+f.height/2:f.y);e=Math.max(f.width/2-k,0);a=Math.max(f.height/2-k,0);this.translate(h-f.x-(b?f.width/2:0),g-f.y-(b?f.height/2:0));f=this.getBBox();var i={up:["M",h,g,"l",-k,-k,-e,0,"a",k,k,0,0,1,-k,-k,"l",0,-f.height,"a",k,k,0,0,1,k,-k,"l",k*2+e*2,0,"a",k,k,0,0,1,k,k,"l",0,f.height,"a",k,k,0,0,1,-k,k,"l",-e,0,"z"].join(","),down:["M",h,g,"l",k,k,e,0,"a",k,k,0,0,1,k,k,"l",0,f.height,"a",k,k,0,0,1,-k,k,"l",-(k*2+e*2),0,"a",k,k,0,0,1,-k,-k,"l",0,-f.height,"a",k,k,0,0,1,k,-k,"l",e,0,"z"].join(","),left:["M",h,g,"l",-k,k,0,a,"a",k,k,0,0,1,-k,k,"l",-f.width,0,"a",k,k,0,0,1,-k,-k,"l",0,-(k*2+a*2),"a",k,k,0,0,1,k,-k,"l",f.width,0,"a",k,k,0,0,1,k,k,"l",0,a,"z"].join(","),right:["M",h,g,"l",k,-k,0,-a,"a",k,k,0,0,1,k,-k,"l",f.width,0,"a",k,k,0,0,1,k,k,"l",0,k*2+a*2,"a",k,k,0,0,1,-k,k,"l",-f.width,0,"a",k,k,0,0,1,-k,-k,"l",0,-a,"z"].join(",")};j={up:{x:-!b*(f.width/2),y:-k*2-(b?f.height/2:f.height)},down:{x:-!b*(f.width/2),y:k*2+(b?f.height/2:f.height)},left:{x:-k*2-(b?f.width/2:f.width),y:-!b*(f.height/2)},right:{x:k*2+(b?f.width/2:f.width),y:-!b*(f.height/2)}}[d];this.translate(j.x,j.y);return c.path(i[d]).attr({fill:"#000",stroke:"none"}).insertBefore(this.node?this:this[0])};Raphael.el.tag=function(f,b,l,k){var i=3,e=this.paper||this[0].paper;if(!e){return}var c=e.path().attr({fill:"#000",stroke:"#000"}),j=this.getBBox(),m,h,a,g;switch(this.type){case"text":case"circle":case"ellipse":a=true;break;default:a=false}f=f||0;l=typeof l=="number"?l:(a?j.x+j.width/2:j.x);k=typeof k=="number"?k:(a?j.y+j.height/2:j.y);b=b==null?5:b;h=0.5522*b;if(j.height>=b*2){c.attr({path:["M",l,k+b,"a",b,b,0,1,1,0,-b*2,b,b,0,1,1,0,b*2,"m",0,-b*2-i,"a",b+i,b+i,0,1,0,0,(b+i)*2,"L",l+b+i,k+j.height/2+i,"l",j.width+2*i,0,0,-j.height-2*i,-j.width-2*i,0,"L",l,k-b-i].join(",")})}else{m=Math.sqrt(Math.pow(b+i,2)-Math.pow(j.height/2+i,2));c.attr({path:["M",l,k+b,"c",-h,0,-b,h-b,-b,-b,0,-h,b-h,-b,b,-b,h,0,b,b-h,b,b,0,h,h-b,b,-b,b,"M",l+m,k-j.height/2-i,"a",b+i,b+i,0,1,0,0,j.height+2*i,"l",b+i-m+j.width+2*i,0,0,-j.height-2*i,"L",l+m,k-j.height/2-i].join(",")})}f=360-f;c.rotate(f,l,k);if(this.attrs){this.attr(this.attrs.x?"x":"cx",l+b+i+(!a?this.type=="text"?j.width:0:j.width/2)).attr("y",a?k:k-j.height/2);this.rotate(f,l,k);f>90&&f<270&&this.attr(this.attrs.x?"x":"cx",l-b-i-(!a?j.width:j.width/2)).rotate(180,l,k)}else{if(f>90&&f<270){this.translate(l-j.x-j.width-b-i,k-j.y-j.height/2);this.rotate(f-180,j.x+j.width+b+i,j.y+j.height/2)}else{this.translate(l-j.x+b+i,k-j.y-j.height/2);this.rotate(f,j.x-b-i,j.y+j.height/2)}}return c.insertBefore(this.node?this:this[0])};Raphael.el.drop=function(d,g,f){var e=this.getBBox(),c=this.paper||this[0].paper,a,j,b,i,h;if(!c){return}switch(this.type){case"text":case"circle":case"ellipse":a=true;break;default:a=false}d=d||0;g=typeof g=="number"?g:(a?e.x+e.width/2:e.x);f=typeof f=="number"?f:(a?e.y+e.height/2:e.y);j=Math.max(e.width,e.height)+Math.min(e.width,e.height);b=c.path(["M",g,f,"l",j,0,"A",j*0.4,j*0.4,0,1,0,g+j*0.7,f-j*0.7,"z"]).attr({fill:"#000",stroke:"none"}).rotate(22.5-d,g,f);d=(d+90)*Math.PI/180;i=(g+j*Math.sin(d))-(a?0:e.width/2);h=(f+j*Math.cos(d))-(a?0:e.height/2);this.attrs?this.attr(this.attrs.x?"x":"cx",i).attr(this.attrs.y?"y":"cy",h):this.translate(i-e.x,h-e.y);return b.insertBefore(this.node?this:this[0])};Raphael.el.flag=function(e,k,j){var g=3,c=this.paper||this[0].paper;if(!c){return}var b=c.path().attr({fill:"#000",stroke:"#000"}),i=this.getBBox(),f=i.height/2,a;switch(this.type){case"text":case"circle":case"ellipse":a=true;break;default:a=false}e=e||0;k=typeof k=="number"?k:(a?i.x+i.width/2:i.x);j=typeof j=="number"?j:(a?i.y+i.height/2:i.y);b.attr({path:["M",k,j,"l",f+g,-f-g,i.width+2*g,0,0,i.height+2*g,-i.width-2*g,0,"z"].join(",")});e=360-e;b.rotate(e,k,j);if(this.attrs){this.attr(this.attrs.x?"x":"cx",k+f+g+(!a?this.type=="text"?i.width:0:i.width/2)).attr("y",a?j:j-i.height/2);this.rotate(e,k,j);e>90&&e<270&&this.attr(this.attrs.x?"x":"cx",k-f-g-(!a?i.width:i.width/2)).rotate(180,k,j)}else{if(e>90&&e<270){this.translate(k-i.x-i.width-f-g,j-i.y-i.height/2);this.rotate(e-180,i.x+i.width+f+g,i.y+i.height/2)}else{this.translate(k-i.x+f+g,j-i.y-i.height/2);this.rotate(e,i.x-f-g,i.y+i.height/2)}}return b.insertBefore(this.node?this:this[0])};Raphael.el.label=function(){var c=this.getBBox(),b=this.paper||this[0].paper,a=Math.min(20,c.width+10,c.height+10)/2;if(!b){return}return b.rect(c.x-a/2,c.y-a/2,c.width+a,c.height+a,a).attr({stroke:"none",fill:"#000"}).insertBefore(this.node?this:this[0])};Raphael.el.blob=function(z,j,i){var g=this.getBBox(),B=Math.PI/180,n=this.paper||this[0].paper,r,A,q;if(!n){return}switch(this.type){case"text":case"circle":case"ellipse":A=true;break;default:A=false}r=n.path().attr({fill:"#000",stroke:"none"});z=(+z+1?z:45)+90;q=Math.min(g.height,g.width);j=typeof j=="number"?j:(A?g.x+g.width/2:g.x);i=typeof i=="number"?i:(A?g.y+g.height/2:g.y);var m=Math.max(g.width+q,q*25/12),t=Math.max(g.height+q,q*25/12),u=j+q*Math.sin((z-22.5)*B),b=i+q*Math.cos((z-22.5)*B),v=j+q*Math.sin((z+22.5)*B),d=i+q*Math.cos((z+22.5)*B),o=(v-u)/2,l=(d-b)/2,f=m/2,e=t/2,s=-Math.sqrt(Math.abs(f*f*e*e-f*f*l*l-e*e*o*o)/(f*f*l*l+e*e*o*o)),c=s*f*l/e+(v+u)/2,a=s*-e*o/f+(d+b)/2;r.attr({x:c,y:a,path:["M",j,i,"L",v,d,"A",f,e,0,1,1,u,b,"z"].join(",")});this.translate(c-g.x-g.width/2,a-g.y-g.height/2);return r.insertBefore(this.node?this:this[0])};Raphael.fn.label=function(a,d,b){var c=this.set();b=this.text(a,d,b).attr(Raphael.g.txtattr);return c.push(b.label(),b)};Raphael.fn.popup=function(a,f,d,b,c){var e=this.set();d=this.text(a,f,d).attr(Raphael.g.txtattr);return e.push(d.popup(b,c),d)};Raphael.fn.tag=function(a,f,d,c,b){var e=this.set();d=this.text(a,f,d).attr(Raphael.g.txtattr);return e.push(d.tag(c,b),d)};Raphael.fn.flag=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.flag(b),c)};Raphael.fn.drop=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.drop(b),c)};Raphael.fn.blob=function(a,e,c,b){var d=this.set();c=this.text(a,e,c).attr(Raphael.g.txtattr);return d.push(c.blob(b),c)};Raphael.el.lighter=function(b){b=b||2;var a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].b=Math.min(a[0].b*b,1);a[0].s=a[0].s/b;a[1].b=Math.min(a[1].b*b,1);a[1].s=a[1].s/b;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this};Raphael.el.darker=function(b){b=b||2;var a=[this.attrs.fill,this.attrs.stroke];this.fs=this.fs||[a[0],a[1]];a[0]=Raphael.rgb2hsb(Raphael.getRGB(a[0]).hex);a[1]=Raphael.rgb2hsb(Raphael.getRGB(a[1]).hex);a[0].s=Math.min(a[0].s*b,1);a[0].b=a[0].b/b;a[1].s=Math.min(a[1].s*b,1);a[1].b=a[1].b/b;this.attr({fill:"hsb("+[a[0].h,a[0].s,a[0].b]+")",stroke:"hsb("+[a[1].h,a[1].s,a[1].b]+")"});return this};Raphael.el.resetBrightness=function(){if(this.fs){this.attr({fill:this.fs[0],stroke:this.fs[1]});delete this.fs}return this};(function(){var c=["lighter","darker","resetBrightness"],a=["popup","tag","flag","label","drop","blob"];for(var b in a){(function(d){Raphael.st[d]=function(){return Raphael.el[d].apply(this,arguments)}})(a[b])}for(var b in c){(function(d){Raphael.st[d]=function(){for(var e=0;e0?0:0.5))*Math.pow(10,b))/Math.pow(10,b);return{from:e,to:l,power:b}},axis:function(p,o,k,D,e,G,g,J,h,a,q){a=a==null?2:a;h=h||"t";G=G||10;q=arguments[arguments.length-1];var C=h=="|"||h==" "?["M",p+0.5,o,"l",0,0.001]:g==1||g==3?["M",p+0.5,o,"l",0,-k]:["M",p,o+0.5,"l",k,0],s=this.snapEnds(D,e,G),H=s.from,z=s.to,F=s.power,E=0,w={font:"11px 'Fontin Sans', Fontin-Sans, sans-serif"},v=q.set(),I;I=(z-H)/G;var n=H,m=F>0?F:0;r=k/G;if(+g==1||+g==3){var b=o,u=(g-1?1:-1)*(a+3+!!(g-1));while(b>=o-k){h!="-"&&h!=" "&&(C=C.concat(["M",p-(h=="+"||h=="|"?a:!(g-1)*a*2),b+0.5,"l",a*2+1,0]));v.push(q.text(p+u,b,(J&&J[E++])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w).attr({"text-anchor":g-1?"start":"end"}));n+=I;b-=r}if(Math.round(b+r-(o-k))){h!="-"&&h!=" "&&(C=C.concat(["M",p-(h=="+"||h=="|"?a:!(g-1)*a*2),o-k+0.5,"l",a*2+1,0]));v.push(q.text(p+u,o-k,(J&&J[E])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w).attr({"text-anchor":g-1?"start":"end"}))}}else{n=H;m=(F>0)*F;u=(g?-1:1)*(a+9+!g);var c=p,r=k/G,A=0,B=0;while(c<=p+k){h!="-"&&h!=" "&&(C=C.concat(["M",c+0.5,o-(h=="+"?a:!!g*a*2),"l",0,a*2+1]));v.push(A=q.text(c,o+u,(J&&J[E++])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w));var l=A.getBBox();if(B>=l.x-5){v.pop(v.length-1).remove()}else{B=l.x+l.width}n+=I;c+=r}if(Math.round(c-r-p-k)){h!="-"&&h!=" "&&(C=C.concat(["M",p+k+0.5,o-(h=="+"?a:!!g*a*2),"l",0,a*2+1]));v.push(q.text(p+k,o+u,(J&&J[E])||(Math.round(n)==n?n:+n.toFixed(m))).attr(w))}}var K=q.path(C);K.text=v;K.all=q.set([K,v]);K.remove=function(){this.text.remove();this.constructor.prototype.remove.call(this)};return K},labelise:function(a,c,b){if(a){return(a+"").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g,function(d,f,e){if(f){return(+c).toFixed(f.replace(/^#+\.?/g,"").length)}if(e){return(c*100/b).toFixed(e.replace(/^%+\.?/g,"").length)+"%"}})}else{return(+c).toFixed(0)}}}; \ No newline at end of file diff --git a/externals/raphael/g.raphael.line.js b/externals/raphael/g.raphael.line.js deleted file mode 100644 index 2c8925ddc2..0000000000 --- a/externals/raphael/g.raphael.line.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @provides raphael-g-line - * @do-not-minify - */ -/*! - * g.Raphael 0.5 - Charting library, based on Raphaël - * - * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com) - * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. - */ -(function(){function a(g,n){var f=g.length/n,h=0,e=f,m=0,i=[];while(he-2*q){z[ac]=a(z[ac],e-2*q);B=e-2*q}if(A[ac]&&A[ac].length>e-2*q){A[ac]=a(A[ac],e-2*q)}}var W=Array.prototype.concat.apply([],A),U=Array.prototype.concat.apply([],z),u=s.snapEnds(Math.min.apply(Math,W),Math.max.apply(Math,W),A[0].length-1),E=u.from,o=u.to,N=s.snapEnds(Math.min.apply(Math,U),Math.max.apply(Math,U),z[0].length-1),C=N.from,n=N.to,Z=(e-q*2)/((o-E)||1),V=(h-q*2)/((n-C)||1);var G=f.set();if(J.axis){var m=(J.axis+"").split(/[,\s]+/);+m[0]&&G.push(s.axis(P+q,O+q,e-2*q,E,o,J.axisxstep||Math.floor((e-2*q)/20),2,f));+m[1]&&G.push(s.axis(P+e-q,O+h-q,h-2*q,C,n,J.axisystep||Math.floor((h-2*q)/20),3,f));+m[2]&&G.push(s.axis(P+q,O+h-q,e-2*q,E,o,J.axisxstep||Math.floor((e-2*q)/20),0,f));+m[3]&&G.push(s.axis(P+q,O+h-q,h-2*q,C,n,J.axisystep||Math.floor((h-2*q)/20),1,f))}var M=f.set(),aa=f.set(),r;for(ac=0,L=z.length;acf*b.top){e=b.percents[y],p=b.percents[y-1]||0,t=t/b.top*(e-p),o=b.percents[y+1],j=b.anim[e];break}f&&d.attr(b.anim[b.percents[y]])}if(!!j){if(!k){for(var A in j)if(j[g](A))if(U[g](A)||d.paper.customAttributes[g](A)){u[A]=d.attr(A),u[A]==null&&(u[A]=T[A]),v[A]=j[A];switch(U[A]){case C:w[A]=(v[A]-u[A])/t;break;case"colour":u[A]=a.getRGB(u[A]);var B=a.getRGB(v[A]);w[A]={r:(B.r-u[A].r)/t,g:(B.g-u[A].g)/t,b:(B.b-u[A].b)/t};break;case"path":var D=bG(u[A],v[A]),E=D[1];u[A]=D[0],w[A]=[];for(y=0,z=u[A].length;yd)return d;while(cf?c=e:d=e,e=(d-c)/2+c}return e}function n(a,b){var c=o(a,b);return((l*c+k)*c+j)*c}function m(a){return((i*a+h)*a+g)*a}var g=3*b,h=3*(d-b)-g,i=1-g-h,j=3*c,k=3*(e-c)-j,l=1-j-k;return n(a,1/(200*f))}function cd(){return this.x+q+this.y+q+this.width+" × "+this.height}function cc(){return this.x+q+this.y}function bQ(a,b,c,d,e,f){a!=null?(this.a=+a,this.b=+b,this.c=+c,this.d=+d,this.e=+e,this.f=+f):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}function bw(a){var b=[];for(var c=0,d=a.length;d-2>c;c+=2){var e=[{x:+a[c],y:+a[c+1]},{x:+a[c],y:+a[c+1]},{x:+a[c+2],y:+a[c+3]},{x:+a[c+4],y:+a[c+5]}];d-4==c?(e[0]={x:+a[c-2],y:+a[c-1]},e[3]=e[2]):c&&(e[0]={x:+a[c-2],y:+a[c-1]}),b.push(["C",(-e[0].x+6*e[1].x+e[2].x)/6,(-e[0].y+6*e[1].y+e[2].y)/6,(e[1].x+6*e[2].x-e[3].x)/6,(e[1].y+6*e[2].y-e[3].y)/6,e[2].x,e[2].y])}return b}function bv(){return this.hex}function bt(a,b,c){function d(){var e=Array.prototype.slice.call(arguments,0),f=e.join("␀"),h=d.cache=d.cache||{},i=d.count=d.count||[];if(h[g](f)){bs(i,f);return c?c(h[f]):h[f]}i.length>=1e3&&delete h[i.shift()],i.push(f),h[f]=a[m](b,e);return c?c(h[f]):h[f]}return d}function bs(a,b){for(var c=0,d=a.length;c',bk=bj.firstChild,bk.style.behavior="url(#default#VML)";if(!bk||typeof bk.adj!="object")return a.type=p;bj=null}a.svg=!(a.vml=a.type=="VML"),a._Paper=j,a.fn=k=j.prototype=a.prototype,a._id=0,a._oid=0,a.is=function(a,b){b=v.call(b);if(b=="finite")return!M[g](+a);if(b=="array")return a instanceof Array;return b=="null"&&a===null||b==typeof a&&a!==null||b=="object"&&a===Object(a)||b=="array"&&Array.isArray&&Array.isArray(a)||H.call(a).slice(8,-1).toLowerCase()==b},a.angle=function(b,c,d,e,f,g){if(f==null){var h=b-d,i=c-e;if(!h&&!i)return 0;return(180+w.atan2(-i,-h)*180/B+360)%360}return a.angle(b,c,f,g)-a.angle(d,e,f,g)},a.rad=function(a){return a%360*B/180},a.deg=function(a){return a*180/B%360},a.snapTo=function(b,c,d){d=a.is(d,"finite")?d:10;if(a.is(b,E)){var e=b.length;while(e--)if(z(b[e]-c)<=d)return b[e]}else{b=+b;var f=c%b;if(fb-d)return c-f+b}return c};var bl=a.createUUID=function(a,b){return function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(a,b).toUpperCase()}}(/[xy]/g,function(a){var b=w.random()*16|0,c=a=="x"?b:b&3|8;return c.toString(16)});a.setWindow=function(b){eve("setWindow",a,h.win,b),h.win=b,h.doc=h.win.document,a._engine.initWin&&a._engine.initWin(h.win)};var bm=function(b){if(a.vml){var c=/^\s+|\s+$/g,d;try{var e=new ActiveXObject("htmlfile");e.write(""),e.close(),d=e.body}catch(f){d=createPopup().document.body}var g=d.createTextRange();bm=bt(function(a){try{d.style.color=r(a).replace(c,p);var b=g.queryCommandValue("ForeColor");b=(b&255)<<16|b&65280|(b&16711680)>>>16;return"#"+("000000"+b.toString(16)).slice(-6)}catch(e){return"none"}})}else{var i=h.doc.createElement("i");i.title="Raphaël Colour Picker",i.style.display="none",h.doc.body.appendChild(i),bm=bt(function(a){i.style.color=a;return h.doc.defaultView.getComputedStyle(i,p).getPropertyValue("color")})}return bm(b)},bn=function(){return"hsb("+[this.h,this.s,this.b]+")"},bo=function(){return"hsl("+[this.h,this.s,this.l]+")"},bp=function(){return this.hex},bq=function(b,c,d){c==null&&a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b&&(d=b.b,c=b.g,b=b.r);if(c==null&&a.is(b,D)){var e=a.getRGB(b);b=e.r,c=e.g,d=e.b}if(b>1||c>1||d>1)b/=255,c/=255,d/=255;return[b,c,d]},br=function(b,c,d,e){b*=255,c*=255,d*=255;var f={r:b,g:c,b:d,hex:a.rgb(b,c,d),toString:bp};a.is(e,"finite")&&(f.opacity=e);return f};a.color=function(b){var c;a.is(b,"object")&&"h"in b&&"s"in b&&"b"in b?(c=a.hsb2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):a.is(b,"object")&&"h"in b&&"s"in b&&"l"in b?(c=a.hsl2rgb(b),b.r=c.r,b.g=c.g,b.b=c.b,b.hex=c.hex):(a.is(b,"string")&&(b=a.getRGB(b)),a.is(b,"object")&&"r"in b&&"g"in b&&"b"in b?(c=a.rgb2hsl(b),b.h=c.h,b.s=c.s,b.l=c.l,c=a.rgb2hsb(b),b.v=c.b):(b={hex:"none"},b.r=b.g=b.b=b.h=b.s=b.v=b.l=-1)),b.toString=bp;return b},a.hsb2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"b"in a&&(c=a.b,b=a.s,a=a.h,d=a.o),a*=360;var e,f,g,h,i;a=a%360/60,i=c*b,h=i*(1-z(a%2-1)),e=f=g=c-i,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.hsl2rgb=function(a,b,c,d){this.is(a,"object")&&"h"in a&&"s"in a&&"l"in a&&(c=a.l,b=a.s,a=a.h);if(a>1||b>1||c>1)a/=360,b/=100,c/=100;a*=360;var e,f,g,h,i;a=a%360/60,i=2*b*(c<.5?c:1-c),h=i*(1-z(a%2-1)),e=f=g=c-i/2,a=~~a,e+=[i,h,0,0,h,i][a],f+=[h,i,i,h,0,0][a],g+=[0,0,h,i,i,h][a];return br(e,f,g,d)},a.rgb2hsb=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g;f=x(a,b,c),g=f-y(a,b,c),d=g==0?null:f==a?(b-c)/g:f==b?(c-a)/g+2:(a-b)/g+4,d=(d+360)%6*60/360,e=g==0?0:g/f;return{h:d,s:e,b:f,toString:bn}},a.rgb2hsl=function(a,b,c){c=bq(a,b,c),a=c[0],b=c[1],c=c[2];var d,e,f,g,h,i;g=x(a,b,c),h=y(a,b,c),i=g-h,d=i==0?null:g==a?(b-c)/i:g==b?(c-a)/i+2:(a-b)/i+4,d=(d+360)%6*60/360,f=(g+h)/2,e=i==0?0:f<.5?i/(2*f):i/(2-2*f);return{h:d,s:e,l:f,toString:bo}},a._path2string=function(){return this.join(",").replace(X,"$1")};var bu=a._preload=function(a,b){var c=h.doc.createElement("img");c.style.cssText="position:absolute;left:-9999em;top:-9999em",c.onload=function(){b.call(this),this.onload=null,h.doc.body.removeChild(this)},c.onerror=function(){h.doc.body.removeChild(this)},h.doc.body.appendChild(c),c.src=a};a.getRGB=bt(function(b){if(!b||!!((b=r(b)).indexOf("-")+1))return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv};if(b=="none")return{r:-1,g:-1,b:-1,hex:"none",toString:bv};!W[g](b.toLowerCase().substring(0,2))&&b.charAt()!="#"&&(b=bm(b));var c,d,e,f,h,i,j,k=b.match(L);if(k){k[2]&&(f=R(k[2].substring(5),16),e=R(k[2].substring(3,5),16),d=R(k[2].substring(1,3),16)),k[3]&&(f=R((i=k[3].charAt(3))+i,16),e=R((i=k[3].charAt(2))+i,16),d=R((i=k[3].charAt(1))+i,16)),k[4]&&(j=k[4][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),k[1].toLowerCase().slice(0,4)=="rgba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100));if(k[5]){j=k[5][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsba"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsb2rgb(d,e,f,h)}if(k[6]){j=k[6][s](V),d=Q(j[0]),j[0].slice(-1)=="%"&&(d*=2.55),e=Q(j[1]),j[1].slice(-1)=="%"&&(e*=2.55),f=Q(j[2]),j[2].slice(-1)=="%"&&(f*=2.55),(j[0].slice(-3)=="deg"||j[0].slice(-1)=="°")&&(d/=360),k[1].toLowerCase().slice(0,4)=="hsla"&&(h=Q(j[3])),j[3]&&j[3].slice(-1)=="%"&&(h/=100);return a.hsl2rgb(d,e,f,h)}k={r:d,g:e,b:f,toString:bv},k.hex="#"+(16777216|f|e<<8|d<<16).toString(16).slice(1),a.is(h,"finite")&&(k.opacity=h);return k}return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:bv}},a),a.hsb=bt(function(b,c,d){return a.hsb2rgb(b,c,d).hex}),a.hsl=bt(function(b,c,d){return a.hsl2rgb(b,c,d).hex}),a.rgb=bt(function(a,b,c){return"#"+(16777216|c|b<<8|a<<16).toString(16).slice(1)}),a.getColor=function(a){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:a||.75},c=this.hsb2rgb(b.h,b.s,b.b);b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b}));return c.hex},a.getColor.reset=function(){delete this.start},a.parsePathString=bt(function(b){if(!b)return null;var c={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=by(b)),d.length||r(b).replace(Y,function(a,b,e){var f=[],g=b.toLowerCase();e.replace($,function(a,b){b&&f.push(+b)}),g=="m"&&f.length>2&&(d.push([b][n](f.splice(0,2))),g="l",b=b=="m"?"l":"L");if(g=="r")d.push([b][n](f));else while(f.length>=c[g]){d.push([b][n](f.splice(0,c[g])));if(!c[g])break}}),d.toString=a._path2string;return d}),a.parseTransformString=bt(function(b){if(!b)return null;var c={r:3,s:4,t:2,m:6},d=[];a.is(b,E)&&a.is(b[0],E)&&(d=by(b)),d.length||r(b).replace(Z,function(a,b,c){var e=[],f=v.call(b);c.replace($,function(a,b){b&&e.push(+b)}),d.push([b][n](e))}),d.toString=a._path2string;return d}),a.findDotsAtSegment=function(a,b,c,d,e,f,g,h,i){var j=1-i,k=A(j,3),l=A(j,2),m=i*i,n=m*i,o=k*a+l*3*i*c+j*3*i*i*e+n*g,p=k*b+l*3*i*d+j*3*i*i*f+n*h,q=a+2*i*(c-a)+m*(e-2*c+a),r=b+2*i*(d-b)+m*(f-2*d+b),s=c+2*i*(e-c)+m*(g-2*e+c),t=d+2*i*(f-d)+m*(h-2*f+d),u=j*a+i*c,v=j*b+i*d,x=j*e+i*g,y=j*f+i*h,z=90-w.atan2(q-s,r-t)*180/B;(q>s||r1&&(v=w.sqrt(v),c=v*c,d=v*d);var x=c*c,y=d*d,A=(f==g?-1:1)*w.sqrt(z((x*y-x*u*u-y*t*t)/(x*u*u+y*t*t))),C=A*c*u/d+(a+h)/2,D=A*-d*t/c+(b+i)/2,E=w.asin(((b-D)/d).toFixed(9)),F=w.asin(((i-D)/d).toFixed(9));E=aF&&(E=E-B*2),!g&&F>E&&(F=F-B*2)}else E=j[0],F=j[1],C=j[2],D=j[3];var G=F-E;if(z(G)>k){var H=F,I=h,J=i;F=E+k*(g&&F>E?1:-1),h=C+c*w.cos(F),i=D+d*w.sin(F),m=bD(h,i,c,d,e,0,g,I,J,[F,H,C,D])}G=F-E;var K=w.cos(E),L=w.sin(E),M=w.cos(F),N=w.sin(F),O=w.tan(G/4),P=4/3*c*O,Q=4/3*d*O,R=[a,b],S=[a+P*L,b-Q*K],T=[h+P*N,i-Q*M],U=[h,i];S[0]=2*R[0]-S[0],S[1]=2*R[1]-S[1];if(j)return[S,T,U][n](m);m=[S,T,U][n](m).join()[s](",");var V=[];for(var W=0,X=m.length;W"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bE(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bE(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y)),i=f-2*d+b-(h-2*f+d),j=2*(d-b)-2*(f-d),k=b-d,l=(-j+w.sqrt(j*j-4*i*k))/2/i,n=(-j-w.sqrt(j*j-4*i*k))/2/i,z(l)>"1e12"&&(l=.5),z(n)>"1e12"&&(n=.5),l>0&&l<1&&(q=bE(a,b,c,d,e,f,g,h,l),p.push(q.x),o.push(q.y)),n>0&&n<1&&(q=bE(a,b,c,d,e,f,g,h,n),p.push(q.x),o.push(q.y));return{min:{x:y[m](0,p),y:y[m](0,o)},max:{x:x[m](0,p),y:x[m](0,o)}}}),bG=a._path2curve=bt(function(a,b){var c=bA(a),d=b&&bA(b),e={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},f={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},g=function(a,b){var c,d;if(!a)return["C",b.x,b.y,b.x,b.y,b.x,b.y];!(a[0]in{T:1,Q:1})&&(b.qx=b.qy=null);switch(a[0]){case"M":b.X=a[1],b.Y=a[2];break;case"A":a=["C"][n](bD[m](0,[b.x,b.y][n](a.slice(1))));break;case"S":c=b.x+(b.x-(b.bx||b.x)),d=b.y+(b.y-(b.by||b.y)),a=["C",c,d][n](a.slice(1));break;case"T":b.qx=b.x+(b.x-(b.qx||b.x)),b.qy=b.y+(b.y-(b.qy||b.y)),a=["C"][n](bC(b.x,b.y,b.qx,b.qy,a[1],a[2]));break;case"Q":b.qx=a[1],b.qy=a[2],a=["C"][n](bC(b.x,b.y,a[1],a[2],a[3],a[4]));break;case"L":a=["C"][n](bB(b.x,b.y,a[1],a[2]));break;case"H":a=["C"][n](bB(b.x,b.y,a[1],b.y));break;case"V":a=["C"][n](bB(b.x,b.y,b.x,a[1]));break;case"Z":a=["C"][n](bB(b.x,b.y,b.X,b.Y))}return a},h=function(a,b){if(a[b].length>7){a[b].shift();var e=a[b];while(e.length)a.splice(b++,0,["C"][n](e.splice(0,6)));a.splice(b,1),k=x(c.length,d&&d.length||0)}},i=function(a,b,e,f,g){a&&b&&a[g][0]=="M"&&b[g][0]!="M"&&(b.splice(g,0,["M",f.x,f.y]),e.bx=0,e.by=0,e.x=a[g][1],e.y=a[g][2],k=x(c.length,d&&d.length||0))};for(var j=0,k=x(c.length,d&&d.length||0);j=j)return p;o=p}if(j==null)return k},cg=function(b,c){return function(d,e,f){d=bG(d);var g,h,i,j,k="",l={},m,n=0;for(var o=0,p=d.length;oe){if(c&&!l.start){m=cf(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n),k+=["C"+m.start.x,m.start.y,m.m.x,m.m.y,m.x,m.y];if(f)return k;l.start=k,k=["M"+m.x,m.y+"C"+m.n.x,m.n.y,m.end.x,m.end.y,i[5],i[6]].join(),n+=j,g=+i[5],h=+i[6];continue}if(!b&&!c){m=cf(g,h,i[1],i[2],i[3],i[4],i[5],i[6],e-n);return{x:m.x,y:m.y,alpha:m.alpha}}}n+=j,g=+i[5],h=+i[6]}k+=i.shift()+i}l.end=k,m=b?n:c?l:a.findDotsAtSegment(g,h,i[0],i[1],i[2],i[3],i[4],i[5],1),m.alpha&&(m={x:m.x,y:m.y,alpha:m.alpha});return m}},ch=cg(1),ci=cg(),cj=cg(0,1);a.getTotalLength=ch,a.getPointAtLength=ci,a.getSubpath=function(a,b,c){if(this.getTotalLength(a)-c<1e-6)return cj(a,b).end;var d=cj(a,c,1);return b?cj(d,b).end:d},b$.getTotalLength=function(){if(this.type=="path"){if(this.node.getTotalLength)return this.node.getTotalLength();return ch(this.attrs.path)}},b$.getPointAtLength=function(a){if(this.type=="path")return ci(this.attrs.path,a)},b$.getSubpath=function(b,c){if(this.type=="path")return a.getSubpath(this.attrs.path,b,c)};var ck=a.easing_formulas={linear:function(a){return a},"<":function(a){return A(a,1.7)},">":function(a){return A(a,.48)},"<>":function(a){var b=.48-a/1.04,c=w.sqrt(.1734+b*b),d=c-b,e=A(z(d),1/3)*(d<0?-1:1),f=-c-b,g=A(z(f),1/3)*(f<0?-1:1),h=e+g+.5;return(1-h)*3*h*h+h*h*h},backIn:function(a){var b=1.70158;return a*a*((b+1)*a-b)},backOut:function(a){a=a-1;var b=1.70158;return a*a*((b+1)*a+b)+1},elastic:function(a){if(a==!!a)return a;return A(2,-10*a)*w.sin((a-.075)*2*B/.3)+1},bounce:function(a){var b=7.5625,c=2.75,d;a<1/c?d=b*a*a:a<2/c?(a-=1.5/c,d=b*a*a+.75):a<2.5/c?(a-=2.25/c,d=b*a*a+.9375):(a-=2.625/c,d=b*a*a+.984375);return d}};ck.easeIn=ck["ease-in"]=ck["<"],ck.easeOut=ck["ease-out"]=ck[">"],ck.easeInOut=ck["ease-in-out"]=ck["<>"],ck["back-in"]=ck.backIn,ck["back-out"]=ck.backOut;var cl=[],cm=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){setTimeout(a,16)},cn=function(){var b=+(new Date),c=0;for(;c1&&!d.next){for(s in k)k[g](s)&&(r[s]=d.totalOrigin[s]);d.el.attr(r),cr(d.anim,d.el,d.anim.percents[0],null,d.totalOrigin,d.repeat-1)}d.next&&!d.stop&&cr(d.anim,d.el,d.next,null,d.totalOrigin,d.repeat)}}a.svg&&m&&m.paper&&m.paper.safari(),cl.length&&cm(cn)},co=function(a){return a>255?255:a<0?0:a};b$.animateWith=function(b,c,d,e,f,g){var h=d?a.animation(d,e,f,g):c,i=b.status(c);return this.animate(h).status(h,i*c.ms/h.ms)},b$.onAnimation=function(a){a?eve.on("anim.frame."+this.id,a):eve.unbind("anim.frame."+this.id);return this},cq.prototype.delay=function(a){var b=new cq(this.anim,this.ms);b.times=this.times,b.del=+a||0;return b},cq.prototype.repeat=function(a){var b=new cq(this.anim,this.ms);b.del=this.del,b.times=w.floor(x(a,0))||1;return b},a.animation=function(b,c,d,e){if(b instanceof cq)return b;if(a.is(d,"function")||!d)e=e||d||null,d=null;b=Object(b),c=+c||0;var f={},h,i;for(i in b)b[g](i)&&Q(i)!=i&&Q(i)+"%"!=i&&(h=!0,f[i]=b[i]);if(!h)return new cq(b,c);d&&(f.easing=d),e&&(f.callback=e);return new cq({100:f},c)},b$.animate=function(b,c,d,e){var f=this;if(f.removed){e&&e.call(f);return f}var g=b instanceof cq?b:a.animation(b,c,d,e);cr(g,f,g.percents[0],null,f.attr());return f},b$.setTime=function(a,b){a&&b!=null&&this.status(a,y(b,a.ms)/a.ms);return this},b$.status=function(a,b){var c=[],d=0,e,f;if(b!=null){cr(a,this,-1,y(b,1));return this}e=cl.length;for(;d.5)*2-1;i(m-.5,2)+i(n-.5,2)>.25&&(n=f.sqrt(.25-i(m-.5,2))*e+.5)&&n!=.5&&(n=n.toFixed(5)-1e-5*e)}return l}),e=e.split(/\s*\-\s*/);if(j=="linear"){var t=e.shift();t=-d(t);if(isNaN(t))return null;var u=[0,0,f.cos(a.rad(t)),f.sin(a.rad(t))],v=1/(g(h(u[2]),h(u[3]))||1);u[2]*=v,u[3]*=v,u[2]<0&&(u[0]=-u[2],u[2]=0),u[3]<0&&(u[1]=-u[3],u[3]=0)}var w=a._parseDots(e);if(!w)return null;k=k.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&k!=b.gradient.id&&(p.defs.removeChild(b.gradient),delete b.gradient);if(!b.gradient){s=q(j+"Gradient",{id:k}),b.gradient=s,q(s,j=="radial"?{fx:m,fy:n}:{x1:u[0],y1:u[1],x2:u[2],y2:u[3],gradientTransform:b.matrix.invert()}),p.defs.appendChild(s);for(var x=0,y=w.length;x1?G.opacity/100:G.opacity});case"stroke":G=a.getRGB(p),i.setAttribute(o,G.hex),o=="stroke"&&G[b]("opacity")&&q(i,{"stroke-opacity":G.opacity>1?G.opacity/100:G.opacity}),o=="stroke"&&d._.arrows&&("startString"in d._.arrows&&t(d,d._.arrows.startString),"endString"in d._.arrows&&t(d,d._.arrows.endString,1));break;case"gradient":(d.type=="circle"||d.type=="ellipse"||c(p).charAt()!="r")&&r(d,p);break;case"opacity":k.gradient&&!k[b]("stroke-opacity")&&q(i,{"stroke-opacity":p>1?p/100:p});case"fill-opacity":if(k.gradient){H=a._g.doc.getElementById(i.getAttribute("fill").replace(/^url\(#|\)$/g,l)),H&&(I=H.getElementsByTagName("stop"),q(I[I.length-1],{"stop-opacity":p}));break};default:o=="font-size"&&(p=e(p,10)+"px");var J=o.replace(/(\-.)/g,function(a){return a.substring(1).toUpperCase()});i.style[J]=p,d._.dirty=1,i.setAttribute(o,p)}}y(d,f),i.style.visibility=m},x=1.2,y=function(d,f){if(d.type=="text"&&!!(f[b]("text")||f[b]("font")||f[b]("font-size")||f[b]("x")||f[b]("y"))){var g=d.attrs,h=d.node,i=h.firstChild?e(a._g.doc.defaultView.getComputedStyle(h.firstChild,l).getPropertyValue("font-size"),10):10;if(f[b]("text")){g.text=f.text;while(h.firstChild)h.removeChild(h.firstChild);var j=c(f.text).split("\n"),k=[],m;for(var n=0,o=j.length;n"));var $=X.getBoundingClientRect();t.W=m.w=($.right-$.left)/Y,t.H=m.h=($.bottom-$.top)/Y,t.X=m.x,t.Y=m.y+t.H/2,("x"in i||"y"in i)&&(t.path.v=a.format("m{0},{1}l{2},{1}",f(m.x*u),f(m.y*u),f(m.x*u)+1));var _=["x","y","text","font","font-family","font-weight","font-style","font-size"];for(var ba=0,bb=_.length;ba.25&&(c=e.sqrt(.25-i(b-.5,2))*((c>.5)*2-1)+.5),m=b+n+c);return o}),f=f.split(/\s*\-\s*/);if(l=="linear"){var p=f.shift();p=-d(p);if(isNaN(p))return null}var q=a._parseDots(f);if(!q)return null;b=b.shape||b.node;if(q.length){b.removeChild(g),g.on=!0,g.method="none",g.color=q[0].color,g.color2=q[q.length-1].color;var r=[];for(var s=0,t=q.length;s')}}catch(c){F=function(a){return b.createElement("<"+a+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},a._engine.initWin(a._g.win),a._engine.create=function(){var b=a._getContainer.apply(0,arguments),c=b.container,d=b.height,e,f=b.width,g=b.x,h=b.y;if(!c)throw new Error("VML container not found.");var i=new a._Paper,j=i.canvas=a._g.doc.createElement("div"),k=j.style;g=g||0,h=h||0,f=f||512,d=d||342,i.width=f,i.height=d,f==+f&&(f+="px"),d==+d&&(d+="px"),i.coordsize=u*1e3+n+u*1e3,i.coordorigin="0 0",i.span=a._g.doc.createElement("span"),i.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",j.appendChild(i.span),k.cssText=a.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",f,d),c==1?(a._g.doc.body.appendChild(j),k.left=g+"px",k.top=h+"px",k.position="absolute"):c.firstChild?c.insertBefore(j,c.firstChild):c.appendChild(j),i.renderfix=function(){};return i},a.prototype.clear=function(){a.eve("clear",this),this.canvas.innerHTML=o,this.span=a._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},a.prototype.remove=function(){a.eve("remove",this),this.canvas.parentNode.removeChild(this.canvas);for(var b in this)this[b]=typeof this[b]=="function"?a._removedFactory(b):null;return!0};var G=a.st;for(var H in E)E[b](H)&&!G[b](H)&&(G[H]=function(a){return function(){var b=arguments;return this.forEach(function(c){c[a].apply(c,b)})}}(H))}(window.Raphael) \ No newline at end of file diff --git a/externals/recaptcha/LICENSE b/externals/recaptcha/LICENSE deleted file mode 100644 index b612f71f01..0000000000 --- a/externals/recaptcha/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2007 reCAPTCHA -- http://recaptcha.net -AUTHORS: - Mike Crawford - Ben Maurer - -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/recaptcha/recaptchalib.php b/externals/recaptcha/recaptchalib.php deleted file mode 100644 index 32c4f4d758..0000000000 --- a/externals/recaptcha/recaptchalib.php +++ /dev/null @@ -1,277 +0,0 @@ - $value ) - $req .= $key . '=' . urlencode( stripslashes($value) ) . '&'; - - // Cut the last '&' - $req=substr($req,0,strlen($req)-1); - return $req; -} - - - -/** - * Submits an HTTP POST to a reCAPTCHA server - * @param string $host - * @param string $path - * @param array $data - * @param int port - * @return array response - */ -function _recaptcha_http_post($host, $path, $data, $port = 80) { - - $req = _recaptcha_qsencode ($data); - - $http_request = "POST $path HTTP/1.0\r\n"; - $http_request .= "Host: $host\r\n"; - $http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n"; - $http_request .= "Content-Length: " . strlen($req) . "\r\n"; - $http_request .= "User-Agent: reCAPTCHA/PHP\r\n"; - $http_request .= "\r\n"; - $http_request .= $req; - - $response = ''; - if( false == ( $fs = @fsockopen($host, $port, $errno, $errstr, 10) ) ) { - die ('Could not open socket'); - } - - fwrite($fs, $http_request); - - while ( !feof($fs) ) - $response .= fgets($fs, 1160); // One TCP-IP packet - fclose($fs); - $response = explode("\r\n\r\n", $response, 2); - - return $response; -} - - - -/** - * Gets the challenge HTML (javascript and non-javascript version). - * This is called from the browser, and the resulting reCAPTCHA HTML widget - * is embedded within the HTML form it was called from. - * @param string $pubkey A public key for reCAPTCHA - * @param string $error The error given by reCAPTCHA (optional, default is null) - * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false) - - * @return string - The HTML to be embedded in the user's form. - */ -function recaptcha_get_html ($pubkey, $error = null, $use_ssl = false) -{ - if ($pubkey == null || $pubkey == '') { - die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); - } - - if ($use_ssl) { - $server = RECAPTCHA_API_SECURE_SERVER; - } else { - $server = RECAPTCHA_API_SERVER; - } - - $errorpart = ""; - if ($error) { - $errorpart = "&error=" . $error; - } - return ' - - '; -} - - - - -/** - * A ReCaptchaResponse is returned from recaptcha_check_answer() - */ -class ReCaptchaResponse { - var $is_valid; - var $error; -} - - -/** - * Calls an HTTP POST function to verify if the user's guess was correct - * @param string $privkey - * @param string $remoteip - * @param string $challenge - * @param string $response - * @param array $extra_params an array of extra variables to post to the server - * @return ReCaptchaResponse - */ -function recaptcha_check_answer ($privkey, $remoteip, $challenge, $response, $extra_params = array()) -{ - if ($privkey == null || $privkey == '') { - die ("To use reCAPTCHA you must get an API key from https://www.google.com/recaptcha/admin/create"); - } - - if ($remoteip == null || $remoteip == '') { - die ("For security reasons, you must pass the remote ip to reCAPTCHA"); - } - - - - //discard spam submissions - if ($challenge == null || strlen($challenge) == 0 || $response == null || strlen($response) == 0) { - $recaptcha_response = new ReCaptchaResponse(); - $recaptcha_response->is_valid = false; - $recaptcha_response->error = 'incorrect-captcha-sol'; - return $recaptcha_response; - } - - $response = _recaptcha_http_post (RECAPTCHA_VERIFY_SERVER, "/recaptcha/api/verify", - array ( - 'privatekey' => $privkey, - 'remoteip' => $remoteip, - 'challenge' => $challenge, - 'response' => $response - ) + $extra_params - ); - - $answers = explode ("\n", $response [1]); - $recaptcha_response = new ReCaptchaResponse(); - - if (trim ($answers [0]) == 'true') { - $recaptcha_response->is_valid = true; - } - else { - $recaptcha_response->is_valid = false; - $recaptcha_response->error = $answers [1]; - } - return $recaptcha_response; - -} - -/** - * gets a URL where the user can sign up for reCAPTCHA. If your application - * has a configuration page where you enter a key, you should provide a link - * using this function. - * @param string $domain The domain where the page is hosted - * @param string $appname The name of your application - */ -function recaptcha_get_signup_url ($domain = null, $appname = null) { - return "https://www.google.com/recaptcha/admin/create?" . _recaptcha_qsencode (array ('domains' => $domain, 'app' => $appname)); -} - -function _recaptcha_aes_pad($val) { - $block_size = 16; - $numpad = $block_size - (strlen ($val) % $block_size); - return str_pad($val, strlen ($val) + $numpad, chr($numpad)); -} - -/* Mailhide related code */ - -function _recaptcha_aes_encrypt($val,$ky) { - if (! function_exists ("mcrypt_encrypt")) { - die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); - } - $mode=MCRYPT_MODE_CBC; - $enc=MCRYPT_RIJNDAEL_128; - $val=_recaptcha_aes_pad($val); - return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); -} - - -function _recaptcha_mailhide_urlbase64 ($x) { - return strtr(base64_encode ($x), '+/', '-_'); -} - -/* gets the reCAPTCHA Mailhide url for a given email, public key and private key */ -function recaptcha_mailhide_url(http://github.com/$pubkey,%20$privkey,%20$email) { - if ($pubkey == '' || $pubkey == null || $privkey == "" || $privkey == null) { - die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . - "you can do so at http://www.google.com/recaptcha/mailhide/apikey"); - } - - - $ky = pack('H*', $privkey); - $cryptmail = _recaptcha_aes_encrypt ($email, $ky); - - return "http://www.google.com/recaptcha/mailhide/d?k=" . $pubkey . "&c=" . _recaptcha_mailhide_urlbase64 ($cryptmail); -} - -/** - * gets the parts of the email to expose to the user. - * eg, given johndoe@example,com return ["john", "example.com"]. - * the email is then displayed as john...@example.com - */ -function _recaptcha_mailhide_email_parts ($email) { - $arr = preg_split("/@/", $email ); - - if (strlen ($arr[0]) <= 4) { - $arr[0] = substr ($arr[0], 0, 1); - } else if (strlen ($arr[0]) <= 6) { - $arr[0] = substr ($arr[0], 0, 3); - } else { - $arr[0] = substr ($arr[0], 0, 4); - } - return $arr; -} - -/** - * Gets html to display an email address given a public an private key. - * to get a key, go to: - * - * http://www.google.com/recaptcha/mailhide/apikey - */ -function recaptcha_mailhide_html($pubkey, $privkey, $email) { - $emailparts = _recaptcha_mailhide_email_parts ($email); - $url = recaptcha_mailhide_url ($pubkey, $privkey, $email); - - return htmlentities($emailparts[0]) . "...@" . htmlentities ($emailparts [1]); - -} - - -?> diff --git a/externals/s3/README.txt b/externals/s3/README.txt deleted file mode 100644 index 28a9e73f92..0000000000 --- a/externals/s3/README.txt +++ /dev/null @@ -1,105 +0,0 @@ -AMAZON S3 PHP CLASS - - -USING THE CLASS - -OO method (e,g; $s3->getObject(...)): -$s3 = new S3(awsAccessKey, awsSecretKey); - -Statically (e,g; S3::getObject(...)): -S3::setAuth(awsAccessKey, awsSecretKey); - - -For class documentation see: -http://undesigned.org.za/files/s3-class-documentation/index.html - - -OBJECTS - - -Put an object from a string: - $s3->putObject($string, $bucketName, $uploadName, S3::ACL_PUBLIC_READ) - Legacy function: $s3->putObjectString($string, $bucketName, $uploadName, S3::ACL_PUBLIC_READ) - - -Put an object from a file: - $s3->putObject($s3->inputFile($file, false), $bucketName, $uploadName, S3::ACL_PUBLIC_READ) - Legacy function: $s3->putObjectFile($uploadFile, $bucketName, $uploadName, S3::ACL_PUBLIC_READ) - - -Put an object from a resource (buffer/file size is required): - Please note: the resource will be fclose()'d automatically - $s3->putObject($s3->inputResource(fopen($file, 'rb'), filesize($file)), $bucketName, $uploadName, S3::ACL_PUBLIC_READ) - - -Get an object: - $s3->getObject($bucketName, $uploadName) - - -Save an object to file: - $s3->getObject($bucketName, $uploadName, $saveName) - - -Save an object to a resource of any type: - $s3->getObject($bucketName, $uploadName, fopen('savefile.txt', 'wb')) - - -Copy an object: - $s3->copyObject($srcBucket, $srcName, $bucketName, $saveName, $metaHeaders = array(), $requestHeaders = array()) - - -Delete an object: - $s3->deleteObject($bucketName, $uploadName) - - - -BUCKETS - - -Get a list of buckets: - $s3->listBuckets() // Simple bucket list - $s3->listBuckets(true) // Detailed bucket list - - -Create a public-read bucket: - $s3->putBucket($bucketName, S3::ACL_PUBLIC_READ) - $s3->putBucket($bucketName, S3::ACL_PUBLIC_READ, 'EU') // EU-hosted bucket - - -Get the contents of a bucket: - $s3->getBucket($bucketName) - - -Get a bucket's location: - $s3->getBucketLocation($bucketName) - - -Delete a bucket: - $s3->deleteBucket($bucketName) - - - - -KNOWN ISSUES - - Files larger than 2GB are not supported on 32 bit systems due to PHP’s signed integer problem - - - -MORE INFORMATION - - - Project URL: - http://undesigned.org.za/2007/10/22/amazon-s3-php-class - - Class documentation: - http://undesigned.org.za/files/s3-class-documentation/index.html - - Bug reports: - https://github.com/tpyo/amazon-s3-php-class/issues - - Amazon S3 documentation: - http://docs.amazonwebservices.com/AmazonS3/2006-03-01/ - - -EOF diff --git a/externals/s3/S3.php b/externals/s3/S3.php deleted file mode 100644 index 6a507338c7..0000000000 --- a/externals/s3/S3.php +++ /dev/null @@ -1,1923 +0,0 @@ - $host, 'type' => $type, 'user' => null, 'pass' => 'null'); - } - - - /** - * Set the error mode to exceptions - * - * @param boolean $enabled Enable exceptions - * @return void - */ - public static function setExceptions($enabled = true) - { - self::$useExceptions = $enabled; - } - - - /** - * Set signing key - * - * @param string $keyPairId AWS Key Pair ID - * @param string $signingKey Private Key - * @param boolean $isFile Load private key from file, set to false to load string - * @return boolean - */ - public static function setSigningKey($keyPairId, $signingKey, $isFile = true) - { - self::$__signingKeyPairId = $keyPairId; - if ((self::$__signingKeyResource = openssl_pkey_get_private($isFile ? - file_get_contents($signingKey) : $signingKey)) !== false) return true; - self::__triggerError('S3::setSigningKey(): Unable to open load private key: '.$signingKey, __FILE__, __LINE__); - return false; - } - - - /** - * Free signing key from memory, MUST be called if you are using setSigningKey() - * - * @return void - */ - public static function freeSigningKey() - { - if (self::$__signingKeyResource !== false) - openssl_free_key(self::$__signingKeyResource); - } - - - /** - * Internal error handler - * - * @internal Internal error handler - * @param string $message Error message - * @param string $file Filename - * @param integer $line Line number - * @param integer $code Error code - * @return void - */ - private static function __triggerError($message, $file, $line, $code = 0) - { - if (self::$useExceptions) - throw new S3Exception($message, $file, $line, $code); - else - trigger_error($message, E_USER_WARNING); - } - - - /** - * Get a list of buckets - * - * @param boolean $detailed Returns detailed bucket list when true - * @return array | false - */ - public static function listBuckets($detailed = false) - { - $rest = new S3Request('GET', '', '', self::$endpoint); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::listBuckets(): [%s] %s", $rest->error['code'], - $rest->error['message']), __FILE__, __LINE__); - return false; - } - $results = array(); - if (!isset($rest->body->Buckets)) return $results; - - if ($detailed) - { - if (isset($rest->body->Owner, $rest->body->Owner->ID, $rest->body->Owner->DisplayName)) - $results['owner'] = array( - 'id' => (string)$rest->body->Owner->ID, 'name' => (string)$rest->body->Owner->ID - ); - $results['buckets'] = array(); - foreach ($rest->body->Buckets->Bucket as $b) - $results['buckets'][] = array( - 'name' => (string)$b->Name, 'time' => strtotime((string)$b->CreationDate) - ); - } else - foreach ($rest->body->Buckets->Bucket as $b) $results[] = (string)$b->Name; - - return $results; - } - - - /* - * Get contents for a bucket - * - * If maxKeys is null this method will loop through truncated result sets - * - * @param string $bucket Bucket name - * @param string $prefix Prefix - * @param string $marker Marker (last file listed) - * @param string $maxKeys Max keys (maximum number of keys to return) - * @param string $delimiter Delimiter - * @param boolean $returnCommonPrefixes Set to true to return CommonPrefixes - * @return array | false - */ - public static function getBucket($bucket, $prefix = null, $marker = null, $maxKeys = null, $delimiter = null, $returnCommonPrefixes = false) - { - $rest = new S3Request('GET', $bucket, '', self::$endpoint); - if ($maxKeys == 0) $maxKeys = null; - if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix); - if ($marker !== null && $marker !== '') $rest->setParameter('marker', $marker); - if ($maxKeys !== null && $maxKeys !== '') $rest->setParameter('max-keys', $maxKeys); - if ($delimiter !== null && $delimiter !== '') $rest->setParameter('delimiter', $delimiter); - $response = $rest->getResponse(); - if ($response->error === false && $response->code !== 200) - $response->error = array('code' => $response->code, 'message' => 'Unexpected HTTP status'); - if ($response->error !== false) - { - self::__triggerError(sprintf("S3::getBucket(): [%s] %s", - $response->error['code'], $response->error['message']), __FILE__, __LINE__); - return false; - } - - $results = array(); - - $nextMarker = null; - if (isset($response->body, $response->body->Contents)) - foreach ($response->body->Contents as $c) - { - $results[(string)$c->Key] = array( - 'name' => (string)$c->Key, - 'time' => strtotime((string)$c->LastModified), - 'size' => (int)$c->Size, - 'hash' => substr((string)$c->ETag, 1, -1) - ); - $nextMarker = (string)$c->Key; - } - - if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes)) - foreach ($response->body->CommonPrefixes as $c) - $results[(string)$c->Prefix] = array('prefix' => (string)$c->Prefix); - - if (isset($response->body, $response->body->IsTruncated) && - (string)$response->body->IsTruncated == 'false') return $results; - - if (isset($response->body, $response->body->NextMarker)) - $nextMarker = (string)$response->body->NextMarker; - - // Loop through truncated results if maxKeys isn't specified - if ($maxKeys == null && $nextMarker !== null && (string)$response->body->IsTruncated == 'true') - do - { - $rest = new S3Request('GET', $bucket, '', self::$endpoint); - if ($prefix !== null && $prefix !== '') $rest->setParameter('prefix', $prefix); - $rest->setParameter('marker', $nextMarker); - if ($delimiter !== null && $delimiter !== '') $rest->setParameter('delimiter', $delimiter); - - if (($response = $rest->getResponse(true)) == false || $response->code !== 200) break; - - if (isset($response->body, $response->body->Contents)) - foreach ($response->body->Contents as $c) - { - $results[(string)$c->Key] = array( - 'name' => (string)$c->Key, - 'time' => strtotime((string)$c->LastModified), - 'size' => (int)$c->Size, - 'hash' => substr((string)$c->ETag, 1, -1) - ); - $nextMarker = (string)$c->Key; - } - - if ($returnCommonPrefixes && isset($response->body, $response->body->CommonPrefixes)) - foreach ($response->body->CommonPrefixes as $c) - $results[(string)$c->Prefix] = array('prefix' => (string)$c->Prefix); - - if (isset($response->body, $response->body->NextMarker)) - $nextMarker = (string)$response->body->NextMarker; - - } while ($response !== false && (string)$response->body->IsTruncated == 'true'); - - return $results; - } - - - /** - * Put a bucket - * - * @param string $bucket Bucket name - * @param constant $acl ACL flag - * @param string $location Set as "EU" to create buckets hosted in Europe - * @return boolean - */ - public static function putBucket($bucket, $acl = self::ACL_PRIVATE, $location = false) - { - $rest = new S3Request('PUT', $bucket, '', self::$endpoint); - $rest->setAmzHeader('x-amz-acl', $acl); - - if ($location !== false) - { - $dom = new DOMDocument; - $createBucketConfiguration = $dom->createElement('CreateBucketConfiguration'); - $locationConstraint = $dom->createElement('LocationConstraint', strtoupper($location)); - $createBucketConfiguration->appendChild($locationConstraint); - $dom->appendChild($createBucketConfiguration); - $rest->data = $dom->saveXML(); - $rest->size = strlen($rest->data); - $rest->setHeader('Content-Type', 'application/xml'); - } - $rest = $rest->getResponse(); - - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::putBucket({$bucket}, {$acl}, {$location}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Delete an empty bucket - * - * @param string $bucket Bucket name - * @return boolean - */ - public static function deleteBucket($bucket) - { - $rest = new S3Request('DELETE', $bucket, '', self::$endpoint); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 204) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::deleteBucket({$bucket}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Create input info array for putObject() - * - * @param string $file Input file - * @param mixed $md5sum Use MD5 hash (supply a string if you want to use your own) - * @return array | false - */ - public static function inputFile($file, $md5sum = true) - { - if (!file_exists($file) || !is_file($file) || !is_readable($file)) - { - self::__triggerError('S3::inputFile(): Unable to open input file: '.$file, __FILE__, __LINE__); - return false; - } - return array('file' => $file, 'size' => filesize($file), 'md5sum' => $md5sum !== false ? - (is_string($md5sum) ? $md5sum : base64_encode(md5_file($file, true))) : ''); - } - - - /** - * Create input array info for putObject() with a resource - * - * @param string $resource Input resource to read from - * @param integer $bufferSize Input byte size - * @param string $md5sum MD5 hash to send (optional) - * @return array | false - */ - public static function inputResource(&$resource, $bufferSize, $md5sum = '') - { - if (!is_resource($resource) || $bufferSize < 0) - { - self::__triggerError('S3::inputResource(): Invalid resource or buffer size', __FILE__, __LINE__); - return false; - } - $input = array('size' => $bufferSize, 'md5sum' => $md5sum); - $input['fp'] =& $resource; - return $input; - } - - - /** - * Put an object - * - * @param mixed $input Input data - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param constant $acl ACL constant - * @param array $metaHeaders Array of x-amz-meta-* headers - * @param array $requestHeaders Array of request headers or content type as a string - * @param constant $storageClass Storage class constant - * @return boolean - */ - public static function putObject($input, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array(), $storageClass = self::STORAGE_CLASS_STANDARD) - { - if ($input === false) return false; - $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint); - - if (is_string($input)) $input = array( - 'data' => $input, 'size' => strlen($input), - 'md5sum' => base64_encode(md5($input, true)) - ); - - // Data - if (isset($input['fp'])) - $rest->fp =& $input['fp']; - elseif (isset($input['file'])) - $rest->fp = @fopen($input['file'], 'rb'); - elseif (isset($input['data'])) - $rest->data = $input['data']; - - // Content-Length (required) - if (isset($input['size']) && $input['size'] >= 0) - $rest->size = $input['size']; - else { - if (isset($input['file'])) - $rest->size = filesize($input['file']); - elseif (isset($input['data'])) - $rest->size = strlen($input['data']); - } - - // Custom request headers (Content-Type, Content-Disposition, Content-Encoding) - if (is_array($requestHeaders)) - foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v); - elseif (is_string($requestHeaders)) // Support for legacy contentType parameter - $input['type'] = $requestHeaders; - - // Content-Type - if (!isset($input['type'])) - { - if (isset($requestHeaders['Content-Type'])) - $input['type'] =& $requestHeaders['Content-Type']; - elseif (isset($input['file'])) - $input['type'] = self::__getMimeType($input['file']); - else - $input['type'] = 'application/octet-stream'; - } - - if ($storageClass !== self::STORAGE_CLASS_STANDARD) // Storage class - $rest->setAmzHeader('x-amz-storage-class', $storageClass); - - // We need to post with Content-Length and Content-Type, MD5 is optional - if ($rest->size >= 0 && ($rest->fp !== false || $rest->data !== false)) - { - $rest->setHeader('Content-Type', $input['type']); - if (isset($input['md5sum'])) $rest->setHeader('Content-MD5', $input['md5sum']); - - $rest->setAmzHeader('x-amz-acl', $acl); - foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v); - $rest->getResponse(); - } else - $rest->response->error = array('code' => 0, 'message' => 'Missing input parameters'); - - if ($rest->response->error === false && $rest->response->code !== 200) - $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status'); - - if ($rest->response->error !== false) - { - self::__triggerError(sprintf("S3::putObject(): [%s] %s", - $rest->response->error['code'], $rest->response->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Put an object from a file (legacy function) - * - * @param string $file Input file path - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param constant $acl ACL constant - * @param array $metaHeaders Array of x-amz-meta-* headers - * @param string $contentType Content type - * @return boolean - */ - public static function putObjectFile($file, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = null) - { - return self::putObject(self::inputFile($file), $bucket, $uri, $acl, $metaHeaders, $contentType); - } - - - /** - * Put an object from a string (legacy function) - * - * @param string $string Input data - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param constant $acl ACL constant - * @param array $metaHeaders Array of x-amz-meta-* headers - * @param string $contentType Content type - * @return boolean - */ - public static function putObjectString($string, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $contentType = 'text/plain') - { - return self::putObject($string, $bucket, $uri, $acl, $metaHeaders, $contentType); - } - - - /** - * Get an object - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param mixed $saveTo Filename or resource to write to - * @return mixed - */ - public static function getObject($bucket, $uri, $saveTo = false) - { - $rest = new S3Request('GET', $bucket, $uri, self::$endpoint); - if ($saveTo !== false) - { - if (is_resource($saveTo)) - $rest->fp =& $saveTo; - else - if (($rest->fp = @fopen($saveTo, 'wb')) !== false) - $rest->file = realpath($saveTo); - else - $rest->response->error = array('code' => 0, 'message' => 'Unable to open save file for writing: '.$saveTo); - } - if ($rest->response->error === false) $rest->getResponse(); - - if ($rest->response->error === false && $rest->response->code !== 200) - $rest->response->error = array('code' => $rest->response->code, 'message' => 'Unexpected HTTP status'); - if ($rest->response->error !== false) - { - self::__triggerError(sprintf("S3::getObject({$bucket}, {$uri}): [%s] %s", - $rest->response->error['code'], $rest->response->error['message']), __FILE__, __LINE__); - return false; - } - return $rest->response; - } - - - /** - * Get object information - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param boolean $returnInfo Return response information - * @return mixed | false - */ - public static function getObjectInfo($bucket, $uri, $returnInfo = true) - { - $rest = new S3Request('HEAD', $bucket, $uri, self::$endpoint); - $rest = $rest->getResponse(); - if ($rest->error === false && ($rest->code !== 200 && $rest->code !== 404)) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::getObjectInfo({$bucket}, {$uri}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return $rest->code == 200 ? $returnInfo ? $rest->headers : true : false; - } - - - /** - * Copy an object - * - * @param string $bucket Source bucket name - * @param string $uri Source object URI - * @param string $bucket Destination bucket name - * @param string $uri Destination object URI - * @param constant $acl ACL constant - * @param array $metaHeaders Optional array of x-amz-meta-* headers - * @param array $requestHeaders Optional array of request headers (content type, disposition, etc.) - * @param constant $storageClass Storage class constant - * @return mixed | false - */ - public static function copyObject($srcBucket, $srcUri, $bucket, $uri, $acl = self::ACL_PRIVATE, $metaHeaders = array(), $requestHeaders = array(), $storageClass = self::STORAGE_CLASS_STANDARD) - { - $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint); - $rest->setHeader('Content-Length', 0); - foreach ($requestHeaders as $h => $v) $rest->setHeader($h, $v); - foreach ($metaHeaders as $h => $v) $rest->setAmzHeader('x-amz-meta-'.$h, $v); - if ($storageClass !== self::STORAGE_CLASS_STANDARD) // Storage class - $rest->setAmzHeader('x-amz-storage-class', $storageClass); - $rest->setAmzHeader('x-amz-acl', $acl); // Added rawurlencode() for $srcUri (thanks a.yamanoi) - $rest->setAmzHeader('x-amz-copy-source', sprintf('/%s/%s', $srcBucket, rawurlencode($srcUri))); - if (sizeof($requestHeaders) > 0 || sizeof($metaHeaders) > 0) - $rest->setAmzHeader('x-amz-metadata-directive', 'REPLACE'); - - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::copyObject({$srcBucket}, {$srcUri}, {$bucket}, {$uri}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return isset($rest->body->LastModified, $rest->body->ETag) ? array( - 'time' => strtotime((string)$rest->body->LastModified), - 'hash' => substr((string)$rest->body->ETag, 1, -1) - ) : false; - } - - - /** - * Set logging for a bucket - * - * @param string $bucket Bucket name - * @param string $targetBucket Target bucket (where logs are stored) - * @param string $targetPrefix Log prefix (e,g; domain.com-) - * @return boolean - */ - public static function setBucketLogging($bucket, $targetBucket, $targetPrefix = null) - { - // The S3 log delivery group has to be added to the target bucket's ACP - if ($targetBucket !== null && ($acp = self::getAccessControlPolicy($targetBucket, '')) !== false) - { - // Only add permissions to the target bucket when they do not exist - $aclWriteSet = false; - $aclReadSet = false; - foreach ($acp['acl'] as $acl) - if ($acl['type'] == 'Group' && $acl['uri'] == 'http://acs.amazonaws.com/groups/s3/LogDelivery') - { - if ($acl['permission'] == 'WRITE') $aclWriteSet = true; - elseif ($acl['permission'] == 'READ_ACP') $aclReadSet = true; - } - if (!$aclWriteSet) $acp['acl'][] = array( - 'type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/s3/LogDelivery', 'permission' => 'WRITE' - ); - if (!$aclReadSet) $acp['acl'][] = array( - 'type' => 'Group', 'uri' => 'http://acs.amazonaws.com/groups/s3/LogDelivery', 'permission' => 'READ_ACP' - ); - if (!$aclReadSet || !$aclWriteSet) self::setAccessControlPolicy($targetBucket, '', $acp); - } - - $dom = new DOMDocument; - $bucketLoggingStatus = $dom->createElement('BucketLoggingStatus'); - $bucketLoggingStatus->setAttribute('xmlns', 'http://s3.amazonaws.com/doc/2006-03-01/'); - if ($targetBucket !== null) - { - if ($targetPrefix == null) $targetPrefix = $bucket . '-'; - $loggingEnabled = $dom->createElement('LoggingEnabled'); - $loggingEnabled->appendChild($dom->createElement('TargetBucket', $targetBucket)); - $loggingEnabled->appendChild($dom->createElement('TargetPrefix', $targetPrefix)); - // TODO: Add TargetGrants? - $bucketLoggingStatus->appendChild($loggingEnabled); - } - $dom->appendChild($bucketLoggingStatus); - - $rest = new S3Request('PUT', $bucket, '', self::$endpoint); - $rest->setParameter('logging', null); - $rest->data = $dom->saveXML(); - $rest->size = strlen($rest->data); - $rest->setHeader('Content-Type', 'application/xml'); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::setBucketLogging({$bucket}, {$uri}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Get logging status for a bucket - * - * This will return false if logging is not enabled. - * Note: To enable logging, you also need to grant write access to the log group - * - * @param string $bucket Bucket name - * @return array | false - */ - public static function getBucketLogging($bucket) - { - $rest = new S3Request('GET', $bucket, '', self::$endpoint); - $rest->setParameter('logging', null); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::getBucketLogging({$bucket}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - if (!isset($rest->body->LoggingEnabled)) return false; // No logging - return array( - 'targetBucket' => (string)$rest->body->LoggingEnabled->TargetBucket, - 'targetPrefix' => (string)$rest->body->LoggingEnabled->TargetPrefix, - ); - } - - - /** - * Disable bucket logging - * - * @param string $bucket Bucket name - * @return boolean - */ - public static function disableBucketLogging($bucket) - { - return self::setBucketLogging($bucket, null); - } - - - /** - * Get a bucket's location - * - * @param string $bucket Bucket name - * @return string | false - */ - public static function getBucketLocation($bucket) - { - $rest = new S3Request('GET', $bucket, '', self::$endpoint); - $rest->setParameter('location', null); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::getBucketLocation({$bucket}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return (isset($rest->body[0]) && (string)$rest->body[0] !== '') ? (string)$rest->body[0] : 'US'; - } - - - /** - * Set object or bucket Access Control Policy - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param array $acp Access Control Policy Data (same as the data returned from getAccessControlPolicy) - * @return boolean - */ - public static function setAccessControlPolicy($bucket, $uri = '', $acp = array()) - { - $dom = new DOMDocument; - $dom->formatOutput = true; - $accessControlPolicy = $dom->createElement('AccessControlPolicy'); - $accessControlList = $dom->createElement('AccessControlList'); - - // It seems the owner has to be passed along too - $owner = $dom->createElement('Owner'); - $owner->appendChild($dom->createElement('ID', $acp['owner']['id'])); - $owner->appendChild($dom->createElement('DisplayName', $acp['owner']['name'])); - $accessControlPolicy->appendChild($owner); - - foreach ($acp['acl'] as $g) - { - $grant = $dom->createElement('Grant'); - $grantee = $dom->createElement('Grantee'); - $grantee->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); - if (isset($g['id'])) - { // CanonicalUser (DisplayName is omitted) - $grantee->setAttribute('xsi:type', 'CanonicalUser'); - $grantee->appendChild($dom->createElement('ID', $g['id'])); - } - elseif (isset($g['email'])) - { // AmazonCustomerByEmail - $grantee->setAttribute('xsi:type', 'AmazonCustomerByEmail'); - $grantee->appendChild($dom->createElement('EmailAddress', $g['email'])); - } - elseif ($g['type'] == 'Group') - { // Group - $grantee->setAttribute('xsi:type', 'Group'); - $grantee->appendChild($dom->createElement('URI', $g['uri'])); - } - $grant->appendChild($grantee); - $grant->appendChild($dom->createElement('Permission', $g['permission'])); - $accessControlList->appendChild($grant); - } - - $accessControlPolicy->appendChild($accessControlList); - $dom->appendChild($accessControlPolicy); - - $rest = new S3Request('PUT', $bucket, $uri, self::$endpoint); - $rest->setParameter('acl', null); - $rest->data = $dom->saveXML(); - $rest->size = strlen($rest->data); - $rest->setHeader('Content-Type', 'application/xml'); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::setAccessControlPolicy({$bucket}, {$uri}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Get object or bucket Access Control Policy - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @return mixed | false - */ - public static function getAccessControlPolicy($bucket, $uri = '') - { - $rest = new S3Request('GET', $bucket, $uri, self::$endpoint); - $rest->setParameter('acl', null); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::getAccessControlPolicy({$bucket}, {$uri}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - - $acp = array(); - if (isset($rest->body->Owner, $rest->body->Owner->ID, $rest->body->Owner->DisplayName)) - $acp['owner'] = array( - 'id' => (string)$rest->body->Owner->ID, 'name' => (string)$rest->body->Owner->DisplayName - ); - - if (isset($rest->body->AccessControlList)) - { - $acp['acl'] = array(); - foreach ($rest->body->AccessControlList->Grant as $grant) - { - foreach ($grant->Grantee as $grantee) - { - if (isset($grantee->ID, $grantee->DisplayName)) // CanonicalUser - $acp['acl'][] = array( - 'type' => 'CanonicalUser', - 'id' => (string)$grantee->ID, - 'name' => (string)$grantee->DisplayName, - 'permission' => (string)$grant->Permission - ); - elseif (isset($grantee->EmailAddress)) // AmazonCustomerByEmail - $acp['acl'][] = array( - 'type' => 'AmazonCustomerByEmail', - 'email' => (string)$grantee->EmailAddress, - 'permission' => (string)$grant->Permission - ); - elseif (isset($grantee->URI)) // Group - $acp['acl'][] = array( - 'type' => 'Group', - 'uri' => (string)$grantee->URI, - 'permission' => (string)$grant->Permission - ); - else continue; - } - } - } - return $acp; - } - - - /** - * Delete an object - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @return boolean - */ - public static function deleteObject($bucket, $uri) - { - $rest = new S3Request('DELETE', $bucket, $uri, self::$endpoint); - $rest = $rest->getResponse(); - if ($rest->error === false && $rest->code !== 204) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::deleteObject(): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Get a query string authenticated URL - * - * @param string $bucket Bucket name - * @param string $uri Object URI - * @param integer $lifetime Lifetime in seconds - * @param boolean $hostBucket Use the bucket name as the hostname - * @param boolean $https Use HTTPS ($hostBucket should be false for SSL verification) - * @return string - */ - public static function getAuthenticatedURL($bucket, $uri, $lifetime, $hostBucket = false, $https = false) - { - $expires = time() + $lifetime; - $uri = str_replace('%2F', '/', rawurlencode($uri)); // URI should be encoded (thanks Sean O'Dea) - return sprintf(($https ? 'https' : 'http').'://%s/%s?AWSAccessKeyId=%s&Expires=%u&Signature=%s', - $hostBucket ? $bucket : $bucket.'.s3.amazonaws.com', $uri, self::$__accessKey, $expires, - urlencode(self::__getHash("GET\n\n\n{$expires}\n/{$bucket}/{$uri}"))); - } - - - /** - * Get a CloudFront signed policy URL - * - * @param array $policy Policy - * @return string - */ - public static function getSignedPolicyURL($policy) - { - $data = json_encode($policy); - $signature = ''; - if (!openssl_sign($data, $signature, self::$__signingKeyResource)) return false; - - $encoded = str_replace(array('+', '='), array('-', '_', '~'), base64_encode($data)); - $signature = str_replace(array('+', '='), array('-', '_', '~'), base64_encode($signature)); - - $url = $policy['Statement'][0]['Resource'] . '?'; - - foreach (array('Policy' => $encoded, 'Signature' => $signature, 'Key-Pair-Id' => self::$__signingKeyPairId) as $k => $v) - $url .= $k.'='.str_replace('%2F', '/', rawurlencode($v)).'&'; - return substr($url, 0, -1); - } - - - /** - * Get a CloudFront canned policy URL - * - * @param string $string URL to sign - * @param integer $lifetime URL lifetime - * @return string - */ - public static function getSignedCannedURL($url, $lifetime) - { - return self::getSignedPolicyURL(array( - 'Statement' => array( - array('Resource' => $url, 'Condition' => array( - 'DateLessThan' => array('AWS:EpochTime' => time() + $lifetime) - )) - ) - )); - } - - - /** - * Get upload POST parameters for form uploads - * - * @param string $bucket Bucket name - * @param string $uriPrefix Object URI prefix - * @param constant $acl ACL constant - * @param integer $lifetime Lifetime in seconds - * @param integer $maxFileSize Maximum filesize in bytes (default 5MB) - * @param string $successRedirect Redirect URL or 200 / 201 status code - * @param array $amzHeaders Array of x-amz-meta-* headers - * @param array $headers Array of request headers or content type as a string - * @param boolean $flashVars Includes additional "Filename" variable posted by Flash - * @return object - */ - public static function getHttpUploadPostParams($bucket, $uriPrefix = '', $acl = self::ACL_PRIVATE, $lifetime = 3600, - $maxFileSize = 5242880, $successRedirect = "201", $amzHeaders = array(), $headers = array(), $flashVars = false) - { - // Create policy object - $policy = new stdClass; - $policy->expiration = gmdate('Y-m-d\TH:i:s\Z', (time() + $lifetime)); - $policy->conditions = array(); - $obj = new stdClass; $obj->bucket = $bucket; array_push($policy->conditions, $obj); - $obj = new stdClass; $obj->acl = $acl; array_push($policy->conditions, $obj); - - $obj = new stdClass; // 200 for non-redirect uploads - if (is_numeric($successRedirect) && in_array((int)$successRedirect, array(200, 201))) - $obj->success_action_status = (string)$successRedirect; - else // URL - $obj->success_action_redirect = $successRedirect; - array_push($policy->conditions, $obj); - - if ($acl !== self::ACL_PUBLIC_READ) - array_push($policy->conditions, array('eq', '$acl', $acl)); - - array_push($policy->conditions, array('starts-with', '$key', $uriPrefix)); - if ($flashVars) array_push($policy->conditions, array('starts-with', '$Filename', '')); - foreach (array_keys($headers) as $headerKey) - array_push($policy->conditions, array('starts-with', '$'.$headerKey, '')); - foreach ($amzHeaders as $headerKey => $headerVal) - { - $obj = new stdClass; - $obj->{$headerKey} = (string)$headerVal; - array_push($policy->conditions, $obj); - } - array_push($policy->conditions, array('content-length-range', 0, $maxFileSize)); - $policy = base64_encode(str_replace('\/', '/', json_encode($policy))); - - // Create parameters - $params = new stdClass; - $params->AWSAccessKeyId = self::$__accessKey; - $params->key = $uriPrefix.'${filename}'; - $params->acl = $acl; - $params->policy = $policy; unset($policy); - $params->signature = self::__getHash($params->policy); - if (is_numeric($successRedirect) && in_array((int)$successRedirect, array(200, 201))) - $params->success_action_status = (string)$successRedirect; - else - $params->success_action_redirect = $successRedirect; - foreach ($headers as $headerKey => $headerVal) $params->{$headerKey} = (string)$headerVal; - foreach ($amzHeaders as $headerKey => $headerVal) $params->{$headerKey} = (string)$headerVal; - return $params; - } - - - /** - * Create a CloudFront distribution - * - * @param string $bucket Bucket name - * @param boolean $enabled Enabled (true/false) - * @param array $cnames Array containing CNAME aliases - * @param string $comment Use the bucket name as the hostname - * @param string $defaultRootObject Default root object - * @param string $originAccessIdentity Origin access identity - * @param array $trustedSigners Array of trusted signers - * @return array | false - */ - public static function createDistribution($bucket, $enabled = true, $cnames = array(), $comment = null, $defaultRootObject = null, $originAccessIdentity = null, $trustedSigners = array()) - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::createDistribution({$bucket}, ".(int)$enabled.", [], '$comment'): %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - $useSSL = self::$useSSL; - - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('POST', '', '2010-11-01/distribution', 'cloudfront.amazonaws.com'); - $rest->data = self::__getCloudFrontDistributionConfigXML( - $bucket.'.s3.amazonaws.com', - $enabled, - (string)$comment, - (string)microtime(true), - $cnames, - $defaultRootObject, - $originAccessIdentity, - $trustedSigners - ); - - $rest->size = strlen($rest->data); - $rest->setHeader('Content-Type', 'application/xml'); - $rest = self::__getCloudFrontResponse($rest); - - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 201) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::createDistribution({$bucket}, ".(int)$enabled.", [], '$comment'): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } elseif ($rest->body instanceof SimpleXMLElement) - return self::__parseCloudFrontDistributionConfig($rest->body); - return false; - } - - - /** - * Get CloudFront distribution info - * - * @param string $distributionId Distribution ID from listDistributions() - * @return array | false - */ - public static function getDistribution($distributionId) - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::getDistribution($distributionId): %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - $useSSL = self::$useSSL; - - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('GET', '', '2010-11-01/distribution/'.$distributionId, 'cloudfront.amazonaws.com'); - $rest = self::__getCloudFrontResponse($rest); - - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::getDistribution($distributionId): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - elseif ($rest->body instanceof SimpleXMLElement) - { - $dist = self::__parseCloudFrontDistributionConfig($rest->body); - $dist['hash'] = $rest->headers['hash']; - $dist['id'] = $distributionId; - return $dist; - } - return false; - } - - - /** - * Update a CloudFront distribution - * - * @param array $dist Distribution array info identical to output of getDistribution() - * @return array | false - */ - public static function updateDistribution($dist) - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::updateDistribution({$dist['id']}): %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - - $useSSL = self::$useSSL; - - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('PUT', '', '2010-11-01/distribution/'.$dist['id'].'/config', 'cloudfront.amazonaws.com'); - $rest->data = self::__getCloudFrontDistributionConfigXML( - $dist['origin'], - $dist['enabled'], - $dist['comment'], - $dist['callerReference'], - $dist['cnames'], - $dist['defaultRootObject'], - $dist['originAccessIdentity'], - $dist['trustedSigners'] - ); - - $rest->size = strlen($rest->data); - $rest->setHeader('If-Match', $dist['hash']); - $rest = self::__getCloudFrontResponse($rest); - - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::updateDistribution({$dist['id']}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } else { - $dist = self::__parseCloudFrontDistributionConfig($rest->body); - $dist['hash'] = $rest->headers['hash']; - return $dist; - } - return false; - } - - - /** - * Delete a CloudFront distribution - * - * @param array $dist Distribution array info identical to output of getDistribution() - * @return boolean - */ - public static function deleteDistribution($dist) - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::deleteDistribution({$dist['id']}): %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - - $useSSL = self::$useSSL; - - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('DELETE', '', '2008-06-30/distribution/'.$dist['id'], 'cloudfront.amazonaws.com'); - $rest->setHeader('If-Match', $dist['hash']); - $rest = self::__getCloudFrontResponse($rest); - - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 204) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::deleteDistribution({$dist['id']}): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - return true; - } - - - /** - * Get a list of CloudFront distributions - * - * @return array - */ - public static function listDistributions() - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::listDistributions(): [%s] %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - - $useSSL = self::$useSSL; - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('GET', '', '2010-11-01/distribution', 'cloudfront.amazonaws.com'); - $rest = self::__getCloudFrontResponse($rest); - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - self::__triggerError(sprintf("S3::listDistributions(): [%s] %s", - $rest->error['code'], $rest->error['message']), __FILE__, __LINE__); - return false; - } - elseif ($rest->body instanceof SimpleXMLElement && isset($rest->body->DistributionSummary)) - { - $list = array(); - if (isset($rest->body->Marker, $rest->body->MaxItems, $rest->body->IsTruncated)) - { - //$info['marker'] = (string)$rest->body->Marker; - //$info['maxItems'] = (int)$rest->body->MaxItems; - //$info['isTruncated'] = (string)$rest->body->IsTruncated == 'true' ? true : false; - } - foreach ($rest->body->DistributionSummary as $summary) - $list[(string)$summary->Id] = self::__parseCloudFrontDistributionConfig($summary); - - return $list; - } - return array(); - } - - /** - * List CloudFront Origin Access Identities - * - * @return array - */ - public static function listOriginAccessIdentities() - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::listOriginAccessIdentities(): [%s] %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('GET', '', '2010-11-01/origin-access-identity/cloudfront', 'cloudfront.amazonaws.com'); - $rest = self::__getCloudFrontResponse($rest); - $useSSL = self::$useSSL; - - if ($rest->error === false && $rest->code !== 200) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - trigger_error(sprintf("S3::listOriginAccessIdentities(): [%s] %s", - $rest->error['code'], $rest->error['message']), E_USER_WARNING); - return false; - } - - if (isset($rest->body->CloudFrontOriginAccessIdentitySummary)) - { - $identities = array(); - foreach ($rest->body->CloudFrontOriginAccessIdentitySummary as $identity) - if (isset($identity->S3CanonicalUserId)) - $identities[(string)$identity->Id] = array('id' => (string)$identity->Id, 's3CanonicalUserId' => (string)$identity->S3CanonicalUserId); - return $identities; - } - return false; - } - - - /** - * Invalidate objects in a CloudFront distribution - * - * Thanks to Martin Lindkvist for S3::invalidateDistribution() - * - * @param string $distributionId Distribution ID from listDistributions() - * @param array $paths Array of object paths to invalidate - * @return boolean - */ - public static function invalidateDistribution($distributionId, $paths) - { - if (!extension_loaded('openssl')) - { - self::__triggerError(sprintf("S3::invalidateDistribution(): [%s] %s", - "CloudFront functionality requires SSL"), __FILE__, __LINE__); - return false; - } - - $useSSL = self::$useSSL; - self::$useSSL = true; // CloudFront requires SSL - $rest = new S3Request('POST', '', '2010-08-01/distribution/'.$distributionId.'/invalidation', 'cloudfront.amazonaws.com'); - $rest->data = self::__getCloudFrontInvalidationBatchXML($paths, (string)microtime(true)); - $rest->size = strlen($rest->data); - $rest = self::__getCloudFrontResponse($rest); - self::$useSSL = $useSSL; - - if ($rest->error === false && $rest->code !== 201) - $rest->error = array('code' => $rest->code, 'message' => 'Unexpected HTTP status'); - if ($rest->error !== false) - { - trigger_error(sprintf("S3::invalidate('{$distributionId}',{$paths}): [%s] %s", - $rest->error['code'], $rest->error['message']), E_USER_WARNING); - return false; - } - return true; - } - - - /** - * Get a InvalidationBatch DOMDocument - * - * @internal Used to create XML in invalidateDistribution() - * @param array $paths Paths to objects to invalidateDistribution - * @return string - */ - private static function __getCloudFrontInvalidationBatchXML($paths, $callerReference = '0') { - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = true; - $invalidationBatch = $dom->createElement('InvalidationBatch'); - foreach ($paths as $path) - $invalidationBatch->appendChild($dom->createElement('Path', $path)); - - $invalidationBatch->appendChild($dom->createElement('CallerReference', $callerReference)); - $dom->appendChild($invalidationBatch); - return $dom->saveXML(); - } - - - /** - * Get a DistributionConfig DOMDocument - * - * http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/index.html?PutConfig.html - * - * @internal Used to create XML in createDistribution() and updateDistribution() - * @param string $bucket S3 Origin bucket - * @param boolean $enabled Enabled (true/false) - * @param string $comment Comment to append - * @param string $callerReference Caller reference - * @param array $cnames Array of CNAME aliases - * @param string $defaultRootObject Default root object - * @param string $originAccessIdentity Origin access identity - * @param array $trustedSigners Array of trusted signers - * @return string - */ - private static function __getCloudFrontDistributionConfigXML($bucket, $enabled, $comment, $callerReference = '0', $cnames = array(), $defaultRootObject = null, $originAccessIdentity = null, $trustedSigners = array()) - { - $dom = new DOMDocument('1.0', 'UTF-8'); - $dom->formatOutput = true; - $distributionConfig = $dom->createElement('DistributionConfig'); - $distributionConfig->setAttribute('xmlns', 'http://cloudfront.amazonaws.com/doc/2010-11-01/'); - - $origin = $dom->createElement('S3Origin'); - $origin->appendChild($dom->createElement('DNSName', $bucket)); - if ($originAccessIdentity !== null) $origin->appendChild($dom->createElement('OriginAccessIdentity', $originAccessIdentity)); - $distributionConfig->appendChild($origin); - - if ($defaultRootObject !== null) $distributionConfig->appendChild($dom->createElement('DefaultRootObject', $defaultRootObject)); - - $distributionConfig->appendChild($dom->createElement('CallerReference', $callerReference)); - foreach ($cnames as $cname) - $distributionConfig->appendChild($dom->createElement('CNAME', $cname)); - if ($comment !== '') $distributionConfig->appendChild($dom->createElement('Comment', $comment)); - $distributionConfig->appendChild($dom->createElement('Enabled', $enabled ? 'true' : 'false')); - - $trusted = $dom->createElement('TrustedSigners'); - foreach ($trustedSigners as $id => $type) - $trusted->appendChild($id !== '' ? $dom->createElement($type, $id) : $dom->createElement($type)); - $distributionConfig->appendChild($trusted); - - $dom->appendChild($distributionConfig); - //var_dump($dom->saveXML()); - return $dom->saveXML(); - } - - - /** - * Parse a CloudFront distribution config - * - * See http://docs.amazonwebservices.com/AmazonCloudFront/latest/APIReference/index.html?GetDistribution.html - * - * @internal Used to parse the CloudFront DistributionConfig node to an array - * @param object &$node DOMNode - * @return array - */ - private static function __parseCloudFrontDistributionConfig(&$node) - { - if (isset($node->DistributionConfig)) - return self::__parseCloudFrontDistributionConfig($node->DistributionConfig); - - $dist = array(); - if (isset($node->Id, $node->Status, $node->LastModifiedTime, $node->DomainName)) - { - $dist['id'] = (string)$node->Id; - $dist['status'] = (string)$node->Status; - $dist['time'] = strtotime((string)$node->LastModifiedTime); - $dist['domain'] = (string)$node->DomainName; - } - - if (isset($node->CallerReference)) - $dist['callerReference'] = (string)$node->CallerReference; - - if (isset($node->Enabled)) - $dist['enabled'] = (string)$node->Enabled == 'true' ? true : false; - - if (isset($node->S3Origin)) - { - if (isset($node->S3Origin->DNSName)) - $dist['origin'] = (string)$node->S3Origin->DNSName; - - $dist['originAccessIdentity'] = isset($node->S3Origin->OriginAccessIdentity) ? - (string)$node->S3Origin->OriginAccessIdentity : null; - } - - $dist['defaultRootObject'] = isset($node->DefaultRootObject) ? (string)$node->DefaultRootObject : null; - - $dist['cnames'] = array(); - if (isset($node->CNAME)) - foreach ($node->CNAME as $cname) - $dist['cnames'][(string)$cname] = (string)$cname; - - $dist['trustedSigners'] = array(); - if (isset($node->TrustedSigners)) - foreach ($node->TrustedSigners as $signer) - { - if (isset($signer->Self)) - $dist['trustedSigners'][''] = 'Self'; - elseif (isset($signer->KeyPairId)) - $dist['trustedSigners'][(string)$signer->KeyPairId] = 'KeyPairId'; - elseif (isset($signer->AwsAccountNumber)) - $dist['trustedSigners'][(string)$signer->AwsAccountNumber] = 'AwsAccountNumber'; - } - - $dist['comment'] = isset($node->Comment) ? (string)$node->Comment : null; - return $dist; - } - - - /** - * Grab CloudFront response - * - * @internal Used to parse the CloudFront S3Request::getResponse() output - * @param object &$rest S3Request instance - * @return object - */ - private static function __getCloudFrontResponse(&$rest) - { - $rest->getResponse(); - if ($rest->response->error === false && isset($rest->response->body) && - is_string($rest->response->body) && substr($rest->response->body, 0, 5) == 'response->body = simplexml_load_string($rest->response->body); - // Grab CloudFront errors - if (isset($rest->response->body->Error, $rest->response->body->Error->Code, - $rest->response->body->Error->Message)) - { - $rest->response->error = array( - 'code' => (string)$rest->response->body->Error->Code, - 'message' => (string)$rest->response->body->Error->Message - ); - unset($rest->response->body); - } - } - return $rest->response; - } - - - /** - * Get MIME type for file - * - * @internal Used to get mime types - * @param string &$file File path - * @return string - */ - public static function __getMimeType(&$file) - { - $type = false; - // Fileinfo documentation says fileinfo_open() will use the - // MAGIC env var for the magic file - if (extension_loaded('fileinfo') && isset($_ENV['MAGIC']) && - ($finfo = finfo_open(FILEINFO_MIME, $_ENV['MAGIC'])) !== false) - { - if (($type = finfo_file($finfo, $file)) !== false) - { - // Remove the charset and grab the last content-type - $type = explode(' ', str_replace('; charset=', ';charset=', $type)); - $type = array_pop($type); - $type = explode(';', $type); - $type = trim(array_shift($type)); - } - finfo_close($finfo); - - // If anyone is still using mime_content_type() - } elseif (function_exists('mime_content_type')) - $type = trim(mime_content_type($file)); - - if ($type !== false && strlen($type) > 0) return $type; - - // Otherwise do it the old fashioned way - static $exts = array( - 'jpg' => 'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', - 'tif' => 'image/tiff', 'tiff' => 'image/tiff', 'ico' => 'image/x-icon', - 'swf' => 'application/x-shockwave-flash', 'pdf' => 'application/pdf', - 'zip' => 'application/zip', 'gz' => 'application/x-gzip', - 'tar' => 'application/x-tar', 'bz' => 'application/x-bzip', - 'bz2' => 'application/x-bzip2', 'txt' => 'text/plain', - 'asc' => 'text/plain', 'htm' => 'text/html', 'html' => 'text/html', - 'css' => 'text/css', 'js' => 'text/javascript', - 'xml' => 'text/xml', 'xsl' => 'application/xsl+xml', - 'ogg' => 'application/ogg', 'mp3' => 'audio/mpeg', 'wav' => 'audio/x-wav', - 'avi' => 'video/x-msvideo', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', - 'mov' => 'video/quicktime', 'flv' => 'video/x-flv', 'php' => 'text/x-php' - ); - $ext = strtolower(pathInfo($file, PATHINFO_EXTENSION)); - return isset($exts[$ext]) ? $exts[$ext] : 'application/octet-stream'; - } - - - /** - * Generate the auth string: "AWS AccessKey:Signature" - * - * @internal Used by S3Request::getResponse() - * @param string $string String to sign - * @return string - */ - public static function __getSignature($string) - { - return 'AWS '.self::$__accessKey.':'.self::__getHash($string); - } - - - /** - * Creates a HMAC-SHA1 hash - * - * This uses the hash extension if loaded - * - * @internal Used by __getSignature() - * @param string $string String to sign - * @return string - */ - private static function __getHash($string) - { - return base64_encode(extension_loaded('hash') ? - hash_hmac('sha1', $string, self::$__secretKey, true) : pack('H*', sha1( - (str_pad(self::$__secretKey, 64, chr(0x00)) ^ (str_repeat(chr(0x5c), 64))) . - pack('H*', sha1((str_pad(self::$__secretKey, 64, chr(0x00)) ^ - (str_repeat(chr(0x36), 64))) . $string))))); - } - -} - -final class S3Request -{ - private $endpoint, $verb, $bucket, $uri, $resource = '', $parameters = array(), - $amzHeaders = array(), $headers = array( - 'Host' => '', 'Date' => '', 'Content-MD5' => '', 'Content-Type' => '' - ); - public $fp = false, $size = 0, $data = false, $response; - - - /** - * Constructor - * - * @param string $verb Verb - * @param string $bucket Bucket name - * @param string $uri Object URI - * @return mixed - */ - function __construct($verb, $bucket = '', $uri = '', $endpoint = 's3.amazonaws.com') - { - $this->endpoint = $endpoint; - $this->verb = $verb; - $this->bucket = $bucket; - $this->uri = $uri !== '' ? '/'.str_replace('%2F', '/', rawurlencode($uri)) : '/'; - - if ($this->bucket !== '') - { - $this->headers['Host'] = $this->bucket.'.'.$this->endpoint; - $this->resource = '/'.$this->bucket.$this->uri; - } - else - { - $this->headers['Host'] = $this->endpoint; - $this->resource = $this->uri; - } - $this->headers['Date'] = gmdate('D, d M Y H:i:s T'); - - $this->response = new STDClass; - $this->response->error = false; - } - - - /** - * Set request parameter - * - * @param string $key Key - * @param string $value Value - * @return void - */ - public function setParameter($key, $value) - { - $this->parameters[$key] = $value; - } - - - /** - * Set request header - * - * @param string $key Key - * @param string $value Value - * @return void - */ - public function setHeader($key, $value) - { - $this->headers[$key] = $value; - } - - - /** - * Set x-amz-meta-* header - * - * @param string $key Key - * @param string $value Value - * @return void - */ - public function setAmzHeader($key, $value) - { - $this->amzHeaders[$key] = $value; - } - - - /** - * Get the S3 response - * - * @return object | false - */ - public function getResponse() - { - $query = ''; - if (sizeof($this->parameters) > 0) - { - $query = substr($this->uri, -1) !== '?' ? '?' : '&'; - foreach ($this->parameters as $var => $value) - if ($value == null || $value == '') $query .= $var.'&'; - // Parameters should be encoded (thanks Sean O'Dea) - else $query .= $var.'='.rawurlencode($value).'&'; - $query = substr($query, 0, -1); - $this->uri .= $query; - - if (array_key_exists('acl', $this->parameters) || - array_key_exists('location', $this->parameters) || - array_key_exists('torrent', $this->parameters) || - array_key_exists('logging', $this->parameters)) - $this->resource .= $query; - } - $url = (S3::$useSSL ? 'https://' : 'http://') . $this->headers['Host'].$this->uri; - //var_dump($this->bucket, $this->uri, $this->resource, $url); - - // Basic setup - $curl = curl_init(); - curl_setopt($curl, CURLOPT_USERAGENT, 'S3/php'); - - if (S3::$useSSL) - { - // SSL Validation can now be optional for those with broken OpenSSL installations - curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, S3::$useSSLValidation ? 1 : 0); - curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, S3::$useSSLValidation ? 1 : 0); - - if (S3::$sslKey !== null) curl_setopt($curl, CURLOPT_SSLKEY, S3::$sslKey); - if (S3::$sslCert !== null) curl_setopt($curl, CURLOPT_SSLCERT, S3::$sslCert); - if (S3::$sslCACert !== null) curl_setopt($curl, CURLOPT_CAINFO, S3::$sslCACert); - } - - curl_setopt($curl, CURLOPT_URL, $url); - - if (S3::$proxy != null && isset(S3::$proxy['host'])) - { - curl_setopt($curl, CURLOPT_PROXY, S3::$proxy['host']); - curl_setopt($curl, CURLOPT_PROXYTYPE, S3::$proxy['type']); - if (isset(S3::$proxy['user'], S3::$proxy['pass']) && $proxy['user'] != null && $proxy['pass'] != null) - curl_setopt($curl, CURLOPT_PROXYUSERPWD, sprintf('%s:%s', S3::$proxy['user'], S3::$proxy['pass'])); - } - - // Headers - $headers = array(); $amz = array(); - foreach ($this->amzHeaders as $header => $value) - if (strlen($value) > 0) $headers[] = $header.': '.$value; - foreach ($this->headers as $header => $value) - if (strlen($value) > 0) $headers[] = $header.': '.$value; - - // Collect AMZ headers for signature - foreach ($this->amzHeaders as $header => $value) - if (strlen($value) > 0) $amz[] = strtolower($header).':'.$value; - - // AMZ headers must be sorted - if (sizeof($amz) > 0) - { - sort($amz); - $amz = "\n".implode("\n", $amz); - } else $amz = ''; - - if (S3::hasAuth()) - { - // Authorization string (CloudFront stringToSign should only contain a date) - $headers[] = 'Authorization: ' . S3::__getSignature( - $this->headers['Host'] == 'cloudfront.amazonaws.com' ? $this->headers['Date'] : - $this->verb."\n".$this->headers['Content-MD5']."\n". - $this->headers['Content-Type']."\n".$this->headers['Date'].$amz."\n".$this->resource - ); - } - - curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - curl_setopt($curl, CURLOPT_HEADER, false); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, false); - curl_setopt($curl, CURLOPT_WRITEFUNCTION, array(&$this, '__responseWriteCallback')); - curl_setopt($curl, CURLOPT_HEADERFUNCTION, array(&$this, '__responseHeaderCallback')); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - - // Request types - switch ($this->verb) - { - case 'GET': break; - case 'PUT': case 'POST': // POST only used for CloudFront - if ($this->fp !== false) - { - curl_setopt($curl, CURLOPT_PUT, true); - curl_setopt($curl, CURLOPT_INFILE, $this->fp); - if ($this->size >= 0) - curl_setopt($curl, CURLOPT_INFILESIZE, $this->size); - } - elseif ($this->data !== false) - { - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); - curl_setopt($curl, CURLOPT_POSTFIELDS, $this->data); - } - else - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $this->verb); - break; - case 'HEAD': - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'HEAD'); - curl_setopt($curl, CURLOPT_NOBODY, true); - break; - case 'DELETE': - curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'DELETE'); - break; - default: break; - } - - // Execute, grab errors - if (curl_exec($curl)) - $this->response->code = curl_getinfo($curl, CURLINFO_HTTP_CODE); - else - $this->response->error = array( - 'code' => curl_errno($curl), - 'message' => curl_error($curl), - 'resource' => $this->resource - ); - - @curl_close($curl); - - // Parse body into XML - if ($this->response->error === false && isset($this->response->headers['type']) && - $this->response->headers['type'] == 'application/xml' && isset($this->response->body)) - { - $this->response->body = simplexml_load_string($this->response->body); - - // Grab S3 errors - if (!in_array($this->response->code, array(200, 204, 206)) && - isset($this->response->body->Code, $this->response->body->Message)) - { - $this->response->error = array( - 'code' => (string)$this->response->body->Code, - 'message' => (string)$this->response->body->Message - ); - if (isset($this->response->body->Resource)) - $this->response->error['resource'] = (string)$this->response->body->Resource; - unset($this->response->body); - } - } - - // Clean up file resources - if ($this->fp !== false && is_resource($this->fp)) fclose($this->fp); - - return $this->response; - } - - - /** - * CURL write callback - * - * @param resource &$curl CURL resource - * @param string &$data Data - * @return integer - */ - private function __responseWriteCallback(&$curl, &$data) - { - if (in_array($this->response->code, array(200, 206)) && $this->fp !== false) - return fwrite($this->fp, $data); - else - $this->response->body .= $data; - return strlen($data); - } - - - /** - * CURL header callback - * - * @param resource &$curl CURL resource - * @param string &$data Data - * @return integer - */ - private function __responseHeaderCallback(&$curl, &$data) - { - if (($strlen = strlen($data)) <= 2) return $strlen; - if (substr($data, 0, 4) == 'HTTP') - $this->response->code = (int)substr($data, 9, 3); - else - { - $data = trim($data); - if (strpos($data, ': ') === false) return $strlen; - list($header, $value) = explode(': ', $data, 2); - if ($header == 'Last-Modified') - $this->response->headers['time'] = strtotime($value); - elseif ($header == 'Content-Length') - $this->response->headers['size'] = (int)$value; - elseif ($header == 'Content-Type') - $this->response->headers['type'] = $value; - elseif ($header == 'ETag') - $this->response->headers['hash'] = $value{0} == '"' ? substr($value, 1, -1) : $value; - elseif (preg_match('/^x-amz-meta-.*$/', $header)) - $this->response->headers[$header] = is_numeric($value) ? (int)$value : $value; - } - return $strlen; - } - -} - -class S3Exception extends Exception { - function __construct($message, $file, $line, $code = 0) - { - parent::__construct($message, $code); - $this->file = $file; - $this->line = $line; - } -} diff --git a/externals/stripe-js/stripe_core.js b/externals/stripe-js/stripe_core.js deleted file mode 100644 index 83ce17876d..0000000000 --- a/externals/stripe-js/stripe_core.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @provides stripe-core - * @do-not-minify - */ -(function(c){function k(a){return a.replace(/^\s+|\s+$/g,"")}function n(){if(!c.publishableKey)throw"No Publishable API Key: Call Stripe.setPublishableKey to provide your key.";}var d=null,l={};typeof window!=="undefined"&&!window.JSON&&(window.JSON={});(function(){if(typeof JSON.parse!=="function")JSON.parse=function(a,b){function d(a,e){var c,h,f=a[e];if(f&&typeof f==="object")for(c in f)Object.hasOwnProperty.call(f,c)&&(h=d(f,c),h!==void 0?f[c]=h:delete f[c]);return b.call(a,e,f)}var e=RegExp("[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]", -"g"),a=String(a);e.lastIndex=0;e.test(a)&&(a=a.replace(e,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)}));if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return e=eval("("+a+")"),typeof b==="function"?d({"":e},""):e;throw new SyntaxError("JSON.parse");}})();var v=function(a){function b(){d=null;var a=document.getElementsByTagName("body")[0], -b=document.createElement("iframe");m="stripeFrame"+(new Date).getTime();q=j.apiURL+"/js/v1/apitunnel.html";var i=q+"#"+encodeURIComponent(window.location.href);b.setAttribute("src",i);b.setAttribute("name",m);b.setAttribute("id",m);b.setAttribute("frameborder","0");b.setAttribute("scrolling","no");b.setAttribute("allowtransparency","true");b.setAttribute("width",0);b.setAttribute("height",0);b.setAttribute("style","position:absolute;top:0;left:0;width:0;height:0");i=function(){d=window.frames[m]; -c()};b.attachEvent?b.attachEvent("onload",i):b.onload=i;a.appendChild(b)}function c(){if(d){var b=o.length;if(b>0){for(var e=0;e=10)if(b=a.length<=16)if(a.match(/^[0-9]+$/)===null)b=!1;else{var a=a.split("").reverse().join(""),c=0,d;for(b=0;b=3&&a.length<=4};c.validateExpiry=function(a,b){var a=k(a),b=k(b),c=new Date;return a.match(/^[0-9]+$/)!==null&&b.match(/^[0-9]+$/)!==null&&b>c.getFullYear()||b==c.getFullYear()&&a>=c.getMonth()+1};c.createToken=function(a,b,d){typeof b==="function"&&(d=b,b=null);n();var e={expMonth:"exp_month",expYear:"exp_year",addressLine1:"address_line_1",addressLine2:"address_line_2",addressZip:"address_zip",addressState:"address_state", -addressCountry:"address_country"};for(convertibleParam in e)e.hasOwnProperty(convertibleParam)&&a.hasOwnProperty(convertibleParam)&&(a[e[convertibleParam]]=a[convertibleParam],delete a[convertibleParam]);params={card:a};b!==null&&(params.amount=b);c.transport.callAPI("POST","tokens",params,c.publishableKey,d)};c.getToken=function(a,b){n();c.transport.callAPI("GET","tokens/"+a,{},c.publishableKey,b)};c.setPublishableKey=function(a){c.publishableKey=a};l.init()})(typeof exports!=="undefined"&&exports!== -null?exports:window.Stripe={}); diff --git a/externals/stripe-php/.travis.yml b/externals/stripe-php/.travis.yml new file mode 100644 index 0000000000..408711ba82 --- /dev/null +++ b/externals/stripe-php/.travis.yml @@ -0,0 +1,17 @@ +language: php + +php: + - 5.2 + - 5.3 + - 5.4 + - 5.5 + - 5.6 + - hhvm + +before_script: + - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.2' ]; then wget http://iweb.dl.sourceforge.net/project/simpletest/simpletest/simpletest_1.1/simpletest_1.1.0.tar.gz; tar xf simpletest_1.1.0.tar.gz -C test; else composer install --dev --prefer-source; fi" + - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.6' ]; then pear install pear/PHP_CodeSniffer; phpenv rehash; fi" + +script: + - sh -c "if [ '$TRAVIS_PHP_VERSION' = '5.6' ]; then phpcs --standard=zend --encoding=UTF-8 --ignore=vendor -p ./; fi" + - php test/Stripe.php diff --git a/externals/stripe-php/CHANGELOG b/externals/stripe-php/CHANGELOG new file mode 100644 index 0000000000..b86658a428 --- /dev/null +++ b/externals/stripe-php/CHANGELOG @@ -0,0 +1,156 @@ +=== 1.16.0 2014-06-17 + +* Add metadata for refunds and disputes + +=== 1.15.0 2014-05-28 + +* Support canceling transfers + +=== 1.14.1 2014-05-21 + +* Support cards for recipients. + +=== 1.13.1 2014-05-15 + +* Fix bug in account resource where `id` wasn't in the result + +=== 1.13.0 2014-04-10 + +* Add support for certificate blacklisting +* Update ca bundle +* Drop support for HHVM (Temporarily) + +=== 1.12.0 2014-04-01 + +* Add Stripe_RateLimitError for catching rate limit errors. +* Update to Zend coding style (thanks, @jpiasetz) + +=== 1.11.0 2014-01-29 + +* Add support for multiple subscriptions per customer + +=== 1.10.1 2013-12-02 + +* Add new ApplicationFee + +=== 1.9.1 2013-11-08 + +* Fix a bug where a null nestable object causes warnings to fire. + +=== 1.9.0 2013-10-16 + +* Add support for metadata API. + +=== 1.8.4 2013-09-18 + +* Add support for closing disputes. + +=== 1.8.3 2013-08-13 + +* Add new Balance and BalanceTransaction + +=== 1.8.2 2013-08-12 + +* Add support for unsetting attributes by updating to NULL. + Setting properties to a blank string is now an error. + +=== 1.8.1 2013-07-12 + +* Add support for multiple cards API (Stripe API version 2013-07-12: https://stripe.com/docs/upgrades#2013-07-05) + +=== 1.8.0 2013-04-11 + +* Allow Transfers to be creatable +* Add new Recipient resource + +=== 1.7.15 2013-02-21 + +* Add 'id' to the list of permanent object attributes + +=== 1.7.14 2013-02-20 + +* Don't re-encode strings that are already encoded in UTF-8. If you + were previously using plan or coupon objects with UTF-8 IDs, they + may have been treated as ISO-8859-1 (Latin-1) and encoded to UTF-8 a + 2nd time. You may now need to pass the IDs to utf8_encode before + passing them to Stripe_Plan::retrieve or Stripe_Coupon::retrieve. +* Ensure that all input is encoded in UTF-8 before submitting it to + Stripe's servers. (github issue #27) + +=== 1.7.13 2013-02-01 + +* Add support for passing options when retrieving Stripe objects + e.g., Stripe_Charge::retrieve(array("id"=>"foo", "expand" => array("customer"))) + Stripe_Charge::retrieve("foo") will continue to work + +=== 1.7.12 2013-01-15 + +* Add support for setting a Stripe API version override + +=== 1.7.11 2012-12-30 + +* Version bump to cleanup constants and such (github issue #26) + +=== 1.7.10 2012-11-08 + +* Add support for updating charge disputes. +* Fix bug preventing retrieval of null attributes + +=== 1.7.9 2012-11-08 + +* Fix usage under autoloaders such as the one generated by composer + (github issue #22) + +=== 1.7.8 2012-10-30 +* Add support for creating invoices. +* Add support for new invoice lines return format +* Add support for new list objects + +=== 1.7.7 2012-09-14 + +* Get all of the various version numbers in the repo in sync (no other + changes) + +=== 1.7.6 2012-08-31 + +* Add update and pay methods to Invoice resource + +=== 1.7.5 2012-08-23 + +* Change internal function names so that Stripe_SingletonApiRequest is + E_STRICT-clean (github issue #16) + +=== 1.7.4 2012-08-21 + +* Bugfix so that Stripe objects (e.g. Customer, Charge objects) used + in API calls are transparently converted to their object IDs + +=== 1.7.3 2012-08-15 + +* Add new Account resource + +=== 1.7.2 2012-06-26 + +* Make clearer that you should be including lib/Stripe.php, not + test/Stripe.php (github issue #14) + +=== 1.7.1 2012-05-24 + +* Add missing argument to Stripe_InvalidRequestError constructor in + Stripe_ApiResource::instanceUrl. Fixes a warning when + Stripe_ApiResource::instanceUrl is called on a resource with no ID + (github issue #12) + +=== 1.7.0 2012-05-17 + +* Support Composer and Packagist (github issue #9) + +* Add new deleteDiscount method to Stripe_Customer + +* Add new Transfer resource + +* Switch from using HTTP Basic auth to Bearer auth. (Note: Stripe will + support Basic auth for the indefinite future, but recommends Bearer + auth when possible going forward) + +* Numerous test suite improvements diff --git a/externals/stripe-php/LICENSE b/externals/stripe-php/LICENSE index ff5a9b0771..ac9fd37ebb 100644 --- a/externals/stripe-php/LICENSE +++ b/externals/stripe-php/LICENSE @@ -1,6 +1,6 @@ The MIT License -Copyright (c) 2010 Stripe +Copyright (c) 2010-2014 Stripe Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/externals/stripe-php/README.rdoc b/externals/stripe-php/README.rdoc index 034696ac68..4aca072a66 100644 --- a/externals/stripe-php/README.rdoc +++ b/externals/stripe-php/README.rdoc @@ -1,13 +1,49 @@ -= Installation += Stripe PHP bindings +{Build Status}[https://travis-ci.org/stripe/stripe-php] +{Latest Stable Version}[https://packagist.org/packages/stripe/stripe-php] +{Total Downloads}[https://packagist.org/packages/stripe/stripe-php] +{License}[https://packagist.org/packages/stripe/stripe-php] + +You can sign up for a Stripe account at https://stripe.com. + +== Requirements + +PHP 5.2 and later. + +== Composer + +You can install the bindings via Composer[http://getcomposer.org/]. Add this to your +composer.json+: + + { + "require": { + "stripe/stripe-php": "1.*" + } + } + +Then install via: + + composer.phar install + +To use the bindings, either user Composer's autoload[https://getcomposer.org/doc/00-intro.md#autoloading]: + + require_once('vendor/autoload.php'); + +Or manually: + + require_once('/path/to/vendor/stripe/stripe-php/lib/Stripe.php'); + +== Manual Installation Obtain the latest version of the Stripe PHP bindings with: git clone https://github.com/stripe/stripe-php -To get started, add the following to your PHP script: +To use the bindings, add the following to your PHP script: require_once("/path/to/stripe-php/lib/Stripe.php"); +== Getting Started + Simple usage looks like: Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249'); @@ -15,6 +51,17 @@ Simple usage looks like: $charge = Stripe_Charge::create(array('card' => $myCard, 'amount' => 2000, 'currency' => 'usd')); echo $charge; -= Documentation +== Documentation Please see https://stripe.com/api for up-to-date documentation. + +== Tests + +In order to run tests you have to install SimpleTest[http://packagist.org/packages/simpletest/simpletest] via Composer[http://getcomposer.org/] (recommended way): + + composer.phar update --dev + +Run test suite: + + php ./test/Stripe.php + diff --git a/externals/stripe-php/VERSION b/externals/stripe-php/VERSION index 266146b87c..15b989e398 100644 --- a/externals/stripe-php/VERSION +++ b/externals/stripe-php/VERSION @@ -1 +1 @@ -1.6.3 +1.16.0 diff --git a/externals/stripe-php/composer.json b/externals/stripe-php/composer.json new file mode 100644 index 0000000000..42b50e3971 --- /dev/null +++ b/externals/stripe-php/composer.json @@ -0,0 +1,29 @@ +{ + "name": "stripe/stripe-php", + "description": "Stripe PHP Library", + "keywords": [ + "stripe", + "payment processing", + "api" + ], + "homepage": "https://stripe.com/", + "license": "MIT", + "authors": [ + { + "name": "Stripe and contributors", + "homepage": "https://github.com/stripe/stripe-php/contributors" + } + ], + "require": { + "php": ">=5.2", + "ext-curl": "*", + "ext-json": "*", + "ext-mbstring": "*" + }, + "require-dev": { + "simpletest/simpletest": "*" + }, + "autoload": { + "classmap": ["lib/Stripe/"] + } +} diff --git a/externals/stripe-php/lib/Stripe.php b/externals/stripe-php/lib/Stripe.php index 32a130b4f1..372b738d61 100644 --- a/externals/stripe-php/lib/Stripe.php +++ b/externals/stripe-php/lib/Stripe.php @@ -9,34 +9,12 @@ if (!function_exists('json_decode')) { throw new Exception('Stripe needs the JSON PHP extension.'); } - - -abstract class Stripe -{ - public static $apiKey; - public static $apiBase = 'https://api.stripe.com/v1'; - public static $verifySslCerts = true; - const VERSION = '1.6.3'; - - public static function getApiKey() - { - return self::$apiKey; - } - - public static function setApiKey($apiKey) - { - self::$apiKey = $apiKey; - } - - public static function getVerifySslCerts() { - return self::$verifySslCerts; - } - - public static function setVerifySslCerts($verify) { - self::$verifySslCerts = $verify; - } +if (!function_exists('mb_detect_encoding')) { + throw new Exception('Stripe needs the Multibyte String PHP extension.'); } +// Stripe singleton +require(dirname(__FILE__) . '/Stripe/Stripe.php'); // Utilities require(dirname(__FILE__) . '/Stripe/Util.php'); @@ -49,18 +27,31 @@ public static function setVerifySslCerts($verify) { require(dirname(__FILE__) . '/Stripe/AuthenticationError.php'); require(dirname(__FILE__) . '/Stripe/CardError.php'); require(dirname(__FILE__) . '/Stripe/InvalidRequestError.php'); +require(dirname(__FILE__) . '/Stripe/RateLimitError.php'); // Plumbing require(dirname(__FILE__) . '/Stripe/Object.php'); require(dirname(__FILE__) . '/Stripe/ApiRequestor.php'); require(dirname(__FILE__) . '/Stripe/ApiResource.php'); +require(dirname(__FILE__) . '/Stripe/SingletonApiResource.php'); +require(dirname(__FILE__) . '/Stripe/AttachedObject.php'); +require(dirname(__FILE__) . '/Stripe/List.php'); // Stripe API Resources +require(dirname(__FILE__) . '/Stripe/Account.php'); +require(dirname(__FILE__) . '/Stripe/Card.php'); +require(dirname(__FILE__) . '/Stripe/Balance.php'); +require(dirname(__FILE__) . '/Stripe/BalanceTransaction.php'); require(dirname(__FILE__) . '/Stripe/Charge.php'); require(dirname(__FILE__) . '/Stripe/Customer.php'); require(dirname(__FILE__) . '/Stripe/Invoice.php'); require(dirname(__FILE__) . '/Stripe/InvoiceItem.php'); require(dirname(__FILE__) . '/Stripe/Plan.php'); +require(dirname(__FILE__) . '/Stripe/Subscription.php'); require(dirname(__FILE__) . '/Stripe/Token.php'); require(dirname(__FILE__) . '/Stripe/Coupon.php'); -require(dirname(__FILE__) . '/Stripe/Event.php'); \ No newline at end of file +require(dirname(__FILE__) . '/Stripe/Event.php'); +require(dirname(__FILE__) . '/Stripe/Transfer.php'); +require(dirname(__FILE__) . '/Stripe/Recipient.php'); +require(dirname(__FILE__) . '/Stripe/Refund.php'); +require(dirname(__FILE__) . '/Stripe/ApplicationFee.php'); diff --git a/externals/stripe-php/lib/Stripe/Account.php b/externals/stripe-php/lib/Stripe/Account.php new file mode 100644 index 0000000000..f5ef9a494d --- /dev/null +++ b/externals/stripe-php/lib/Stripe/Account.php @@ -0,0 +1,15 @@ +_apiKey = $apiKey; } + /** + * @param string $url The path to the API endpoint. + * + * @returns string The full path. + */ public static function apiUrl($url='') { $apiBase = Stripe::$apiBase; return "$apiBase$url"; } + /** + * @param string|mixed $value A string to UTF8-encode. + * + * @returns string|mixed The UTF8-encoded string, or the object passed in if + * it wasn't a string. + */ public static function utf8($value) { - if (is_string($value)) + if (is_string($value) + && mb_detect_encoding($value, "UTF-8", TRUE) != "UTF-8") { return utf8_encode($value); - else + } else { return $value; + } } private static function _encodeObjects($d) { - if ($d instanceof Stripe_ApiRequestor) { - return $d->id; + if ($d instanceof Stripe_ApiResource) { + return self::utf8($d->id); } else if ($d === true) { return 'true'; } else if ($d === false) { @@ -34,70 +60,142 @@ private static function _encodeObjects($d) } else if (is_array($d)) { $res = array(); foreach ($d as $k => $v) - $res[$k] = self::_encodeObjects($v); + $res[$k] = self::_encodeObjects($v); return $res; } else { - return $d; + return self::utf8($d); } } - public static function encode($d) + /** + * @param array $arr An map of param keys to values. + * @param string|null $prefix (It doesn't look like we ever use $prefix...) + * + * @returns string A querystring, essentially. + */ + public static function encode($arr, $prefix=null) { - return http_build_query($d, null, '&'); + if (!is_array($arr)) + return $arr; + + $r = array(); + foreach ($arr as $k => $v) { + if (is_null($v)) + continue; + + if ($prefix && $k && !is_int($k)) + $k = $prefix."[".$k."]"; + else if ($prefix) + $k = $prefix."[]"; + + if (is_array($v)) { + $r[] = self::encode($v, $k, true); + } else { + $r[] = urlencode($k)."=".urlencode($v); + } + } + + return implode("&", $r); } - public function request($meth, $url, $params=null) + /** + * @param string $method + * @param string $url + * @param array|null $params + * + * @return array An array whose first element is the response and second + * element is the API key used to make the request. + */ + public function request($method, $url, $params=null) { if (!$params) $params = array(); - list($rbody, $rcode, $myApiKey) = $this->_requestRaw($meth, $url, $params); + list($rbody, $rcode, $myApiKey) = + $this->_requestRaw($method, $url, $params); $resp = $this->_interpretResponse($rbody, $rcode); return array($resp, $myApiKey); } + + /** + * @param string $rbody A JSON string. + * @param int $rcode + * @param array $resp + * + * @throws Stripe_InvalidRequestError if the error is caused by the user. + * @throws Stripe_AuthenticationError if the error is caused by a lack of + * permissions. + * @throws Stripe_CardError if the error is the error code is 402 (payment + * required) + * @throws Stripe_ApiError otherwise. + */ public function handleApiError($rbody, $rcode, $resp) { - if (!is_array($resp) || !isset($resp['error'])) - throw new Stripe_ApiError("Invalid response object from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody, $resp); + if (!is_array($resp) || !isset($resp['error'])) { + $msg = "Invalid response object from API: $rbody " + ."(HTTP response code was $rcode)"; + throw new Stripe_ApiError($msg, $rcode, $rbody, $resp); + } + $error = $resp['error']; + $msg = isset($error['message']) ? $error['message'] : null; + $param = isset($error['param']) ? $error['param'] : null; + $code = isset($error['code']) ? $error['code'] : null; + switch ($rcode) { case 400: + if ($code == 'rate_limit') { + throw new Stripe_RateLimitError( + $msg, $param, $rcode, $rbody, $resp + ); + } case 404: - throw new Stripe_InvalidRequestError(isset($error['message']) ? $error['message'] : null, - isset($error['param']) ? $error['param'] : null, - $rcode, $rbody, $resp); + throw new Stripe_InvalidRequestError( + $msg, $param, $rcode, $rbody, $resp + ); case 401: - throw new Stripe_AuthenticationError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp); + throw new Stripe_AuthenticationError($msg, $rcode, $rbody, $resp); case 402: - throw new Stripe_CardError(isset($error['message']) ? $error['message'] : null, - isset($error['param']) ? $error['param'] : null, - isset($error['code']) ? $error['code'] : null, - $rcode, $rbody, $resp); + throw new Stripe_CardError($msg, $param, $code, $rcode, $rbody, $resp); default: - throw new Stripe_ApiError(isset($error['message']) ? $error['message'] : null, $rcode, $rbody, $resp); + throw new Stripe_ApiError($msg, $rcode, $rbody, $resp); } } - private function _requestRaw($meth, $url, $params) + private function _requestRaw($method, $url, $params) { $myApiKey = $this->_apiKey; if (!$myApiKey) $myApiKey = Stripe::$apiKey; - if (!$myApiKey) - throw new Stripe_AuthenticationError('No API key provided. (HINT: set your API key using "Stripe::setApiKey()". You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email support@stripe.com if you have any questions.'); + + if (!$myApiKey) { + $msg = 'No API key provided. (HINT: set your API key using ' + . '"Stripe::setApiKey()". You can generate API keys from ' + . 'the Stripe web interface. See https://stripe.com/api for ' + . 'details, or email support@stripe.com if you have any questions.'; + throw new Stripe_AuthenticationError($msg); + } $absUrl = $this->apiUrl($url); $params = self::_encodeObjects($params); $langVersion = phpversion(); $uname = php_uname(); $ua = array('bindings_version' => Stripe::VERSION, - 'lang' => 'php', - 'lang_version' => $langVersion, - 'publisher' => 'stripe', - 'uname' => $uname); + 'lang' => 'php', + 'lang_version' => $langVersion, + 'publisher' => 'stripe', + 'uname' => $uname); $headers = array('X-Stripe-Client-User-Agent: ' . json_encode($ua), - 'User-Agent: Stripe/v1 PhpBindings/' . Stripe::VERSION); - list($rbody, $rcode) = $this->_curlRequest($meth, $absUrl, $headers, $params, $myApiKey); + 'User-Agent: Stripe/v1 PhpBindings/' . Stripe::VERSION, + 'Authorization: Bearer ' . $myApiKey); + if (Stripe::$apiVersion) + $headers[] = 'Stripe-Version: ' . Stripe::$apiVersion; + list($rbody, $rcode) = $this->_curlRequest( + $method, + $absUrl, + $headers, + $params + ); return array($rbody, $rcode, $myApiKey); } @@ -106,7 +204,9 @@ private function _interpretResponse($rbody, $rcode) try { $resp = json_decode($rbody, true); } catch (Exception $e) { - throw new Stripe_ApiError("Invalid response body from API: $rbody (HTTP response code was $rcode)", $rcode, $rbody); + $msg = "Invalid response body from API: $rbody " + . "(HTTP response code was $rcode)"; + throw new Stripe_ApiError($msg, $rcode, $rbody); } if ($rcode < 200 || $rcode >= 300) { @@ -115,28 +215,33 @@ private function _interpretResponse($rbody, $rcode) return $resp; } - private function _curlRequest($meth, $absUrl, $headers, $params, $myApiKey) + private function _curlRequest($method, $absUrl, $headers, $params) { + + if (!self::$_preFlight) { + self::$_preFlight = $this->checkSslCert($this->apiUrl()); + } + $curl = curl_init(); - $meth = strtolower($meth); + $method = strtolower($method); $opts = array(); - if ($meth == 'get') { + if ($method == 'get') { $opts[CURLOPT_HTTPGET] = 1; if (count($params) > 0) { - $encoded = self::encode($params); - $absUrl = "$absUrl?$encoded"; + $encoded = self::encode($params); + $absUrl = "$absUrl?$encoded"; } - } else if ($meth == 'post') { + } else if ($method == 'post') { $opts[CURLOPT_POST] = 1; $opts[CURLOPT_POSTFIELDS] = self::encode($params); - } else if ($meth == 'delete') { + } else if ($method == 'delete') { $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE'; if (count($params) > 0) { - $encoded = self::encode($params); - $absUrl = "$absUrl?$encoded"; + $encoded = self::encode($params); + $absUrl = "$absUrl?$encoded"; } } else { - throw new Stripe_ApiError("Unrecognized method $meth"); + throw new Stripe_ApiError("Unrecognized method $method"); } $absUrl = self::utf8($absUrl); @@ -146,19 +251,27 @@ private function _curlRequest($meth, $absUrl, $headers, $params, $myApiKey) $opts[CURLOPT_TIMEOUT] = 80; $opts[CURLOPT_RETURNTRANSFER] = true; $opts[CURLOPT_HTTPHEADER] = $headers; - $opts[CURLOPT_USERPWD] = $myApiKey . ':'; if (!Stripe::$verifySslCerts) $opts[CURLOPT_SSL_VERIFYPEER] = false; curl_setopt_array($curl, $opts); $rbody = curl_exec($curl); + if (!defined('CURLE_SSL_CACERT_BADFILE')) { + define('CURLE_SSL_CACERT_BADFILE', 77); // constant not defined in PHP + } + $errno = curl_errno($curl); - if ($errno == CURLE_SSL_CACERT || $errno == CURLE_SSL_PEER_CERTIFICATE) { - array_push($headers, 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}'); + if ($errno == CURLE_SSL_CACERT || + $errno == CURLE_SSL_PEER_CERTIFICATE || + $errno == CURLE_SSL_CACERT_BADFILE) { + array_push( + $headers, + 'X-Stripe-Client-Info: {"ca":"using Stripe-supplied CA bundle"}' + ); + $cert = $this->caBundle(); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); - curl_setopt($curl, CURLOPT_CAINFO, - dirname(__FILE__) . '/../data/ca-certificates.crt'); + curl_setopt($curl, CURLOPT_CAINFO, $cert); $rbody = curl_exec($curl); } @@ -174,6 +287,11 @@ private function _curlRequest($meth, $absUrl, $headers, $params, $myApiKey) return array($rbody, $rcode); } + /** + * @param number $errno + * @param string $message + * @throws Stripe_ApiConnectionError + */ public function handleCurlError($errno, $message) { $apiBase = Stripe::$apiBase; @@ -181,17 +299,119 @@ public function handleCurlError($errno, $message) case CURLE_COULDNT_CONNECT: case CURLE_COULDNT_RESOLVE_HOST: case CURLE_OPERATION_TIMEOUTED: - $msg = "Could not connect to Stripe ($apiBase). Please check your internet connection and try again. If this problem persists, you should check Stripe's service status at https://twitter.com/stripestatus, or let us know at support@stripe.com."; - break; + $msg = "Could not connect to Stripe ($apiBase). Please check your " + . "internet connection and try again. If this problem persists, " + . "you should check Stripe's service status at " + . "https://twitter.com/stripestatus,%20or"; + break; case CURLE_SSL_CACERT: case CURLE_SSL_PEER_CERTIFICATE: - $msg = "Could not verify Stripe's SSL certificate. Please make sure that your network is not intercepting certificates. (Try going to $apiBase in your browser.) If this problem persists, let us know at support@stripe.com."; - break; + $msg = "Could not verify Stripe's SSL certificate. Please make sure " + . "that your network is not intercepting certificates. " + . "(Try going to $apiBase in your browser.) " + . "If this problem persists,"; + break; default: - $msg = "Unexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com."; + $msg = "Unexpected error communicating with Stripe. " + . "If this problem persists,"; } + $msg .= " let us know at support@stripe.com."; - $msg .= "\n\n(Network error: $message)"; + $msg .= "\n\n(Network error [errno $errno]: $message)"; throw new Stripe_ApiConnectionError($msg); } + + /** + * Preflight the SSL certificate presented by the backend. This isn't 100% + * bulletproof, in that we're not actually validating the transport used to + * communicate with Stripe, merely that the first attempt to does not use a + * revoked certificate. + * + * Unfortunately the interface to OpenSSL doesn't make it easy to check the + * certificate before sending potentially sensitive data on the wire. This + * approach raises the bar for an attacker significantly. + */ + private function checkSslCert($url) + { + if (version_compare(PHP_VERSION, '5.3.0', '<')) { + error_log( + 'Warning: This version of PHP is too old to check SSL certificates '. + 'correctly. Stripe cannot guarantee that the server has a '. + 'certificate which is not blacklisted' + ); + return true; + } + + if (strpos(PHP_VERSION, 'hiphop') !== false) { + error_log( + 'Warning: HHVM does not support Stripe\'s SSL certificate '. + 'verification. (See http://docs.hhvm.com/manual/en/context.ssl.php) '. + 'Stripe cannot guarantee that the server has a certificate which is '. + 'not blacklisted' + ); + return true; + } + + $url = parse_url(http://github.com/$url); + $port = isset($url["port"]) ? $url["port"] : 443; + $url = "ssl://{$url["host"]}:{$port}"; + + $sslContext = stream_context_create( + array('ssl' => array( + 'capture_peer_cert' => true, + 'verify_peer' => true, + 'cafile' => $this->caBundle(), + )) + ); + $result = stream_socket_client( + $url, $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $sslContext + ); + if ($errno !== 0) { + $apiBase = Stripe::$apiBase; + throw new Stripe_ApiConnectionError( + 'Could not connect to Stripe (' . $apiBase . '). Please check your '. + 'internet connection and try again. If this problem persists, '. + 'you should check Stripe\'s service status at '. + 'https://twitter.com/stripestatus.%20Reason%20was:'.$errstr + ); + } + + $params = stream_context_get_params($result); + + $cert = $params['options']['ssl']['peer_certificate']; + + openssl_x509_export($cert, $pemCert); + + if (self::isBlackListed($pemCert)) { + throw new Stripe_ApiConnectionError( + 'Invalid server certificate. You tried to connect to a server that '. + 'has a revoked SSL certificate, which means we cannot securely send '. + 'data to that server. Please email support@stripe.com if you need '. + 'help connecting to the correct API server.' + ); + } + + return true; + } + + /* Checks if a valid PEM encoded certificate is blacklisted + * @return boolean + */ + public static function isBlackListed($certificate) + { + $certificate = trim($certificate); + $lines = explode("\n", $certificate); + + // Kludgily remove the PEM padding + array_shift($lines); array_pop($lines); + + $derCert = base64_decode(implode("", $lines)); + $fingerprint = sha1($derCert); + return in_array($fingerprint, self::blacklistedCerts()); + } + + private function caBundle() + { + return dirname(__FILE__) . '/../data/ca-certificates.crt'; + } } diff --git a/externals/stripe-php/lib/Stripe/ApiResource.php b/externals/stripe-php/lib/Stripe/ApiResource.php index d17ccf32b5..8fb681e1b7 100644 --- a/externals/stripe-php/lib/Stripe/ApiResource.php +++ b/externals/stripe-php/lib/Stripe/ApiResource.php @@ -9,54 +9,102 @@ protected static function _scopedRetrieve($class, $id, $apiKey=null) return $instance; } + /** + * @returns Stripe_ApiResource The refreshed resource. + */ public function refresh() { $requestor = new Stripe_ApiRequestor($this->_apiKey); $url = $this->instanceUrl(); - list($response, $apiKey) = $requestor->request('get', $url); + + list($response, $apiKey) = $requestor->request( + 'get', + $url, + $this->_retrieveOptions + ); $this->refreshFrom($response, $apiKey); return $this; - } + } - public static function classUrl($class) + /** + * @param string $class + * + * @returns string The name of the class, with namespacing and underscores + * stripped. + */ + public static function className($class) { // Useful for namespaces: Foo\Stripe_Charge - if ($postfix = strrchr($class, '\\')) - $class = substr($postfix, 1); - if (substr($class, 0, strlen('Stripe')) == 'Stripe') + if ($postfixNamespaces = strrchr($class, '\\')) { + $class = substr($postfixNamespaces, 1); + } + // Useful for underscored 'namespaces': Foo_Stripe_Charge + if ($postfixFakeNamespaces = strrchr($class, 'Stripe_')) { + $class = $postfixFakeNamespaces; + } + if (substr($class, 0, strlen('Stripe')) == 'Stripe') { $class = substr($class, strlen('Stripe')); + } $class = str_replace('_', '', $class); $name = urlencode($class); $name = strtolower($name); - return "/${name}s"; + return $name; } + /** + * @param string $class + * + * @returns string The endpoint URL for the given class. + */ + public static function classUrl($class) + { + $base = self::_scopedLsb($class, 'className', $class); + return "/v1/${base}s"; + } + + /** + * @returns string The full API URL for this API resource. + */ public function instanceUrl() { $id = $this['id']; $class = get_class($this); - if (!$id) { - throw new Stripe_InvalidRequestError("Could not determine which URL to request: $class instance has invalid ID: $id"); + if ($id === null) { + $message = "Could not determine which URL to request: " + . "$class instance has invalid ID: $id"; + throw new Stripe_InvalidRequestError($message, null); } $id = Stripe_ApiRequestor::utf8($id); - $base = self::classUrl($class); + $base = $this->_lsb('classUrl', $class); $extn = urlencode($id); return "$base/$extn"; } private static function _validateCall($method, $params=null, $apiKey=null) { - if ($params && !is_array($params)) - throw new Stripe_Error("You must pass an array as the first argument to Stripe API method calls. (HINT: an example call to create a charge would be: \"StripeCharge::create(array('amount' => 100, 'currency' => 'usd', 'card' => array('number' => 4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")"); - if ($apiKey && !is_string($apiKey)) - throw new Stripe_Error('The second argument to Stripe API method calls is an optional per-request apiKey, which must be a string. (HINT: you can set a global apiKey by "Stripe::setApiKey()")'); + if ($params && !is_array($params)) { + $message = "You must pass an array as the first argument to Stripe API " + . "method calls. (HINT: an example call to create a charge " + . "would be: \"StripeCharge::create(array('amount' => 100, " + . "'currency' => 'usd', 'card' => array('number' => " + . "4242424242424242, 'exp_month' => 5, 'exp_year' => 2015)))\")"; + throw new Stripe_Error($message); + } + + if ($apiKey && !is_string($apiKey)) { + $message = 'The second argument to Stripe API method calls is an ' + . 'optional per-request apiKey, which must be a string. ' + . '(HINT: you can set a global apiKey by ' + . '"Stripe::setApiKey()")'; + throw new Stripe_Error($message); + } } protected static function _scopedAll($class, $params=null, $apiKey=null) { self::_validateCall('all', $params, $apiKey); $requestor = new Stripe_ApiRequestor($apiKey); - $url = self::classUrl($class); + $url = self::_scopedLsb($class, 'classUrl', $class); list($response, $apiKey) = $requestor->request('get', $url, $params); return Stripe_Util::convertToStripeObject($response, $apiKey); } @@ -65,19 +113,18 @@ protected static function _scopedCreate($class, $params=null, $apiKey=null) { self::_validateCall('create', $params, $apiKey); $requestor = new Stripe_ApiRequestor($apiKey); - $url = self::classUrl($class); + $url = self::_scopedLsb($class, 'classUrl', $class); list($response, $apiKey) = $requestor->request('post', $url, $params); return Stripe_Util::convertToStripeObject($response, $apiKey); } - protected function _scopedSave($class) + protected function _scopedSave($class, $apiKey=null) { self::_validateCall('save'); - if ($this->_unsavedValues) { - $requestor = new Stripe_ApiRequestor($this->_apiKey); - $params = array(); - foreach ($this->_unsavedValues->toArray() as $k) - $params[$k] = $this->$k; + $requestor = new Stripe_ApiRequestor($apiKey); + $params = $this->serializeParameters(); + + if (count($params) > 0) { $url = $this->instanceUrl(); list($response, $apiKey) = $requestor->request('post', $url, $params); $this->refreshFrom($response, $apiKey); diff --git a/externals/stripe-php/lib/Stripe/ApplicationFee.php b/externals/stripe-php/lib/Stripe/ApplicationFee.php new file mode 100644 index 0000000000..7cf420053a --- /dev/null +++ b/externals/stripe-php/lib/Stripe/ApplicationFee.php @@ -0,0 +1,53 @@ +_apiKey); + $url = $this->instanceUrl() . '/refund'; + list($response, $apiKey) = $requestor->request('post', $url, $params); + $this->refreshFrom($response, $apiKey); + return $this; + } +} diff --git a/externals/stripe-php/lib/Stripe/AttachedObject.php b/externals/stripe-php/lib/Stripe/AttachedObject.php new file mode 100644 index 0000000000..5566a66616 --- /dev/null +++ b/externals/stripe-php/lib/Stripe/AttachedObject.php @@ -0,0 +1,23 @@ +_values), array_keys($properties)); + // Don't unset, but rather set to null so we send up '' for deletion. + foreach ($removed as $k) { + $this->$k = null; + } + + foreach ($properties as $k => $v) { + $this->$k = $v; + } + } +} diff --git a/externals/stripe-php/lib/Stripe/Balance.php b/externals/stripe-php/lib/Stripe/Balance.php new file mode 100644 index 0000000000..b4fe7d5f0e --- /dev/null +++ b/externals/stripe-php/lib/Stripe/Balance.php @@ -0,0 +1,15 @@ +param = $param; $this->code = $code; } diff --git a/externals/stripe-php/lib/Stripe/Charge.php b/externals/stripe-php/lib/Stripe/Charge.php index 11ec470935..d05b948ba1 100644 --- a/externals/stripe-php/lib/Stripe/Charge.php +++ b/externals/stripe-php/lib/Stripe/Charge.php @@ -2,30 +2,56 @@ class Stripe_Charge extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the charge to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Charge + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Charges. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); return self::_scopedAll($class, $params, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Charge The created charge. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); return self::_scopedCreate($class, $params, $apiKey); } + /** + * @return Stripe_Charge The saved charge. + */ + public function save() + { + $class = get_class(); + return self::_scopedSave($class); + } + + /** + * @param array|null $params + * + * @return Stripe_Charge The refunded charge. + */ public function refund($params=null) { $requestor = new Stripe_ApiRequestor($this->_apiKey); @@ -35,6 +61,11 @@ public function refund($params=null) return $this; } + /** + * @param array|null $params + * + * @return Stripe_Charge The captured charge. + */ public function capture($params=null) { $requestor = new Stripe_ApiRequestor($this->_apiKey); @@ -43,4 +74,30 @@ public function capture($params=null) $this->refreshFrom($response, $apiKey); return $this; } + + /** + * @param array|null $params + * + * @return array The updated dispute. + */ + public function updateDispute($params=null) + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + $url = $this->instanceUrl() . '/dispute'; + list($response, $apiKey) = $requestor->request('post', $url, $params); + $this->refreshFrom(array('dispute' => $response), $apiKey, true); + return $this->dispute; + } + + /** + * @return Stripe_Charge The updated charge. + */ + public function closeDispute() + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + $url = $this->instanceUrl() . '/dispute/close'; + list($response, $apiKey) = $requestor->request('post', $url); + $this->refreshFrom($response, $apiKey); + return $this; + } } diff --git a/externals/stripe-php/lib/Stripe/Coupon.php b/externals/stripe-php/lib/Stripe/Coupon.php index 9ead002c93..00c4fc6bd1 100644 --- a/externals/stripe-php/lib/Stripe/Coupon.php +++ b/externals/stripe-php/lib/Stripe/Coupon.php @@ -2,30 +2,47 @@ class Stripe_Coupon extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the coupon to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Coupon + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Coupon The created coupon. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); return self::_scopedCreate($class, $params, $apiKey); } + /** + * @param array|null $params + * + * @return Stripe_Coupon The deleted coupon. + */ public function delete($params=null) { $class = get_class(); return self::_scopedDelete($class, $params); } - + + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Coupons. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); diff --git a/externals/stripe-php/lib/Stripe/Customer.php b/externals/stripe-php/lib/Stripe/Customer.php index 09b33e08b9..ae34b0e996 100644 --- a/externals/stripe-php/lib/Stripe/Customer.php +++ b/externals/stripe-php/lib/Stripe/Customer.php @@ -2,42 +2,67 @@ class Stripe_Customer extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the customer to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Customer + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Customers. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); return self::_scopedAll($class, $params, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Customer The created customer. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); return self::_scopedCreate($class, $params, $apiKey); } + /** + * @returns Stripe_Customer The saved customer. + */ public function save() { $class = get_class(); return self::_scopedSave($class); } + /** + * @param array|null $params + * + * @returns Stripe_Customer The deleted customer. + */ public function delete($params=null) { $class = get_class(); return self::_scopedDelete($class, $params); } + /** + * @param array|null $params + * + * @returns Stripe_InvoiceItem The resulting invoice item. + */ public function addInvoiceItem($params=null) { if (!$params) @@ -47,6 +72,11 @@ public function addInvoiceItem($params=null) return $ii; } + /** + * @param array|null $params + * + * @returns array An array of the customer's Stripe_Invoices. + */ public function invoices($params=null) { if (!$params) @@ -56,6 +86,11 @@ public function invoices($params=null) return $invoices; } + /** + * @param array|null $params + * + * @returns array An array of the customer's Stripe_InvoiceItems. + */ public function invoiceItems($params=null) { if (!$params) @@ -65,6 +100,11 @@ public function invoiceItems($params=null) return $iis; } + /** + * @param array|null $params + * + * @returns array An array of the customer's Stripe_Charges. + */ public function charges($params=null) { if (!$params) @@ -74,6 +114,11 @@ public function charges($params=null) return $charges; } + /** + * @param array|null $params + * + * @returns Stripe_Subscription The updated subscription. + */ public function updateSubscription($params=null) { $requestor = new Stripe_ApiRequestor($this->_apiKey); @@ -83,6 +128,11 @@ public function updateSubscription($params=null) return $this->subscription; } + /** + * @param array|null $params + * + * @returns Stripe_Subscription The cancelled subscription. + */ public function cancelSubscription($params=null) { $requestor = new Stripe_ApiRequestor($this->_apiKey); @@ -91,4 +141,17 @@ public function cancelSubscription($params=null) $this->refreshFrom(array('subscription' => $response), $apiKey, true); return $this->subscription; } + + /** + * @param array|null $params + * + * @returns Stripe_Customer The updated customer. + */ + public function deleteDiscount() + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + $url = $this->instanceUrl() . '/discount'; + list($response, $apiKey) = $requestor->request('delete', $url); + $this->refreshFrom(array('discount' => null), $apiKey, true); + } } diff --git a/externals/stripe-php/lib/Stripe/Error.php b/externals/stripe-php/lib/Stripe/Error.php index 896195677e..19705c9f2f 100644 --- a/externals/stripe-php/lib/Stripe/Error.php +++ b/externals/stripe-php/lib/Stripe/Error.php @@ -2,26 +2,28 @@ class Stripe_Error extends Exception { - public function __construct($message=null, $http_status=null, $http_body=null, $json_body=null) + public function __construct($message, $httpStatus=null, + $httpBody=null, $jsonBody=null + ) { parent::__construct($message); - $this->http_status = $http_status; - $this->http_body = $http_body; - $this->json_body = $json_body; + $this->httpStatus = $httpStatus; + $this->httpBody = $httpBody; + $this->jsonBody = $jsonBody; } public function getHttpStatus() { - return $this->http_status; + return $this->httpStatus; } public function getHttpBody() { - return $this->http_body; + return $this->httpBody; } public function getJsonBody() { - return $this->json_body; + return $this->jsonBody; } } diff --git a/externals/stripe-php/lib/Stripe/Event.php b/externals/stripe-php/lib/Stripe/Event.php index 1c73bd1c7d..6bd3f63e7f 100644 --- a/externals/stripe-php/lib/Stripe/Event.php +++ b/externals/stripe-php/lib/Stripe/Event.php @@ -2,18 +2,24 @@ class Stripe_Event extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the event to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Event + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Events. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); diff --git a/externals/stripe-php/lib/Stripe/InvalidRequestError.php b/externals/stripe-php/lib/Stripe/InvalidRequestError.php index dba05bb861..8d8e669d98 100644 --- a/externals/stripe-php/lib/Stripe/InvalidRequestError.php +++ b/externals/stripe-php/lib/Stripe/InvalidRequestError.php @@ -2,9 +2,11 @@ class Stripe_InvalidRequestError extends Stripe_Error { - public function __construct($message, $param, $http_status=null, $http_body=null, $json_body=null) + public function __construct($message, $param, $httpStatus=null, + $httpBody=null, $jsonBody=null + ) { - parent::__construct($message, $http_status, $http_body, $json_body); + parent::__construct($message, $httpStatus, $httpBody, $jsonBody); $this->param = $param; } } diff --git a/externals/stripe-php/lib/Stripe/Invoice.php b/externals/stripe-php/lib/Stripe/Invoice.php index 87c30b74c6..29b2473fee 100644 --- a/externals/stripe-php/lib/Stripe/Invoice.php +++ b/externals/stripe-php/lib/Stripe/Invoice.php @@ -2,24 +2,48 @@ class Stripe_Invoice extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Invoice The created invoice. + */ + public static function create($params=null, $apiKey=null) { $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); + return self::_scopedCreate($class, $params, $apiKey); } + /** + * @param string $id The ID of the invoice to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Invoice + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Invoices. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); return self::_scopedAll($class, $params, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Invoice The upcoming invoice. + */ public static function upcoming($params=null, $apiKey=null) { $requestor = new Stripe_ApiRequestor($apiKey); @@ -27,4 +51,25 @@ public static function upcoming($params=null, $apiKey=null) list($response, $apiKey) = $requestor->request('get', $url, $params); return Stripe_Util::convertToStripeObject($response, $apiKey); } + + /** + * @return Stripe_Invoice The saved invoice. + */ + public function save() + { + $class = get_class(); + return self::_scopedSave($class); + } + + /** + * @return Stripe_Invoice The paid invoice. + */ + public function pay() + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + $url = $this->instanceUrl() . '/pay'; + list($response, $apiKey) = $requestor->request('post', $url); + $this->refreshFrom($response, $apiKey); + return $this; + } } diff --git a/externals/stripe-php/lib/Stripe/InvoiceItem.php b/externals/stripe-php/lib/Stripe/InvoiceItem.php index a93ddadae5..4987d276ba 100644 --- a/externals/stripe-php/lib/Stripe/InvoiceItem.php +++ b/externals/stripe-php/lib/Stripe/InvoiceItem.php @@ -2,36 +2,54 @@ class Stripe_InvoiceItem extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the invoice item to retrieve. + * @param string|null $apiKey + * + * @return Stripe_InvoiceItem + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_InvoiceItems. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); return self::_scopedAll($class, $params, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_InvoiceItem The created invoice item. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); return self::_scopedCreate($class, $params, $apiKey); } + /** + * @return Stripe_InvoiceItem The saved invoice item. + */ public function save() { $class = get_class(); return self::_scopedSave($class); } + /** + * @return Stripe_InvoiceItem The deleted invoice item. + */ public function delete($params=null) { $class = get_class(); diff --git a/externals/stripe-php/lib/Stripe/List.php b/externals/stripe-php/lib/Stripe/List.php new file mode 100644 index 0000000000..3dd837bbcf --- /dev/null +++ b/externals/stripe-php/lib/Stripe/List.php @@ -0,0 +1,37 @@ +_apiKey); + list($response, $apiKey) = $requestor->request( + 'get', + $this['url'], + $params + ); + return Stripe_Util::convertToStripeObject($response, $apiKey); + } + + public function create($params=null) + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + list($response, $apiKey) = $requestor->request( + 'post', $this['url'], $params + ); + return Stripe_Util::convertToStripeObject($response, $apiKey); + } + + public function retrieve($id, $params=null) + { + $requestor = new Stripe_ApiRequestor($this->_apiKey); + $base = $this['url']; + $id = Stripe_ApiRequestor::utf8($id); + $extn = urlencode($id); + list($response, $apiKey) = $requestor->request( + 'get', "$base/$extn", $params + ); + return Stripe_Util::convertToStripeObject($response, $apiKey); + } + +} diff --git a/externals/stripe-php/lib/Stripe/Object.php b/externals/stripe-php/lib/Stripe/Object.php index 00ebdfc4d1..7df749909b 100644 --- a/externals/stripe-php/lib/Stripe/Object.php +++ b/externals/stripe-php/lib/Stripe/Object.php @@ -2,17 +2,28 @@ class Stripe_Object implements ArrayAccess { - public static $_permanentAttributes; + /** + * @var Stripe_Util_Set Attributes that should not be sent to the API because + * they're not updatable (e.g. API key, ID). + */ + public static $permanentAttributes; + /** + * @var Stripe_Util_Set Attributes that are nested but still updatable from + * the parent class's URL (e.g. metadata). + */ + public static $nestedUpdatableAttributes; public static function init() { - self::$_permanentAttributes = new Stripe_Util_Set(array('_apiKey')); + self::$permanentAttributes = new Stripe_Util_Set(array('_apiKey', 'id')); + self::$nestedUpdatableAttributes = new Stripe_Util_Set(array('metadata')); } protected $_apiKey; protected $_values; protected $_unsavedValues; protected $_transientValues; + protected $_retrieveOptions; public function __construct($id=null, $apiKey=null) { @@ -20,16 +31,41 @@ public function __construct($id=null, $apiKey=null) $this->_values = array(); $this->_unsavedValues = new Stripe_Util_Set(); $this->_transientValues = new Stripe_Util_Set(); - if ($id) + + $this->_retrieveOptions = array(); + if (is_array($id)) { + foreach ($id as $key => $value) { + if ($key != 'id') { + $this->_retrieveOptions[$key] = $value; + } + } + $id = $id['id']; + } + + if ($id !== null) { $this->id = $id; + } } // Standard accessor magic methods public function __set($k, $v) { - // TODO: may want to clear from $_transientValues. (Won't be user-visible.) - $this->_values[$k] = $v; - if (!self::$_permanentAttributes->includes($k)) + if ($v === "") { + throw new InvalidArgumentException( + 'You cannot set \''.$k.'\'to an empty string. ' + .'We interpret empty strings as NULL in requests. ' + .'You may set obj->'.$k.' = NULL to delete the property' + ); + } + + if (self::$nestedUpdatableAttributes->includes($k) + && isset($this->$k) && is_array($v)) { + $this->$k->replaceWith($v); + } else { + // TODO: may want to clear from $_transientValues (Won't be user-visible). + $this->_values[$k] = $v; + } + if (!self::$permanentAttributes->includes($k)) $this->_unsavedValues->add($k); } public function __isset($k) @@ -44,12 +80,18 @@ public function __unset($k) } public function __get($k) { - if (isset($this->_values[$k])) { + if (array_key_exists($k, $this->_values)) { return $this->_values[$k]; } else if ($this->_transientValues->includes($k)) { $class = get_class($this); $attrs = join(', ', array_keys($this->_values)); - error_log("Stripe Notice: Undefined property of $class instance: $k. HINT: The $k attribute was set in the past, however. It was then wiped when refreshing the object with the result returned by Stripe's API, probably as a result of a save(). The attributes currently available on this object are: $attrs"); + $message = "Stripe Notice: Undefined property of $class instance: $k. " + . "HINT: The $k attribute was set in the past, however. " + . "It was then wiped when refreshing the object " + . "with the result returned by Stripe's API, " + . "probably as a result of a save(). The attributes currently " + . "available on this object are: $attrs"; + error_log($message); return null; } else { $class = get_class($this); @@ -63,20 +105,35 @@ public function offsetSet($k, $v) { $this->$k = $v; } + public function offsetExists($k) { - return isset($this->$k); + return array_key_exists($k, $this->_values); } + public function offsetUnset($k) { unset($this->$k); } public function offsetGet($k) { - return isset($this->_values[$k]) ? $this->_values[$k] : null; + return array_key_exists($k, $this->_values) ? $this->_values[$k] : null; + } + + public function keys() + { + return array_keys($this->_values); } - // This unfortunately needs to be public to be used in Util.php + /** + * This unfortunately needs to be public to be used in Util.php + * + * @param string $class + * @param array $values + * @param string|null $apiKey + * + * @return Stripe_Object The object constructed from the given values. + */ public static function scopedConstructFrom($class, $values, $apiKey=null) { $obj = new $class(isset($values['id']) ? $values['id'] : null, $apiKey); @@ -84,44 +141,108 @@ public static function scopedConstructFrom($class, $values, $apiKey=null) return $obj; } + /** + * @param array $values + * @param string|null $apiKey + * + * @return Stripe_Object The object of the same class as $this constructed + * from the given values. + */ public static function constructFrom($values, $apiKey=null) { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); + return self::scopedConstructFrom(__CLASS__, $values, $apiKey); } + /** + * Refreshes this object using the provided values. + * + * @param array $values + * @param string $apiKey + * @param boolean $partial Defaults to false. + */ public function refreshFrom($values, $apiKey, $partial=false) { $this->_apiKey = $apiKey; + // Wipe old state before setting new. This is useful for e.g. updating a // customer, where there is no persistent card parameter. Mark those values // which don't persist as transient - if ($partial) + if ($partial) { $removed = new Stripe_Util_Set(); - else + } else { $removed = array_diff(array_keys($this->_values), array_keys($values)); + } foreach ($removed as $k) { - if (self::$_permanentAttributes->includes($k)) + if (self::$permanentAttributes->includes($k)) continue; unset($this->$k); } foreach ($values as $k => $v) { - if (self::$_permanentAttributes->includes($k)) + if (self::$permanentAttributes->includes($k) && isset($this[$k])) continue; - $this->_values[$k] = Stripe_Util::convertToStripeObject($v, $apiKey); + + if (self::$nestedUpdatableAttributes->includes($k) && is_array($v)) { + $this->_values[$k] = Stripe_Object::scopedConstructFrom( + 'Stripe_AttachedObject', $v, $apiKey + ); + } else { + $this->_values[$k] = Stripe_Util::convertToStripeObject($v, $apiKey); + } + $this->_transientValues->discard($k); $this->_unsavedValues->discard($k); } } + /** + * @return array A recursive mapping of attributes to values for this object, + * including the proper value for deleted attributes. + */ + public function serializeParameters() + { + $params = array(); + if ($this->_unsavedValues) { + foreach ($this->_unsavedValues->toArray() as $k) { + $v = $this->$k; + if ($v === NULL) { + $v = ''; + } + $params[$k] = $v; + } + } + + // Get nested updates. + foreach (self::$nestedUpdatableAttributes->toArray() as $property) { + if (isset($this->$property) + && $this->$property instanceOf Stripe_Object) { + $params[$property] = $this->$property->serializeParameters(); + } + } + return $params; + } + + // Pretend to have late static bindings, even in PHP 5.2 + protected function _lsb($method) + { + $class = get_class($this); + $args = array_slice(func_get_args(), 1); + return call_user_func_array(array($class, $method), $args); + } + protected static function _scopedLsb($class, $method) + { + $args = array_slice(func_get_args(), 2); + return call_user_func_array(array($class, $method), $args); + } + public function __toJSON() { - if (defined('JSON_PRETTY_PRINT')) + if (defined('JSON_PRETTY_PRINT')) { return json_encode($this->__toArray(true), JSON_PRETTY_PRINT); - else + } else { return json_encode($this->__toArray(true)); + } } public function __toString() @@ -131,10 +252,11 @@ public function __toString() public function __toArray($recursive=false) { - if ($recursive) + if ($recursive) { return Stripe_Util::convertStripeObjectToArray($this->_values); - else + } else { return $this->_values; + } } } diff --git a/externals/stripe-php/lib/Stripe/Plan.php b/externals/stripe-php/lib/Stripe/Plan.php index 171b67356f..2d7d99e7b4 100644 --- a/externals/stripe-php/lib/Stripe/Plan.php +++ b/externals/stripe-php/lib/Stripe/Plan.php @@ -2,36 +2,56 @@ class Stripe_Plan extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the plan to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Plan + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Plan The created plan. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); return self::_scopedCreate($class, $params, $apiKey); } + /** + * @param array|null $params + * + * @return Stripe_Plan The deleted plan. + */ public function delete($params=null) { $class = get_class(); return self::_scopedDelete($class, $params); } + /** + * @return Stripe_Plan The saved plan. + */ public function save() { $class = get_class(); return self::_scopedSave($class); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return array An array of Stripe_Plans. + */ public static function all($params=null, $apiKey=null) { $class = get_class(); diff --git a/externals/stripe-php/lib/Stripe/RateLimitError.php b/externals/stripe-php/lib/Stripe/RateLimitError.php new file mode 100644 index 0000000000..b60124f291 --- /dev/null +++ b/externals/stripe-php/lib/Stripe/RateLimitError.php @@ -0,0 +1,11 @@ +id; + $transfers = Stripe_Transfer::all($params, $this->_apiKey); + return $transfers; + } +} diff --git a/externals/stripe-php/lib/Stripe/Refund.php b/externals/stripe-php/lib/Stripe/Refund.php new file mode 100644 index 0000000000..f9d5463916 --- /dev/null +++ b/externals/stripe-php/lib/Stripe/Refund.php @@ -0,0 +1,36 @@ +refresh(); + return $instance; + } + + /** + * @param Stripe_SingletonApiResource $class + * @return string The endpoint associated with this singleton class. + */ + public static function classUrl($class) + { + $base = self::className($class); + return "/v1/${base}"; + } + + /** + * @return string The endpoint associated with this singleton API resource. + */ + public function instanceUrl() + { + $class = get_class($this); + $base = self::classUrl($class); + return "$base"; + } +} diff --git a/externals/stripe-php/lib/Stripe/Stripe.php b/externals/stripe-php/lib/Stripe/Stripe.php new file mode 100644 index 0000000000..ae94f20894 --- /dev/null +++ b/externals/stripe-php/lib/Stripe/Stripe.php @@ -0,0 +1,73 @@ +_apiKey); + $url = $this->instanceUrl() . '/discount'; + list($response, $apiKey) = $requestor->request('delete', $url); + $this->refreshFrom(array('discount' => null), $apiKey, true); + } +} diff --git a/externals/stripe-php/lib/Stripe/Token.php b/externals/stripe-php/lib/Stripe/Token.php index 0870262d57..14195c1585 100644 --- a/externals/stripe-php/lib/Stripe/Token.php +++ b/externals/stripe-php/lib/Stripe/Token.php @@ -2,18 +2,24 @@ class Stripe_Token extends Stripe_ApiResource { - public static function constructFrom($values, $apiKey=null) - { - $class = get_class(); - return self::scopedConstructFrom($class, $values, $apiKey); - } - + /** + * @param string $id The ID of the token to retrieve. + * @param string|null $apiKey + * + * @return Stripe_Token + */ public static function retrieve($id, $apiKey=null) { $class = get_class(); return self::_scopedRetrieve($class, $id, $apiKey); } + /** + * @param array|null $params + * @param string|null $apiKey + * + * @return Stripe_Coupon The created token. + */ public static function create($params=null, $apiKey=null) { $class = get_class(); diff --git a/externals/stripe-php/lib/Stripe/Transfer.php b/externals/stripe-php/lib/Stripe/Transfer.php new file mode 100644 index 0000000000..2c988a40c7 --- /dev/null +++ b/externals/stripe-php/lib/Stripe/Transfer.php @@ -0,0 +1,62 @@ +_apiKey); + $url = $this->instanceUrl() . '/cancel'; + list($response, $apiKey) = $requestor->request('post', $url); + $this->refreshFrom($response, $apiKey); + return $this; + } + + /** + * @return Stripe_Transfer The saved transfer. + */ + public function save() + { + $class = get_class(); + return self::_scopedSave($class); + } + +} diff --git a/externals/stripe-php/lib/Stripe/Util.php b/externals/stripe-php/lib/Stripe/Util.php index 7828cf0386..9c2116957a 100644 --- a/externals/stripe-php/lib/Stripe/Util.php +++ b/externals/stripe-php/lib/Stripe/Util.php @@ -2,11 +2,18 @@ abstract class Stripe_Util { + /** + * Whether the provided array (or other) is a list rather than a dictionary. + * + * @param array|mixed $array + * @return boolean True if the given object is a list. + */ public static function isList($array) { if (!is_array($array)) return false; - // TODO: this isn't actually correct in general, but it's correct given Stripe's responses + + // TODO: generally incorrect, but it's correct given Stripe's response foreach (array_keys($array) as $k) { if (!is_numeric($k)) return false; @@ -14,43 +21,67 @@ public static function isList($array) return true; } + /** + * Recursively converts the PHP Stripe object to an array. + * + * @param array $values The PHP Stripe object to convert. + * @return array + */ public static function convertStripeObjectToArray($values) { $results = array(); foreach ($values as $k => $v) { // FIXME: this is an encapsulation violation - if (Stripe_Object::$_permanentAttributes->includes($k)) { + if ($k[0] == '_') { continue; } if ($v instanceof Stripe_Object) { $results[$k] = $v->__toArray(true); - } - else if (is_array($v)) { + } else if (is_array($v)) { $results[$k] = self::convertStripeObjectToArray($v); - } - else { + } else { $results[$k] = $v; } } return $results; } + /** + * Converts a response from the Stripe API to the corresponding PHP object. + * + * @param array $resp The response from the Stripe API. + * @param string $apiKey + * @return Stripe_Object|array + */ public static function convertToStripeObject($resp, $apiKey) { - $types = array('charge' => 'Stripe_Charge', - 'customer' => 'Stripe_Customer', - 'invoice' => 'Stripe_Invoice', - 'invoiceitem' => 'Stripe_InvoiceItem', 'event' => 'Stripe_Event'); + $types = array( + 'card' => 'Stripe_Card', + 'charge' => 'Stripe_Charge', + 'customer' => 'Stripe_Customer', + 'list' => 'Stripe_List', + 'invoice' => 'Stripe_Invoice', + 'invoiceitem' => 'Stripe_InvoiceItem', + 'event' => 'Stripe_Event', + 'transfer' => 'Stripe_Transfer', + 'plan' => 'Stripe_Plan', + 'recipient' => 'Stripe_Recipient', + 'refund' => 'Stripe_Refund', + 'subscription' => 'Stripe_Subscription' + ); if (self::isList($resp)) { $mapped = array(); foreach ($resp as $i) array_push($mapped, self::convertToStripeObject($i, $apiKey)); return $mapped; } else if (is_array($resp)) { - if (isset($resp['object']) && is_string($resp['object']) && isset($types[$resp['object']])) + if (isset($resp['object']) + && is_string($resp['object']) + && isset($types[$resp['object']])) { $class = $types[$resp['object']]; - else + } else { $class = 'Stripe_Object'; + } return Stripe_Object::scopedConstructFrom($class, $resp, $apiKey); } else { return $resp; diff --git a/externals/stripe-php/lib/data/ca-certificates.crt b/externals/stripe-php/lib/data/ca-certificates.crt index 51156cc2bb..0e11f6d870 100644 --- a/externals/stripe-php/lib/data/ca-certificates.crt +++ b/externals/stripe-php/lib/data/ca-certificates.crt @@ -1,925 +1,809 @@ -# Generated using the default CA bundle on Ubuntu Linux 11.10 on November 25, 2011 - ------BEGIN CERTIFICATE----- -MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx -EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h -bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy -YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp -Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy -MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG -A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt -YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD -VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA -isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj -Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50 -QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt -bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR -yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID -AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0 -cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f -BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj -cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1 -U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl -YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos -SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/ -t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u -mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb -K+9A46sd33oqK8n8 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 -IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB -IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA -Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO -BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi -MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ -ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ -8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6 -zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y -fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7 -w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc -G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k -epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q -laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ -QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU -fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826 -YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w -ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY -gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe -MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0 -IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy -dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw -czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0 -dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl -aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC -AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg -b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB -ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc -nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg -18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c -gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl -Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY -sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T -SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF -CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum -GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk -zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW -omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290 -IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB -IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA -Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS -BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v -cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9 -4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB -Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J -0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ -FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx -bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q -SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb -6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV -m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g -eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG -kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7 -6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG -CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc -aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB -gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w -aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6 -tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0 -nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M -77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV -Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L -ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM -zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU -rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF -YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT -oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu -FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB -0m6lG5kngOcLqagA ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV -BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK -EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq -b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow -djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx -EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG -9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa -F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1 -eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV -Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB -k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0 -ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV -dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO -txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD -VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD -QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY -S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+ -mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR -qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE -TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe -1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG -UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v -U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN -AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw -MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD -VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM -BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m -cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws -ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx -8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/ -s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c -9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V -pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+ -pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC -aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y -CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ -6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG -A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0 -MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF -AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob -sRQ= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT -AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ -TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG -9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw -MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM -BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO -MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 -LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI -s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 -xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 -u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b -F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx -Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd -PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV -HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx -NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF -AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ -L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY -YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a -NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R -0982gaEbeC9xs/FZTEYYKKuF0mBWWg== +# Generated by https://gist.github.com/ab/9756531 on 2014-03-25 +# from Ubuntu ca-certificates 20130906. +# See http://www.ubuntu.com/usn/usn-2154-1/ for version info. + +================================================================ +C: AT +O: A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH +OU: A-Trust-nQual-03 +CN: A-Trust-nQual-03 +-----BEGIN CERTIFICATE----- +MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB +VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp +bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R +dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw +MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy +dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 +ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM +EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj +lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ +znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH +2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 +k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs +2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD +VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG +KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ +8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R +FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS +mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE +DNuxUCAKGkq6ahq97BvIxYSazQ== -----END CERTIFICATE----- + +================================================================ +C: BE +O: GlobalSign nv-sa +OU: Root CA +CN: GlobalSign Root CA -----BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- + +================================================================ +C: BM +O: QuoVadis Limited +CN: QuoVadis Root CA 2 -----BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- + +================================================================ +C: BM +O: QuoVadis Limited +CN: QuoVadis Root CA 3 -----BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- + +================================================================ +C: BM +O: QuoVadis Limited +OU: Root Certification Authority +CN: QuoVadis Root Certification Authority -----BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== -----END CERTIFICATE----- + +================================================================ +C: CH +O: SwissSign AG +CN: SwissSign Gold CA - G2 -----BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- + +================================================================ +C: CH +O: SwissSign AG +CN: SwissSign Platinum CA - G2 -----BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu +IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw +WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD +ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y +IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn +IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ +6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob +jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw +izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl ++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY +zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP +pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF +KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW +ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB +AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 +ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA +A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 +uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ +FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 +jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ +u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D +YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 +puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa +icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG +DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x +kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z +Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== -----END CERTIFICATE----- + +================================================================ +C: CH +O: SwissSign AG +CN: SwissSign Silver CA - G2 -----BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1 -MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U -0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI -TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf -RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF -zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh -BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA -AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY -PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/ -BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn -9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT -Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF -Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX -n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW -H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx -HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh -IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz -NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg -SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M -IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ -7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb -m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY -xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ -YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq -JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx -I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz -kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh -EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S -Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM -gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu -rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO -1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu -h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP -yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q -7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT -RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/ -ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB -M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ -my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO -AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT -9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H -hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5 -fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg= +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- + +================================================================ +C: CH +O: WISeKey +OU: Copyright (c) 2005 +OU: OISTE Foundation Endorsed +CN: OISTE WISeKey Global Root GA CA -----BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= -----END CERTIFICATE----- + +================================================================ +C: CN +O: CNNIC +CN: CNNIC ROOT -----BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= +MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD +TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 +MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF +Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh +IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 +dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO +V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC +GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN +v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB +AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB +Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO +76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK +OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH +ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi +yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL +buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj +2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== + +================================================================ +C: CN +O: China Internet Network Information Center +CN: China Internet Network Information Center EV Certificates Root +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC +Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g +Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0 +aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa +Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg +SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo +aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp +ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z +7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA// +DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx +zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8 +hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs +4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u +gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY +NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E +FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3 +j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG +52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB +echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI +zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy +wy39FCqQmbkHzJ8= -----END CERTIFICATE----- + +================================================================ +C: CO +O: Sociedad Cameral de Certificación Digital - Certicámara S.A. +CN: AC Raíz Certicámara S.A. -----BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU +MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx +CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp +ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa +QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw +NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft +ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu +QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG +qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL +fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ +Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 +Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ +54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b +MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j +ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej +YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt +A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF +rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ +pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB +lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy +YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 +7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs +YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 +xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc +unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ +Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp +ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 +gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 +jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ +XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD +W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ +RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r +MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk +BYn8eNZcLCZDqQ== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E -jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo -ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI -ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu -Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg -AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 -HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA -uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa -TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg -xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q -CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x -O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs -6GAqm4VKQPNriiTsBhYscw== + +================================================================ +C: DE +O: D-Trust GmbH +CN: D-TRUST Root Class 3 CA 2 2009 +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== + +================================================================ +C: DE +O: D-Trust GmbH +CN: D-TRUST Root Class 3 CA 2 EV 2009 +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 -----END CERTIFICATE----- + +================================================================ +C: DE +O: Deutsche Telekom AG +OU: T-TeleSec Trust Center +CN: Deutsche Telekom Root CA 2 -----BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= + +================================================================ +C: DE +O: T-Systems Enterprise Services GmbH +OU: T-Systems Trust Center +CN: T-TeleSec GlobalRoot Class 3 +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== -----END CERTIFICATE----- + +================================================================ +C: DE +O: TC TrustCenter GmbH +OU: TC TrustCenter Class 2 CA +CN: TC TrustCenter Class 2 CA II -----BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf +tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg +uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J +XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK +8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 +5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 +kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS +GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt +ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 +au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV +hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI +dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== -----END CERTIFICATE----- + +================================================================ +C: DE +O: TC TrustCenter GmbH +OU: TC TrustCenter Class 3 CA +CN: TC TrustCenter Class 3 CA II -----BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW +Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q +Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 +1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq +ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 +Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX +XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN +irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 +TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 +g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB +95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj +S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== -----END CERTIFICATE----- + +================================================================ +C: DE +O: TC TrustCenter GmbH +OU: TC TrustCenter Universal CA +CN: TC TrustCenter Universal CA I -----BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx +MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg +R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD +VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR +JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T +fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu +jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z +wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ +fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD +VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G +CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 +7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn +8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs +ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ +2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY -----END CERTIFICATE----- + +================================================================ +C: DE +ST: Baden-Wuerttemberg (BW) +L: Stuttgart +O: Deutscher Sparkassen Verlag GmbH +CN: S-TRUST Authentication and Encryption Root CA 2005:PN -----BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB +rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp +MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz +c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u +IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa +Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t +V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg +RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV +U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1 +toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo +TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy +ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1 +XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF +hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm +7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG +MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV +HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp +ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD +pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo +LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF +iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y +h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I +k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ= -----END CERTIFICATE----- + +================================================================ +C: DK +O: TDC +CN: TDC OCES CA -----BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K +MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE +SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw +ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU +REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr +2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s +2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU +GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj +dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r +TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB +AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv +c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl +ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu +MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg +T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud +HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD +VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny +bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy +MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ +J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG +SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom +JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO +inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y +caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB +mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ +YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 +BKNDLdr8C2LqL19iUw== -----END CERTIFICATE----- + +================================================================ +C: DK +O: TDC Internet +OU: TDC Internet Root CA -----BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg -bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ -j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV -Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw -MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 -fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i -+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN -QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ -gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl +MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE +SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg +Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV +BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl +cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA +vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu +Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a +0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 +4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN +eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD +R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG +A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu +dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME +Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 +WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw +HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ +KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO +Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX +wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ +2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 +9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 +jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 +aQNiuJkFBT1reBK9sG9l -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV -UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL -EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ -BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x -ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ -k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso -LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o -TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG -SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx -JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI -RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 -MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C -TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 -WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG -SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR -xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL -B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID + +================================================================ +C: EE +O: AS Sertifitseerimiskeskus +CN: EE Certification Centre Root CA +emailAddress: pki@sk.ee +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= -----END CERTIFICATE----- + +================================================================ +C: ES +CN: Autoridad de Certificacion Firmaprofesional CIF A62634068 -----BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- + +================================================================ +C: ES +L: C/ Muntaner 244 Barcelona +CN: Autoridad de Certificacion Firmaprofesional CIF A62634068 +emailAddress: ca@firmaprofesional.com -----BEGIN CERTIFICATE----- MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 @@ -946,243 +830,816 @@ ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5 quGnM/b9Sh/22WA= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== + +================================================================ +C: ES +O: Agencia Catalana de Certificacio (NIF Q-0801176-I) +OU: Serveis Publics de Certificacio +OU: Vegeu https://www.catcert.net/verarrel (c)03 +OU: Jerarquia Entitats de Certificacio Catalanes +CN: EC-ACC +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB +8zELMAkGA1UEBhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2Vy +dGlmaWNhY2lvIChOSUYgUS0wODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1 +YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYDVQQLEyxWZWdldSBodHRwczovL3d3 +dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UECxMsSmVyYXJxdWlh +IEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMTBkVD +LUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQG +EwJFUzE7MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8g +KE5JRiBRLTA4MDExNzYtSSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBD +ZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZlZ2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQu +bmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJhcnF1aWEgRW50aXRhdHMg +ZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUNDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R +85iKw5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm +4CgPukLjbo73FCeTae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaV +HMf5NLWUhdWZXqBIoH7nF2W4onW4HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNd +QlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0aE9jD2z3Il3rucO2n5nzbcc8t +lGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw0JDnJwIDAQAB +o4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4 +opvpXY0wfwYDVR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBo +dHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidW +ZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAwDQYJKoZIhvcN +AQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJlF7W2u++AVtd0x7Y +/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNaAl6k +SBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhy +Rp/7SNVel+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOS +Agu+TGbrIP65y7WZf+a2E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xl +nJ2lYJU6Un/10asIbvPuW/mIPX64b24D5EI= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= + +================================================================ +C: ES +O: Generalitat Valenciana +OU: PKIGVA +CN: Root CA Generalitat Valenciana +-----BEGIN CERTIFICATE----- +MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF +UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ +R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN +MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G +A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw +JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+ +WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj +SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl +u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy +A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk +Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7 +MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr +aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC +IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A +cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA +YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA +bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA +bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA +aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA +aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA +ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA +YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA +ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA +LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6 +Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y +eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw +CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G +A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu +Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn +lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt +b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg +9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF +ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC +IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= -----END CERTIFICATE----- + +================================================================ +C: ES +O: IZENPE S.A. +CN: Izenpe.com -----BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- + +================================================================ +C: EU +L: Madrid (see current address at www.camerfirma.com/address) +serialNumber: A82743287 +O: AC Camerfirma S.A. +CN: Chambers of Commerce Root - 2008 -----BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ -----END CERTIFICATE----- + +================================================================ +C: EU +L: Madrid (see current address at www.camerfirma.com/address) +serialNumber: A82743287 +O: AC Camerfirma S.A. +CN: Global Chambersign Root - 2008 -----BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- + +================================================================ +C: EU +O: AC Camerfirma SA CIF A82743287 +OU: http://www.chambersign.org +CN: Chambers of Commerce Root -----BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg +b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa +MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB +ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw +IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B +AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb +unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d +BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq +7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 +0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX +roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG +A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j +aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p +26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA +BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud +EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN +BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB +AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd +p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi +1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc +XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 +eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu +tGWaIZDgqtCYvDi1czyL+Nw= -----END CERTIFICATE----- + +================================================================ +C: EU +O: AC Camerfirma SA CIF A82743287 +OU: http://www.chambersign.org +CN: Global Chambersign Root -----BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo +YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 +MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy +NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G +A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA +A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 +Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s +QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV +eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 +B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh +z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T +AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i +ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w +TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH +MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD +VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE +VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B +AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM +bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi +ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG +VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c +ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ +AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- + +================================================================ +C: FI +O: Sonera +CN: Sonera Class1 CA -----BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx +MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG +29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk +oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk +3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL +qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN +nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX +ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H +DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO +TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv +kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w +zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa -----END CERTIFICATE----- + +================================================================ +C: FI +O: Sonera +CN: Sonera Class2 CA -----BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- + +================================================================ +C: FR +O: Certinomis +OU: 0002 433998903 +CN: Certinomis - Autorité Racine +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk +BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 +Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl +cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 +aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY +F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N +8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe +rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K +/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu +7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC +28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 +lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E +nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB +0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 +5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj +WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN +jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s +ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM +OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q +619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn +2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj +o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v +nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG +5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq +pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb +dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 +BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- + +================================================================ +C: FR +O: Certplus +CN: Class 2 Primary CA +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- + +================================================================ +C: FR +O: Dhimyotis +CN: Certigna +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +================================================================ +C: FR +ST: France +L: Paris +O: PM/SGDN +OU: DCSSI +CN: IGC/A +emailAddress: igca@sgdn.pm.gouv.fr +-----BEGIN CERTIFICATE----- +MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT +AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ +TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG +9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw +MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM +BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO +MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 +LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI +s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 +xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 +u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b +F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx +Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd +PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV +HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx +NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF +AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ +L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY +YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg +Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a +NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R +0982gaEbeC9xs/FZTEYYKKuF0mBWWg== +-----END CERTIFICATE----- + +================================================================ +C: GB +O: Trustis Limited +OU: Trustis FPS Root CA +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- + +================================================================ +C: GB +ST: Greater Manchester +L: Salford +O: Comodo CA Limited +CN: AAA Certificate Services +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +================================================================ +C: GB +ST: Greater Manchester +L: Salford +O: Comodo CA Limited +CN: Secure Certificate Services +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp +ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow +fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV +BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM +cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S +HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 +CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk +3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz +6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV +HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv +Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw +Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww +DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 +5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI +gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ +aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl +izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= -----END CERTIFICATE----- + +================================================================ +C: GB +ST: Greater Manchester +L: Salford +O: Comodo CA Limited +CN: Trusted Certificate Services +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 +aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla +MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO +BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD +VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW +fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt +TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL +fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW +1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 +kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G +A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v +ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo +dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu +Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ +HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS +jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ +xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn +dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- + +================================================================ +C: GB +ST: Greater Manchester +L: Salford +O: COMODO CA Limited +CN: COMODO Certification Authority +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- + +================================================================ +C: GB +ST: Greater Manchester +L: Salford +O: COMODO CA Limited +CN: COMODO ECC Certification Authority +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT +IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw +MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy +ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N +T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR +FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J +cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW +BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm +fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv +GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +================================================================ +C: GR +O: Hellenic Academic and Research Institutions Cert. Authority +CN: Hellenic Academic and Research Institutions RootCA 2011 +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +================================================================ +C: HK +O: Hongkong Post +CN: Hongkong Post Root CA 1 +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: Microsec Ltd. +CN: Microsec e-Szigno Root CA 2009 +emailAddress: info@e-szigno.hu +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: NetLock Kft. +OU: Tanúsítványkiadók (Certification Services) +CN: NetLock Arany (Class Gold) Főtanúsítvány +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: Microsec Ltd. +OU: e-Szigno CA +CN: Microsec e-Szigno Root CA +-----BEGIN CERTIFICATE----- +MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw +cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy +b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z +ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4 +NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN +TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p +Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u +uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ +LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA +vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770 +Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx +62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB +AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw +LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP +BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB +AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov +MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 +ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn +AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT +AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh +ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo +AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa +AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln +bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p +Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP +PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv +Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB +EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu +w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj +cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV +HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI +VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS +BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS +b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS +8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds +ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl +7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a +86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR +hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/ +MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +-----END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: NetLock Halozatbiztonsagi Kft. +OU: Tanusitvanykiadok +CN: NetLock Expressz (Class C) Tanusitvanykiado -----BEGIN CERTIFICATE----- MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 @@ -1214,43 +1671,14 @@ ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 Fp1hBWeAyNDYpQcCNJgEjTME1A== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: NetLock Halozatbiztonsagi Kft. +OU: Tanusitvanykiadok +CN: NetLock Minositett Kozjegyzoi (Class QA) Tanusitvanykiado +emailAddress: info@netlock.hu -----BEGIN CERTIFICATE----- MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 @@ -1290,217 +1718,400 @@ VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY 83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3 macqaJVmlaut74nLYKkGEsaUR+ko -----END CERTIFICATE----- + +================================================================ +C: HU +L: Budapest +O: NetLock Halozatbiztonsagi Kft. +OU: Tanusitvanykiadok +CN: NetLock Uzleti (Class B) Tanusitvanykiado +-----BEGIN CERTIFICATE----- +MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx +ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 +b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD +EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 +OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G +A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh +Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l +dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG +SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK +gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX +iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc +Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E +BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G +SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu +b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh +bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv +Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln +aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 +IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh +c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph +biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo +ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP +UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj +YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo +dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA +bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 +sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa +n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS +NitjrFgBazMpUIaD8QFI +-----END CERTIFICATE----- + +================================================================ +C: HU +ST: Hungary +L: Budapest +O: NetLock Halozatbiztonsagi Kft. +OU: Tanusitvanykiadok +CN: NetLock Kozjegyzoi (Class A) Tanusitvanykiado +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV +MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe +TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 +dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 +N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC +dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu +MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL +b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD +zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi +3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 +WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY +Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi +NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC +ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 +QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 +YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz +aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm +ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg +ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs +amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv +IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 +Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 +ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 +YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg +dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs +b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G +CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO +xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP +0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ +QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk +f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK +8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI +-----END CERTIFICATE----- + +================================================================ +C: IE +O: Baltimore +OU: CyberTrust +CN: Baltimore CyberTrust Root -----BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u + +================================================================ +C: IL +O: StartCom Ltd. +CN: StartCom Certification Authority G2 +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 +OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG +A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ +JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD +vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo +D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ +Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW +RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK +HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN +nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM +0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i +UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 +Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg +TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL +BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX +UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl +6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK +9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ +HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI +wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY +XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l +IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo +hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr +so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI -----END CERTIFICATE----- + +================================================================ +C: IL +O: StartCom Ltd. +OU: Secure Digital Certificate Signing +CN: StartCom Certification Authority -----BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j +ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js +LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM +BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy +dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh +cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh +YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg +dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp +bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ +YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT +TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ +9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 +jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW +FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz +ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 +ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L +EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu +L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC +O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V +um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh +NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= -----END CERTIFICATE----- + +================================================================ +C: IL +O: StartCom Ltd. +OU: Secure Digital Certificate Signing +CN: StartCom Certification Authority -----BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul +F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC +ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w +ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk +aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 +YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg +c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 +d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG +CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF +wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS +Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst +0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc +pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl +CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF +P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK +1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm +KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ +8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm +fyWl8kgAwKQB2j8= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu + +================================================================ +C: IT +L: Milan +O: Actalis S.p.A./03358520967 +CN: Actalis Authentication Root CA +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- + +================================================================ +C: JP +O: Japan Certification Services, Inc. +CN: SecureSign RootCA11 -----BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 -7CAFYd4= +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr +MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG +A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 +MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp +Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD +QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz +i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 +h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV +MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 +UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni +8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC +h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD +VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB +AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm +KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ +X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr +QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 +pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN +QSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- + +================================================================ +C: JP +O: Japanese Government +OU: ApplicationCA -----BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc +MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp +b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT +AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs +aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H +j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K +f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 +IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw +FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht +QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm +/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ +k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ +MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC +seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ +hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ +eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U +DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj +B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= -----END CERTIFICATE----- + +================================================================ +C: JP +O: SECOM Trust Systems CO.,LTD. +OU: Security Communication EV RootCA1 -----BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz +MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N +IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 +bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE +RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO +zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 +bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF +MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 +VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC +OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW +tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ +q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb +EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ +Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O +VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 -----END CERTIFICATE----- + +================================================================ +C: JP +O: SECOM Trust Systems CO.,LTD. +OU: Security Communication RootCA2 +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +================================================================ +C: JP +O: SECOM Trust.net +OU: Security Communication RootCA1 -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t @@ -1521,267 +2132,603 @@ Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== -----END CERTIFICATE----- + +================================================================ +C: NL +O: Staat der Nederlanden +CN: Staat der Nederlanden Root CA - G2 -----BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx -MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG -29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk -oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk -3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL -qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN -nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX -ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H -DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO -TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv -kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w -zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- + +================================================================ +C: NL +O: Staat der Nederlanden +CN: Staat der Nederlanden Root CA +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO +TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy +MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk +ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn +ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 +9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO +hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U +tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o +BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh +SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww +OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv +cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA +7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k +/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm +eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 +u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy +7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR +iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +-----END CERTIFICATE----- + +================================================================ +C: NO +O: Buypass AS-983163327 +CN: Buypass Class 2 CA 1 +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg +Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL +MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD +VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 +ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX +l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB +HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B +5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 +WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD +AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP +gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ +DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu +BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs +h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk +LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- + +================================================================ +C: NO +O: Buypass AS-983163327 +CN: Buypass Class 2 Root CA +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- + +================================================================ +C: NO +O: Buypass AS-983163327 +CN: Buypass Class 3 CA 1 +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg +Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL +MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD +VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg +isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z +NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI ++MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R +hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+ +mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD +AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP +Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s +EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2 +mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC +e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow +dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +-----END CERTIFICATE----- + +================================================================ +C: NO +O: Buypass AS-983163327 +CN: Buypass Class 3 Root CA +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- + +================================================================ +C: PL +O: Unizeto Sp. z o.o. +CN: Certum CA +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E +jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo +ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI +ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu +Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg +AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 +HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA +uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa +TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg +xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q +CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x +O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs +6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- + +================================================================ +C: PL +O: Unizeto Technologies S.A. +OU: Certum Certification Authority +CN: Certum Trusted Network CA +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +================================================================ +C: RO +O: certSIGN +OU: certSIGN ROOT CA +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD -----END CERTIFICATE----- + +================================================================ +C: SE +O: AddTrust AB +OU: AddTrust External TTP Network +CN: AddTrust External CA Root -----BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- + +================================================================ +C: SE +O: AddTrust AB +OU: AddTrust TTP Network +CN: AddTrust Class 1 CA Root -----BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy -MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk -ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn -ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 -9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO -hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U -tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o -BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh -SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww -OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv -cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA -7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k -/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm -eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 -u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy -7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw +MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD +VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul +CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n +tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl +dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch +PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC ++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O +BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk +ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X +7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz +43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl +pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA +WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= -----END CERTIFICATE----- + +================================================================ +C: SE +O: AddTrust AB +OU: AddTrust TTP Network +CN: AddTrust Public CA Root -----BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx +MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB +ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV +BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV +6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX +GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP +dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH +1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF +62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW +BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL +MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU +cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv +b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 +IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ +iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh +4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm +XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= -----END CERTIFICATE----- + +================================================================ +C: SE +O: AddTrust AB +OU: AddTrust TTP Network +CN: AddTrust Qualified CA Root -----BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 +MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK +EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh +BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq +xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G +87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i +2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U +WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 +0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G +A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr +pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL +ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm +aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv +hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm +hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 +P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y +iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no +xqE= -----END CERTIFICATE----- + +================================================================ +C: SK +L: Bratislava +O: Disig a.s. +CN: CA Disig -----BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== +MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET +MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE +AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw +CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg +YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE +Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX +mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD +XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW +S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp +FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD +AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu +ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z +ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv +Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw +DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6 +yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq +EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ +CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB +EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN +PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag= +-----END CERTIFICATE----- + +================================================================ +C: SK +L: Bratislava +O: Disig a.s. +CN: CA Disig Root R1 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy +MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk +D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o +OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A +fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe +IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n +oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK +/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj +rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD +3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE +7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC +yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd +qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI +hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA +SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo +HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB +emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC +AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb +7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x +DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk +F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF +a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT +Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL -----END CERTIFICATE----- + +================================================================ +C: SK +L: Bratislava +O: Disig a.s. +CN: CA Disig Root R2 +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +================================================================ +C: TR +L: Gebze - Kocaeli +O: Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK +OU: Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE +OU: Kamu Sertifikasyon Merkezi +CN: TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3 -----BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS +MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp +bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw +VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy +YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy +dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe +Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx +GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls +aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU +QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh +xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 +aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr +IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h +gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK +O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO +fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw +lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID +AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP +NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t +wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM +7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh +gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n +oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs +yZyQ2uypQjyttgI= -----END CERTIFICATE----- + +================================================================ +C: TR +O: Elektronik Bilgi Guvenligi A.S. +CN: e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi -----BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu -IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw -WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD -ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y -IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn -IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ -6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob -jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw -izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl -+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY -zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP -pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF -KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW -ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB -AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 -ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA -A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 -uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ -FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 -jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ -u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D -YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 -puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa -icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG -DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x -kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z -Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp +Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp +a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx +MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg +R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg +U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU +MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT +L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H +5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC +90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1 +c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE +VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP +qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S +/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj +/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X +KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq +fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX -----END CERTIFICATE----- + +================================================================ +C: TW +O: Chunghwa Telecom Co., Ltd. +OU: ePKI Root Certification Authority -----BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- + +================================================================ +C: TW +O: Government Root Certification Authority -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj @@ -1814,2105 +2761,2405 @@ ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl pYYsfPQS -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y -AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw -TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8 -/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/ -jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms -Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF -MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU -QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI -MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN -AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla -Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy -ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y -IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1 -c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA -dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF -Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw -Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW -w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3 -LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G -CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE -Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD -2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0 ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE -SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw -ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU -REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr -2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s -2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU -GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj -dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r -TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB -AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv -c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl -ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu -MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg -T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud -HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD -VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny -bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ -J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG -SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom -JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO -inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y -caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB -mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ -YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9 -BKNDLdr8C2LqL19iUw== + +================================================================ +C: TW +O: TAIWAN-CA +OU: Root CA +CN: TWCA Root Certification Authority +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD -VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT -ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt -YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu -Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa -MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG -cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh -d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY -DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E -rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq -uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN -BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP -MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa -/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei -gQ== + +================================================================ +C: US +O: AffirmTrust +CN: AffirmTrust Commercial +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== + +================================================================ +C: US +O: AffirmTrust +CN: AffirmTrust Networking +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== + +================================================================ +C: US +O: AffirmTrust +CN: AffirmTrust Premium +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= + +================================================================ +C: US +O: AffirmTrust +CN: AffirmTrust Premium ECC +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== -----END CERTIFICATE----- + +================================================================ +C: US +O: America Online Inc. +CN: America Online Root Certification Authority 1 -----BEGIN CERTIFICATE----- -MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN -BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd -BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN -MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g -Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG -A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l -c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT -6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa -Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL -8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC -9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ -pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ -CayJSdM= +MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk +hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym +1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW +OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb +2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko +O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU +AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF +Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb +LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir +oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C +MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds +sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 -----END CERTIFICATE----- + +================================================================ +C: US +O: America Online Inc. +CN: America Online Root Certification Authority 2 -----BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg -MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz -MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy -dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD -VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg -xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu -xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 -XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k -heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J -YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C -urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 -JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 -b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV -9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 -kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh -fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA -aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS -RGQDJereW26fyfJOrN3H +MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP +bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 +MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft +ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC +206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci +KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 +JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 +BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e +Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B +PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 +Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq +Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ +o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 ++L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj +YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj +FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn +xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 +LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc +obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 +CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe +IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA +DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F +AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX +Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb +AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl +Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw +RY8mkaKO/qk= -----END CERTIFICATE----- + +================================================================ +C: US +O: DigiCert Inc +OU: www.digicert.com +CN: DigiCert Assured ID Root CA -----BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3 -WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv -bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU -UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw -bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe -LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef -J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh -R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ -Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX -JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p -zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S -Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq -ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz -gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH -uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS -y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI= +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- + +================================================================ +C: US +O: DigiCert Inc +OU: www.digicert.com +CN: DigiCert Global Root CA -----BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- + +================================================================ +C: US +O: DigiCert Inc +OU: www.digicert.com +CN: DigiCert High Assurance EV Root CA -----BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB -rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt -Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa -Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV -BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l -dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE -AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B -YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 -hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l -L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm -SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM -1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws -6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw -Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 -aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u -7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 -xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ -rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim -eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk -USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K -----END CERTIFICATE----- + +================================================================ +C: US +O: Digital Signature Trust +OU: DST ACES +CN: DST ACES CA X6 -----BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx +ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w +MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD +VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx +FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu +ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 +gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH +fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a +ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT +ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk +c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto +dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt +aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI +hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk +QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ +h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR +rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 +9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= -----END CERTIFICATE----- + +================================================================ +C: US +O: Digital Signature Trust Co. +OU: DSTCA E1 -----BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI +MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL +EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ +BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x +ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg +bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ +j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV +Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG +SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx +JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI +RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw +MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 +fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i ++DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG +SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN +QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ +gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl -----END CERTIFICATE----- + +================================================================ +C: US +O: Digital Signature Trust Co. +OU: DSTCA E2 -----BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd +MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV +UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL +EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ +BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x +ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ +k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso +LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o +TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG +SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx +JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI +RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 +MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C +TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 +WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG +SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR +xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL +B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID -----END CERTIFICATE----- + +================================================================ +C: US +O: Entrust, Inc. +OU: www.entrust.net/CPS is incorporated by reference +OU: (c) 2006 Entrust, Inc. +CN: Entrust Root Certification Authority -----BEGIN CERTIFICATE----- -MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f -zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi -TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW -NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV -Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- + +================================================================ +C: US +O: Entrust.net +OU: www.entrust.net/CPS incorp. by ref. (limits liab.) +OU: (c) 1999 Entrust.net Limited +CN: Entrust.net Secure Server Certification Authority -----BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK -VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm -Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J -h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul -uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 -DzFc6PLZ +MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u +ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc +KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u +ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 +MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE +ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j +b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF +bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg +U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA +A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ +I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 +wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC +AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb +oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 +BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p +dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk +MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp +b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu +dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 +MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi +E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa +MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI +hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN +95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd +2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- + +================================================================ +C: US +O: Equifax +OU: Equifax Secure Certificate Authority -----BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 -nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO -8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV -ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb -PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 -6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr -n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a -qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 -wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs -pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 -E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV +UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy +dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 +MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx +dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f +BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A +cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC +AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ +MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm +aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw +ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj +IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF +MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA +A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y +7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh +1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- + +================================================================ +C: US +O: Equifax Secure Inc. +CN: Equifax Secure Global eBusiness CA-1 -----BEGIN CERTIFICATE----- -MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh -YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 -FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg -J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc -r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY +MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT +ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw +MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj +dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l +c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC +UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc +58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ +o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr +aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA +A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA +Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv +8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV +-----END CERTIFICATE----- + +================================================================ +C: US +O: Equifax Secure Inc. +CN: Equifax Secure eBusiness CA-1 +-----BEGIN CERTIFICATE----- +MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc +MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT +ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw +MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j +LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ +KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo +RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu +WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw +Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD +AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK +eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM +zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ +WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN +/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== -----END CERTIFICATE----- + +================================================================ +C: US +O: GTE Corporation +OU: GTE CyberTrust Solutions, Inc. +CN: GTE CyberTrust Global Root -----BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns -YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe -Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj -IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx -KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM -HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw -DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC -AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji -nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX -rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn -jBJ7xUS0rg== +MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD +VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv +bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv +b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV +UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU +cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds +b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH +iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS +r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 +04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r +GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 +3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P +lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +CN: GeoTrust Global CA -----BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy -aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp -Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV -BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp -Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g -Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU -J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO -JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY -wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o -koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN -qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E -Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe -xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u -7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI -sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP -cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +CN: GeoTrust Global CA 2 -----BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ +MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs +IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg +R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A +PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 +Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL +TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL +5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 +S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe +2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap +EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td +EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv +/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN +A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 +abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF +I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz +4iIprn2DQKi6bA== -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +CN: GeoTrust Primary Certification Authority -----BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +CN: GeoTrust Universal CA -----BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy +c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE +BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 +IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV +VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 +cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT +QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh +F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v +c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w +mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd +VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX +teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ +f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe +Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ +nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB +/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY +MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG +9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc +aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX +IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn +ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z +uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN +Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja +QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW +koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 +ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt +DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm +bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +CN: GeoTrust Universal CA 2 -----BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW +MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy +c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD +VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 +c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 +WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG +FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq +XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL +se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb +KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd +IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 +y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt +hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc +QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 +Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV +HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ +KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z +dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ +L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr +Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo +ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY +T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz +GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m +1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV +OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH +6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX +QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +OU: (c) 2007 GeoTrust Inc. - For authorized use only +CN: GeoTrust Primary Certification Authority - G2 -----BEGIN CERTIFICATE----- -MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM -HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK -qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj -cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y -cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP -T8qAkbYp +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K -----END CERTIFICATE----- + +================================================================ +C: US +O: GeoTrust Inc. +OU: (c) 2008 GeoTrust Inc. - For authorized use only +CN: GeoTrust Primary Certification Authority - G3 -----BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt -----END CERTIFICATE----- + +================================================================ +C: US +O: Network Solutions L.L.C. +CN: Network Solutions Certificate Authority -----BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- + +================================================================ +C: US +O: SecureTrust Corporation +CN: Secure Global CA -----BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 -MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww -KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G -A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 -5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE -SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O -JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu -ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE -AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB -AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB -CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw -b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo -7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ -0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 -nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ -33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- + +================================================================ +C: US +O: SecureTrust Corporation +CN: SecureTrust CA -----BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx -IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs -cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 -MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl -bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD -DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r -WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU -Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs -HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj -z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf -SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl -AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG -KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P -AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j -BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC -VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX -ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB -ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd -/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB -A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn -k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 -iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv -2G0xffX8oRAHh84vWdw+WNs= +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- + +================================================================ +C: US +O: Starfield Technologies, Inc. +OU: Starfield Class 2 Certification Authority -----BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- + +================================================================ +C: US +O: The Go Daddy Group, Inc. +OU: Go Daddy Class 2 Certification Authority -----BEGIN CERTIFICATE----- -MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEw -OTIzMTMxODE3WjB1MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v -LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWdu -ZXQgLSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g5DY1Hw7h -gCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZsjqBeynX8T90vFILqsY2K -5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfHHB67Af+g7u0dEHdDW7lwy81MwFYxBTRy -9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAE -gfwwgfkwgfYGDSsGAQQBvj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3 -eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2ppIGRs -YSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENBIHcgaGllcmFyY2hp -aSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3Jp -dW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQwHwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQb -sa8wHQYDVR0OBBYEFMODHtVZd1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQB -FIGh8Jpxt87AgSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy -f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIisTsytFzVP32/W -+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB3vSaoYg+wdkcvb6souMJzuc2 -uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uf -tXncwKJrMiE3lvgOOBITRzcahirLer4c ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQgLSBQQ0EgS2xhc2EgMjAeFw0wMjA0MTkxMDI5NTNa -Fw0xNzA0MTgxMjUzMDdaMHUxCzAJBgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4g -eiBvLm8uMSQwIgYDVQQLExtDZW50cnVtIENlcnR5ZmlrYWNqaSBTaWduZXQxHzAdBgNVBAMTFkND -IFNpZ25ldCAtIENBIEtsYXNhIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgLJu -QqY4yavbSgHg8CyfKTx4BokNSDOVz4eD9vptUr11Kqd06ED1hlH7Sg0goBFAfntNU/QTKwSBaNui -me7C4sSEdgsKrPoAhGb4Mq8y7Ty7RqZz7mkzNMqzL2L2U4yQ2QjvpH8MH0IBqOWEcpSkpwnrCDIm -RoTfd+YlZWKi2JceQixUUYIQ45Ox8+x8hHbvvZdgqtcvo8PW27qoHkp/7hMuJ44kDAGrmxffBXl/ -OBRZp0uO1CSLcMcVJzyr2phKhy406MYdWrtNPEluGs0GFDzd0nrIctiWAO4cmct4S72S9Q6e//0G -O9f3/Ca5Kb2I1xYLj/xE+HgjHX9aD2MhAgMBAAGjggGMMIIBiDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjCB4wYDVR0gBIHbMIHYMIHVBg0rBgEEAb4/AhQKAQEAMIHDMHUGCCsGAQUF -BwICMGkaZ0NlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0 -eWthIENlcnR5ZmlrYWNqaSBQQ0EyIC0gQ2VydHlmaWthdHkgVXJ6ZWRvdyBLbGFzeSAyIi4wSgYI -KwYBBQUHAgEWPmh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9kb2t1bWVudHkva2xh -c2EyL3BjX3BjYTIudHh0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly93d3cuc2lnbmV0LnBsL3Jl -cG96eXRvcml1bS9jcmwvcGNhMi5jcmwwHwYDVR0jBBgwFoAUwGxGyl2CfpYHRonE82AVXO08kMIw -HQYDVR0OBBYEFLtFBlILy4HNKVSzvHxBTM0HDowlMA0GCSqGSIb3DQEBBQUAA4IBAQBWTsCbqXrX -hBBev5v5cIuc6gJM8ww7oR0uMQRZoFSqvQUPWBYM2/TLI/f8UM9hSShUVj3zEsSj/vFHagUVmzuV -Xo5u0WK8iaqATSyEVBhADHrPG6wYcLKJlagge/ILA0m+SieyP2sjYD9MUB9KZIEyBKv0429UuDTw -6P7pslxMWJBSNyQxaLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF -6caa9WwW31W26MlXCvSmJgfiTPwGvm4PkPmOnmWZ3CczzhHl4q7ztHFzshJH3sZWDnrWwBFjzz5e -Pr3WHV1wA7EY6oT4zBx+2gT9XBTB ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEUzCCAzugAwIBAgIEPq+qjzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJQTDE3MDUGA1UE -ChMuQ1ppQyBDZW50cmFzdCBTQSB3IGltaWVuaXUgTWluaXN0cmEgR29zcG9kYXJraTEZMBcGA1UE -AxMQQ1ppQyBDZW50cmFzdCBTQTAeFw0wMzA0MzAxMDUwNTVaFw0wODA0MjgxMDUwNTVaMGgxCzAJ -BgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4geiBvLm8uMR8wHQYDVQQDExZDQyBT -aWduZXQgLSBDQSBLbGFzYSAzMRcwFQYDVQQFEw5OdW1lciB3cGlzdTogNDCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBALVdeOM62cPH2NERFxbS5FIp/HSv3fgesdVsTUFxZbGtE+/E0RMl -KZQJHH9emx7vRYubsi4EOLCjYsCOTFvgGRIpZzx7R7T5c0Di5XFkRU4gjBl7aHJoKb5SLzGlWdoX -GsekVtl6keEACrizV2EafqjI8cnBWY7OxQ1ooLQp5AeFjXg+5PT0lO6TUZAubqjFbhVbxSWjqvdj -93RGfyYE76MnNn4c2xWySD07n7uno06TC0IJe6+3WSX1h+76VsIFouWBXOoM7cxxiLjoqdBVu24+ -P8e81SukE7qEvOwDPmk9ZJFtt1nBNg8a1kaixcljrA/43XwOPz6qnJ+cIj/xywECAwEAAaOCAQow -ggEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMDMGA1UdIAEB/wQpMCcwJQYEVR0g -ADAdMBsGCCsGAQUFBwIBFg93d3cuY2VudHJhc3QucGwwgY4GA1UdIwSBhjCBg4AU2a7r85Cp1iJN -W0Ca1LR6VG3996ShZaRjMGExCzAJBgNVBAYTAlBMMTcwNQYDVQQKEy5DWmlDIENlbnRyYXN0IFNB -IHcgaW1pZW5pdSBNaW5pc3RyYSBHb3Nwb2RhcmtpMRkwFwYDVQQDExBDWmlDIENlbnRyYXN0IFNB -ggQ9/0sQMB0GA1UdDgQWBBR7Y8wZkHq0zrY7nn1tFSdQ0PlJuTANBgkqhkiG9w0BAQUFAAOCAQEA -ldt/svO5c1MU08FKgrOXCGEbEPbQxhpM0xcd6Iv3dCo6qugEgjEs9Qm5CwUNKMnFsvR27cJWUvZb -MVcvwlwCwclOdwF6u/QRS8bC2HYErhYo9bp9yuxxzuow2A94c5fPqfVrjXy+vDouchAm6+A5Wjzv -J8wxVFDCs+9iGACmyUWr/JGXCYiQIbQkwlkRKHHlan9ymKf1NvIej/3EpeT8fKr6ywxGuhAfqofW -pg3WJY/RCB4lTzD8vZGNwfMFGkWhJkypad3i9w3lGmDVpsHaWtCgGfd0H7tUtWPkP+t7EjIRCD9J -HYnTR+wbbewc5vOI+UobR15ynGfFIaSIiMTVtQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ -TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu -dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD -QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG -A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV -BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln -bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo -VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs -Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI -iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD -VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0 -oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey -LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF -BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi -UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg -T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0 -b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS -C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw -CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt -iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M -eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71 -iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp -ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv -hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ== ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIEP4vnLzANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJQ -TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEfMB0GA1UEAxMWQ0Mg -U2lnbmV0IC0gQ0EgS2xhc2EgMzEXMBUGA1UEBRMOTnVtZXIgd3Bpc3U6IDQwHhcN -MDMxMDE0MTIwODAwWhcNMDgwNDI4MTA1MDU1WjB3MQswCQYDVQQGEwJQTDEfMB0G -A1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBD -ZXJ0eWZpa2FjamkgU2lnbmV0MSEwHwYDVQQDExhDQyBTaWduZXQgLSBPQ1NQIEts -YXNhIDMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM/9GwvARNuCVN+PqZmO -4FqH8vTqhenUyqRkmAVT4YhLu0a9AXeLAYVDu+NTkYzsAUMAfu55rIKHNLlm6WbF -KvLiKKz4p4pbUr+ToPcwl/TDotidloUdBAxDg0SL+PmQqACZDe3seJho2IYf2vDL -/G4TLMbKmNB0mlWFuN0f4fJNAgMBAAGjggGgMIIBnDAOBgNVHQ8BAf8EBAMCB4Aw -EwYDVR0lBAwwCgYIKwYBBQUHAwkwTwYDVR0fBEgwRjBEoEKgQIY+aHR0cDovL3d3 -dy5zaWduZXQucGwva3dhbGlmaWtvd2FuZS9yZXBvenl0b3JpdW0vY3JsL2tsYXNh -My5jcmwwgdgGA1UdIASB0DCBzTCBygYOKwYBBAG+PwKCLAoCAQAwgbcwbAYIKwYB -BQUHAgIwYBpeQ2VydHlmaWthdCB3eWRhbnkgemdvZG5pZSB6IGRva3VtZW50ZW0g -IlBvbGl0eWthIENlcnR5ZmlrYWNqaSAtIENlcnR5ZmlrYXR5IHJlc3BvbmRlcm93 -IE9DU1AiLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5 -dG9yaXVtL2Rva3VtZW50eS9wY19vY3NwXzFfMC5wZGYwHwYDVR0jBBgwFoAUe2PM -GZB6tM62O559bRUnUND5SbkwHQYDVR0OBBYEFG4jnCMvBALRQXtmDn9TyXQ/EKP+ -MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADggEBACXrKG5Def5lpRwmZom3UEDq -bl7y4U3qomG4B+ok2FVZGgPZti+ZgvrenPj7PtbYCUBPsCSTNrznKinoT3gD9lQQ -xkEHwdc6VD1GlFp+qI64u0+wS9Epatrdf7aBnizrOIB4LJd4E2TWQ6trspetjMIU -upyWls1BmYUxB91R7QkTiAUSNZ87s3auhZuG4f0V0JLVCcg2rn7AN1rfMkgxCbHk -GxiQbYWFljl6aatxR3odnnzVUe1I8uoY2JXpmmUcOG4dNGuQYziyKG3mtXCQWvug -5qi9Mf3KUh1oSTKx6HfLjjNl1+wMB5Mdb8LF0XyZLdJM9yIZh7SBRsYm9QiXevY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYw -OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v -LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu -ZXQgLSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7BrBlbN5ma -M5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRAspEXE4gvwb08ASY6w5s+ -HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8wnfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxW -Ceol9IekpBRVmuuSA6QG0Jkm+pGDJ05yj2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9 -JyN0ag1yII/LPx8HK5J4W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3x -W20QjQcSZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHkMIGaBggrBgEFBQcC -AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0 -eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6 -IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z -aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw -OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy -bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUwGxGyl2CfpYHRonE -82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkx -UGY7U9kVrLI71xBgoNVyzXTiMNDBvjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsan -ot1Xt6j0ZDC+03FjLHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G2 -2Ohu+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqWuHitKQDV -tcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6NA9GRTCNxm/dXlcwnmY= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYw -OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v -LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu -ZXQgLSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3LanJtdue -Ne6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP6KZTU0DixOrV+K7iWaqA -iQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6HdbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPE -OpO94mAKcBUhk6T/ki0evXX/ZvvktwmF3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Db -w34hA1A+ckTwhxzecrB8TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC -3P8QqoK4ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHkMIGaBggrBgEFBQcC -AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0 -eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6 -IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z -aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw -OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy -bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUXvthcPHlH5BgGhlM -ErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIce95Mvn710KCAISA0CuHD4aznTU6pLoCDShW4 -7OR+GTpJUm1coTcUqlBHV9mra4VFrBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJG -dsJF/XU/7smummgjMNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oF -JTlpuxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1DOcePEhKz -1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BXWCW+KxwiBrtQTXv4dTE= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIwMTY0MjE5WhcNMjYw -OTIxMTU0MjE5WjBxMQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v -LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWdu -ZXQgLSBSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrr2vydnNpELfGW3Ks -ARiDhJvwDtUe4AbWev+OfMc3+vA29nX8ZmIwno3gmItjo5DbUCCRiCMq5c9epcGu+kg4a3BJChVX -REl8gVh0ST15rr3RKrSc4VgsvQzl0ZUraeQLl8JoRT5PLsUj3qwF78jUCQVckiiLVcnGfZtFCm+D -CJXliQBDMB9XFAUEiO/DtEBs0B7wJGx7lgJeJpQUcGiaOPjcJDYOk7rNAYmmD2gWeSlepufO8luU -YG/YDxTC4mqhRqfa4MnVO5dqy+ICj2UvUpHbZDB0KfGRibgBYeQP1kuqgIzJN4UqknVAJb0aMBSP -l+9k2fAUdchx1njlbdcbAgMBAAGjggFtMIIBaTAPBgNVHRMBAf8EBTADAQH/MIIBBAYDVR0gBIH8 -MIH5MIH2Bg0rBgEEAb4/AgEKAQEAMIHkMIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lz -dGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEg -Um9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNoaWkg -Q0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVt -L2Rva3VtZW50eS9wY19yb290Y2EudHh0MB0GA1UdDgQWBBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAf -BgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN -AQEFBQADggEBAGnY5QmYqnnO9OqFOWZxxb25UHRnaRF6IV9aaGit5BZufZj2Tq3v8L3SgE34GOoI -cdRMMG5JEpEU4mN/Ef3oY6Eo+7HfqaPHI4KFmbDSPiK5s+wmf+bQSm0Yq5/h4ZOdcAESlLQeLSt1 -CQk2JoKQJ6pyAf6xJBgWEIlm4RXE4J3324PUiOp83kW6MDvaa1xY976WyInr4rwoLgxVl11LZeKW -ha0RJJxJgw/NyWpKG7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmAB -KK6o3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQTDEfMB0GA1UE -ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg -U2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBDQSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloX -DTExMDkyMzExMTgxN1owdjELMAkGA1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6 -IG8uby4xJDAiBgNVBAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0Mg -U2lnbmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJYrISEtSsd -uHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ12FJarD1X6mSQ4cfN/60v -LfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjRAM0tdwXSnzuTEunfw0Oup559y3Iqxg1c -ExflB6cfAgMBAAGjggGXMIIBkzBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5w -bC9yZXBvenl0b3JpdW0vY3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQM -MAoGCCsGAQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYBBQUH -AgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtICJQb2xpdHlr -YSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5pZSBjemFzZW0iLjBHBggrBgEFBQcC -ARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJf -MS5wZGYwHwYDVR0jBBgwFoAUw4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavO -Yd9u9tej53vWXwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz -+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMbskF8I31JxIeB -vueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR+7KtwMg4sFDJZ8RNgOf7tbA= ------END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE -ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z -dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq -hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3 -WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh -bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g -dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE -AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt -YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6 -rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL -VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40 -I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV -HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/ -vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ -bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl -IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe -BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo -b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN -AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW -iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms -1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY= +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= -----END CERTIFICATE----- + +================================================================ +C: US +O: VISA +OU: Visa International Service Association +CN: Visa eCommerce Root -----BEGIN CERTIFICATE----- -MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD -VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz -MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD -VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx -JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz -MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh -cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe -MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo -b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5 -GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1 -fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx -Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u -jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx -ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp -/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ -co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s -zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo -+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F -TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w -ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm -gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO -BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf -U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h -c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN -AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/ -BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC -AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC -AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG -+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV -HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN -BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y -PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M -AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP -qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP -sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v -dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/ -O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P -+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg -g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg -T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa -yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE -o2A= +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr +MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl +cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h +dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l +cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h +2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E +lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV +ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq +299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t +vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL +dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF +AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR +zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 +LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd +7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw +++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 1 Public Primary Certification Authority -----BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE -AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x -CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW -MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF -RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 -09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 -XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P -Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK -t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb -X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 -MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU -fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI -2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH -K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae -ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP -BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ -MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw -RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm -fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 -gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe -I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i -5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi -ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn -MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ -o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 -zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN -GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt -r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK -Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== +MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0f +zGVuDLDQVoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHi +TkVWaR94AoDa3EeRKbs2yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0G +CSqGSIb3DQEBBQUAA4GBAFgVKTk8d6PaXCUDfGD67gmZPCcQcMgMCeazh88K4hiW +NWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n0a3hUKw8fGJLj7qE1xIV +Gx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZRjXZ+Hxb -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 1 Public Primary Certification Authority - G2 +OU: (c) 1998 VeriSign, Inc. - For authorized use only +OU: VeriSign Trust Network -----BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx -CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp -ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa -QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw -NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft -ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu -QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG -qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL -fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ -Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 -Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ -54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b -MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j -ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej -YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt -A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF -rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ -pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB -lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy -YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 -7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs -YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 -xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc -unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ -Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp -ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 -gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 -jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ -XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD -W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ -RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r -MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk -BYn8eNZcLCZDqQ== +MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK +VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm +Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J +h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul +uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68 +DzFc6PLZ -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 2 Public Primary Certification Authority - G2 +OU: (c) 1998 VeriSign, Inc. - For authorized use only +OU: VeriSign Trust Network -----BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc -MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp -b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT -AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs -aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H -j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K -f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 -IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw -FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht -QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm -/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ -k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ -MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC -seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ -hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ -eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U -DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj -B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= +MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns +YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y +aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe +Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj +IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx +KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B +AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM +HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw +DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC +AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji +nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX +rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn +jBJ7xUS0rg== -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 3 Public Primary Certification Authority -----BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE +BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is +I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G +CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do +lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc +AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 3 Public Primary Certification Authority -----BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 -ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX -l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB -HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B -5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 -WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP -gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ -DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu -BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs -h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk -LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz +cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 +MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV +BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt +YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN +ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE +BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is +I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G +CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i +2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ +2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: Class 3 Public Primary Certification Authority - G2 +OU: (c) 1998 VeriSign, Inc. - For authorized use only +OU: VeriSign Trust Network -----BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg -isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z -NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI -+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R -hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+ -mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP -Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s -EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2 -mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC -e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow -dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 +MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh +c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy +MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp +emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X +DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw +FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg +UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo +YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 +MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 +pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 +13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID +AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk +U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i +F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY +oJ2daZH9 -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 1999 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 1 Public Primary Certification Authority - G3 -----BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET -MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE -AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw -CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg -YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE -Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX -mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD -XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW -S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp -FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD -AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu -ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z -ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv -Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw -DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6 -yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq -EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB -EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN -PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag= +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 +nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO +8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV +ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb +PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 +6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr +n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a +qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 +wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs +pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 +E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 1999 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 2 Public Primary Certification Authority - G3 -----BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy +aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp +Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV +BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp +Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g +Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU +J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO +JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY +wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o +koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN +qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E +Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe +xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u +7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI +sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP +cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 1999 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 3 Public Primary Certification Authority - G3 -----BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 1999 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 4 Public Primary Certification Authority - G3 +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 +GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ ++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd +U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm +NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY +ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ +ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 +CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq +g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c +2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ +bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 2006 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 3 Public Primary Certification Authority - G5 +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 2007 VeriSign, Inc. - For authorized use only +CN: VeriSign Class 3 Public Primary Certification Authority - G4 -----BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- + +================================================================ +C: US +O: VeriSign, Inc. +OU: VeriSign Trust Network +OU: (c) 2008 VeriSign, Inc. - For authorized use only +CN: VeriSign Universal Root Certification Authority -----BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD -TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 -MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF -Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh -IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 -dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO -V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC -GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN -v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB -AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB -Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO -76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK -OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH -ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi -yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL -buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj -2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- + +================================================================ +C: US +O: Wells Fargo +OU: Wells Fargo Certification Authority +CN: Wells Fargo Root Certificate Authority -----BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0 -MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG -EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT -CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK -8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2 -98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb -2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC -ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi -Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB -o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl -ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD -AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL -AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd -foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M -cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq -8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp -hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk -Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U -AGegcQCCSA== +MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC +VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v +dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0 +MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww +KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G +A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13 +5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE +SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O +JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu +ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE +AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB +AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB +CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw +b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo +7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/ +0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7 +nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx +x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ +33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= -----END CERTIFICATE----- + +================================================================ +C: US +O: Wells Fargo WellsSecure +OU: Wells Fargo Bank NA +CN: WellsSecure Public Root Certificate Authority -----BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw -PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu -MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx -GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL -MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf -HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh -gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW -v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue -Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr -9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt -6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 -MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl -Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 -ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq -hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p -iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC -dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL -kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL -hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx +IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs +cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v +dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 +MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl +bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD +DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r +WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU +Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs +HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj +z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf +SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl +AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG +KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P +AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j +BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC +VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX +ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB +ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd +/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB +A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn +k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 +iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv +2G0xffX8oRAHh84vWdw+WNs= -----END CERTIFICATE----- + +================================================================ +C: US +O: thawte, Inc. +OU: (c) 2007 thawte, Inc. - For authorized use only +CN: thawte Primary Root CA - G2 -----BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- + +================================================================ +C: US +O: thawte, Inc. +OU: Certification Services Division +OU: (c) 2006 thawte, Inc. - For authorized use only +CN: thawte Primary Root CA -----BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== -----END CERTIFICATE----- + +================================================================ +C: US +O: thawte, Inc. +OU: Certification Services Division +OU: (c) 2008 thawte, Inc. - For authorized use only +CN: thawte Primary Root CA - G3 -----BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV -BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt -ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 -MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg -SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl -a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h -4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk -tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s -tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL -dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 -c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um -TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z -+kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O -Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW -OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW -fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 -l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw -FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ -8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI -6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO -TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME -wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY -Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn -xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q -DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q -Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t -hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 -7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 -QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- + +================================================================ +C: US +OU: www.xrampsecurity.com +O: XRamp Security Services Inc +CN: XRamp Global Certification Authority -----BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp -Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp -a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx -MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg -R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU -MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT -L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H -5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC -90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1 -c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE -VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP -qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S -/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj -/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X -KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= + +================================================================ +C: US +ST: Arizona +L: Scottsdale +O: GoDaddy.com, Inc. +CN: Go Daddy Root Certificate Authority - G2 +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- + +================================================================ +C: US +ST: Arizona +L: Scottsdale +O: Starfield Technologies, Inc. +CN: Starfield Root Certificate Authority - G2 +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- + +================================================================ +C: US +ST: Arizona +L: Scottsdale +O: Starfield Technologies, Inc. +CN: Starfield Services Root Certificate Authority - G2 +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- + +================================================================ +C: US +ST: Indiana +L: Indianapolis +O: Software in the Public Interest +OU: hostmaster +CN: Certificate Authority +emailAddress: hostmaster@spi-inc.org -----BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K +MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD +VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz +MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD +VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx +JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz +MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh +cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe +MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo +b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5 +GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1 +fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx +Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u +jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx +ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp +/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ +co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s +zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo ++uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F +TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w +ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm +gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO +BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf +U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h +c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN +AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/ +BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC +AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC +AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG ++EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV +HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN +BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y +PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M +AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP +qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP +sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v +dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/ +O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P ++UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg +g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg +T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa +yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE +o2A= -----END CERTIFICATE----- + +================================================================ +C: US +ST: UT +L: Salt Lake City +O: The USERTRUST Network +OU: http://www.usertrust.com +CN: UTN - DATACorp SGC -----BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw +IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG +EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD +VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu +dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 +E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ +D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK +4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq +lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW +bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB +o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT +MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js +LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr +BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB +AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj +j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH +KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv +2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 +mfnGV/TJVTl4uix5yaaIK/QI -----END CERTIFICATE----- + +================================================================ +C: US +ST: UT +L: Salt Lake City +O: The USERTRUST Network +OU: http://www.usertrust.com +CN: UTN-USERFirst-Client Authentication and Email -----BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB +rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt +Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa +Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV +BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l +dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE +AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B +YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 +hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l +L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm +SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM +1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws +6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw +Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 +aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u +7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 +xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ +rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim +eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk +USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= -----END CERTIFICATE----- + +================================================================ +C: US +ST: UT +L: Salt Lake City +O: The USERTRUST Network +OU: http://www.usertrust.com +CN: UTN-USERFirst-Hardware -----BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB +lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt +SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG +A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe +MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v +d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh +cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn +0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ +M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a +MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd +oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI +DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy +oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 +dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy +bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF +BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli +CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE +CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t +3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS +KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== -----END CERTIFICATE----- + +================================================================ +C: ZA +ST: Western Cape +L: Cape Town +O: Thawte Consulting cc +OU: Certification Services Division +CN: Thawte Premium Server CA +emailAddress: premium-server@thawte.com -----BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== +MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy +dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t +MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB +MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG +A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp +b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl +cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv +bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE +VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ +ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR +uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI +hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM +pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- + +================================================================ +C: ZA +ST: Western Cape +L: Cape Town +O: Thawte Consulting cc +OU: Certification Services Division +CN: Thawte Server CA +emailAddress: server-certs@thawte.com -----BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT -AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ -TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG -9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw -MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM -BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO -MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 -LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI -s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 -xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 -u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b -F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx -Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd -PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV -HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx -NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF -AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ -L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY -YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a -NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R -0982gaEbeC9xs/FZTEYYKKuF0mBWWg== +MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx +FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD +VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm +MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx +MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT +DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 +dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl +cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 +DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD +gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 +yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX +L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj +EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG +7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e +QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ +qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- + +================================================================ +C: ch +O: Swisscom +OU: Digital Certificate Services +CN: Swisscom Root CA 1 -----BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk +MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 +YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg +Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT +AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp +Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 +m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih +FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ +TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F +EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco +kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu +HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF +vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo +19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC +L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW +bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX +JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw +FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc +K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf +ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik +Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB +sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e +3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR +ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip +mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH +b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf +rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms +hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y +zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 +MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- + +================================================================ +C: ch +O: Swisscom +OU: Digital Certificate Services +CN: Swisscom Root CA 2 +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk +MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 +YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg +Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT +AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp +Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr +jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r +0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f +2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP +ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF +y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA +tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL +6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0 +uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL +acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh +k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q +VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw +FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh +b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R +fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv +/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI +REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx +srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv +aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT +woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n +Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W +t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N +8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2 +9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5 +wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +================================================================ +C: ch +O: Swisscom +OU: Digital Certificate Services +CN: Swisscom Root EV CA 2 +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw +ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp +dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290 +IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD +VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy +dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg +MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx +UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD +1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH +oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR +HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/ +5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv +idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL +OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC +NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f +46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB +UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth +7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G +A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB +bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x +XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T +PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0 +Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70 +WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL +Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm +7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S +nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN +vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB +WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI +fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb +I+2ksx0WckNLIOFZfsLorSa/ovc= -----END CERTIFICATE----- + +================================================================ +CN: ACEDICOM Root +OU: PKI +O: EDICOM +C: ES -----BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN -AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp -dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw -MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw -CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ -MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB -SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz -ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH -LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP -PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL -2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w -ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC -MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk -AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 -AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz -AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz -AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f -BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY -P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi -CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g -kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 -HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS -na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q -qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z -TbvGRNs2yyqcjg== +MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE +AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x +CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW +MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF +RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC +AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 +09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 +XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P +Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK +t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb +X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 +MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU +fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI +2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH +K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae +ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP +BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ +MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw +RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv +bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm +fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 +gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe +I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i +5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi +ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn +MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ +o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 +zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN +GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt +r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK +Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== -----END CERTIFICATE----- + +================================================================ +CN: ComSign CA +O: ComSign +C: IL -----BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0 +MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG +EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT +CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK +8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2 +98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb +2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC +ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi +Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB +o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl +ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD +AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL +AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd +foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M +cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq +8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp +hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk +Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== -----END CERTIFICATE----- + +================================================================ +CN: ComSign Secured CA +O: ComSign +C: IL -----BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw -cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy -b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z -ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4 -NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN -TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p -Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u -uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ -LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA -vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770 -Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx -62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB -AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw -LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP -BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB -AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov -MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 -ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT -AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh -ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo -AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa -AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln -bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p -Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP -PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv -Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB -EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu -w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj -cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV -HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI -VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS -BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS -b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS -8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds -ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl -7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR -hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/ -MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw +PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu +MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx +GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL +MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf +HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh +gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW +v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue +Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr +9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt +6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 +MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl +Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 +ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq +hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p +iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC +dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL +kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL +hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== -----END CERTIFICATE----- + +================================================================ +CN: EBG Elektronik Sertifika Hizmet Sağlayıcısı +O: EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. +C: TR -----BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV +BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt +ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 +MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg +SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl +a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h +4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk +tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s +tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL +dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 +c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um +TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z ++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O +Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW +OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW +fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 +l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw +FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ +8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI +6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO +TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME +wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY +Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn +xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q +DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q +Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t +hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 +7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 +QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT -----END CERTIFICATE----- + +================================================================ +CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +C: TR +L: ANKARA +O: (c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. -----BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= +MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc +UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg +MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 +dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz +MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy +dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD +VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg +xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu +xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 +XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k +heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J +YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C +urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 +JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 +b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV +9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 +kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh +fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy +B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA +aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS +RGQDJereW26fyfJOrN3H -----END CERTIFICATE----- + +================================================================ +CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +C: TR +L: Ankara +O: TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007 -----BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc +UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS +S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg +SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx +OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry +b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC +VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE +sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F +ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY +KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG ++7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG +HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P +IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M +733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk +Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW +AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 +mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa +XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ +qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 -----END CERTIFICATE----- + +================================================================ +CN: TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı +C: TR +L: Ankara +O: TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005 -----BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz -MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N -IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 -bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE -RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO -zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 -bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF -MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 -VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC -OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW -tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ -q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb -EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ -Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O -VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc +UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS +S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg +SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3 +WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv +bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU +UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw +bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe +LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef +J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh +R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ +Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX +JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p +zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S +Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq +ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 +Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz +gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH +uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS +y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI= -----END CERTIFICATE----- + +================================================================ +L: ValiCert Validation Network +O: ValiCert, Inc. +OU: ValiCert Class 1 Policy Validation Authority +CN: http://www.valicert.com/ +emailAddress: info@valicert.com -----BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy +NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y +LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ +TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y +TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 +LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW +I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw +nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI -----END CERTIFICATE----- + +================================================================ +L: ValiCert Validation Network +O: ValiCert, Inc. +OU: ValiCert Class 2 Policy Validation Authority +CN: http://www.valicert.com/ +emailAddress: info@valicert.com -----BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCB -rjELMAkGA1UEBhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcp -MRIwEAYDVQQHEwlTdHV0dGdhcnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fz -c2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVTLVRSVVNUIEF1dGhlbnRpY2F0aW9u -IGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0wNTA2MjIwMDAwMDBa -Fw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFkZW4t -V3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMg -RGV1dHNjaGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJV -U1QgQXV0aGVudGljYXRpb24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBO -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1 -toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob4QSwI7+Vio5bG0F/WsPo -TUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXLg3KSwlOy -ggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1 -XgqfeN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteF -hy+S8dF2g08LOlk3KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm -7QIDAQABo4GSMIGPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEG -MCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJvbmxpbmUxLTIwNDgtNTAdBgNV -HQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAUD8oeXHngovMp -ttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD -pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFo -LtU96G7m1R08P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersF -iXOMy6ZNwPv2AtawB6MDwidAnwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0y -h9WUUpY6RsZxlj33mA6ykaqP2vROJAA5VeitF7nTNCtKqUDMFypVZUF0Qn71wK/I -k63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8bHz2eBIPdltkdOpQ= +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy +NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY +dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 +WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS +v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v +UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu +IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC +W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- + +================================================================ +L: ValiCert Validation Network +O: ValiCert, Inc. +OU: ValiCert Class 3 Policy Validation Authority +CN: http://www.valicert.com/ +emailAddress: info@valicert.com -----BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== +MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 +IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz +BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y +aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG +9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy +NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y +azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs +YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw +Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl +cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD +cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs +2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY +JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE +Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ +n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A +PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu -----END CERTIFICATE----- + +================================================================ +O: Cybertrust, Inc +CN: Cybertrust Global Root -----BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG +A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh +bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE +ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS +b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 +7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS +J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y +HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP +t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz +FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY +XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw +hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js +MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA +A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj +Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx +XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o +omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc +A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- + +================================================================ +O: Digital Signature Trust Co. +CN: DST Root CA X3 -----BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- + +================================================================ +O: Entrust.net +OU: www.entrust.net/CPS_2048 incorp. by ref. (limits liab.) +OU: (c) 1999 Entrust.net Limited +CN: Entrust.net Certification Authority (2048) -----BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy -MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl -ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm -BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF -5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv -DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v -zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT -yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj -dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh -MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI -4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz -dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY -aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G -DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH -LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= -----END CERTIFICATE----- + +================================================================ +O: RSA Security Inc +OU: RSA Security 2048 V3 -----BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 +MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp +dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX +BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy +MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp +eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg +/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl +wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh +AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 +PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu +AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR +MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc +HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ +Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ +f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO +rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch +6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 +7CAFYd4= -----END CERTIFICATE----- + +================================================================ +OU: GlobalSign Root CA - R2 +O: GlobalSign +CN: GlobalSign -----BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- + +================================================================ +OU: GlobalSign Root CA - R3 +O: GlobalSign +CN: GlobalSign -----BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS -MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp -bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw -VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy -YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy -dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe -Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx -GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls -aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU -QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh -xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 -aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr -IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h -gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK -O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO -fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw -lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID -AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP -NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t -wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM -7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh -gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n -oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs -yZyQ2uypQjyttgI= +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f -----END CERTIFICATE----- ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== + +================================================================ +emailAddress: contacto@procert.net.ve +L: Chacao +ST: Miranda +OU: Proveedor de Certificados PROCERT +O: Sistema Nacional de Certificacion Electronica +C: VE +CN: PSCProcert +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1 +dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s +YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz +dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0 +aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh +IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ +KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw +MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy +b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx +KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG +A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u +aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9 +7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74 +BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G +ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9 +JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0 +PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2 +0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/ +6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m +v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7 +K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev +bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw +MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w +MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD +gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0 +b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh +bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0 +cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp +ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg +ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq +hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD +AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w +MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag +RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t +UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl +cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG +AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN +AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS +1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB +3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv +Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh +HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm +pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz +sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE +qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb +mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9 +opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H +YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km -----END CERTIFICATE----- + +================================================================ +emailAddress: pki@sk.ee +C: EE +O: AS Sertifitseerimiskeskus +CN: Juur-SK -----BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN +AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp +dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw +MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw +CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ +MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB +SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz +ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH +LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP +PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL +2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w +ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC +MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk +AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 +AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz +AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz +AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f +BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY +P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi +CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g +kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 +HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS +na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q +qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z +TbvGRNs2yyqcjg== -----END CERTIFICATE----- diff --git a/externals/vegas/LICENSE b/externals/vegas/LICENSE deleted file mode 100644 index 0c5ecafa21..0000000000 --- a/externals/vegas/LICENSE +++ /dev/null @@ -1,581 +0,0 @@ -Mozilla Public License 1.1 (MPL 1.1) - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or - otherwise making the Covered Code available to a third - party. - - 1.1. ''Contributor'' means each entity that creates or - contributes to the creation of Modifications. - - 1.2. ''Contributor Version'' means the combination of - the Original Code, prior Modifications used by - a Contributor, and the Modifications made by that - particular Contributor. - - 1.3. ''Covered Code'' means the Original Code or - Modifications or the combination of the Original Code - and Modifications, in each case including portions - thereof. - - 1.4. ''Electronic Distribution Mechanism'' means a - mechanism generally accepted in the software - development community for the electronic transfer of - data. - - 1.5. ''Executable'' means Covered Code in any form - other than Source Code. - - 1.6. ''Initial Developer'' means the individual or - entity identified as the Initial Developer in the - Source Code notice required by Exhibit A. - - 1.7. ''Larger Work'' means a work which combines - Covered Code or portions thereof with code not - governed by the terms of this License. - - 1.8. ''License'' means this document. - - 1.8.1. "Licensable" means having the right to grant, - to the maximum extent possible, whether at the time of - the initial grant or subsequently acquired, any and - all of the rights conveyed herein. - - 1.9. ''Modifications'' means any addition to or - deletion from the substance or structure of either the - Original Code or any previous Modifications. When - Covered Code is released as a series of files, a - Modification is: - - A. Any addition to or deletion from the contents - of a file containing Original Code or previous - Modifications. - - B. Any new file that contains any part of the - Original Code or previous Modifications. - - 1.10. ''Original Code'' means Source Code of computer - software code which is described in the Source Code - notice required by Exhibit A as Original Code, and - which, at the time of its release under this License - is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now - owned or hereafter acquired, including without - limitation, method, process, and apparatus claims, in - any patent Licensable by grantor. - - 1.11. ''Source Code'' means the preferred form of the - Covered Code for making modifications to it, including - all modules it contains, plus any associated interface - definition files, scripts used to control compilation - and installation of an Executable, or source code - differential comparisons against either the Original - Code or another well known, available Covered Code of - the Contributor's choice. The Source Code can be in a - compressed or archival form, provided the appropriate - decompression or de-archiving software is widely - available for no charge. - - 1.12. "You'' (or "Your") means an individual or a - legal entity exercising rights under, and complying - with all of the terms of, this License or a future - version of this License issued under Section 6.1. For - legal entities, "You'' includes any entity which - controls, is controlled by, or is under common control - with You. For purposes of this definition, "control'' - means (a) the power, direct or indirect, to cause the - direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than - fifty percent (50%) of the outstanding shares or - beneficial ownership of such entity. - - -2. Source Code License. - - 2.1. The Initial Developer Grant. - The Initial Developer hereby grants You a world-wide, - royalty-free, non-exclusive license, subject to third - party intellectual property claims: - (a) under intellectual property rights (other - than patent or trademark) Licensable by Initial - Developer to use, reproduce, modify, display, - perform, sublicense and distribute the Original - Code (or portions thereof) with or without - Modifications, and/or as part of a Larger Work; - and - - (b) under Patents Claims infringed by the making, - using or selling of Original Code, to make, have - made, use, practice, sell, and offer for sale, - and/or otherwise dispose of the Original Code (or - portions thereof). - - (c) the licenses granted in this Section 2.1(a) - and (b) are effective on the date Initial - Developer first distributes Original Code under - the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no - patent license is granted: 1) for code that You - delete from the Original Code; 2) separate from - the Original Code; or 3) for infringements - caused by: i) the modification of the Original - Code or ii) the combination of the Original Code - with other software or devices. - - 2.2. Contributor Grant. - Subject to third party intellectual property claims, - each Contributor hereby grants You a world-wide, - royalty-free, non-exclusive license - - (a) under intellectual property rights (other - than patent or trademark) Licensable by - Contributor, to use, reproduce, modify, display, - perform, sublicense and distribute the - Modifications created by such Contributor (or - portions thereof) either on an unmodified basis, - with other Modifications, as Covered Code and/or - as part of a Larger Work; - and - - (b) under Patent Claims infringed by the making, - using, or selling of Modifications made by that - Contributor either alone and/or in combination - with its Contributor Version (or portions of such - combination), to make, use, sell, offer for sale, - have made, and/or otherwise dispose of: 1) - Modifications made by that Contributor (or - portions thereof); and 2) the combination of - Modifications made by that Contributor with its - Contributor Version (or portions of such - combination). - - (c) the licenses granted in Sections 2.2(a) and - 2.2(b) are effective on the date Contributor - first makes Commercial Use of the Covered Code. - - (d) Notwithstanding Section 2.2(b) above, no - patent license is granted: 1) for any code that - Contributor has deleted from the Contributor - Version; 2) separate from the Contributor - Version; 3) for infringements caused by: i) - third party modifications of Contributor Version - or ii) the combination of Modifications made by - that Contributor with other software (except as - part of the Contributor Version) or other - devices; or 4) under Patent Claims infringed by - Covered Code in the absence of Modifications made - by that Contributor. - - -3. Distribution Obligations. - - 3.1. Application of License. - The Modifications which You create or to which You - contribute are governed by the terms of this License, - including without limitation Section 2.2. The Source - Code version of Covered Code may be distributed only - under the terms of this License or a future version of - this License released under Section 6.1, and You must - include a copy of this License with every copy of the - Source Code You distribute. You may not offer or - impose any terms on any Source Code version that - alters or restricts the applicable version of this - License or the recipients' rights hereunder. However, - You may include an additional document offering the - additional rights described in Section 3.5. - - 3.2. Availability of Source Code. - Any Modification which You create or to which You - contribute must be made available in Source Code form - under the terms of this License either on the same - media as an Executable version or via an accepted - Electronic Distribution Mechanism to anyone to whom - you made an Executable version available; and if made - available via Electronic Distribution Mechanism, must - remain available for at least twelve (12) months after - the date it initially became available, or at least - six (6) months after a subsequent version of that - particular Modification has been made available to - such recipients. You are responsible for ensuring that - the Source Code version remains available even if the - Electronic Distribution Mechanism is maintained by a - third party. - - 3.3. Description of Modifications. - You must cause all Covered Code to which You - contribute to contain a file documenting the changes - You made to create that Covered Code and the date of - any change. You must include a prominent statement - that the Modification is derived, directly or - indirectly, from Original Code provided by the Initial - Developer and including the name of the Initial - Developer in (a) the Source Code, and (b) in any - notice in an Executable version or related - documentation in which You describe the origin or - ownership of the Covered Code. - - 3.4. Intellectual Property Matters - (a) Third Party Claims. - If Contributor has knowledge that a license under - a third party's intellectual property rights is - required to exercise the rights granted by such - Contributor under Sections 2.1 or 2.2, - Contributor must include a text file with the - Source Code distribution titled "LEGAL'' which - describes the claim and the party making the - claim in sufficient detail that a recipient will - know whom to contact. If Contributor obtains such - knowledge after the Modification is made - available as described in Section 3.2, - Contributor shall promptly modify the LEGAL file - in all copies Contributor makes available - thereafter and shall take other steps (such as - notifying appropriate mailing lists or - newsgroups) reasonably calculated to inform those - who received the Covered Code that new knowledge - has been obtained. - - (b) Contributor APIs. - If Contributor's Modifications include an - application programming interface and Contributor - has knowledge of patent licenses which are - reasonably necessary to implement that API, - Contributor must also include this information in - the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed - pursuant to Section 3.4(a) above, Contributor - believes that Contributor's Modifications are - Contributor's original creation(s) and/or - Contributor has sufficient rights to grant the - rights conveyed by this License. - - 3.5. Required Notices. - You must duplicate the notice in Exhibit A in each - file of the Source Code. If it is not possible to put - such notice in a particular Source Code file due to - its structure, then You must include such notice in a - location (such as a relevant directory) where a user - would be likely to look for such a notice. If You - created one or more Modification(s) You may add your - name as a Contributor to the notice described in - Exhibit A. You must also duplicate this License in - any documentation for the Source Code where You - describe recipients' rights or ownership rights - relating to Covered Code. You may choose to offer, - and to charge a fee for, warranty, support, indemnity - or liability obligations to one or more recipients of - Covered Code. However, You may do so only on Your own - behalf, and not on behalf of the Initial Developer or - any Contributor. You must make it absolutely clear - than any such warranty, support, indemnity or - liability obligation is offered by You alone, and You - hereby agree to indemnify the Initial Developer and - every Contributor for any liability incurred by the - Initial Developer or such Contributor as a result of - warranty, support, indemnity or liability terms You - offer. - - 3.6. Distribution of Executable Versions. - You may distribute Covered Code in Executable form - only if the requirements of Section 3.1-3.5 have been - met for that Covered Code, and if You include a notice - stating that the Source Code version of the Covered - Code is available under the terms of this License, - including a description of how and where You have - fulfilled the obligations of Section 3.2. The notice - must be conspicuously included in any notice in an - Executable version, related documentation or - collateral in which You describe recipients' rights - relating to the Covered Code. You may distribute the - Executable version of Covered Code or ownership rights - under a license of Your choice, which may contain - terms different from this License, provided that You - are in compliance with the terms of this License and - that the license for the Executable version does not - attempt to limit or alter the recipient's rights in - the Source Code version from the rights set forth in - this License. If You distribute the Executable version - under a different license You must make it absolutely - clear that any terms which differ from this License - are offered by You alone, not by the Initial Developer - or any Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any - liability incurred by the Initial Developer or such - Contributor as a result of any such terms You offer. - - 3.7. Larger Works. - You may create a Larger Work by combining Covered Code - with other code not governed by the terms of this - License and distribute the Larger Work as a single - product. In such a case, You must make sure the - requirements of this License are fulfilled for the - Covered Code. - - -4. Inability to Comply Due to Statute or Regulation. - - If it is impossible for You to comply with any of the - terms of this License with respect to some or all of - the Covered Code due to statute, judicial order, or - regulation then You must: (a) comply with the terms of - this License to the maximum extent possible; and (b) - describe the limitations and the code they affect. - Such description must be included in the LEGAL file - described in Section 3.4 and must be included with all - distributions of the Source Code. Except to the extent - prohibited by statute or regulation, such description - must be sufficiently detailed for a recipient of - ordinary skill to be able to understand it. - - -5. Application of this License. - - This License applies to code to which the Initial - Developer has attached the notice in Exhibit A and to - related Covered Code. - - -6. Versions of the License. - - 6.1. New Versions. - Netscape Communications Corporation (''Netscape'') may - publish revised and/or new versions of the License - from time to time. Each version will be given a - distinguishing version number. - - 6.2. Effect of New Versions. - Once Covered Code has been published under a - particular version of the License, You may always - continue to use it under the terms of that version. - You may also choose to use such Covered Code under the - terms of any subsequent version of the License - published by Netscape. No one other than Netscape has - the right to modify the terms applicable to Covered - Code created under this License. - - 6.3. Derivative Works. - If You create or use a modified version of this - License (which you may only do in order to apply it to - code which is not already Covered Code governed by - this License), You must (a) rename Your license so - that the phrases ''Mozilla'', ''MOZILLAPL'', - ''MOZPL'', ''Netscape'', "MPL", ''NPL'' or any - confusingly similar phrase do not appear in your - license (except to note that your license differs from - this License) and (b) otherwise make it clear that - Your version of the license contains terms which - differ from the Mozilla Public License and Netscape - Public License. (Filling in the name of the Initial - Developer, Original Code or Contributor in the notice - described in Exhibit A shall not of themselves be - deemed to be modifications of this License.) - - -7. DISCLAIMER OF WARRANTY. - - COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS - IS'' BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER - EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, - WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, - MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON- - INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND - PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD - ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU - (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) - ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR - CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN - ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED - CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS - DISCLAIMER. - - -8. TERMINATION. - - 8.1. This License and the rights granted hereunder - will terminate automatically if You fail to comply - with terms herein and fail to cure such breach within - 30 days of becoming aware of the breach. All - sublicenses to the Covered Code which are properly - granted shall survive any termination of this License. - Provisions which, by their nature, must remain in - effect beyond the termination of this License shall - survive. - - 8.2. If You initiate litigation by asserting a patent - infringement claim (excluding declatory judgment - actions) against Initial Developer or a Contributor - (the Initial Developer or Contributor against whom You - file such action is referred to as "Participant") - alleging that: - - (a) such Participant's Contributor Version directly - or indirectly infringes any patent, then any and all - rights granted by such Participant to You under - Sections 2.1 and/or 2.2 of this License shall, upon 60 - days notice from Participant terminate prospectively, - unless if within 60 days after receipt of notice You - either: (i) agree in writing to pay Participant a - mutually agreeable reasonable royalty for Your past - and future use of Modifications made by such - Participant, or (ii) withdraw Your litigation claim - with respect to the Contributor Version against such - Participant. If within 60 days of notice, a - reasonable royalty and payment arrangement are not - mutually agreed upon in writing by the parties or the - litigation claim is not withdrawn, the rights granted - by Participant to You under Sections 2.1 and/or 2.2 - automatically terminate at the expiration of the 60 - day notice period specified above. - - (b) any software, hardware, or device, other than - such Participant's Contributor Version, directly or - indirectly infringes any patent, then any rights - granted to You by such Participant under Sections 2.1 - (b) and 2.2(b) are revoked effective as of the date - You first made, used, sold, distributed, or had made, - Modifications made by that Participant. - - 8.3. If You assert a patent infringement claim - against Participant alleging that such Participant's - Contributor Version directly or indirectly infringes - any patent where such claim is resolved (such as by - license or settlement) prior to the initiation of - patent infringement litigation, then the reasonable - value of the licenses granted by such Participant - under Sections 2.1 or 2.2 shall be taken into account - in determining the amount or value of any payment or - license. - - 8.4. In the event of termination under Sections 8.1 - or 8.2 above, all end user license agreements - (excluding distributors and resellers) which have been - validly granted by You or any distributor hereunder - prior to termination shall survive termination. - - -9. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, - WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR - OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER - CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR - ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY - PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, - WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK - STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND - ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH - PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF - SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT - APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY - RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT - APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME - JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION - OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS - EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - - -10. U.S. GOVERNMENT END USERS. - - The Covered Code is a ''commercial item,'' as that - term is defined in 48 C.F.R. 2.101 (Oct. 1995), - consisting of ''commercial computer software'' and - ''commercial computer software documentation,'' as - such terms are used in 48 C.F.R. 12.212 (Sept. 1995). - Consistent with 48 C.F.R. 12.212 and 48 C.F.R. - 227.7202-1 through 227.7202-4 (June 1995), all U.S. - Government End Users acquire Covered Code with only - those rights set forth herein. - - -11. MISCELLANEOUS. - - This License represents the complete agreement - concerning subject matter hereof. If any provision of - this License is held to be unenforceable, such - provision shall be reformed only to the extent - necessary to make it enforceable. This License shall - be governed by California law provisions (except to - the extent applicable law, if any, provides - otherwise), excluding its conflict-of-law provisions. - With respect to disputes in which at least one party - is a citizen of, or an entity chartered or registered - to do business in the United States of America, any - litigation relating to this License shall be subject - to the jurisdiction of the Federal Courts of the - Northern District of California, with venue lying in - Santa Clara County, California, with the losing party - responsible for costs, including without limitation, - court costs and reasonable attorneys' fees and - expenses. The application of the United Nations - Convention on Contracts for the International Sale of - Goods is expressly excluded. Any law or regulation - which provides that the language of a contract shall - be construed against the drafter shall not apply to - this License. - - -12. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, - each party is responsible for claims and damages - arising, directly or indirectly, out of its - utilization of rights under this License and You agree - to work with Initial Developer and Contributors to - distribute such responsibility on an equitable basis. - Nothing herein is intended or shall be deemed to - constitute any admission of liability. - - -13. MULTIPLE-LICENSED CODE. - - Initial Developer may designate portions of the - Covered Code as Multiple-Licensed. Multiple-Licensed - means that the Initial Developer permits you to - utilize portions of the Covered Code under Your choice - of the NPL or the alternative licenses, if any, - specified by the Initial Developer in the file - described in Exhibit A. - - - -EXHIBIT A - Mozilla Public License. - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the License. - - The Original Code is ______________________________________. - - The Initial Developer of the Original Code is - ________________________. - Portions created by ______________________ are Copyright (C) ______ - _______________________. All Rights Reserved. - - Contributor(s): ______________________________________. - - Alternatively, the contents of this file may be used under the terms of - the _____ license (the [___] License), in which case the provisions of - [______] License are applicable instead of those above. If you wish to - allow use of your version of this file only under the terms of the [____] - License and not to allow others to use your version of this file under - the MPL, indicate your decision by deleting the provisions above and - replace them with the notice and other provisions required by the [___] - License. If you do not delete the provisions above, a recipient may use - your version of this file under either the MPL or the [___] License. - - [NOTE: The text of this Exhibit A may differ slightly from the text of - the notices in the Source Code files of the Original Code. You should use - the text of this Exhibit A rather than the text found in the Original Code - Source Code for Your Modifications.] - diff --git a/externals/vegas/README b/externals/vegas/README deleted file mode 100644 index 1e7a2b7099..0000000000 --- a/externals/vegas/README +++ /dev/null @@ -1,29 +0,0 @@ -VEGAS AS3 - version 1.8.5.2228 - -The "vegas.swc" library contains all the AS3 source code of the VEGAS project with all this extensions. - -LICENCE - - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - -PROJECT PAGES - - * http://code.google.com/p/vegas/ - -DOCUMENTATION & CO - - * http://code.google.com/p/vegas/ (tutorials and install) - * http://code.google.com/p/vegas/issues/list (issues) - * http://www.ekameleon.net/vegas/docs - - * http://www.ekameleon.net/blog/ (french blog) - -ABOUT AUTHOR - - * Author : ALCARAZ Marc (eKameleon) - * Link : http://www.ekameleon.net/blog - * Mail : ekameleon@gmail.com - -NOTES - -The vegas.swc file target now the FlashPlayer 10.2 and build with the Flex SDK 4.5.0.19786. \ No newline at end of file diff --git a/externals/vegas/src/system/Serializer.as b/externals/vegas/src/system/Serializer.as deleted file mode 100644 index afeb63dfcb..0000000000 --- a/externals/vegas/src/system/Serializer.as +++ /dev/null @@ -1,86 +0,0 @@ -/* - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the - License. - - The Original Code is [maashaack framework]. - - The Initial Developers of the Original Code are - Zwetan Kjukov and Marc Alcaraz . - Portions created by the Initial Developers are Copyright (C) 2006-2011 - the Initial Developers. All Rights Reserved. - - Contributor(s): - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your - decision by deleting the provisions above and replace them with the notice - and other provisions required by the LGPL or the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the MPL, the GPL or the LGPL. -*/ - -package system -{ - - /** - * Defines what a Serializer have to implements to be integrated in the framework. - *

Note : Every serializers (eden, json, wddx, etc.) should implement it.

- */ - public interface Serializer - { - /** - * The prettyIndent value of the serializer. - */ - function get prettyIndent():int; - - /** - * @private - */ - function set prettyIndent( value:int ):void; - - /** - * The prettyPrinting value of the serializer. - */ - function get prettyPrinting():Boolean; - - /** - * @private - */ - function set prettyPrinting( value:Boolean ):void; - - /** - * The identor String value of the serializer. - */ - function get indentor():String; - - /** - * @private - */ - function set indentor( value:String ):void; - - /** - * Deserialize the specified String source representation. - */ - function deserialize( source:String ):*; - - /** - * Serialize the specified object. - */ - function serialize( value:* ):String; - } -} - diff --git a/externals/vegas/src/vegas/strings/JSON.as b/externals/vegas/src/vegas/strings/JSON.as deleted file mode 100644 index 8dcb4ff95f..0000000000 --- a/externals/vegas/src/vegas/strings/JSON.as +++ /dev/null @@ -1,107 +0,0 @@ -/* - - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the License. - - The Original Code is VEGAS Framework. - - The Initial Developer of the Original Code is - ALCARAZ Marc (aka eKameleon) . - Portions created by the Initial Developer are Copyright (C) 2004-2011 - the Initial Developer. All Rights Reserved. - - Contributor(s) : - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your - decision by deleting the provisions above and replace them with the notice - and other provisions required by the LGPL or the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the MPL, the GPL or the LGPL. - -*/ -package vegas.strings -{ - import vegas.strings.json.JSONSerializer; - - /** - * JSON (JavaScript object Notation) is a lightweight data-interchange format. - *

More information in the official site : http://www.JSON.org

- *

Add Hexa Digits tool in deserialize method - eden inspiration

- * - * @example Example - * - * - * import core.getClassName ; - * - * import vegas.strings.JSON; - * import vegas.strings.errors.JSONError; - * - * // --- Init - * - * var a:Array = [2, true, "hello"] ; - * var o:Object = { prop1 : 1 , prop2 : 2 } ; - * var s:String = "hello world" ; - * var n:Number = 4 ; - * var b:Boolean = true ; - * - * trace("# Serialize \r") ; - * - * trace("- a : " + JSON.serialize( a ) ) ; - * trace("- o : " + JSON.serialize( o ) ) ; - * trace("- s : " + JSON.serialize( s ) ) ; - * trace("- n : " + JSON.serialize( n ) ) ; - * trace("- b : " + JSON.serialize( b ) ) ; - * - * trace ("\r# Deserialize \r") ; - * - * var source:String = '[ { "prop1" : 0xFF0000 , prop2:2, prop3:"hello", prop4:true} , 2, true, 3, [3, 2] ]' ; - * - * o = JSON.deserialize(source) ; - * - * var l:uint = o.length ; - * for (var i:uint = 0 ; i < l ; i++) - * { - * trace("> " + i + " : " + o[i] + " -> typeof :: " + typeof(o[i])) ; - * if (typeof(o[i]) == "object") - * { - * for (var each:String in o[i]) - * { - * trace(" > " + each + " : " + o[i][each] + " :: " + getClassName(o[i][each]) ) ; - * } - * } - * } - * - * trace ("\r# JSONError \r") ; - * - * source = "[3, 2," ; // test1 - * - * // var source:String = '{"prop1":coucou"}' ; // test2 - * - * try - * { - * var errorObj:Object = JSON.deserialize(source) ; - * } - * catch( e:JSONError ) - * { - * trace( e.toString() ) ; - * } - * - * - */ - public var JSON:JSONSerializer = new JSONSerializer() ; -} \ No newline at end of file diff --git a/externals/vegas/src/vegas/strings/json/JSONError.as b/externals/vegas/src/vegas/strings/json/JSONError.as deleted file mode 100644 index 0e1b20dfaf..0000000000 --- a/externals/vegas/src/vegas/strings/json/JSONError.as +++ /dev/null @@ -1,84 +0,0 @@ -/* - - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the License. - - The Original Code is VEGAS Framework. - - The Initial Developer of the Original Code is - ALCARAZ Marc (aka eKameleon) . - Portions created by the Initial Developer are Copyright (C) 2004-2011 - the Initial Developer. All Rights Reserved. - - Contributor(s) : - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your - decision by deleting the provisions above and replace them with the notice - and other provisions required by the LGPL or the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the MPL, the GPL or the LGPL. - -*/ - -package vegas.strings.json -{ - /** - * This JSONError is throw in the JSON static methods. - */ - public class JSONError extends Error - { - /** - * Creates a new JSONError instance. - */ - public function JSONError( message:String, at:uint, source:String , id:int=0 ) - { - super( message , id ); - name = "JSONError" ; - this.at = at ; - this.source = source ; - } - - /** - * The position of char with an error parsing in the JSON String representation. - */ - public var at:uint ; - - /** - * The source ot the bad parsing. - */ - public var source:String ; - - /** - * Returns a String representation of the object. - * @return a String representation of the object. - */ - public function toString():String - { - var msg:String = "## " + name + " : " + message + " ##" ; - if (!isNaN(at)) - { - msg += ", at:" + at ; - } - if ( source != null ) - { - msg += " in \"" + source + "\""; - } - return msg ; - } - } -} \ No newline at end of file diff --git a/externals/vegas/src/vegas/strings/json/JSONSerializer.as b/externals/vegas/src/vegas/strings/json/JSONSerializer.as deleted file mode 100644 index 5da0afe267..0000000000 --- a/externals/vegas/src/vegas/strings/json/JSONSerializer.as +++ /dev/null @@ -1,757 +0,0 @@ -/* - - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the License. - - The Original Code is VEGAS Framework. - - The Initial Developer of the Original Code is - ALCARAZ Marc (aka eKameleon) . - Portions created by the Initial Developer are Copyright (C) 2004-2011 - the Initial Developer. All Rights Reserved. - - Contributor(s) : - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your - decision by deleting the provisions above and replace them with the notice - and other provisions required by the LGPL or the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the MPL, the GPL or the LGPL. - -*/ - -package vegas.strings.json -{ - import system.Serializer; - - /** - * This class is the concrete class of the JSON singleton. - * JSON (JavaScript object Notation) is a lightweight data-interchange format. - *

More information in the official site : http://www.JSON.org

- *

Add Hexa Digits tool in deserialize method - eden inspiration

- *

Example :

- *
-     * import core.getClassName ;
-     * 
-     * import vegas.strings.JSON;
-     * import vegas.strings.JSONError;
-     * 
-     * // --- Init
-     * 
-     * var a:Array   = [2, true, "hello"] ;
-     * var o:Object  = { prop1 : 1 , prop2 : 2 } ;
-     * var s:String  = "hello world" ;
-     * var n:Number  = 4 ;
-     * var b:Boolean = true ;
-     * 
-     * trace("Serialize") ;
-     * 
-     * trace("- a : " + JSON.serialize( a ) )  ;
-     * trace("- o : " + JSON.serialize( o ) )  ;
-     * trace("- s : " + JSON.serialize( s ) )  ;
-     * trace("- n : " + JSON.serialize( n ) )  ;
-     * trace("- b : " + JSON.serialize( b ) )  ;
-     * 
-     * trace ("Deserialize") ;
-     * 
-     * var source:String = '[ { "prop1" : 0xFF0000 , prop2:2, prop3:"hello", prop4:true} , 2, true, 3, [3, 2] ]' ;
-     * 
-     * o = JSON.deserialize(source) ;
-     * 
-     * var l:uint = o.length ;
-     * for (var i:uint = 0 ; i < l ; i++)
-     * {
-     *     trace("- " + i + " : " + o[i] + " , typeof :: " + typeof(o[i])) ;
-     *     if (typeof(o[i]) == "object")
-     *     {
-     *         for (var each:String in o[i])
-     *         {
-     *             trace("    + " + each + " : " + o[i][each] + " :: " + getClassName(o[i][each]) ) ;
-     *         }
-     *     }
-     * }
-     * 
-     * trace ("JSONError") ;
-     * 
-     * source = "[3, 2," ; // test1
-     * 
-     * // var source:String = '{"prop1":coucou"}' ; // test2
-     * 
-     * try
-     * {
-     *    var errorObj:Object = JSON.deserialize(source) ;
-     * }
-     * catch( e:JSONError )
-     * {
-     *     trace( e.toString() ) ;
-     * }
-     * 
- */ - public class JSONSerializer implements Serializer - { - /** - * Creates a new JSONSerializer instance. - */ - public function JSONSerializer() - { - // - } - - /** - * The source to evaluate. - */ - public var source:String ; - - /** - * Indicates the indentor string representation. - */ - public function get indentor():String - { - return _indentor; - } - - /** - * @private - */ - public function set indentor(value:String):void - { - _indentor = value; - } - - /** - * Indicates the pretty indent value. - */ - public function get prettyIndent():int - { - return _prettyIndent; - } - - /** - * @private - */ - public function set prettyIndent(value:int):void - { - _prettyIndent = value ; - } - - /** - * Indicates the pretty printing flag value. - */ - public function get prettyPrinting():Boolean - { - return _prettyPrinting ; - } - - /** - * @private - */ - public function set prettyPrinting(value:Boolean):void - { - _prettyPrinting = value; - } - - /** - * Parse a string and interpret the source code to the correct object construct. - *

Example :

- *
-         * "hello world" --> "hello world"
-         * "0xFF"        --> 255
-         * "{a:1,"b":2}" --> {a:1,b:2}
-         * 
- * @return a string representing the data. - */ - public function deserialize( source:String ):* - { - this.source = source ; - at = 0 ; - ch = ' ' ; - return value() ; - } - - /** - * Serialize the specified value object passed-in argument. - */ - public function serialize( value:* ):String - { - var c:String ; // char - var i:int ; - var l:int ; - var s:String = '' ; - var v:* ; - var tof:String = typeof(value) ; - switch (tof) - { - case 'object' : - { - if (value) - { - if (value is Array) - { - l = (value as Array).length ; - for (i = 0 ; i < l ; ++i) - { - v = serialize(value[i]); - if (s) s += ',' ; - s += v ; - } - return '[' + s + ']'; - } - else if ( typeof( value.toString ) != 'undefined') - { - for (var prop:String in value) - { - v = value[prop]; - if ( (typeof(v) != 'undefined') && (typeof(v) != 'function') ) - { - v = serialize(v); - if (s) - { - s += ',' ; - } - s += serialize(prop) + ':' + v ; - } - } - return "{" + s + "}"; - } - } - return 'null'; - } - case 'number': - { - return isFinite(value) ? String(value) : 'null' ; - } - case 'string' : - { - l = (value as String).length ; - s = '"' ; - for (i = 0 ; i < l ; i += 1) - { - c = (value as String).charAt(i) ; - if (c >= ' ') - { - if (c == '\\' || c == '"') - { - s += '\\'; - } - s += c; - } - else - { - switch (c) - { - case '\b': - { - s += '\\b'; - break ; - } - case '\f' : - { - s += '\\f' ; - break ; - } - case '\n' : - { - s += '\\n' ; - break ; - } - case '\r': - { - s += '\\r' ; - break ; - } - case '\t': - { - s += '\\t' ; - break ; - } - default: - { - var code:Number = c.charCodeAt() ; - s += '\\u00' + String(Math.floor(code / 16).toString(16)) + ((code % 16).toString(16)) ; - } - } - } - } - return s + '"' ; - } - case 'boolean' : - { - return String(value); - } - default : - { - return 'null'; - } - } - } - - /** - * The current position of the iterator in the source. - */ - protected var at:Number = 0 ; - - /** - * The current character of the iterator in the source. - */ - protected var ch:String = ' ' ; - - /** - * Check the Array objects in the source expression. - */ - protected function array():Array - { - var a:Array = []; - if ( ch == '[' ) - { - next() ; - white() ; - if (ch == ']') - { - next(); - return a; - } - while (ch) - { - a.push( value() ) ; - white(); - if (ch == ']') - { - next(); - return a; - } - else if (ch != ',') - { - break; - } - next(); - white(); - } - } - error( JSONStrings.badArray ); - return null ; - } - - /** - * Throws a JSONError with the passed-in message. - */ - protected function error( m:String ):void - { - throw new JSONError( m, at - 1 , source) ; - } - - /** - * Indicates if the passed-in character is a digit. - */ - protected function isDigit( c:String ):Boolean - { - return( ("0" <= c) && (c <= "9") ); - } - - /** - * Indicates if the passed-in character is a hexadecimal digit. - */ - protected function isHexDigit( c:String ):Boolean - { - return( isDigit( c ) || (("A" <= c) && (c <= "F")) || (("a" <= c) && (c <= "f")) ); - } - - /** - * Indicates if the current character is a key. - */ - protected function key():* - { - var s:String = ch ; - var semiColon:int = source.indexOf( ':' , at ) ; - var quoteIndex:int = source.indexOf( '"' , at ) ; - var squoteIndex:int = source.indexOf( "'" , at ) ; - if( (quoteIndex <= semiColon && quoteIndex > -1) || (squoteIndex <= semiColon && squoteIndex > -1)) - { - s = string() ; - white() ; - if(ch == ':') - { - return s; - } - else - { - error(JSONStrings.badKey); - } - } - while ( next() ) // Use key handling - { - if (ch == ':') - { - return s; - } - if(ch <= ' ') - { - // - } - else - { - s += ch; - } - } - error( JSONStrings.badKey ) ; - } - - /** - * Returns the next character in the source String representation. - * @return the next character in the source String representation. - */ - protected function next():String - { - ch = source.charAt(at); - at += 1; - return ch; - } - - /** - * Check the Number values in the source expression. - */ - protected function number():* - { - - var n:* = '' ; - var v:* ; - var hex:String = '' ; - var sign:String = '' ; - if (ch == '-') - { - n = '-'; - sign = n ; - next(); - } - if( ch == "0" ) - { - next() ; - if( ( ch == "x") || ( ch == "X") ) - { - next(); - while( isHexDigit( ch ) ) - { - hex += ch ; - next(); - } - if( hex == "" ) - { - error(JSONStrings.malFormedHexadecimal) ; - } - else - { - return Number( sign + "0x" + hex ) ; - } - } - else - { - n += "0" ; - } - } - while ( isDigit(ch) ) - { - n += ch ; - next() ; - } - if (ch == '.') - { - n += '.'; - while (next() && ch >= '0' && ch <= '9') - { - n += ch ; - } - } - v = 1 * n ; - if (!isFinite(v)) - { - error( JSONStrings.badNumber ); - } - else - { - return v ; - } - return NaN ; - } - - /** - * Check the Object values in the source expression. - */ - protected function object():* - { - var k:* = {} ; - var o:* = {} ; - if (ch == '{') - { - next(); - white(); - if (ch == '}') - { - next() ; - return o ; - } - while (ch) - { - k = key() ; - white(); - if (ch != ':') - { - break; - } - next(); - o[k] = value() ; - white(); - if (ch == '}') - { - next(); - return o; - } - else if (ch != ',') - { - break; - } - next(); - white(); - } - } - error( JSONStrings.badObject ) ; - } - - /** - * Check the string objects in the source expression. - */ - protected function string():* - { - var i:* = '' ; - var s:* = '' ; - var t:* ; - var u:* ; - var outer:Boolean ; - if (ch == '"' || ch == "'" ) - { - var outerChar:String = ch ; - while ( next() ) - { - if (ch == outerChar) - { - next() ; - return s ; - } - else if (ch == '\\') - { - switch ( next() ) - { - case 'b': - { - s += '\b' ; - break ; - } - case 'f' : - { - s += '\f'; - break ; - } - case 'n': - { - s += '\n'; - break ; - } - case 'r' : - { - s += '\r'; - break ; - } - case 't' : - { - s += '\t' ; - break ; - } - case 'u' : - { - u = 0; - for (i = 0; i < 4; i += 1) - { - t = parseInt( next() , 16 ) ; - if (!isFinite(t)) - { - outer = true; - break; - } - u = u * 16 + t; - } - if(outer) - { - outer = false; - break; - } - s += String.fromCharCode(u); - break; - } - default : - { - s += ch; - } - } - } - else - { - s += ch; - } - } - } - error( JSONStrings.badString ); - return null ; - } - - /** - * Evaluates the values in the source expression. - */ - protected function value():* - { - white() ; - if (ch == '{' ) - { - return object(); - } - else if ( ch == '[' ) - { - return array(); - } - else if ( ch == '"' || ch == "'" ) - { - return string(); - } - else if ( ch == '-' ) - { - return number(); - } - else - { - return ( ch >= '0' && ch <= '9' ) ? number() : word() ; - } - } - - /** - * Check all white spaces. - */ - protected function white():void - { - while (ch) - { - if (ch <= ' ') - { - next(); - } - else if (ch == '/') - { - switch ( next() ) - { - case '/' : - { - while ( next() && ch != '\n' && ch != '\r') - { - } - break; - } - case '*' : - { - next(); - for (;;) - { - if (ch) - { - if (ch == '*') - { - if ( next() == '/' ) - { - next(); - break; - } - } - else - { - next(); - } - } - else - { - error( JSONStrings.unterminatedComment ); - } - } - break ; - } - default : - { - error( JSONStrings.syntaxError ); - } - } - } - else - { - break ; - } - } - } - - /** - * Check all special words in the source to evaluate. - */ - protected function word():* - { - if (ch == 't') - { - if (next() == 'r' && next() == 'u' && next() == 'e') - { - next() ; - return true ; - } - } - else if ( ch == 'f' ) - { - if (next() == 'a' && next() == 'l' && next() == 's' && next() == 'e') - { - next() ; - return false ; - } - } - else if ( ch == 'n' ) - { - if (next() == 'u' && next() == 'l' && next() == 'l') - { - next() ; - return null ; - } - } - error( JSONStrings.syntaxError ); - return null ; - } - - /** - * @private - */ - private var _prettyIndent:int = 0 ; - - /** - * @private - */ - private var _prettyPrinting:Boolean ; - - /** - * @private - */ - private var _indentor:String = " " ; - } -} diff --git a/externals/vegas/src/vegas/strings/json/JSONStrings.as b/externals/vegas/src/vegas/strings/json/JSONStrings.as deleted file mode 100644 index 042876a694..0000000000 --- a/externals/vegas/src/vegas/strings/json/JSONStrings.as +++ /dev/null @@ -1,85 +0,0 @@ -/* - - Version: MPL 1.1/GPL 2.0/LGPL 2.1 - - The contents of this file are subject to the Mozilla Public License Version - 1.1 (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.mozilla.org/MPL/ - - Software distributed under the License is distributed on an "AS IS" basis, - WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - for the specific language governing rights and limitations under the License. - - The Original Code is VEGAS Framework. - - The Initial Developer of the Original Code is - ALCARAZ Marc (aka eKameleon) . - Portions created by the Initial Developer are Copyright (C) 2004-2011 - the Initial Developer. All Rights Reserved. - - Contributor(s) : - - Alternatively, the contents of this file may be used under the terms of - either the GNU General Public License Version 2 or later (the "GPL"), or - the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - in which case the provisions of the GPL or the LGPL are applicable instead - of those above. If you wish to allow use of your version of this file only - under the terms of either the GPL or the LGPL, and not to allow others to - use your version of this file under the terms of the MPL, indicate your - decision by deleting the provisions above and replace them with the notice - and other provisions required by the LGPL or the GPL. If you do not delete - the provisions above, a recipient may use your version of this file under - the terms of any one of the MPL, the GPL or the LGPL. - -*/ - -package vegas.strings.json -{ - /** - * The string messages used in the JSON class. - */ - public class JSONStrings - { - /** - * The bad Array error message. - */ - public static var badArray:String = "Bad Array" ; - - /** - * The bad key error message. - */ - public static var badKey:String = "Bad key" ; - - /** - * The bad Number error message. - */ - public static var badNumber:String = "Bad Number" ; - - /** - * The bad Object error message. - */ - public static var badObject:String = "Bad Object" ; - - /** - * The bad String error message. - */ - public static var badString:String = "Bad String" ; - - /** - * The mal formed Hexadecimal error message. - */ - public static var malFormedHexadecimal:String = "Mal formed Hexadecimal" ; - - /** - * The syntax error message. - */ - public static var syntaxError:String = "Syntax Error" ; - - /** - * The unterminated comment error message. - */ - public static var unterminatedComment:String = "Unterminated Comment" ; - } -} \ No newline at end of file diff --git a/externals/wordlist/LICENSE.txt b/externals/wordlist/LICENSE.txt new file mode 100644 index 0000000000..26d7b1666b --- /dev/null +++ b/externals/wordlist/LICENSE.txt @@ -0,0 +1,15 @@ +The following copyright statement applies to this wordlists collection as a whole: +Copyright (c) 2002,2003 by Solar Designer of Openwall Project + +The homepage URL for this wordlists collection is: + +http://www.openwall.com/wordlists/ + +You're allowed to use and redistribute this wordlists collection or parts thereof, with or without modification, provided that credit is given where it is due, any modified versions are marked as such, this license is kept intact and included with each copy, and NO FEE IS CHARGED FOR OBTAINING A COPY except as negotiated with the copyright holder. In particular, you are NOT permitted to charge for bandwidth, physical media, and/or shipping. You're also not permitted to bundle this wordlists collection with a product you charge for. + +If redistribution for a fee is what you're after, please contact the copyright holder to negotiate special terms for the downloadable or the extended CD-ready version of this collection. + +It was a significant amount of work to compile this collection and having a monopoly on regulating the CD sales is my way to compensate for the time already spent and to allow for further work. + +-- +Alexander Peslyak aka Solar Designer \ No newline at end of file diff --git a/externals/wordlist/password.lst b/externals/wordlist/password.lst new file mode 100644 index 0000000000..3c75bf2e05 --- /dev/null +++ b/externals/wordlist/password.lst @@ -0,0 +1,3557 @@ +#!comment: This list has been compiled by Solar Designer of Openwall Project, +#!comment: http://www.openwall.com/wordlists/ +#!comment: +#!comment: This list is based on passwords most commonly seen on a set of Unix +#!comment: systems in mid-1990's, sorted for decreasing number of occurrences +#!comment: (that is, more common passwords are listed first). It has been +#!comment: revised to also include common website passwords from public lists +#!comment: of "top N passwords" from major community website compromises that +#!comment: occurred in 2006 through 2010. +#!comment: +#!comment: Last update: 2011/11/20 (3546 entries) +123456 +12345 +password +password1 +123456789 +12345678 +1234567890 +abc123 +computer +tigger +1234 +qwerty +money +carmen +mickey +secret +summer +internet +a1b2c3 +123 +service + +canada +hello +ranger +shadow +baseball +donald +harley +hockey +letmein +maggie +mike +mustang +snoopy +buster +dragon +jordan +michael +michelle +mindy +patrick +123abc +andrew +bear +calvin +changeme +diamond +fuckme +fuckyou +matthew +miller +tiger +trustno1 +alex +apple +avalon +brandy +chelsea +coffee +falcon +freedom +gandalf +green +helpme +linda +magic +merlin +newyork +soccer +thomas +wizard +asdfgh +bandit +batman +boris +butthead +dorothy +eeyore +fishing +football +george +happy +iloveyou +jennifer +jonathan +love +marina +master +missy +monday +monkey +natasha +ncc1701 +pamela +pepper +piglet +poohbear +pookie +rabbit +rachel +rocket +rose +smile +sparky +spring +steven +success +sunshine +victoria +whatever +zapata +8675309 +amanda +andy +angel +august +barney +biteme +boomer +brian +casey +cowboy +delta +doctor +fisher +island +john +joshua +karen +marley +orange +please +rascal +richard +sarah +scooter +shalom +silver +skippy +stanley +taylor +welcome +zephyr +111111 +aaaaaa +access +albert +alexander +andrea +anna +anthony +asdfjkl; +ashley +basketball +beavis +black +bob +booboo +bradley +brandon +buddy +caitlin +camaro +charlie +chicken +chris +cindy +cricket +dakota +dallas +daniel +david +debbie +dolphin +elephant +emily +friend +fucker +ginger +goodluck +hammer +heather +iceman +jason +jessica +jesus +joseph +jupiter +justin +kevin +knight +lacrosse +lakers +lizard +madison +mary +mother +muffin +murphy +nirvana +paris +pentium +phoenix +picture +rainbow +sandy +saturn +scott +shannon +shithead +skeeter +sophie +special +stephanie +stephen +steve +sweetie +teacher +tennis +test +test123 +tommy +topgun +tristan +wally +william +wilson +1q2w3e +654321 +666666 +a12345 +a1b2c3d4 +alpha +amber +angela +angie +archie +asdf +blazer +bond007 +booger +charles +christin +claire +control +danny +david1 +dennis +digital +disney +edward +elvis +felix +flipper +franklin +frodo +honda +horses +hunter +indigo +james +jasper +jeremy +julian +kelsey +killer +lauren +marie +maryjane +matrix +maverick +mayday +mercury +mitchell +morgan +mountain +niners +nothing +oliver +peace +peanut +pearljam +phantom +popcorn +princess +psycho +pumpkin +purple +randy +rebecca +reddog +robert +rocky +roses +salmon +samson +sharon +sierra +smokey +startrek +steelers +stimpy +sunflower +superman +support +sydney +techno +walter +willie +willow +winner +ziggy +zxcvbnm +alaska +alexis +alice +animal +apples +barbara +benjamin +billy +blue +bluebird +bobby +bonnie +bubba +camera +chocolate +clark +claudia +cocacola +compton +connect +cookie +cruise +douglas +dreamer +dreams +duckie +eagles +eddie +einstein +enter +explorer +faith +family +ferrari +flamingo +flower +foxtrot +francis +freddy +friday +froggy +giants +gizmo +global +goofy +happy1 +hendrix +henry +herman +homer +honey +house +houston +iguana +indiana +insane +inside +irish +ironman +jake +jasmin +jeanne +jerry +joey +justice +katherine +kermit +kitty +koala +larry +leslie +logan +lucky +mark +martin +matt +minnie +misty +mitch +mouse +nancy +nascar +nelson +pantera +parker +penguin +peter +piano +pizza +prince +punkin +pyramid +raymond +robin +roger +rosebud +route66 +royal +running +sadie +sasha +security +sheena +sheila +skiing +snapple +snowball +sparrow +spencer +spike +star +stealth +student +sunny +sylvia +tamara +taurus +teresa +theresa +thunderbird +tigers +tony +toyota +travel +tuesday +victory +viper1 +wesley +whisky +winnie +winter +wolves +xyz123 +zorro +123123 +1234567 +696969 +888888 +Anthony +Joshua +Matthew +Tigger +aaron +abby +abcdef +adidas +adrian +alfred +arthur +athena +austin +awesome +badger +bamboo +beagle +bears +beatles +beautiful +beaver +benny +bigmac +bingo +bitch +blonde +boogie +boston +brenda +bright +bubba1 +bubbles +buffy +button +buttons +cactus +candy +captain +carlos +caroline +carrie +casper +catch22 +chance +charity +charlotte +cheese +cheryl +chloe +chris1 +clancy +compaq +conrad +cooper +cooter +copper +cosmos +cougar +cracker +crawford +crystal +curtis +cyclone +dance +diablo +dollars +dookie +dumbass +dundee +elizabeth +eric +europe +farmer +firebird +fletcher +fluffy +france +freak1 +friends +fuckoff +gabriel +galaxy +gambit +garden +garfield +garnet +genesis +genius +godzilla +golfer +goober +grace +greenday +groovy +grover +guitar +hacker +harry +hazel +hector +herbert +horizon +hornet +howard +icecream +imagine +impala +jack +janice +jasmine +jason1 +jeanette +jeffrey +jenifer +jenni +jesus1 +jewels +joker +julie +julie1 +junior +justin1 +kathleen +keith +kelly +kelly1 +kennedy +kevin1 +knicks +larry1 +leonard +lestat +library +lincoln +lionking +london +louise +lucky1 +lucy +maddog +margaret +mariposa +marlboro +martin1 +marty +master1 +mensuck +mercedes +metal +midori +mikey +millie +mirage +molly +monet +money1 +monica +monopoly +mookie +moose +moroni +music +naomi +nathan +nguyen +nicholas +nicole +nimrod +october +olive +olivia +online +oscar +oxford +pacific +painter +peaches +penelope +pepsi +petunia +philip +phoenix1 +photo +pickle +player +poiuyt +porsche +porter +puppy +python +quality +raquel +raven +remember +robbie +robert1 +roman +rugby +runner +russell +ryan +sailing +sailor +samantha +savage +scarlett +school +sean +seven +shadow1 +sheba +shelby +shit +shoes +simba +simple +skipper +smiley +snake +snickers +sniper +snoopdog +snowman +sonic +spitfire +sprite +spunky +starwars +station +stella +stingray +storm +stormy +stupid +sunny1 +sunrise +surfer +susan +tammy +tango +tanya +teddy1 +theboss +theking +thumper +tina +tintin +tomcat +trebor +trevor +tweety +unicorn +valentine +valerie +vanilla +veronica +victor +vincent +viper +warrior +warriors +weasel +wheels +wilbur +winston +wisdom +wombat +xavier +yellow +zeppelin +1111 +1212 +Andrew +Family +Friends +Michael +Michelle +Snoopy +abcd1234 +abcdefg +abigail +account +adam +alex1 +alice1 +allison +alpine +andre1 +andrea1 +angel1 +anita +annette +antares +apache +apollo +aragorn +arizona +arnold +arsenal +asdfasdf +asdfg +asdfghjk +avenger +baby +babydoll +bailey +banana +barry +basket +batman1 +beaner +beast +beatrice +bella +bertha +bigben +bigdog +biggles +bigman +binky +biology +bishop +blondie +bluefish +bobcat +bosco +braves +brazil +bruce +bruno +brutus +buffalo +bulldog +bullet +bullshit +bunny +business +butch +butler +butter +california +carebear +carol +carol1 +carole +cassie +castle +catalina +catherine +cccccc +celine +center +champion +chanel +chaos +chelsea1 +chester1 +chicago +chico +christian +christy +church +cinder +colleen +colorado +columbia +commander +connie +cookies +cooking +corona +cowboys +coyote +craig +creative +cuddles +cuervo +cutie +daddy +daisy +daniel1 +danielle +davids +death +denis +derek +design +destiny +diana +diane +dickhead +digger +dodger +donna +dougie +dragonfly +dylan +eagle +eclipse +electric +emerald +etoile +excalibur +express +fender +fiona +fireman +flash +florida +flowers +foster +francesco +francine +francois +frank +french +fuckface +gemini +general +gerald +germany +gilbert +goaway +golden +goldfish +goose +gordon +graham +grant +gregory +gretchen +gunner +hannah +harold +harrison +harvey +hawkeye +heaven +heidi +helen +helena +hithere +hobbit +ibanez +idontknow +integra +ireland +irene +isaac +isabel +jackass +jackie +jackson +jaguar +jamaica +japan +jenny1 +jessie +johan +johnny +joker1 +jordan23 +judith +julia +jumanji +kangaroo +karen1 +kathy +keepout +keith1 +kenneth +kimberly +kingdom +kitkat +kramer +kristen +laura +laurie +lawrence +lawyer +legend +liberty +light +lindsay +lindsey +lisa +liverpool +lola +lonely +louis +lovely +loveme +lucas +madonna +malcolm +malibu +marathon +marcel +maria1 +mariah +mariah1 +marilyn +mario +marvin +maurice +maxine +maxwell +me +meggie +melanie +melissa +melody +mexico +michael1 +michele +midnight +mike1 +miracle +misha +mishka +molly1 +monique +montreal +moocow +moore +morris +mouse1 +mulder +nautica +nellie +newton +nick +nirvana1 +nissan +norman +notebook +ocean +olivier +ollie +oranges +oregon +orion +panda +pandora +panther +passion +patricia +pearl +peewee +pencil +penny +people +percy +person +peter1 +petey +picasso +pierre +pinkfloyd +polaris +police +pookie1 +poppy +power +predator +preston +q1w2e3 +queen +queenie +quentin +ralph +random +rangers +raptor +reality +redrum +remote +reynolds +rhonda +ricardo +ricardo1 +ricky +river +roadrunner +robinhood +rocknroll +rocky1 +ronald +roxy +ruthie +sabrina +sakura +sally +sampson +samuel +sandra +santa +sapphire +scarlet +scorpio +scott1 +scottie +scruffy +seattle +serena +shanti +shark +shogun +simon +singer +skull +skywalker +slacker +smashing +smiles +snowflake +snuffy +soccer1 +soleil +sonny +spanky +speedy +spider +spooky +stacey +star69 +start +steven1 +stinky +strawberry +stuart +sugar +sundance +superfly +suzanne +suzuki +swimmer +swimming +system +taffy +tarzan +teddy +teddybear +terry +theatre +thunder +thursday +tinker +tootsie +tornado +tracy +tricia +trident +trojan +truman +trumpet +tucker +turtle +tyler +utopia +voyager +warcraft +warlock +warren +water +wayne +wendy +williams +willy +winona +woody +woofwoof +wrangler +wright +xfiles +xxxxxx +yankees +yvonne +zebra +zenith +zigzag +zombie +zxc123 +zxcvb +000000 +007007 +11111 +11111111 +123321 +171717 +181818 +1a2b3c +1chris +4runner +54321 +55555 +6969 +7777777 +789456 +88888888 +Alexis +Bailey +Charlie +Chris +Daniel +Dragon +Elizabeth +HARLEY +Heather +Jennifer +Jessica +Jordan +KILLER +Nicholas +Password +Princess +Purple +Rebecca +Robert +Shadow +Steven +Summer +Sunshine +Superman +Taylor +Thomas +Victoria +abcd123 +abcde +accord +active +africa +airborne +alfaro +alicia +aliens +alina +aline +alison +allen +aloha +alpha1 +althea +altima +amanda1 +amazing +america +amour +anderson +andre +andrew1 +andromeda +angels +angie1 +annie +anything +apple1 +apple2 +applepie +april +aquarius +ariane +ariel +arlene +artemis +asdf1234 +asdfjkl +ashley1 +ashraf +ashton +asterix +attila +autumn +avatar +babes +bambi +barbie +barney1 +barrett +bball +beaches +beanie +beans +beauty +becca +belize +belle +belmont +benji +benson +bernardo +berry +betsy +betty +bigboss +bigred +billy1 +birdie +birthday +biscuit +bitter +blackjack +blah +blanche +blood +blowjob +blowme +blueeyes +blues +bogart +bombay +boobie +boots +bootsie +boxers +brandi +brent +brewster +bridge +bronco +bronte +brooke +brother +bryan +bubble +buddha +budgie +burton +butterfly +byron +calendar +calvin1 +camel +camille +campbell +camping +cancer +canela +cannon +carbon +carnage +carolyn +carrot +cascade +catfish +cathy +catwoman +cecile +celica +change +chantal +charger +cherry +chiara +chiefs +china +chris123 +christ1 +christmas +christopher +chuck +cindy1 +cinema +civic +claude +clueless +cobain +cobra +cody +colette +college +colors +colt45 +confused +cool +corvette +cosmo +country +crusader +cunningham +cupcake +cynthia +dagger +dammit +dancer +daphne +darkstar +darren +darryl +darwin +deborah +december +deedee +deeznuts +delano +delete +demon +denise +denny +desert +deskjet +detroit +devil +devine +devon +dexter +dianne +diesel +director +dixie +dodgers +doggy +dollar +dolly +dominique +domino +dontknow +doogie +doudou +downtown +dragon1 +driver +dude +dudley +dutchess +dwight +eagle1 +easter +eastern +edith +edmund +eight +element +elissa +ellen +elliot +empire +enigma +enterprise +erin +escort +estelle +eugene +evelyn +explore +family1 +fatboy +felipe +ferguson +ferret +ferris +fireball +fishes +fishie +flight +florida1 +flowerpot +forward +freddie +freebird +freeman +frisco +fritz +froggie +froggies +frogs +fucku +future +gabby +games +garcia +gaston +gateway +george1 +georgia +german +germany1 +getout +ghost +gibson +giselle +gmoney +goblin +goblue +gollum +grandma +gremlin +grizzly +grumpy +guess +guitar1 +gustavo +haggis +haha +hailey +halloween +hamilton +hamlet +hanna +hanson +happy123 +happyday +hardcore +harley1 +harriet +harris +harvard +health +heart +heather1 +heather2 +hedgehog +helene +hello1 +hello123 +hellohello +hermes +heythere +highland +hilda +hillary +history +hitler +hobbes +holiday +holly +honda1 +hongkong +hootie +horse +hotrod +hudson +hummer +huskies +idiot +iforget +iloveu +impact +indonesia +irina +isabelle +israel +italia +italy +jackie1 +jacob +jakey +james1 +jamesbond +jamie +jamjam +jeffrey1 +jennie +jenny +jensen +jesse +jesse1 +jester +jethro +jimbob +jimmy +joanna +joelle +john316 +jordie +jorge +josh +journey +joyce +jubilee +jules +julien +juliet +junebug +juniper +justdoit +karin +karine +karma +katerina +katie +katie1 +kayla +keeper +keller +kendall +kenny +ketchup +kings +kissme +kitten +kittycat +kkkkkk +kristi +kristine +labtec +laddie +ladybug +lance +laurel +lawson +leader +leland +lemon +lester +letter +letters +lexus1 +libra +lights +lionel +little +lizzy +lolita +lonestar +longhorn +looney +loren +lorna +loser +lovers +loveyou +lucia +lucifer +lucky14 +maddie +madmax +magic1 +magnum +maiden +maine +management +manson +manuel +marcus +maria +marielle +marine +marino +marshall +martha +maxmax +meatloaf +medical +megan +melina +memphis +mermaid +miami +michel +michigan +mickey1 +microsoft +mikael +milano +miles +millenium +million +miranda +miriam +mission +mmmmmm +mobile +monkey1 +monroe +montana +monty +moomoo +moonbeam +morpheus +motorola +movies +mozart +munchkin +murray +mustang1 +nadia +nadine +napoleon +nation +national +nestle +newlife +newyork1 +nichole +nikita +nikki +nintendo +nokia +nomore +normal +norton +noway +nugget +number9 +numbers +nurse +nutmeg +ohshit +oicu812 +omega +openup +orchid +oreo +orlando +packard +packers +paloma +pancake +panic +parola +parrot +partner +pascal +patches +patriots +paula +pauline +payton +peach +peanuts +pedro1 +peggy +perfect +perry +peterpan +philips +phillips +phone +pierce +pigeon +pink +pioneer +piper1 +pirate +pisces +playboy +pluto +poetry +pontiac +pookey +popeye +prayer +precious +prelude +premier +puddin +pulsar +pussy +pussy1 +qwert +qwerty12 +qwertyui +rabbit1 +rachelle +racoon +rambo +randy1 +ravens +redman +redskins +reggae +reggie +renee +renegade +rescue +revolution +richard1 +richards +richmond +riley +ripper +robby +roberts +rock +rocket1 +rockie +rockon +roger1 +rogers +roland +rommel +rookie +rootbeer +rosie +rufus +rusty +ruthless +sabbath +sabina +safety +saint +samiam +sammie +sammy +samsam +sandi +sanjose +saphire +sarah1 +saskia +sassy +saturday +science +scooby +scoobydoo +scooter1 +scorpion +scotty +scouts +search +september +server +seven7 +sexy +shaggy +shanny +shaolin +shasta +shayne +shelly +sherry +shirley +shorty +shotgun +sidney +simba1 +sinatra +sirius +skate +skipper1 +skyler +slayer +sleepy +slider +smile1 +smitty +smoke +snakes +snapper +snoop +solomon +sophia +space +sparks +spartan +spike1 +sponge +spurs +squash +stargate +starlight +stars +steph1 +steve1 +stevens +stewart +stone +stranger +stretch +strong +studio +stumpy +sucker +suckme +sultan +summit +sunfire +sunset +super +superstar +surfing +susan1 +sutton +sweden +sweetpea +sweety +swordfish +tabatha +tacobell +taiwan +tamtam +tanner +target +tasha +tattoo +tequila +terry1 +texas +thankyou +theend +thompson +thrasher +tiger2 +timber +timothy +tinkerbell +topcat +topher +toshiba +tototo +travis +treasure +trees +tricky +trish +triton +trombone +trouble +trucker +turbo +twins +tyler1 +ultimate +unique +united +ursula +vacation +valley +vampire +vanessa +venice +venus +vermont +vicki +vicky +victor1 +vincent1 +violet +violin +virgil +virginia +vision +volley +voodoo +vortex +waiting +wanker +warner +water1 +wayne1 +webster +weezer +wendy1 +western +white +whitney +whocares +wildcat +william1 +wilma +window +winniethepooh +wolfgang +wolverine +wonder +xxxxxxxx +yamaha +yankee +yogibear +yolanda +yomama +yvette +zachary +zebras +zxcvbn +00000000 +121212 +1234qwer +131313 +13579 +90210 +99999999 +ABC123 +action +amelie +anaconda +apollo13 +artist +asshole +benoit +bernard +bernie +bigbird +blizzard +bluesky +bonjour +caesar +cardinal +carolina +cesar +chandler +chapman +charlie1 +chevy +chiquita +chocolat +coco +cougars +courtney +dolphins +dominic +donkey +dusty +eminem +energy +fearless +forest +forever +glenn +guinness +hotdog +indian +jared +jimbo +johnson +jojo +josie +kristin +lloyd +lorraine +lynn +maxime +memory +mimi +mirror +nebraska +nemesis +network +nigel +oatmeal +patton +pedro +planet +players +portland +praise +psalms +qwaszx +raiders +rambo1 +rancid +shawn +shelley +softball +speedo +sports +ssssss +steele +steph +stephani +sunday +tiffany +tigre +toronto +trixie +undead +valentin +velvet +viking +walker +watson +young +babygirl +pretty +hottie +teamo +987654321 +naruto +spongebob +daniela +princesa +christ +blessed +single +qazwsx +pokemon +iloveyou1 +iloveyou2 +fuckyou1 +hahaha +poop +blessing +blahblah +blink182 +123qwe +trinity +passw0rd +google +looking +spirit +iloveyou! +qwerty1 +onelove +mylove +222222 +ilovegod +football1 +loving +emmanuel +1q2w3e4r +red123 +blabla +112233 +hallo +spiderman +simpsons +monster +november +brooklyn +poopoo +darkness +159753 +pineapple +chester +1qaz2wsx +drowssap +monkey12 +wordpass +q1w2e3r4 +coolness +11235813 +something +alexandra +estrella +miguel +iloveme +sayang +princess1 +555555 +999999 +alejandro +brittany +alejandra +tequiero +antonio +987654 +00000 +fernando +corazon +cristina +kisses +myspace +rebelde +babygurl +alyssa +mahalkita +gabriela +pictures +hellokitty +babygirl1 +angelica +mahalko +mariana +eduardo +andres +ronaldo +inuyasha +adriana +celtic +samsung +angelo +456789 +sebastian +karina +hotmail +0123456789 +barcelona +cameron +slipknot +cutiepie +50cent +bonita +maganda +babyboy +natalie +cuteako +javier +789456123 +123654 +bowwow +portugal +777777 +volleyball +january +cristian +bianca +chrisbrown +101010 +sweet +panget +benfica +love123 +lollipop +camila +qwertyuiop +harrypotter +ihateyou +christine +lorena +andreea +charmed +rafael +brianna +aaliyah +johncena +lovelove +gangsta +333333 +hiphop +mybaby +sergio +metallica +myspace1 +babyblue +badboy +fernanda +westlife +sasuke +steaua +roberto +slideshow +asdfghjkl +santiago +jayson +5201314 +jerome +gandako +gatita +babyko +246810 +sweetheart +chivas +alberto +valeria +nicole1 +12345678910 +leonardo +jayjay +liliana +sexygirl +232323 +amores +anthony1 +bitch1 +fatima +miamor +lover +lalala +252525 +skittles +colombia +159357 +manutd +123456a +britney +katrina +christina +pasaway +mahal +tatiana +cantik +0123456 +teiubesc +147258369 +natalia +francisco +amorcito +paola +angelito +manchester +mommy1 +147258 +amigos +marlon +linkinpark +147852 +diego +444444 +iverson +andrei +justine +frankie +pimpin +fashion +bestfriend +england +hermosa +456123 +102030 +sporting +hearts +potter +iloveu2 +number1 +212121 +truelove +jayden +savannah +hottie1 +ganda +scotland +ilovehim +shakira +estrellita +brandon1 +sweets +familia +love12 +omarion +monkeys +loverboy +elijah +ronnie +mamita +999999999 +broken +rodrigo +westside +mauricio +amigas +preciosa +shopping +flores +isabella +martinez +elaine +friendster +cheche +gracie +connor +valentina +darling +santos +joanne +fuckyou2 +pebbles +sunshine1 +gangster +gloria +darkangel +bettyboop +jessica1 +cheyenne +dustin +iubire +a123456 +purple1 +bestfriends +inlove +batista +karla +chacha +marian +sexyme +pogiako +jordan1 +010203 +daddy1 +daddysgirl +billabong +pinky +erika +skater +nenita +tigger1 +gatito +lokita +maldita +buttercup +bambam +glitter +123789 +sister +zacefron +tokiohotel +loveya +lovebug +bubblegum +marissa +cecilia +lollypop +nicolas +puppies +ariana +chubby +sexybitch +roxana +mememe +susana +baller +hotstuff +carter +babylove +angelina +playgirl +sweet16 +012345 +bhebhe +marcos +loveme1 +milagros +lilmama +beyonce +lovely1 +catdog +armando +margarita +151515 +loves +202020 +gerard +undertaker +amistad +capricorn +delfin +cheerleader +password2 +PASSWORD +lizzie +matthew1 +enrique +badgirl +141414 +dancing +cuteme +amelia +skyline +angeles +janine +carlitos +justme +legolas +michelle1 +cinderella +jesuschrist +ilovejesus +tazmania +tekiero +thebest +princesita +lucky7 +jesucristo +buddy1 +regina +myself +lipgloss +jazmin +rosita +chichi +pangit +mierda +741852963 +hernandez +arturo +silvia +melvin +celeste +pussycat +gorgeous +honeyko +mylife +babyboo +loveu +lupita +panthers +hollywood +alfredo +musica +hawaii +sparkle +kristina +sexymama +crazy +scarface +098765 +hayden +micheal +242424 +0987654321 +marisol +jeremiah +mhine +isaiah +lolipop +butterfly1 +xbox360 +madalina +anamaria +yourmom +jasmine1 +bubbles1 +beatriz +diamonds +friendship +sweetness +desiree +741852 +hannah1 +bananas +julius +leanne +marie1 +lover1 +twinkle +february +bebita +87654321 +twilight +imissyou +pollito +ashlee +cookie1 +147852369 +beckham +simone +nursing +torres +damian +123123123 +joshua1 +babyface +dinamo +mommy +juliana +cassandra +redsox +gundam +0000 +ou812 +dave +golf +molson +Monday +newpass +thx1138 +1 +Internet +coke +foobar +abc +fish +fred +help +ncc1701d +newuser +none +pat +dog +duck +duke +floyd +guest +joe +kingfish +micro +sam +telecom +test1 +7777 +absolut +babylon5 +backup +bill +bird33 +deliver +fire +flip +galileo +gopher +hansolo +jane +jim +mom +passwd +phil +phish +porsche911 +rain +red +sergei +training +truck +video +volvo +007 +1969 +5683 +Bond007 +Friday +Hendrix +October +Taurus +aaa +alexandr +catalog +challenge +clipper +coltrane +cyrano +dan +dawn +dean +deutsch +dilbert +e-mail +export +ford +fountain +fox +frog +gabriell +garlic +goforit +grateful +hoops +lady +ledzep +lee +mailman +mantra +market +mazda1 +metallic +ncc1701e +nesbitt +open +pete +quest +republic +research +supra +tara +testing +xanadu +xxxx +zaphod +zeus +0007 +1022 +10sne1 +1973 +1978 +2000 +2222 +3bears +Broadway +Fisher +Jeanne +Killer +Knight +Master +Pepper +Sierra +Tennis +abacab +abcd +ace +acropolis +amy +anders +avenir +basil +bass +beer +ben +bliss +blowfish +boss +bridges +buck +bugsy +bull +cannondale +canon +catnip +chip +civil +content +cook +cordelia +crack1 +cyber +daisie +dark1 +database +deadhead +denali +depeche +dickens +emmitt +entropy +farout +farside +feedback +fidel +firenze +fish1 +fletch +fool +fozzie +fun +gargoyle +gasman +gold +graphic +hell +image +intern +intrepid +jeff +jkl123 +joel +johanna1 +kidder +kim +king +kirk +kris +lambda +leon +logical +lorrie +major +mariner +mark1 +max +media +merlot +midway +mine +mmouse +moon +mopar +mortimer +nermal +nina +olsen +opera +overkill +pacers +packer +picard +polar +polo +primus +prometheus +public +radio +rastafarian +reptile +rob +robotech +rodeo +rolex +rouge +roy +ruby +salasana +scarecrow +scout +scuba1 +sergey +skibum +skunk +sound +starter +sting1 +sunbird +tbird +teflon +temporal +terminal +the +thejudge +time +toby +today +tokyo +tree +trout +vader +val +valhalla +windsurf +wolf +wolf1 +xcountry +yoda +yukon +1213 +1214 +1225 +1313 +1818 +1975 +1977 +1991 +1kitty +2001 +2020 +2112 +2kids +333 +4444 +5050 +57chevy +7dwarfs +Animals +Ariel +Bismillah +Booboo +Boston +Carol +Computer +Creative +Curtis +Denise +Eagles +Esther +Fishing +Freddy +Gandalf +Golden +Goober +Hacker +Harley +Henry +Hershey +Jackson +Jersey +Joanna +Johnson +Katie +Kitten +Liberty +Lindsay +Lizard +Madeline +Margaret +Maxwell +Money +Monster +Pamela +Peaches +Peter +Phoenix +Piglet +Pookie +Rabbit +Raiders +Random +Russell +Sammy +Saturn +Skeeter +Smokey +Sparky +Speedy +Sterling +Theresa +Thunder +Vincent +Willow +Winnie +Wolverine +aaaa +aardvark +abbott +acura +admin +admin1 +adrock +aerobics +agent +airwolf +ali +alien +allegro +allstate +altamira +altima1 +andrew! +ann +anne +anneli +aptiva +arrow +asdf;lkj +assmunch +baraka +barnyard +bart +bartman +beasty +beavis1 +bebe +belgium +beowulf +beryl +best +bharat +bichon +bigal +biker +bilbo +bills +bimmer +biochem +birdy +blinds +blitz +bluejean +bogey +bogus +boulder +bourbon +boxer +brain +branch +britain +broker +bucks +buffett +bugs +bulls +burns +buzz +c00per +calgary +camay +carl +cat +cement +cessna +chad +chainsaw +chameleon +chang +chess +chinook +chouette +chronos +cicero +circuit +cirque +cirrus +clapton +clarkson +class +claudel +cleo +cliff +clock +color +comet +concept +concorde +coolbean +corky +cornflake +corwin +cows +crescent +cross +crowley +cthulhu +cunt +current +cutlass +daedalus +dagger1 +daily +dale +dana +daytek +dead +decker +dharma +dillweed +dipper +disco +dixon +doitnow +doors +dork +doug +dutch +effie +ella +elsie +engage +eric1 +ernie1 +escort1 +excel +faculty +fairview +faust +fenris +finance +first +fishhead +flanders +fleurs +flute +flyboy +flyer +franka +frederic +free +front242 +frontier +fugazi +funtime +gaby +gaelic +gambler +gammaphi +garfunkel +garth +gary +gateway2 +gator1 +gibbons +gigi +gilgamesh +goat +godiva +goethe +gofish +good +gramps +gravis +gray +greed +greg +greg1 +greta +gretzky +guido +gumby +h2opolo +hamid +hank +hawkeye1 +health1 +hello8 +help123 +helper +homerj +hoosier +hope +huang +hugo +hydrogen +ib6ub9 +insight +instructor +integral +iomega +iris +izzy +jazz +jean +jeepster +jetta1 +joanie +josee +joy +julia2 +jumbo +jump +justice4 +kalamazoo +kali +kat +kate +kerala +kids +kiwi +kleenex +kombat +lamer +laser +laserjet +lassie1 +leblanc +legal +leo +life +lions +liz +logger +logos +loislane +loki +longer +lori +lost +lotus +lou +macha +macross +madoka +makeitso +mallard +marc +math +mattingly +mechanic +meister +mercer +merde +merrill +michal +michou +mickel +minou +mobydick +modem +mojo +montana3 +montrose +motor +mowgli +mulder1 +muscle +neil +neutrino +newaccount +nicklaus +nightshade +nightwing +nike +none1 +nopass +nouveau +novell +oaxaca +obiwan +obsession +orville +otter +ozzy +packrat +paint +papa +paradigm +pass +pavel +peterk +phialpha +phishy +piano1 +pianoman +pianos +pipeline +plato +play +poetic +print +printing +provider +qqq111 +quebec +qwer +racer +racerx +radar +rafiki +raleigh +rasta1 +redcloud +redfish +redwing +redwood +reed +rene +reznor +rhino +ripple +rita +robocop +robotics +roche +roni +rossignol +rugger +safety1 +saigon +satori +saturn5 +schnapps +scotch +scuba +secret3 +seeker +services +sex +shanghai +shazam +shelter +sigmachi +signal +signature +simsim +skydive +slick +smegma +smiths +smurfy +snow +sober1 +sonics +sony +spazz +sphynx +spock +spoon +spot +sprocket +starbuck +steel +stephi +sting +stocks +storage +strat +strato +stud +student2 +susanna +swanson +swim +switzer +system5 +t-bone +talon +tarheel +tata +tazdevil +tester +testtest +thisisit +thorne +tightend +tim +tom +tool +total +toucan +transfer +transit +transport +trapper +trash +trophy +tucson +turbo2 +unity +upsilon +vedder +vette +vikram +virago +visual +volcano +walden +waldo +walleye +webmaster +wedge +whale1 +whit +whoville +wibble +will +wombat1 +word +world +x-files +xxx123 +zack +zepplin +zoltan +zoomer +123go +21122112 +5555 +911 +FuckYou +Fuckyou +Gizmo +Hello +Michel +Qwerty +Windows +angus +aspen +ass +bird +booster +byteme +cats +changeit +christia +christoph +classroom +cloclo +corrado +dasha +fiction +french1 +fubar +gator +gilles +gocougs +hilbert +hola +home +judy +koko +lulu +mac +macintosh +mailer +mars +meow +ne1469 +niki +paul +politics +pomme +property +ruth +sales +salut +scrooge +skidoo +spain +surf +sylvie +symbol +forum +rotimi +god +saved +2580 +1998 +xxx +1928 +777 +info +a +netware +sun +tech +doom +mmm +one +ppp +1911 +1948 +1996 +5252 +Champs +Tuesday +bach +crow +don +draft +hal9000 +herzog +huey +jethrotull +jussi +mail +miki +nicarao +snowski +1316 +1412 +1430 +1952 +1953 +1955 +1956 +1960 +1964 +1qw23e +22 +2200 +2252 +3010 +3112 +4788 +6262 +Alpha +Bastard +Beavis +Cardinal +Celtics +Cougar +Darkman +Figaro +Fortune +Geronimo +Hammer +Homer +Janet +Mellon +Merlot +Metallic +Montreal +Newton +Paladin +Peanuts +Service +Vernon +Waterloo +Webster +aki123 +aqua +aylmer +beta +bozo +car +chat +chinacat +cora +courier +dogbert +eieio +elina1 +fly +funguy +fuzz +ggeorge +glider1 +gone +hawk +heikki +histoire +hugh +if6was9 +ingvar +jan +jedi +jimi +juhani +khan +lima +midvale +neko +nesbit +nexus6 +nisse +notta1 +pam +park +pole +pope +pyro +ram +reliant +rex +rush +seoul +skip +stan +sue +suzy +tab +testi +thelorax +tika +tnt +toto1 +tre +wind +x-men +xyz +zxc +369 +Abcdef +Asdfgh +Changeme +NCC1701 +Zxcvbnm +demo +doom2 +e +good-luck +homebrew +m1911a1 +nat +ne1410s +ne14a69 +zhongguo +sample123 +0852 +basf +OU812 +!@#$% +informix +majordomo +news +temp +trek +!@#$%^ +!@#$%^&* +Pentium +Raistlin +adi +bmw +law +m +new +opus +plus +visa +www +y +zzz +1332 +1950 +3141 +3533 +4055 +4854 +6301 +Bonzo +ChangeMe +Front242 +Gretel +Michel1 +Noriko +Sidekick +Sverige +Swoosh +Woodrow +aa +ayelet +barn +betacam +biz +boat +cuda +doc +hal +hallowell +haro +hosehead +i +ilmari +irmeli +j1l2t3 +jer +kcin +kerrya +kissa2 +leaf +lissabon +mart +matti1 +mech +morecats +paagal +performa +prof +ratio +ship +slip +stivers +tapani +targas +test2 +test3 +tula +unix +user1 +xanth +!@#$%^& +1701d +@#$%^& +Qwert +allo +dirk +go +newcourt +nite +notused +sss diff --git a/resources/builtin/agent.png b/resources/builtin/agent.png new file mode 100644 index 0000000000..ba103e67ec Binary files /dev/null and b/resources/builtin/agent.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/0.png b/resources/builtin/alphanumeric/aleo-white/0.png new file mode 100644 index 0000000000..6a54cfbe1c Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/0.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/1.png b/resources/builtin/alphanumeric/aleo-white/1.png new file mode 100644 index 0000000000..0002e20ec4 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/1.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/2.png b/resources/builtin/alphanumeric/aleo-white/2.png new file mode 100644 index 0000000000..f3f4c558cf Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/2.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/3.png b/resources/builtin/alphanumeric/aleo-white/3.png new file mode 100644 index 0000000000..c4f3d5b171 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/3.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/4.png b/resources/builtin/alphanumeric/aleo-white/4.png new file mode 100644 index 0000000000..ee847ed0af Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/4.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/5.png b/resources/builtin/alphanumeric/aleo-white/5.png new file mode 100644 index 0000000000..e1bf184d68 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/5.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/6.png b/resources/builtin/alphanumeric/aleo-white/6.png new file mode 100644 index 0000000000..b585755282 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/6.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/7.png b/resources/builtin/alphanumeric/aleo-white/7.png new file mode 100644 index 0000000000..0609917f72 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/7.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/8.png b/resources/builtin/alphanumeric/aleo-white/8.png new file mode 100644 index 0000000000..fe328e3aaa Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/8.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/9.png b/resources/builtin/alphanumeric/aleo-white/9.png new file mode 100644 index 0000000000..bb27dd9595 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/9.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/A.png b/resources/builtin/alphanumeric/aleo-white/A.png new file mode 100644 index 0000000000..d78b8b82ca Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/A.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/B.png b/resources/builtin/alphanumeric/aleo-white/B.png new file mode 100644 index 0000000000..5692da0896 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/B.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/C.png b/resources/builtin/alphanumeric/aleo-white/C.png new file mode 100644 index 0000000000..2667930e6f Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/C.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/D.png b/resources/builtin/alphanumeric/aleo-white/D.png new file mode 100644 index 0000000000..f75ad9a591 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/D.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/E.png b/resources/builtin/alphanumeric/aleo-white/E.png new file mode 100644 index 0000000000..413cb4690c Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/E.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/F.png b/resources/builtin/alphanumeric/aleo-white/F.png new file mode 100644 index 0000000000..64c4db4622 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/F.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/G.png b/resources/builtin/alphanumeric/aleo-white/G.png new file mode 100644 index 0000000000..46ba2212f3 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/G.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/H.png b/resources/builtin/alphanumeric/aleo-white/H.png new file mode 100644 index 0000000000..23b1f78cfb Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/H.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/I.png b/resources/builtin/alphanumeric/aleo-white/I.png new file mode 100644 index 0000000000..222feb88e6 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/I.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/J.png b/resources/builtin/alphanumeric/aleo-white/J.png new file mode 100644 index 0000000000..d3c81deb19 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/J.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/K.png b/resources/builtin/alphanumeric/aleo-white/K.png new file mode 100644 index 0000000000..05c527b5cb Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/K.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/L.png b/resources/builtin/alphanumeric/aleo-white/L.png new file mode 100644 index 0000000000..cc6af32ef9 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/L.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/M.png b/resources/builtin/alphanumeric/aleo-white/M.png new file mode 100644 index 0000000000..9422d110e2 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/M.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/N.png b/resources/builtin/alphanumeric/aleo-white/N.png new file mode 100644 index 0000000000..6efde37f25 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/N.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/O.png b/resources/builtin/alphanumeric/aleo-white/O.png new file mode 100644 index 0000000000..e7266a7d0f Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/O.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/P.png b/resources/builtin/alphanumeric/aleo-white/P.png new file mode 100644 index 0000000000..e94a48a4cc Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/P.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/Q.png b/resources/builtin/alphanumeric/aleo-white/Q.png new file mode 100644 index 0000000000..8217bfef59 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/Q.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/R.png b/resources/builtin/alphanumeric/aleo-white/R.png new file mode 100644 index 0000000000..3cf3892f3e Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/R.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/S.png b/resources/builtin/alphanumeric/aleo-white/S.png new file mode 100644 index 0000000000..4c08cf5982 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/S.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/T.png b/resources/builtin/alphanumeric/aleo-white/T.png new file mode 100644 index 0000000000..6484a2856f Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/T.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/U.png b/resources/builtin/alphanumeric/aleo-white/U.png new file mode 100644 index 0000000000..af3427b455 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/U.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/V.png b/resources/builtin/alphanumeric/aleo-white/V.png new file mode 100644 index 0000000000..948d35a674 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/V.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/W.png b/resources/builtin/alphanumeric/aleo-white/W.png new file mode 100644 index 0000000000..5db225e845 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/W.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/X.png b/resources/builtin/alphanumeric/aleo-white/X.png new file mode 100644 index 0000000000..aed5084b77 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/X.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/Y.png b/resources/builtin/alphanumeric/aleo-white/Y.png new file mode 100644 index 0000000000..80475739e4 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/Y.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/Z.png b/resources/builtin/alphanumeric/aleo-white/Z.png new file mode 100644 index 0000000000..f58fc9eb55 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/Z.png differ diff --git a/resources/builtin/alphanumeric/aleo-white/_default.png b/resources/builtin/alphanumeric/aleo-white/_default.png new file mode 100644 index 0000000000..167ab46b39 Binary files /dev/null and b/resources/builtin/alphanumeric/aleo-white/_default.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/0.png b/resources/builtin/alphanumeric/lato-dark/0.png new file mode 100644 index 0000000000..1d1640909d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/0.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/1.png b/resources/builtin/alphanumeric/lato-dark/1.png new file mode 100644 index 0000000000..a634d966f4 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/1.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/2.png b/resources/builtin/alphanumeric/lato-dark/2.png new file mode 100644 index 0000000000..f8fbce508c Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/2.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/3.png b/resources/builtin/alphanumeric/lato-dark/3.png new file mode 100644 index 0000000000..b06b0b0993 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/3.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/4.png b/resources/builtin/alphanumeric/lato-dark/4.png new file mode 100644 index 0000000000..175bf669dd Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/4.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/5.png b/resources/builtin/alphanumeric/lato-dark/5.png new file mode 100644 index 0000000000..cb30839c0b Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/5.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/6.png b/resources/builtin/alphanumeric/lato-dark/6.png new file mode 100644 index 0000000000..1b4c8d2dbd Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/6.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/7.png b/resources/builtin/alphanumeric/lato-dark/7.png new file mode 100644 index 0000000000..97f0797d0f Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/7.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/8.png b/resources/builtin/alphanumeric/lato-dark/8.png new file mode 100644 index 0000000000..78490351c5 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/8.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/9.png b/resources/builtin/alphanumeric/lato-dark/9.png new file mode 100644 index 0000000000..51896d03dd Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/9.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/A.png b/resources/builtin/alphanumeric/lato-dark/A.png new file mode 100644 index 0000000000..96ec17c25a Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/A.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/B.png b/resources/builtin/alphanumeric/lato-dark/B.png new file mode 100644 index 0000000000..f13151b77d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/B.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/C.png b/resources/builtin/alphanumeric/lato-dark/C.png new file mode 100644 index 0000000000..69245cb33d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/C.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/D.png b/resources/builtin/alphanumeric/lato-dark/D.png new file mode 100644 index 0000000000..b6a4db9da7 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/D.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/E.png b/resources/builtin/alphanumeric/lato-dark/E.png new file mode 100644 index 0000000000..17838d9435 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/E.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/F.png b/resources/builtin/alphanumeric/lato-dark/F.png new file mode 100644 index 0000000000..ac5277a6cb Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/F.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/G.png b/resources/builtin/alphanumeric/lato-dark/G.png new file mode 100644 index 0000000000..54fb8a4659 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/G.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/H.png b/resources/builtin/alphanumeric/lato-dark/H.png new file mode 100644 index 0000000000..6b7b0a95a1 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/H.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/I.png b/resources/builtin/alphanumeric/lato-dark/I.png new file mode 100644 index 0000000000..4455baec89 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/I.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/J.png b/resources/builtin/alphanumeric/lato-dark/J.png new file mode 100644 index 0000000000..5c81aaf17d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/J.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/K.png b/resources/builtin/alphanumeric/lato-dark/K.png new file mode 100644 index 0000000000..fd630d951b Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/K.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/L.png b/resources/builtin/alphanumeric/lato-dark/L.png new file mode 100644 index 0000000000..35e0557294 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/L.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/M.png b/resources/builtin/alphanumeric/lato-dark/M.png new file mode 100644 index 0000000000..46e9347578 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/M.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/N.png b/resources/builtin/alphanumeric/lato-dark/N.png new file mode 100644 index 0000000000..e8cffda355 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/N.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/O.png b/resources/builtin/alphanumeric/lato-dark/O.png new file mode 100644 index 0000000000..2ebd3b2a64 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/O.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/P.png b/resources/builtin/alphanumeric/lato-dark/P.png new file mode 100644 index 0000000000..632694600d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/P.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/Q.png b/resources/builtin/alphanumeric/lato-dark/Q.png new file mode 100644 index 0000000000..ee7b343136 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/Q.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/R.png b/resources/builtin/alphanumeric/lato-dark/R.png new file mode 100644 index 0000000000..7213cb4911 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/R.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/S.png b/resources/builtin/alphanumeric/lato-dark/S.png new file mode 100644 index 0000000000..1ee5a01fad Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/S.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/T.png b/resources/builtin/alphanumeric/lato-dark/T.png new file mode 100644 index 0000000000..be8a7fc7a5 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/T.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/U.png b/resources/builtin/alphanumeric/lato-dark/U.png new file mode 100644 index 0000000000..467c8a9139 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/U.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/V.png b/resources/builtin/alphanumeric/lato-dark/V.png new file mode 100644 index 0000000000..47626ba4ee Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/V.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/W.png b/resources/builtin/alphanumeric/lato-dark/W.png new file mode 100644 index 0000000000..acd8f55c43 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/W.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/X.png b/resources/builtin/alphanumeric/lato-dark/X.png new file mode 100644 index 0000000000..c1dacfc86d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/X.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/Y.png b/resources/builtin/alphanumeric/lato-dark/Y.png new file mode 100644 index 0000000000..247bf82254 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/Y.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/Z.png b/resources/builtin/alphanumeric/lato-dark/Z.png new file mode 100644 index 0000000000..8ec279f685 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/Z.png differ diff --git a/resources/builtin/alphanumeric/lato-dark/_default.png b/resources/builtin/alphanumeric/lato-dark/_default.png new file mode 100644 index 0000000000..48be8a15eb Binary files /dev/null and b/resources/builtin/alphanumeric/lato-dark/_default.png differ diff --git a/resources/builtin/alphanumeric/lato-white/0.png b/resources/builtin/alphanumeric/lato-white/0.png new file mode 100644 index 0000000000..a37a1305e3 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/0.png differ diff --git a/resources/builtin/alphanumeric/lato-white/1.png b/resources/builtin/alphanumeric/lato-white/1.png new file mode 100644 index 0000000000..e1b330190c Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/1.png differ diff --git a/resources/builtin/alphanumeric/lato-white/2.png b/resources/builtin/alphanumeric/lato-white/2.png new file mode 100644 index 0000000000..af3294627c Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/2.png differ diff --git a/resources/builtin/alphanumeric/lato-white/3.png b/resources/builtin/alphanumeric/lato-white/3.png new file mode 100644 index 0000000000..fe48e50396 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/3.png differ diff --git a/resources/builtin/alphanumeric/lato-white/4.png b/resources/builtin/alphanumeric/lato-white/4.png new file mode 100644 index 0000000000..bd208785ca Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/4.png differ diff --git a/resources/builtin/alphanumeric/lato-white/5.png b/resources/builtin/alphanumeric/lato-white/5.png new file mode 100644 index 0000000000..d93fe585c1 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/5.png differ diff --git a/resources/builtin/alphanumeric/lato-white/6.png b/resources/builtin/alphanumeric/lato-white/6.png new file mode 100644 index 0000000000..fc54fbe317 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/6.png differ diff --git a/resources/builtin/alphanumeric/lato-white/7.png b/resources/builtin/alphanumeric/lato-white/7.png new file mode 100644 index 0000000000..d77949da2f Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/7.png differ diff --git a/resources/builtin/alphanumeric/lato-white/8.png b/resources/builtin/alphanumeric/lato-white/8.png new file mode 100644 index 0000000000..4664d06d81 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/8.png differ diff --git a/resources/builtin/alphanumeric/lato-white/9.png b/resources/builtin/alphanumeric/lato-white/9.png new file mode 100644 index 0000000000..66058e023d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/9.png differ diff --git a/resources/builtin/alphanumeric/lato-white/A.png b/resources/builtin/alphanumeric/lato-white/A.png new file mode 100644 index 0000000000..284ce2a060 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/A.png differ diff --git a/resources/builtin/alphanumeric/lato-white/B.png b/resources/builtin/alphanumeric/lato-white/B.png new file mode 100644 index 0000000000..3fa4722ab3 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/B.png differ diff --git a/resources/builtin/alphanumeric/lato-white/C.png b/resources/builtin/alphanumeric/lato-white/C.png new file mode 100644 index 0000000000..ee08793966 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/C.png differ diff --git a/resources/builtin/alphanumeric/lato-white/D.png b/resources/builtin/alphanumeric/lato-white/D.png new file mode 100644 index 0000000000..e100162e2a Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/D.png differ diff --git a/resources/builtin/alphanumeric/lato-white/E.png b/resources/builtin/alphanumeric/lato-white/E.png new file mode 100644 index 0000000000..0e6a648608 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/E.png differ diff --git a/resources/builtin/alphanumeric/lato-white/F.png b/resources/builtin/alphanumeric/lato-white/F.png new file mode 100644 index 0000000000..c0f43e59b3 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/F.png differ diff --git a/resources/builtin/alphanumeric/lato-white/G.png b/resources/builtin/alphanumeric/lato-white/G.png new file mode 100644 index 0000000000..4a15c197ba Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/G.png differ diff --git a/resources/builtin/alphanumeric/lato-white/H.png b/resources/builtin/alphanumeric/lato-white/H.png new file mode 100644 index 0000000000..0c627420fc Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/H.png differ diff --git a/resources/builtin/alphanumeric/lato-white/I.png b/resources/builtin/alphanumeric/lato-white/I.png new file mode 100644 index 0000000000..dfe79d9b35 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/I.png differ diff --git a/resources/builtin/alphanumeric/lato-white/J.png b/resources/builtin/alphanumeric/lato-white/J.png new file mode 100644 index 0000000000..a7ade6ba34 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/J.png differ diff --git a/resources/builtin/alphanumeric/lato-white/K.png b/resources/builtin/alphanumeric/lato-white/K.png new file mode 100644 index 0000000000..894f16abf9 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/K.png differ diff --git a/resources/builtin/alphanumeric/lato-white/L.png b/resources/builtin/alphanumeric/lato-white/L.png new file mode 100644 index 0000000000..61889a13cb Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/L.png differ diff --git a/resources/builtin/alphanumeric/lato-white/M.png b/resources/builtin/alphanumeric/lato-white/M.png new file mode 100644 index 0000000000..a54a3639dc Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/M.png differ diff --git a/resources/builtin/alphanumeric/lato-white/N.png b/resources/builtin/alphanumeric/lato-white/N.png new file mode 100644 index 0000000000..051ec3c09d Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/N.png differ diff --git a/resources/builtin/alphanumeric/lato-white/O.png b/resources/builtin/alphanumeric/lato-white/O.png new file mode 100644 index 0000000000..574d940f4f Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/O.png differ diff --git a/resources/builtin/alphanumeric/lato-white/P.png b/resources/builtin/alphanumeric/lato-white/P.png new file mode 100644 index 0000000000..0c735d3a4c Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/P.png differ diff --git a/resources/builtin/alphanumeric/lato-white/Q.png b/resources/builtin/alphanumeric/lato-white/Q.png new file mode 100644 index 0000000000..b09b9b9a03 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/Q.png differ diff --git a/resources/builtin/alphanumeric/lato-white/R.png b/resources/builtin/alphanumeric/lato-white/R.png new file mode 100644 index 0000000000..89f0fa8f26 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/R.png differ diff --git a/resources/builtin/alphanumeric/lato-white/S.png b/resources/builtin/alphanumeric/lato-white/S.png new file mode 100644 index 0000000000..8992f0f6a0 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/S.png differ diff --git a/resources/builtin/alphanumeric/lato-white/T.png b/resources/builtin/alphanumeric/lato-white/T.png new file mode 100644 index 0000000000..5c9393b0ae Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/T.png differ diff --git a/resources/builtin/alphanumeric/lato-white/U.png b/resources/builtin/alphanumeric/lato-white/U.png new file mode 100644 index 0000000000..e681eb61f4 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/U.png differ diff --git a/resources/builtin/alphanumeric/lato-white/V.png b/resources/builtin/alphanumeric/lato-white/V.png new file mode 100644 index 0000000000..c2ffde7044 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/V.png differ diff --git a/resources/builtin/alphanumeric/lato-white/W.png b/resources/builtin/alphanumeric/lato-white/W.png new file mode 100644 index 0000000000..60b3c36088 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/W.png differ diff --git a/resources/builtin/alphanumeric/lato-white/X.png b/resources/builtin/alphanumeric/lato-white/X.png new file mode 100644 index 0000000000..60c82d00eb Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/X.png differ diff --git a/resources/builtin/alphanumeric/lato-white/Y.png b/resources/builtin/alphanumeric/lato-white/Y.png new file mode 100644 index 0000000000..1f6bf139a2 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/Y.png differ diff --git a/resources/builtin/alphanumeric/lato-white/Z.png b/resources/builtin/alphanumeric/lato-white/Z.png new file mode 100644 index 0000000000..6f06c52cdc Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/Z.png differ diff --git a/resources/builtin/alphanumeric/lato-white/_default.png b/resources/builtin/alphanumeric/lato-white/_default.png new file mode 100644 index 0000000000..e6be069919 Binary files /dev/null and b/resources/builtin/alphanumeric/lato-white/_default.png differ diff --git a/resources/builtin/avatar.png b/resources/builtin/avatar.png new file mode 100644 index 0000000000..7d2514eca6 Binary files /dev/null and b/resources/builtin/avatar.png differ diff --git a/resources/builtin/blog.png b/resources/builtin/blog.png new file mode 100644 index 0000000000..bb68581a01 Binary files /dev/null and b/resources/builtin/blog.png differ diff --git a/resources/builtin/conpherence.png b/resources/builtin/conpherence.png new file mode 100644 index 0000000000..78bb8bdc05 Binary files /dev/null and b/resources/builtin/conpherence.png differ diff --git a/resources/builtin/favicon/default-120x120.png b/resources/builtin/favicon/default-120x120.png new file mode 100644 index 0000000000..a88125beca Binary files /dev/null and b/resources/builtin/favicon/default-120x120.png differ diff --git a/resources/builtin/favicon/default-128x128.png b/resources/builtin/favicon/default-128x128.png new file mode 100644 index 0000000000..3b51e6052b Binary files /dev/null and b/resources/builtin/favicon/default-128x128.png differ diff --git a/resources/builtin/favicon/default-152x152.png b/resources/builtin/favicon/default-152x152.png new file mode 100644 index 0000000000..94a69ade74 Binary files /dev/null and b/resources/builtin/favicon/default-152x152.png differ diff --git a/resources/builtin/favicon/default-76x76.png b/resources/builtin/favicon/default-76x76.png new file mode 100644 index 0000000000..0245ac2a21 Binary files /dev/null and b/resources/builtin/favicon/default-76x76.png differ diff --git a/resources/builtin/favicon/dot-pink-64x64.png b/resources/builtin/favicon/dot-pink-64x64.png new file mode 100644 index 0000000000..99595c8e1a Binary files /dev/null and b/resources/builtin/favicon/dot-pink-64x64.png differ diff --git a/resources/builtin/favicon/dot-red-64x64.png b/resources/builtin/favicon/dot-red-64x64.png new file mode 100644 index 0000000000..e727375be0 Binary files /dev/null and b/resources/builtin/favicon/dot-red-64x64.png differ diff --git a/resources/builtin/image-100x100.png b/resources/builtin/image-100x100.png new file mode 100644 index 0000000000..d77e1d4584 Binary files /dev/null and b/resources/builtin/image-100x100.png differ diff --git a/resources/builtin/image-200x200.png b/resources/builtin/image-200x200.png new file mode 100644 index 0000000000..520526a2d9 Binary files /dev/null and b/resources/builtin/image-200x200.png differ diff --git a/resources/builtin/image-220x220.png b/resources/builtin/image-220x220.png new file mode 100644 index 0000000000..f9fe4ade48 Binary files /dev/null and b/resources/builtin/image-220x220.png differ diff --git a/resources/builtin/image-280x210.png b/resources/builtin/image-280x210.png new file mode 100644 index 0000000000..ddece3327d Binary files /dev/null and b/resources/builtin/image-280x210.png differ diff --git a/resources/builtin/image-400x400.png b/resources/builtin/image-400x400.png new file mode 100644 index 0000000000..db23eb01c7 Binary files /dev/null and b/resources/builtin/image-400x400.png differ diff --git a/resources/builtin/image-526x526.png b/resources/builtin/image-526x526.png new file mode 100644 index 0000000000..3d666163b2 Binary files /dev/null and b/resources/builtin/image-526x526.png differ diff --git a/resources/builtin/image-800x800.png b/resources/builtin/image-800x800.png new file mode 100644 index 0000000000..9755de33f8 Binary files /dev/null and b/resources/builtin/image-800x800.png differ diff --git a/resources/builtin/mailinglist.png b/resources/builtin/mailinglist.png new file mode 100644 index 0000000000..58e973608f Binary files /dev/null and b/resources/builtin/mailinglist.png differ diff --git a/resources/builtin/merchant.png b/resources/builtin/merchant.png new file mode 100644 index 0000000000..c8381eb00f Binary files /dev/null and b/resources/builtin/merchant.png differ diff --git a/resources/builtin/missing.png b/resources/builtin/missing.png new file mode 100644 index 0000000000..f301d02626 Binary files /dev/null and b/resources/builtin/missing.png differ diff --git a/resources/builtin/profile.png b/resources/builtin/profile.png new file mode 100644 index 0000000000..7d2514eca6 Binary files /dev/null and b/resources/builtin/profile.png differ diff --git a/resources/builtin/project.png b/resources/builtin/project.png new file mode 100644 index 0000000000..c6abf5ed42 Binary files /dev/null and b/resources/builtin/project.png differ diff --git a/resources/builtin/projects/fa-android.png b/resources/builtin/projects/fa-android.png new file mode 100644 index 0000000000..db56162683 Binary files /dev/null and b/resources/builtin/projects/fa-android.png differ diff --git a/resources/builtin/projects/fa-apple.png b/resources/builtin/projects/fa-apple.png new file mode 100644 index 0000000000..7e289818d1 Binary files /dev/null and b/resources/builtin/projects/fa-apple.png differ diff --git a/resources/builtin/projects/fa-beer.png b/resources/builtin/projects/fa-beer.png new file mode 100644 index 0000000000..ff5fd0646f Binary files /dev/null and b/resources/builtin/projects/fa-beer.png differ diff --git a/resources/builtin/projects/fa-bomb.png b/resources/builtin/projects/fa-bomb.png new file mode 100644 index 0000000000..bfeacfa84c Binary files /dev/null and b/resources/builtin/projects/fa-bomb.png differ diff --git a/resources/builtin/projects/fa-book.png b/resources/builtin/projects/fa-book.png new file mode 100644 index 0000000000..f6bda5d61c Binary files /dev/null and b/resources/builtin/projects/fa-book.png differ diff --git a/resources/builtin/projects/fa-briefcase.png b/resources/builtin/projects/fa-briefcase.png new file mode 100644 index 0000000000..afa70e2a3a Binary files /dev/null and b/resources/builtin/projects/fa-briefcase.png differ diff --git a/resources/builtin/projects/fa-bug.png b/resources/builtin/projects/fa-bug.png new file mode 100644 index 0000000000..83c538f885 Binary files /dev/null and b/resources/builtin/projects/fa-bug.png differ diff --git a/resources/builtin/projects/fa-building.png b/resources/builtin/projects/fa-building.png new file mode 100644 index 0000000000..d033366cf7 Binary files /dev/null and b/resources/builtin/projects/fa-building.png differ diff --git a/resources/builtin/projects/fa-calendar.png b/resources/builtin/projects/fa-calendar.png new file mode 100644 index 0000000000..80cfc3e11b Binary files /dev/null and b/resources/builtin/projects/fa-calendar.png differ diff --git a/resources/builtin/projects/fa-camera-retro.png b/resources/builtin/projects/fa-camera-retro.png new file mode 100644 index 0000000000..c1ac04d27b Binary files /dev/null and b/resources/builtin/projects/fa-camera-retro.png differ diff --git a/resources/builtin/projects/fa-chrome.png b/resources/builtin/projects/fa-chrome.png new file mode 100644 index 0000000000..177c2fe4f3 Binary files /dev/null and b/resources/builtin/projects/fa-chrome.png differ diff --git a/resources/builtin/projects/fa-cloud.png b/resources/builtin/projects/fa-cloud.png new file mode 100644 index 0000000000..ae1b855f94 Binary files /dev/null and b/resources/builtin/projects/fa-cloud.png differ diff --git a/resources/builtin/projects/fa-coffee.png b/resources/builtin/projects/fa-coffee.png new file mode 100644 index 0000000000..8d0850f0ee Binary files /dev/null and b/resources/builtin/projects/fa-coffee.png differ diff --git a/resources/builtin/projects/fa-comments.png b/resources/builtin/projects/fa-comments.png new file mode 100644 index 0000000000..927fb91bb2 Binary files /dev/null and b/resources/builtin/projects/fa-comments.png differ diff --git a/resources/builtin/projects/fa-credit-card.png b/resources/builtin/projects/fa-credit-card.png new file mode 100644 index 0000000000..c159d2b673 Binary files /dev/null and b/resources/builtin/projects/fa-credit-card.png differ diff --git a/resources/builtin/projects/fa-database.png b/resources/builtin/projects/fa-database.png new file mode 100644 index 0000000000..bafcd1e338 Binary files /dev/null and b/resources/builtin/projects/fa-database.png differ diff --git a/resources/builtin/projects/fa-desktop.png b/resources/builtin/projects/fa-desktop.png new file mode 100644 index 0000000000..f463db8e1b Binary files /dev/null and b/resources/builtin/projects/fa-desktop.png differ diff --git a/resources/builtin/projects/fa-diamond.png b/resources/builtin/projects/fa-diamond.png new file mode 100644 index 0000000000..34a68c3284 Binary files /dev/null and b/resources/builtin/projects/fa-diamond.png differ diff --git a/resources/builtin/projects/fa-empire.png b/resources/builtin/projects/fa-empire.png new file mode 100644 index 0000000000..2d9dc3a8df Binary files /dev/null and b/resources/builtin/projects/fa-empire.png differ diff --git a/resources/builtin/projects/fa-envelope.png b/resources/builtin/projects/fa-envelope.png new file mode 100644 index 0000000000..934f1587bb Binary files /dev/null and b/resources/builtin/projects/fa-envelope.png differ diff --git a/resources/builtin/projects/fa-facebook.png b/resources/builtin/projects/fa-facebook.png new file mode 100644 index 0000000000..3d5a5f1f9a Binary files /dev/null and b/resources/builtin/projects/fa-facebook.png differ diff --git a/resources/builtin/projects/fa-fax.png b/resources/builtin/projects/fa-fax.png new file mode 100644 index 0000000000..af00c31269 Binary files /dev/null and b/resources/builtin/projects/fa-fax.png differ diff --git a/resources/builtin/projects/fa-film.png b/resources/builtin/projects/fa-film.png new file mode 100644 index 0000000000..2c30ffe477 Binary files /dev/null and b/resources/builtin/projects/fa-film.png differ diff --git a/resources/builtin/projects/fa-firefox.png b/resources/builtin/projects/fa-firefox.png new file mode 100644 index 0000000000..25fd9fc739 Binary files /dev/null and b/resources/builtin/projects/fa-firefox.png differ diff --git a/resources/builtin/projects/fa-flag-checkered.png b/resources/builtin/projects/fa-flag-checkered.png new file mode 100644 index 0000000000..e8e2519b4a Binary files /dev/null and b/resources/builtin/projects/fa-flag-checkered.png differ diff --git a/resources/builtin/projects/fa-flask.png b/resources/builtin/projects/fa-flask.png new file mode 100644 index 0000000000..ce978ae7d3 Binary files /dev/null and b/resources/builtin/projects/fa-flask.png differ diff --git a/resources/builtin/projects/fa-folder.png b/resources/builtin/projects/fa-folder.png new file mode 100644 index 0000000000..f6003fcd91 Binary files /dev/null and b/resources/builtin/projects/fa-folder.png differ diff --git a/resources/builtin/projects/fa-gamepad.png b/resources/builtin/projects/fa-gamepad.png new file mode 100644 index 0000000000..db3e7df75e Binary files /dev/null and b/resources/builtin/projects/fa-gamepad.png differ diff --git a/resources/builtin/projects/fa-gears.png b/resources/builtin/projects/fa-gears.png new file mode 100644 index 0000000000..8f60e32f84 Binary files /dev/null and b/resources/builtin/projects/fa-gears.png differ diff --git a/resources/builtin/projects/fa-google.png b/resources/builtin/projects/fa-google.png new file mode 100644 index 0000000000..cd1ad99b1b Binary files /dev/null and b/resources/builtin/projects/fa-google.png differ diff --git a/resources/builtin/projects/fa-hand-peace-o.png b/resources/builtin/projects/fa-hand-peace-o.png new file mode 100644 index 0000000000..20a9181f5c Binary files /dev/null and b/resources/builtin/projects/fa-hand-peace-o.png differ diff --git a/resources/builtin/projects/fa-hashtag.png b/resources/builtin/projects/fa-hashtag.png new file mode 100644 index 0000000000..3324b19a05 Binary files /dev/null and b/resources/builtin/projects/fa-hashtag.png differ diff --git a/resources/builtin/projects/fa-heart.png b/resources/builtin/projects/fa-heart.png new file mode 100644 index 0000000000..35733cacca Binary files /dev/null and b/resources/builtin/projects/fa-heart.png differ diff --git a/resources/builtin/projects/fa-internet-explorer.png b/resources/builtin/projects/fa-internet-explorer.png new file mode 100644 index 0000000000..34d30aabd9 Binary files /dev/null and b/resources/builtin/projects/fa-internet-explorer.png differ diff --git a/resources/builtin/projects/fa-key.png b/resources/builtin/projects/fa-key.png new file mode 100644 index 0000000000..8b7f810fe5 Binary files /dev/null and b/resources/builtin/projects/fa-key.png differ diff --git a/resources/builtin/projects/fa-legal.png b/resources/builtin/projects/fa-legal.png new file mode 100644 index 0000000000..52d217f6ba Binary files /dev/null and b/resources/builtin/projects/fa-legal.png differ diff --git a/resources/builtin/projects/fa-linux.png b/resources/builtin/projects/fa-linux.png new file mode 100644 index 0000000000..e0defe6671 Binary files /dev/null and b/resources/builtin/projects/fa-linux.png differ diff --git a/resources/builtin/projects/fa-lock.png b/resources/builtin/projects/fa-lock.png new file mode 100644 index 0000000000..4c7f552c65 Binary files /dev/null and b/resources/builtin/projects/fa-lock.png differ diff --git a/resources/builtin/projects/fa-map-marker.png b/resources/builtin/projects/fa-map-marker.png new file mode 100644 index 0000000000..865175bd9a Binary files /dev/null and b/resources/builtin/projects/fa-map-marker.png differ diff --git a/resources/builtin/projects/fa-microphone.png b/resources/builtin/projects/fa-microphone.png new file mode 100644 index 0000000000..d279fe6934 Binary files /dev/null and b/resources/builtin/projects/fa-microphone.png differ diff --git a/resources/builtin/projects/fa-mobile.png b/resources/builtin/projects/fa-mobile.png new file mode 100644 index 0000000000..3147473cb7 Binary files /dev/null and b/resources/builtin/projects/fa-mobile.png differ diff --git a/resources/builtin/projects/fa-money.png b/resources/builtin/projects/fa-money.png new file mode 100644 index 0000000000..e0823759e2 Binary files /dev/null and b/resources/builtin/projects/fa-money.png differ diff --git a/resources/builtin/projects/fa-phone.png b/resources/builtin/projects/fa-phone.png new file mode 100644 index 0000000000..ad5f77913f Binary files /dev/null and b/resources/builtin/projects/fa-phone.png differ diff --git a/resources/builtin/projects/fa-pie-chart.png b/resources/builtin/projects/fa-pie-chart.png new file mode 100644 index 0000000000..23fefc60c3 Binary files /dev/null and b/resources/builtin/projects/fa-pie-chart.png differ diff --git a/resources/builtin/projects/fa-rebel.png b/resources/builtin/projects/fa-rebel.png new file mode 100644 index 0000000000..1ada36553b Binary files /dev/null and b/resources/builtin/projects/fa-rebel.png differ diff --git a/resources/builtin/projects/fa-reddit-alien.png b/resources/builtin/projects/fa-reddit-alien.png new file mode 100644 index 0000000000..897eca4f39 Binary files /dev/null and b/resources/builtin/projects/fa-reddit-alien.png differ diff --git a/resources/builtin/projects/fa-safari.png b/resources/builtin/projects/fa-safari.png new file mode 100644 index 0000000000..fc056a7388 Binary files /dev/null and b/resources/builtin/projects/fa-safari.png differ diff --git a/resources/builtin/projects/fa-search.png b/resources/builtin/projects/fa-search.png new file mode 100644 index 0000000000..e4135af53a Binary files /dev/null and b/resources/builtin/projects/fa-search.png differ diff --git a/resources/builtin/projects/fa-server.png b/resources/builtin/projects/fa-server.png new file mode 100644 index 0000000000..3369e094b7 Binary files /dev/null and b/resources/builtin/projects/fa-server.png differ diff --git a/resources/builtin/projects/fa-shopping-cart.png b/resources/builtin/projects/fa-shopping-cart.png new file mode 100644 index 0000000000..5a623e9b62 Binary files /dev/null and b/resources/builtin/projects/fa-shopping-cart.png differ diff --git a/resources/builtin/projects/fa-sitemap.png b/resources/builtin/projects/fa-sitemap.png new file mode 100644 index 0000000000..81cbe5406d Binary files /dev/null and b/resources/builtin/projects/fa-sitemap.png differ diff --git a/resources/builtin/projects/fa-star.png b/resources/builtin/projects/fa-star.png new file mode 100644 index 0000000000..02b66e7ef2 Binary files /dev/null and b/resources/builtin/projects/fa-star.png differ diff --git a/resources/builtin/projects/fa-tablet.png b/resources/builtin/projects/fa-tablet.png new file mode 100644 index 0000000000..263e50d733 Binary files /dev/null and b/resources/builtin/projects/fa-tablet.png differ diff --git a/resources/builtin/projects/fa-tag.png b/resources/builtin/projects/fa-tag.png new file mode 100644 index 0000000000..558fbc40fb Binary files /dev/null and b/resources/builtin/projects/fa-tag.png differ diff --git a/resources/builtin/projects/fa-tags.png b/resources/builtin/projects/fa-tags.png new file mode 100644 index 0000000000..a491bdefbe Binary files /dev/null and b/resources/builtin/projects/fa-tags.png differ diff --git a/resources/builtin/projects/fa-trash-o.png b/resources/builtin/projects/fa-trash-o.png new file mode 100644 index 0000000000..03c0f0362a Binary files /dev/null and b/resources/builtin/projects/fa-trash-o.png differ diff --git a/resources/builtin/projects/fa-truck.png b/resources/builtin/projects/fa-truck.png new file mode 100644 index 0000000000..bb67c3157a Binary files /dev/null and b/resources/builtin/projects/fa-truck.png differ diff --git a/resources/builtin/projects/fa-twitter.png b/resources/builtin/projects/fa-twitter.png new file mode 100644 index 0000000000..5dd349420c Binary files /dev/null and b/resources/builtin/projects/fa-twitter.png differ diff --git a/resources/builtin/projects/fa-umbrella.png b/resources/builtin/projects/fa-umbrella.png new file mode 100644 index 0000000000..5369f45840 Binary files /dev/null and b/resources/builtin/projects/fa-umbrella.png differ diff --git a/resources/builtin/projects/fa-university.png b/resources/builtin/projects/fa-university.png new file mode 100644 index 0000000000..5d523182e7 Binary files /dev/null and b/resources/builtin/projects/fa-university.png differ diff --git a/resources/builtin/projects/fa-user-secret.png b/resources/builtin/projects/fa-user-secret.png new file mode 100644 index 0000000000..c84267103c Binary files /dev/null and b/resources/builtin/projects/fa-user-secret.png differ diff --git a/resources/builtin/projects/fa-user.png b/resources/builtin/projects/fa-user.png new file mode 100644 index 0000000000..62c77a6729 Binary files /dev/null and b/resources/builtin/projects/fa-user.png differ diff --git a/resources/builtin/projects/fa-users.png b/resources/builtin/projects/fa-users.png new file mode 100644 index 0000000000..93d0a2f8bc Binary files /dev/null and b/resources/builtin/projects/fa-users.png differ diff --git a/resources/builtin/projects/fa-warning.png b/resources/builtin/projects/fa-warning.png new file mode 100644 index 0000000000..a950cb7e8e Binary files /dev/null and b/resources/builtin/projects/fa-warning.png differ diff --git a/resources/builtin/projects/fa-wheelchair.png b/resources/builtin/projects/fa-wheelchair.png new file mode 100644 index 0000000000..602f744a46 Binary files /dev/null and b/resources/builtin/projects/fa-wheelchair.png differ diff --git a/resources/builtin/projects/fa-windows.png b/resources/builtin/projects/fa-windows.png new file mode 100644 index 0000000000..5e7c6e6acf Binary files /dev/null and b/resources/builtin/projects/fa-windows.png differ diff --git a/resources/builtin/projects/v3/archive.png b/resources/builtin/projects/v3/archive.png new file mode 100644 index 0000000000..77ff79e555 Binary files /dev/null and b/resources/builtin/projects/v3/archive.png differ diff --git a/resources/builtin/projects/v3/basic-book.png b/resources/builtin/projects/v3/basic-book.png new file mode 100644 index 0000000000..b2a6d99415 Binary files /dev/null and b/resources/builtin/projects/v3/basic-book.png differ diff --git a/resources/builtin/projects/v3/book.png b/resources/builtin/projects/v3/book.png new file mode 100644 index 0000000000..eceb0bfb4d Binary files /dev/null and b/resources/builtin/projects/v3/book.png differ diff --git a/resources/builtin/projects/v3/briefcase.png b/resources/builtin/projects/v3/briefcase.png new file mode 100644 index 0000000000..c6abf5ed42 Binary files /dev/null and b/resources/builtin/projects/v3/briefcase.png differ diff --git a/resources/builtin/projects/v3/bug.png b/resources/builtin/projects/v3/bug.png new file mode 100644 index 0000000000..bb2948a93a Binary files /dev/null and b/resources/builtin/projects/v3/bug.png differ diff --git a/resources/builtin/projects/v3/calendar.png b/resources/builtin/projects/v3/calendar.png new file mode 100644 index 0000000000..6ebdc2e08c Binary files /dev/null and b/resources/builtin/projects/v3/calendar.png differ diff --git a/resources/builtin/projects/v3/clipboard.png b/resources/builtin/projects/v3/clipboard.png new file mode 100644 index 0000000000..60e2acd4f4 Binary files /dev/null and b/resources/builtin/projects/v3/clipboard.png differ diff --git a/resources/builtin/projects/v3/cloud.png b/resources/builtin/projects/v3/cloud.png new file mode 100644 index 0000000000..efb644001f Binary files /dev/null and b/resources/builtin/projects/v3/cloud.png differ diff --git a/resources/builtin/projects/v3/contact.png b/resources/builtin/projects/v3/contact.png new file mode 100644 index 0000000000..6b3095dc3d Binary files /dev/null and b/resources/builtin/projects/v3/contact.png differ diff --git a/resources/builtin/projects/v3/creditcard.png b/resources/builtin/projects/v3/creditcard.png new file mode 100644 index 0000000000..d231c9437d Binary files /dev/null and b/resources/builtin/projects/v3/creditcard.png differ diff --git a/resources/builtin/projects/v3/database.png b/resources/builtin/projects/v3/database.png new file mode 100644 index 0000000000..9e44c0ec58 Binary files /dev/null and b/resources/builtin/projects/v3/database.png differ diff --git a/resources/builtin/projects/v3/desktop.png b/resources/builtin/projects/v3/desktop.png new file mode 100644 index 0000000000..cf6f80eeaf Binary files /dev/null and b/resources/builtin/projects/v3/desktop.png differ diff --git a/resources/builtin/projects/v3/discussion.png b/resources/builtin/projects/v3/discussion.png new file mode 100644 index 0000000000..e4519d664f Binary files /dev/null and b/resources/builtin/projects/v3/discussion.png differ diff --git a/resources/builtin/projects/v3/download.png b/resources/builtin/projects/v3/download.png new file mode 100644 index 0000000000..f086222212 Binary files /dev/null and b/resources/builtin/projects/v3/download.png differ diff --git a/resources/builtin/projects/v3/experimental.png b/resources/builtin/projects/v3/experimental.png new file mode 100644 index 0000000000..5bb05ac100 Binary files /dev/null and b/resources/builtin/projects/v3/experimental.png differ diff --git a/resources/builtin/projects/v3/flag.png b/resources/builtin/projects/v3/flag.png new file mode 100644 index 0000000000..c7d2563115 Binary files /dev/null and b/resources/builtin/projects/v3/flag.png differ diff --git a/resources/builtin/projects/v3/folder.png b/resources/builtin/projects/v3/folder.png new file mode 100644 index 0000000000..cac0f9fbfa Binary files /dev/null and b/resources/builtin/projects/v3/folder.png differ diff --git a/resources/builtin/projects/v3/gears.png b/resources/builtin/projects/v3/gears.png new file mode 100644 index 0000000000..ecbef1a9cf Binary files /dev/null and b/resources/builtin/projects/v3/gears.png differ diff --git a/resources/builtin/projects/v3/gold.png b/resources/builtin/projects/v3/gold.png new file mode 100644 index 0000000000..630f45bc61 Binary files /dev/null and b/resources/builtin/projects/v3/gold.png differ diff --git a/resources/builtin/projects/v3/home.png b/resources/builtin/projects/v3/home.png new file mode 100644 index 0000000000..808d639f0d Binary files /dev/null and b/resources/builtin/projects/v3/home.png differ diff --git a/resources/builtin/projects/v3/library.png b/resources/builtin/projects/v3/library.png new file mode 100644 index 0000000000..1f9ea1a64a Binary files /dev/null and b/resources/builtin/projects/v3/library.png differ diff --git a/resources/builtin/projects/v3/lightbulb.png b/resources/builtin/projects/v3/lightbulb.png new file mode 100644 index 0000000000..1aba0d32f3 Binary files /dev/null and b/resources/builtin/projects/v3/lightbulb.png differ diff --git a/resources/builtin/projects/v3/lock.png b/resources/builtin/projects/v3/lock.png new file mode 100644 index 0000000000..839cb1e5bf Binary files /dev/null and b/resources/builtin/projects/v3/lock.png differ diff --git a/resources/builtin/projects/v3/mail.png b/resources/builtin/projects/v3/mail.png new file mode 100644 index 0000000000..17f91ea881 Binary files /dev/null and b/resources/builtin/projects/v3/mail.png differ diff --git a/resources/builtin/projects/v3/manage.png b/resources/builtin/projects/v3/manage.png new file mode 100644 index 0000000000..7804360a29 Binary files /dev/null and b/resources/builtin/projects/v3/manage.png differ diff --git a/resources/builtin/projects/v3/marker.png b/resources/builtin/projects/v3/marker.png new file mode 100644 index 0000000000..c2c753a006 Binary files /dev/null and b/resources/builtin/projects/v3/marker.png differ diff --git a/resources/builtin/projects/v3/mobile.png b/resources/builtin/projects/v3/mobile.png new file mode 100644 index 0000000000..fbb1985015 Binary files /dev/null and b/resources/builtin/projects/v3/mobile.png differ diff --git a/resources/builtin/projects/v3/one-server.png b/resources/builtin/projects/v3/one-server.png new file mode 100644 index 0000000000..d8fbff8a17 Binary files /dev/null and b/resources/builtin/projects/v3/one-server.png differ diff --git a/resources/builtin/projects/v3/organization.png b/resources/builtin/projects/v3/organization.png new file mode 100644 index 0000000000..1957dd8e68 Binary files /dev/null and b/resources/builtin/projects/v3/organization.png differ diff --git a/resources/builtin/projects/v3/people.png b/resources/builtin/projects/v3/people.png new file mode 100644 index 0000000000..5bb42656df Binary files /dev/null and b/resources/builtin/projects/v3/people.png differ diff --git a/resources/builtin/projects/v3/piechart.png b/resources/builtin/projects/v3/piechart.png new file mode 100644 index 0000000000..4c707ed6ff Binary files /dev/null and b/resources/builtin/projects/v3/piechart.png differ diff --git a/resources/builtin/projects/v3/police-badge.png b/resources/builtin/projects/v3/police-badge.png new file mode 100644 index 0000000000..8b729bc35a Binary files /dev/null and b/resources/builtin/projects/v3/police-badge.png differ diff --git a/resources/builtin/projects/v3/purchase-order.png b/resources/builtin/projects/v3/purchase-order.png new file mode 100644 index 0000000000..906d72a529 Binary files /dev/null and b/resources/builtin/projects/v3/purchase-order.png differ diff --git a/resources/builtin/projects/v3/robot.png b/resources/builtin/projects/v3/robot.png new file mode 100644 index 0000000000..317544f2dd Binary files /dev/null and b/resources/builtin/projects/v3/robot.png differ diff --git a/resources/builtin/projects/v3/rocket.png b/resources/builtin/projects/v3/rocket.png new file mode 100644 index 0000000000..f5a758ff81 Binary files /dev/null and b/resources/builtin/projects/v3/rocket.png differ diff --git a/resources/builtin/projects/v3/server-documentation.png b/resources/builtin/projects/v3/server-documentation.png new file mode 100644 index 0000000000..d71dd53b72 Binary files /dev/null and b/resources/builtin/projects/v3/server-documentation.png differ diff --git a/resources/builtin/projects/v3/servers.png b/resources/builtin/projects/v3/servers.png new file mode 100644 index 0000000000..df20dd6492 Binary files /dev/null and b/resources/builtin/projects/v3/servers.png differ diff --git a/resources/builtin/projects/v3/shield.png b/resources/builtin/projects/v3/shield.png new file mode 100644 index 0000000000..fd938307fd Binary files /dev/null and b/resources/builtin/projects/v3/shield.png differ diff --git a/resources/builtin/projects/v3/silver.png b/resources/builtin/projects/v3/silver.png new file mode 100644 index 0000000000..afe0e84b35 Binary files /dev/null and b/resources/builtin/projects/v3/silver.png differ diff --git a/resources/builtin/projects/v3/sitemap.png b/resources/builtin/projects/v3/sitemap.png new file mode 100644 index 0000000000..8ee6e232b4 Binary files /dev/null and b/resources/builtin/projects/v3/sitemap.png differ diff --git a/resources/builtin/projects/v3/support.png b/resources/builtin/projects/v3/support.png new file mode 100644 index 0000000000..88a9746708 Binary files /dev/null and b/resources/builtin/projects/v3/support.png differ diff --git a/resources/builtin/projects/v3/sword.png b/resources/builtin/projects/v3/sword.png new file mode 100644 index 0000000000..30040633fd Binary files /dev/null and b/resources/builtin/projects/v3/sword.png differ diff --git a/resources/builtin/projects/v3/tag.png b/resources/builtin/projects/v3/tag.png new file mode 100644 index 0000000000..c91bac473a Binary files /dev/null and b/resources/builtin/projects/v3/tag.png differ diff --git a/resources/builtin/projects/v3/three-servers.png b/resources/builtin/projects/v3/three-servers.png new file mode 100644 index 0000000000..3361d8967b Binary files /dev/null and b/resources/builtin/projects/v3/three-servers.png differ diff --git a/resources/builtin/projects/v3/trash.png b/resources/builtin/projects/v3/trash.png new file mode 100644 index 0000000000..ce3f557d44 Binary files /dev/null and b/resources/builtin/projects/v3/trash.png differ diff --git a/resources/builtin/projects/v3/truck.png b/resources/builtin/projects/v3/truck.png new file mode 100644 index 0000000000..3c903ea58b Binary files /dev/null and b/resources/builtin/projects/v3/truck.png differ diff --git a/resources/builtin/projects/v3/two-servers.png b/resources/builtin/projects/v3/two-servers.png new file mode 100644 index 0000000000..d5d408d9ad Binary files /dev/null and b/resources/builtin/projects/v3/two-servers.png differ diff --git a/resources/builtin/projects/v3/umbrella.png b/resources/builtin/projects/v3/umbrella.png new file mode 100644 index 0000000000..98c7c12365 Binary files /dev/null and b/resources/builtin/projects/v3/umbrella.png differ diff --git a/resources/builtin/projects/v3/upload.png b/resources/builtin/projects/v3/upload.png new file mode 100644 index 0000000000..13e33507bb Binary files /dev/null and b/resources/builtin/projects/v3/upload.png differ diff --git a/resources/builtin/projects/v3/wand.png b/resources/builtin/projects/v3/wand.png new file mode 100644 index 0000000000..6de1cb55ab Binary files /dev/null and b/resources/builtin/projects/v3/wand.png differ diff --git a/resources/builtin/repo/building.png b/resources/builtin/repo/building.png new file mode 100644 index 0000000000..d3ab581fe8 Binary files /dev/null and b/resources/builtin/repo/building.png differ diff --git a/resources/builtin/repo/cloud.png b/resources/builtin/repo/cloud.png new file mode 100644 index 0000000000..51a40d6cbe Binary files /dev/null and b/resources/builtin/repo/cloud.png differ diff --git a/resources/builtin/repo/code.png b/resources/builtin/repo/code.png new file mode 100644 index 0000000000..aeedf4a6ce Binary files /dev/null and b/resources/builtin/repo/code.png differ diff --git a/resources/builtin/repo/commit.png b/resources/builtin/repo/commit.png new file mode 100644 index 0000000000..e6d251f095 Binary files /dev/null and b/resources/builtin/repo/commit.png differ diff --git a/resources/builtin/repo/database.png b/resources/builtin/repo/database.png new file mode 100644 index 0000000000..4c9ec543fa Binary files /dev/null and b/resources/builtin/repo/database.png differ diff --git a/resources/builtin/repo/desktop.png b/resources/builtin/repo/desktop.png new file mode 100644 index 0000000000..f75cc54e43 Binary files /dev/null and b/resources/builtin/repo/desktop.png differ diff --git a/resources/builtin/repo/gears.png b/resources/builtin/repo/gears.png new file mode 100644 index 0000000000..ecbef1a9cf Binary files /dev/null and b/resources/builtin/repo/gears.png differ diff --git a/resources/builtin/repo/globe.png b/resources/builtin/repo/globe.png new file mode 100644 index 0000000000..b9ca72ffa2 Binary files /dev/null and b/resources/builtin/repo/globe.png differ diff --git a/resources/builtin/repo/locked.png b/resources/builtin/repo/locked.png new file mode 100644 index 0000000000..34074731a0 Binary files /dev/null and b/resources/builtin/repo/locked.png differ diff --git a/resources/builtin/repo/microchip.png b/resources/builtin/repo/microchip.png new file mode 100644 index 0000000000..25da5810de Binary files /dev/null and b/resources/builtin/repo/microchip.png differ diff --git a/resources/builtin/repo/mobile.png b/resources/builtin/repo/mobile.png new file mode 100644 index 0000000000..5c59ad9b07 Binary files /dev/null and b/resources/builtin/repo/mobile.png differ diff --git a/resources/builtin/repo/repo-git.png b/resources/builtin/repo/repo-git.png new file mode 100644 index 0000000000..b8dfed8ad2 Binary files /dev/null and b/resources/builtin/repo/repo-git.png differ diff --git a/resources/builtin/repo/repo-hg.png b/resources/builtin/repo/repo-hg.png new file mode 100644 index 0000000000..d12c2e5339 Binary files /dev/null and b/resources/builtin/repo/repo-hg.png differ diff --git a/resources/builtin/repo/repo-svn.png b/resources/builtin/repo/repo-svn.png new file mode 100644 index 0000000000..702f36e794 Binary files /dev/null and b/resources/builtin/repo/repo-svn.png differ diff --git a/resources/builtin/repo/repo.png b/resources/builtin/repo/repo.png new file mode 100644 index 0000000000..b3706f91bb Binary files /dev/null and b/resources/builtin/repo/repo.png differ diff --git a/resources/builtin/repo/servers.png b/resources/builtin/repo/servers.png new file mode 100644 index 0000000000..3adb8a2fcd Binary files /dev/null and b/resources/builtin/repo/servers.png differ diff --git a/resources/builtin/user0.png b/resources/builtin/user0.png new file mode 100644 index 0000000000..7d2514eca6 Binary files /dev/null and b/resources/builtin/user0.png differ diff --git a/resources/builtin/user1.png b/resources/builtin/user1.png new file mode 100644 index 0000000000..4c9860f79a Binary files /dev/null and b/resources/builtin/user1.png differ diff --git a/resources/builtin/user2.png b/resources/builtin/user2.png new file mode 100644 index 0000000000..7ee5ac105a Binary files /dev/null and b/resources/builtin/user2.png differ diff --git a/resources/builtin/user3.png b/resources/builtin/user3.png new file mode 100644 index 0000000000..502ac68d89 Binary files /dev/null and b/resources/builtin/user3.png differ diff --git a/resources/builtin/user4.png b/resources/builtin/user4.png new file mode 100644 index 0000000000..ebe68205ad Binary files /dev/null and b/resources/builtin/user4.png differ diff --git a/resources/builtin/user5.png b/resources/builtin/user5.png new file mode 100644 index 0000000000..b8e988d6c3 Binary files /dev/null and b/resources/builtin/user5.png differ diff --git a/resources/builtin/user6.png b/resources/builtin/user6.png new file mode 100644 index 0000000000..4357427338 Binary files /dev/null and b/resources/builtin/user6.png differ diff --git a/resources/builtin/user7.png b/resources/builtin/user7.png new file mode 100644 index 0000000000..cf19a42fe6 Binary files /dev/null and b/resources/builtin/user7.png differ diff --git a/resources/builtin/user8.png b/resources/builtin/user8.png new file mode 100644 index 0000000000..5f060aa3b2 Binary files /dev/null and b/resources/builtin/user8.png differ diff --git a/resources/builtin/user9.png b/resources/builtin/user9.png new file mode 100644 index 0000000000..bcf4ac1ac3 Binary files /dev/null and b/resources/builtin/user9.png differ diff --git a/resources/celerity/map.php b/resources/celerity/map.php new file mode 100644 index 0000000000..c29df70b1e --- /dev/null +++ b/resources/celerity/map.php @@ -0,0 +1,2443 @@ + array( + 'conpherence.pkg.css' => '0e3cf785', + 'conpherence.pkg.js' => '020aebcf', + 'core.pkg.css' => 'b816811e', + 'core.pkg.js' => 'd2de90d9', + 'dark-console.pkg.js' => '187792c2', + 'differential.pkg.css' => 'ffb69e3d', + 'differential.pkg.js' => 'c60bec1b', + 'diffusion.pkg.css' => '42c75c37', + 'diffusion.pkg.js' => '78c9885d', + 'maniphest.pkg.css' => '35995d6d', + 'maniphest.pkg.js' => 'c9308721', + 'rsrc/audio/basic/alert.mp3' => '17889334', + 'rsrc/audio/basic/bing.mp3' => 'a817a0c3', + 'rsrc/audio/basic/pock.mp3' => '0fa843d0', + 'rsrc/audio/basic/tap.mp3' => '02d16994', + 'rsrc/audio/basic/ting.mp3' => 'a6b6540e', + 'rsrc/css/aphront/aphront-bars.css' => '4a327b4a', + 'rsrc/css/aphront/dark-console.css' => '7f06cda2', + 'rsrc/css/aphront/dialog-view.css' => '6f4ea703', + 'rsrc/css/aphront/list-filter-view.css' => 'feb64255', + 'rsrc/css/aphront/multi-column.css' => 'fbc00ba3', + 'rsrc/css/aphront/notification.css' => '30240bd2', + 'rsrc/css/aphront/panel-view.css' => '46923d46', + 'rsrc/css/aphront/phabricator-nav-view.css' => '423f92cc', + 'rsrc/css/aphront/table-view.css' => '0bb61df1', + 'rsrc/css/aphront/tokenizer.css' => '34e2a838', + 'rsrc/css/aphront/tooltip.css' => 'e3f2412f', + 'rsrc/css/aphront/typeahead-browse.css' => 'b7ed02d2', + 'rsrc/css/aphront/typeahead.css' => '8779483d', + 'rsrc/css/application/almanac/almanac.css' => '2e050f4f', + 'rsrc/css/application/auth/auth.css' => 'c2f23d74', + 'rsrc/css/application/base/main-menu-view.css' => 'bcec20f0', + 'rsrc/css/application/base/notification-menu.css' => '4df1ee30', + 'rsrc/css/application/base/phui-theme.css' => '35883b37', + 'rsrc/css/application/base/standard-page-view.css' => 'a374f94c', + 'rsrc/css/application/chatlog/chatlog.css' => 'abdc76ee', + 'rsrc/css/application/conduit/conduit-api.css' => 'ce2cfc41', + 'rsrc/css/application/config/config-options.css' => '16c920ae', + 'rsrc/css/application/config/config-template.css' => '20babf50', + 'rsrc/css/application/config/setup-issue.css' => '5eed85b2', + 'rsrc/css/application/config/unhandled-exception.css' => '9ecfc00d', + 'rsrc/css/application/conpherence/color.css' => 'b17746b0', + 'rsrc/css/application/conpherence/durable-column.css' => '2d57072b', + 'rsrc/css/application/conpherence/header-pane.css' => 'c9a3db8e', + 'rsrc/css/application/conpherence/menu.css' => '67f4680d', + 'rsrc/css/application/conpherence/message-pane.css' => 'd244db1e', + 'rsrc/css/application/conpherence/notification.css' => '6a3d4e58', + 'rsrc/css/application/conpherence/participant-pane.css' => '69e0058a', + 'rsrc/css/application/conpherence/transaction.css' => '3a3f5e7e', + 'rsrc/css/application/contentsource/content-source-view.css' => 'cdf0d579', + 'rsrc/css/application/countdown/timer.css' => 'bff8012f', + 'rsrc/css/application/daemon/bulk-job.css' => '73af99f5', + 'rsrc/css/application/dashboard/dashboard.css' => '5a205b9d', + 'rsrc/css/application/diff/diff-tree-view.css' => 'e2d3e222', + 'rsrc/css/application/diff/inline-comment-summary.css' => '81eb368d', + 'rsrc/css/application/differential/add-comment.css' => '7e5900d9', + 'rsrc/css/application/differential/changeset-view.css' => '60c3d405', + 'rsrc/css/application/differential/core.css' => '7300a73e', + 'rsrc/css/application/differential/phui-inline-comment.css' => '9863a85e', + 'rsrc/css/application/differential/revision-comment.css' => '7dbc8d1d', + 'rsrc/css/application/differential/revision-history.css' => '237a2979', + 'rsrc/css/application/differential/revision-list.css' => '93d2df7d', + 'rsrc/css/application/differential/table-of-contents.css' => 'bba788b9', + 'rsrc/css/application/diffusion/diffusion-icons.css' => '23b31a1b', + 'rsrc/css/application/diffusion/diffusion-readme.css' => 'b68a76e4', + 'rsrc/css/application/diffusion/diffusion-repository.css' => 'b89e8c6c', + 'rsrc/css/application/diffusion/diffusion.css' => 'e46232d6', + 'rsrc/css/application/feed/feed.css' => 'd8b6e3f8', + 'rsrc/css/application/files/global-drag-and-drop.css' => '1d2713a4', + 'rsrc/css/application/flag/flag.css' => '2b77be8d', + 'rsrc/css/application/harbormaster/harbormaster.css' => '8dfe16b2', + 'rsrc/css/application/herald/herald-test.css' => '7e7bbdae', + 'rsrc/css/application/herald/herald.css' => '648d39e2', + 'rsrc/css/application/maniphest/report.css' => '3d53188b', + 'rsrc/css/application/maniphest/task-edit.css' => '272daa84', + 'rsrc/css/application/maniphest/task-summary.css' => '61d1667e', + 'rsrc/css/application/objectselector/object-selector.css' => 'ee77366f', + 'rsrc/css/application/owners/owners-path-editor.css' => 'fa7c13ef', + 'rsrc/css/application/paste/paste.css' => 'b37bcd38', + 'rsrc/css/application/people/people-picture-menu-item.css' => 'fe8e07cf', + 'rsrc/css/application/people/people-profile.css' => '2ea2daa1', + 'rsrc/css/application/phame/phame.css' => 'bb442327', + 'rsrc/css/application/pholio/pholio-edit.css' => '4df55b3b', + 'rsrc/css/application/pholio/pholio-inline-comments.css' => '722b48c2', + 'rsrc/css/application/pholio/pholio.css' => '88ef5ef1', + 'rsrc/css/application/phortune/phortune-credit-card-form.css' => '3b9868a8', + 'rsrc/css/application/phortune/phortune-invoice.css' => '4436b241', + 'rsrc/css/application/phortune/phortune.css' => '508a1a5e', + 'rsrc/css/application/phrequent/phrequent.css' => 'bd79cc67', + 'rsrc/css/application/phriction/phriction-document-css.css' => '03380da0', + 'rsrc/css/application/policy/policy-edit.css' => '8794e2ed', + 'rsrc/css/application/policy/policy-transaction-detail.css' => 'c02b8384', + 'rsrc/css/application/policy/policy.css' => 'ceb56a08', + 'rsrc/css/application/ponder/ponder-view.css' => '05a09d0a', + 'rsrc/css/application/project/project-card-view.css' => 'a9f2c2dd', + 'rsrc/css/application/project/project-triggers.css' => 'cd9c8bb9', + 'rsrc/css/application/project/project-view.css' => '567858b3', + 'rsrc/css/application/search/application-search-view.css' => '0f7c06d8', + 'rsrc/css/application/search/search-results.css' => '9ea70ace', + 'rsrc/css/application/slowvote/slowvote.css' => '1694baed', + 'rsrc/css/application/tokens/tokens.css' => 'ce5a50bd', + 'rsrc/css/application/uiexample/example.css' => 'b4795059', + 'rsrc/css/core/core.css' => 'b3ebd90d', + 'rsrc/css/core/remarkup.css' => '5baa3bd9', + 'rsrc/css/core/syntax.css' => '548567f6', + 'rsrc/css/core/z-index.css' => 'ac3bfcd4', + 'rsrc/css/diviner/diviner-shared.css' => '4bd263b0', + 'rsrc/css/font/font-awesome.css' => '3883938a', + 'rsrc/css/font/font-lato.css' => '23631304', + 'rsrc/css/font/phui-font-icon-base.css' => '303c9b87', + 'rsrc/css/fuel/fuel-grid.css' => '66697240', + 'rsrc/css/fuel/fuel-handle-list.css' => '2c4cbeca', + 'rsrc/css/fuel/fuel-map.css' => 'd6e31510', + 'rsrc/css/fuel/fuel-menu.css' => '21f5d199', + 'rsrc/css/layout/phabricator-source-code-view.css' => '03d7ac28', + 'rsrc/css/phui/button/phui-button-bar.css' => 'a4aa75c4', + 'rsrc/css/phui/button/phui-button-simple.css' => '1ff278aa', + 'rsrc/css/phui/button/phui-button.css' => 'ea704902', + 'rsrc/css/phui/calendar/phui-calendar-day.css' => '9597d706', + 'rsrc/css/phui/calendar/phui-calendar-list.css' => 'ccd7e4e2', + 'rsrc/css/phui/calendar/phui-calendar-month.css' => 'cb758c42', + 'rsrc/css/phui/calendar/phui-calendar.css' => 'f11073aa', + 'rsrc/css/phui/object-item/phui-oi-big-ui.css' => 'fa74cc35', + 'rsrc/css/phui/object-item/phui-oi-color.css' => 'b517bfa0', + 'rsrc/css/phui/object-item/phui-oi-drag-ui.css' => 'da15d3dc', + 'rsrc/css/phui/object-item/phui-oi-flush-ui.css' => '490e2e2e', + 'rsrc/css/phui/object-item/phui-oi-list-view.css' => 'af98a277', + 'rsrc/css/phui/object-item/phui-oi-simple-ui.css' => '6a30fa46', + 'rsrc/css/phui/phui-action-list.css' => '1b0085b2', + 'rsrc/css/phui/phui-action-panel.css' => '6c386cbf', + 'rsrc/css/phui/phui-badge.css' => '666e25ad', + 'rsrc/css/phui/phui-basic-nav-view.css' => '56ebd66d', + 'rsrc/css/phui/phui-big-info-view.css' => '362ad37b', + 'rsrc/css/phui/phui-box.css' => '5ed3b8cb', + 'rsrc/css/phui/phui-bulk-editor.css' => '374d5e30', + 'rsrc/css/phui/phui-chart.css' => '14df9ae3', + 'rsrc/css/phui/phui-cms.css' => '8c05c41e', + 'rsrc/css/phui/phui-comment-form.css' => '68a2d99a', + 'rsrc/css/phui/phui-comment-panel.css' => 'ec4e31c0', + 'rsrc/css/phui/phui-crumbs-view.css' => '614f43cf', + 'rsrc/css/phui/phui-curtain-object-ref-view.css' => '51d93266', + 'rsrc/css/phui/phui-curtain-view.css' => '68c5efb6', + 'rsrc/css/phui/phui-document-pro.css' => 'b9613a10', + 'rsrc/css/phui/phui-document-summary.css' => 'b068eed1', + 'rsrc/css/phui/phui-document.css' => '52b748a5', + 'rsrc/css/phui/phui-feed-story.css' => 'a0c05029', + 'rsrc/css/phui/phui-fontkit.css' => '1ec937e5', + 'rsrc/css/phui/phui-form-view.css' => '01b796c0', + 'rsrc/css/phui/phui-form.css' => '1f177cb7', + 'rsrc/css/phui/phui-formation-view.css' => 'd2dec8ed', + 'rsrc/css/phui/phui-head-thing.css' => 'd7f293df', + 'rsrc/css/phui/phui-header-view.css' => '36c86a58', + 'rsrc/css/phui/phui-hovercard.css' => '6ca90fa0', + 'rsrc/css/phui/phui-icon-set-selector.css' => '7aa5f3ec', + 'rsrc/css/phui/phui-icon.css' => '4cbc684a', + 'rsrc/css/phui/phui-image-mask.css' => '62c7f4d2', + 'rsrc/css/phui/phui-info-view.css' => 'a10a909b', + 'rsrc/css/phui/phui-invisible-character-view.css' => 'c694c4a4', + 'rsrc/css/phui/phui-left-right.css' => '68513c34', + 'rsrc/css/phui/phui-lightbox.css' => '4ebf22da', + 'rsrc/css/phui/phui-list.css' => '0c04affd', + 'rsrc/css/phui/phui-object-box.css' => 'b8d7eea0', + 'rsrc/css/phui/phui-pager.css' => 'd022c7ad', + 'rsrc/css/phui/phui-pinboard-view.css' => '1f08f5d8', + 'rsrc/css/phui/phui-policy-section-view.css' => '139fdc64', + 'rsrc/css/phui/phui-property-list-view.css' => '5adf7078', + 'rsrc/css/phui/phui-remarkup-preview.css' => '91767007', + 'rsrc/css/phui/phui-segment-bar-view.css' => '5166b370', + 'rsrc/css/phui/phui-spacing.css' => 'b05cadc3', + 'rsrc/css/phui/phui-status.css' => '293b5dad', + 'rsrc/css/phui/phui-tag-view.css' => 'fb811341', + 'rsrc/css/phui/phui-timeline-view.css' => '2d32d7a9', + 'rsrc/css/phui/phui-two-column-view.css' => 'f96d319f', + 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'e86de308', + 'rsrc/css/phui/workboards/phui-workboard.css' => '74fc9d98', + 'rsrc/css/phui/workboards/phui-workcard.css' => '913441b6', + 'rsrc/css/phui/workboards/phui-workpanel.css' => '3ae89b20', + 'rsrc/css/sprite-login.css' => '18b368a6', + 'rsrc/css/sprite-tokens.css' => 'f1896dc5', + 'rsrc/css/syntax/syntax-default.css' => '055fc231', + 'rsrc/externals/d3/d3.min.js' => '9d068042', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.eot' => '23f8c698', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.ttf' => '70983df0', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff' => 'cd02f93b', + 'rsrc/externals/font/fontawesome/fontawesome-webfont.woff2' => '351fd46a', + 'rsrc/externals/font/lato/lato-bold.eot' => '7367aa5e', + 'rsrc/externals/font/lato/lato-bold.svg' => '681aa4f5', + 'rsrc/externals/font/lato/lato-bold.ttf' => '66d3c296', + 'rsrc/externals/font/lato/lato-bold.woff' => '89d9fba7', + 'rsrc/externals/font/lato/lato-bold.woff2' => '389fcdb1', + 'rsrc/externals/font/lato/lato-bolditalic.eot' => '03eeb4da', + 'rsrc/externals/font/lato/lato-bolditalic.svg' => 'f56fa11c', + 'rsrc/externals/font/lato/lato-bolditalic.ttf' => '9c3aec21', + 'rsrc/externals/font/lato/lato-bolditalic.woff' => 'bfbd0616', + 'rsrc/externals/font/lato/lato-bolditalic.woff2' => 'bc7d1274', + 'rsrc/externals/font/lato/lato-italic.eot' => '7db5b247', + 'rsrc/externals/font/lato/lato-italic.svg' => 'b1ae496f', + 'rsrc/externals/font/lato/lato-italic.ttf' => '43eed813', + 'rsrc/externals/font/lato/lato-italic.woff' => 'c28975e1', + 'rsrc/externals/font/lato/lato-italic.woff2' => 'fffc0d8c', + 'rsrc/externals/font/lato/lato-regular.eot' => '06e0c291', + 'rsrc/externals/font/lato/lato-regular.svg' => '3ad95f53', + 'rsrc/externals/font/lato/lato-regular.ttf' => 'e2e9c398', + 'rsrc/externals/font/lato/lato-regular.woff' => '0b13d332', + 'rsrc/externals/font/lato/lato-regular.woff2' => '8f846797', + 'rsrc/externals/javelin/core/Event.js' => 'c03f2fb4', + 'rsrc/externals/javelin/core/Stratcom.js' => '0889b835', + 'rsrc/externals/javelin/core/__tests__/event-stop-and-kill.js' => '048472d2', + 'rsrc/externals/javelin/core/__tests__/install.js' => '14a7e671', + 'rsrc/externals/javelin/core/__tests__/stratcom.js' => 'a28464bb', + 'rsrc/externals/javelin/core/__tests__/util.js' => 'e29a4354', + 'rsrc/externals/javelin/core/init.js' => '98e6504a', + 'rsrc/externals/javelin/core/init_node.js' => '16961339', + 'rsrc/externals/javelin/core/install.js' => '5902260c', + 'rsrc/externals/javelin/core/util.js' => 'edb4d8c9', + 'rsrc/externals/javelin/docs/Base.js' => '5a401d7d', + 'rsrc/externals/javelin/docs/onload.js' => 'ee58fb62', + 'rsrc/externals/javelin/ext/fx/Color.js' => '78f811c9', + 'rsrc/externals/javelin/ext/fx/FX.js' => '34450586', + 'rsrc/externals/javelin/ext/reactor/core/DynVal.js' => '202a2e85', + 'rsrc/externals/javelin/ext/reactor/core/Reactor.js' => '1c850a26', + 'rsrc/externals/javelin/ext/reactor/core/ReactorNode.js' => '72960bc1', + 'rsrc/externals/javelin/ext/reactor/core/ReactorNodeCalmer.js' => '225bbb98', + 'rsrc/externals/javelin/ext/reactor/dom/RDOM.js' => '6cfa0008', + 'rsrc/externals/javelin/ext/view/HTMLView.js' => 'f8c4e135', + 'rsrc/externals/javelin/ext/view/View.js' => '289bf236', + 'rsrc/externals/javelin/ext/view/ViewInterpreter.js' => '876506b6', + 'rsrc/externals/javelin/ext/view/ViewPlaceholder.js' => 'a9942052', + 'rsrc/externals/javelin/ext/view/ViewRenderer.js' => '9aae2b66', + 'rsrc/externals/javelin/ext/view/ViewVisitor.js' => '308f9fe4', + 'rsrc/externals/javelin/ext/view/__tests__/HTMLView.js' => '6e50a13f', + 'rsrc/externals/javelin/ext/view/__tests__/View.js' => 'd284be5d', + 'rsrc/externals/javelin/ext/view/__tests__/ViewInterpreter.js' => 'a9f35511', + 'rsrc/externals/javelin/ext/view/__tests__/ViewRenderer.js' => '3a1b81f6', + 'rsrc/externals/javelin/lib/Cookie.js' => '05d290ef', + 'rsrc/externals/javelin/lib/DOM.js' => 'e4c7622a', + 'rsrc/externals/javelin/lib/History.js' => '030b4f7a', + 'rsrc/externals/javelin/lib/JSON.js' => '541f81c3', + 'rsrc/externals/javelin/lib/Leader.js' => '0d2490ce', + 'rsrc/externals/javelin/lib/Mask.js' => '7c4d8998', + 'rsrc/externals/javelin/lib/Quicksand.js' => 'd3799cb4', + 'rsrc/externals/javelin/lib/Request.js' => '84e6891f', + 'rsrc/externals/javelin/lib/Resource.js' => '20514cc2', + 'rsrc/externals/javelin/lib/Routable.js' => '6a18c42e', + 'rsrc/externals/javelin/lib/Router.js' => '32755edb', + 'rsrc/externals/javelin/lib/Scrollbar.js' => 'a43ae2ae', + 'rsrc/externals/javelin/lib/Sound.js' => 'd4cc2d2a', + 'rsrc/externals/javelin/lib/URI.js' => '2e255291', + 'rsrc/externals/javelin/lib/Vector.js' => 'e9c80beb', + 'rsrc/externals/javelin/lib/WebSocket.js' => 'fdc13e4e', + 'rsrc/externals/javelin/lib/Workflow.js' => '945ff654', + 'rsrc/externals/javelin/lib/__tests__/Cookie.js' => 'ca686f71', + 'rsrc/externals/javelin/lib/__tests__/DOM.js' => '4566e249', + 'rsrc/externals/javelin/lib/__tests__/JSON.js' => '710377ae', + 'rsrc/externals/javelin/lib/__tests__/URI.js' => '6fff0c2b', + 'rsrc/externals/javelin/lib/__tests__/behavior.js' => '8426ebeb', + 'rsrc/externals/javelin/lib/behavior.js' => '1b6acc2a', + 'rsrc/externals/javelin/lib/control/tokenizer/Tokenizer.js' => '89a1ae3a', + 'rsrc/externals/javelin/lib/control/typeahead/Typeahead.js' => 'a4356cde', + 'rsrc/externals/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js' => 'a241536a', + 'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js' => '22ee68a5', + 'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js' => '23387297', + 'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js' => '5a79f6c3', + 'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadSource.js' => '8badee71', + 'rsrc/externals/javelin/lib/control/typeahead/source/TypeaheadStaticSource.js' => '80bff3af', + 'rsrc/favicons/favicon-16x16.png' => '4c51a03a', + 'rsrc/favicons/mask-icon.svg' => 'db699fe1', + 'rsrc/image/BFCFDA.png' => '74b5c88b', + 'rsrc/image/actions/edit.png' => 'fd987dff', + 'rsrc/image/avatar.png' => '0d17c6c4', + 'rsrc/image/checker_dark.png' => '7fc8fa7b', + 'rsrc/image/checker_light.png' => '3157a202', + 'rsrc/image/checker_lighter.png' => 'c45928c1', + 'rsrc/image/chevron-in.png' => '1aa2f88f', + 'rsrc/image/chevron-out.png' => 'c815e272', + 'rsrc/image/controls/checkbox-checked.png' => '1770d7a0', + 'rsrc/image/controls/checkbox-unchecked.png' => 'e1deba0a', + 'rsrc/image/d5d8e1.png' => '6764616e', + 'rsrc/image/darkload.gif' => '5bd41a89', + 'rsrc/image/divot.png' => '0fbe2453', + 'rsrc/image/examples/hero.png' => '5d8c4b21', + 'rsrc/image/grippy_texture.png' => 'a7d222b5', + 'rsrc/image/icon/fatcow/arrow_branch.png' => '98149d9f', + 'rsrc/image/icon/fatcow/arrow_merge.png' => 'e142f4f8', + 'rsrc/image/icon/fatcow/calendar_edit.png' => '5ff44a08', + 'rsrc/image/icon/fatcow/document_black.png' => 'd3515fa5', + 'rsrc/image/icon/fatcow/flag_blue.png' => '54db2e5c', + 'rsrc/image/icon/fatcow/flag_finish.png' => '2953a51b', + 'rsrc/image/icon/fatcow/flag_ghost.png' => '7d9ada92', + 'rsrc/image/icon/fatcow/flag_green.png' => '010f7161', + 'rsrc/image/icon/fatcow/flag_orange.png' => '6c384ca5', + 'rsrc/image/icon/fatcow/flag_pink.png' => '11ac6b12', + 'rsrc/image/icon/fatcow/flag_purple.png' => 'c4f423a4', + 'rsrc/image/icon/fatcow/flag_red.png' => '9e6d8817', + 'rsrc/image/icon/fatcow/flag_yellow.png' => '906733f4', + 'rsrc/image/icon/fatcow/key_question.png' => 'c10c26db', + 'rsrc/image/icon/fatcow/link.png' => '8edbf327', + 'rsrc/image/icon/fatcow/page_white_edit.png' => '17ef5625', + 'rsrc/image/icon/fatcow/page_white_put.png' => '82430c91', + 'rsrc/image/icon/fatcow/source/conduit.png' => '5b55130c', + 'rsrc/image/icon/fatcow/source/email.png' => '8a32b77f', + 'rsrc/image/icon/fatcow/source/fax.png' => '8bc2a49b', + 'rsrc/image/icon/fatcow/source/mobile.png' => '0a918412', + 'rsrc/image/icon/fatcow/source/tablet.png' => 'fc50b050', + 'rsrc/image/icon/fatcow/source/web.png' => '70433af3', + 'rsrc/image/icon/subscribe.png' => '07ef454e', + 'rsrc/image/icon/tango/attachment.png' => 'bac9032d', + 'rsrc/image/icon/tango/edit.png' => 'e6296206', + 'rsrc/image/icon/tango/go-down.png' => '0b903712', + 'rsrc/image/icon/tango/log.png' => '86b6a6f4', + 'rsrc/image/icon/tango/upload.png' => '3fe6b92d', + 'rsrc/image/icon/unsubscribe.png' => 'db04378a', + 'rsrc/image/lightblue-header.png' => 'e6d483c6', + 'rsrc/image/logo/light-eye.png' => '72337472', + 'rsrc/image/main_texture.png' => '894d03c4', + 'rsrc/image/menu_texture.png' => '896c9ade', + 'rsrc/image/people/harding.png' => '95b2db63', + 'rsrc/image/people/jefferson.png' => 'e883a3a2', + 'rsrc/image/people/lincoln.png' => 'be2c07c5', + 'rsrc/image/people/mckinley.png' => '6af510a0', + 'rsrc/image/people/taft.png' => 'b15ab07e', + 'rsrc/image/people/user0.png' => '4bc64b40', + 'rsrc/image/people/user1.png' => '8063f445', + 'rsrc/image/people/user2.png' => 'd28246c0', + 'rsrc/image/people/user3.png' => 'fb1ac12d', + 'rsrc/image/people/user4.png' => 'fe4fac8f', + 'rsrc/image/people/user5.png' => '3d07065c', + 'rsrc/image/people/user6.png' => 'e4bd47c8', + 'rsrc/image/people/user7.png' => '71d8fe8b', + 'rsrc/image/people/user8.png' => '85f86bf7', + 'rsrc/image/people/user9.png' => '523db8aa', + 'rsrc/image/people/washington.png' => '86159e68', + 'rsrc/image/phrequent_active.png' => 'de66dc50', + 'rsrc/image/phrequent_inactive.png' => '79c61baf', + 'rsrc/image/resize.png' => '9cc83373', + 'rsrc/image/sprite-login-X2.png' => '604545f6', + 'rsrc/image/sprite-login.png' => '7a001a9a', + 'rsrc/image/sprite-tokens-X2.png' => '21621dd9', + 'rsrc/image/sprite-tokens.png' => 'bede2580', + 'rsrc/image/texture/card-gradient.png' => 'e6892cb4', + 'rsrc/image/texture/dark-menu-hover.png' => '390a4fa1', + 'rsrc/image/texture/dark-menu.png' => '542f699c', + 'rsrc/image/texture/grip.png' => 'bc80753a', + 'rsrc/image/texture/panel-header-gradient.png' => '65004dbf', + 'rsrc/image/texture/phlnx-bg.png' => '6c9cd31d', + 'rsrc/image/texture/pholio-background.gif' => '84910bfc', + 'rsrc/image/texture/table_header.png' => '7652d1ad', + 'rsrc/image/texture/table_header_hover.png' => '12ea5236', + 'rsrc/image/texture/table_header_tall.png' => '5cc420c4', + 'rsrc/js/application/aphlict/Aphlict.js' => '022516b4', + 'rsrc/js/application/aphlict/behavior-aphlict-dropdown.js' => 'e9a2940f', + 'rsrc/js/application/aphlict/behavior-aphlict-listen.js' => '4e61fa88', + 'rsrc/js/application/aphlict/behavior-aphlict-status.js' => 'c3703a16', + 'rsrc/js/application/aphlict/behavior-desktop-notifications-control.js' => '070679fe', + 'rsrc/js/application/calendar/behavior-day-view.js' => '727a5a61', + 'rsrc/js/application/calendar/behavior-event-all-day.js' => '0b1bc990', + 'rsrc/js/application/calendar/behavior-month-view.js' => '158c64e0', + 'rsrc/js/application/config/behavior-reorder-fields.js' => '2539f834', + 'rsrc/js/application/conpherence/ConpherenceThreadManager.js' => 'aec8e38c', + 'rsrc/js/application/conpherence/behavior-conpherence-search.js' => '91befbcc', + 'rsrc/js/application/conpherence/behavior-durable-column.js' => 'fa6f30b2', + 'rsrc/js/application/conpherence/behavior-menu.js' => '8c2ed2bf', + 'rsrc/js/application/conpherence/behavior-participant-pane.js' => '43ba89a2', + 'rsrc/js/application/conpherence/behavior-pontificate.js' => '4ae58b5a', + 'rsrc/js/application/conpherence/behavior-quicksand-blacklist.js' => '5a6f6a06', + 'rsrc/js/application/conpherence/behavior-toggle-widget.js' => '8f959ad0', + 'rsrc/js/application/countdown/timer.js' => '6a162524', + 'rsrc/js/application/daemon/behavior-bulk-job-reload.js' => '3829a3cf', + 'rsrc/js/application/dashboard/behavior-dashboard-async-panel.js' => '9c01e364', + 'rsrc/js/application/dashboard/behavior-dashboard-move-panels.js' => 'a2ab19be', + 'rsrc/js/application/dashboard/behavior-dashboard-query-panel-select.js' => '1e413dc9', + 'rsrc/js/application/dashboard/behavior-dashboard-tab-panel.js' => '0116d3e8', + 'rsrc/js/application/diff/DiffChangeset.js' => 'd7d3ba75', + 'rsrc/js/application/diff/DiffChangesetList.js' => 'cc2c5de5', + 'rsrc/js/application/diff/DiffInline.js' => '9c775532', + 'rsrc/js/application/diff/DiffInlineContentState.js' => 'aa51efb4', + 'rsrc/js/application/diff/DiffPathView.js' => '8207abf9', + 'rsrc/js/application/diff/DiffTreeView.js' => '5d83623b', + 'rsrc/js/application/differential/behavior-diff-radios.js' => '925fe8cd', + 'rsrc/js/application/differential/behavior-populate.js' => 'b86ef6c2', + 'rsrc/js/application/diffusion/DiffusionLocateFileSource.js' => '94243d89', + 'rsrc/js/application/diffusion/ExternalEditorLinkEngine.js' => '48a8641f', + 'rsrc/js/application/diffusion/behavior-audit-preview.js' => 'b7b73831', + 'rsrc/js/application/diffusion/behavior-commit-branches.js' => '4b671572', + 'rsrc/js/application/diffusion/behavior-commit-graph.js' => 'ac10c917', + 'rsrc/js/application/diffusion/behavior-locate-file.js' => '87428eb2', + 'rsrc/js/application/diffusion/behavior-pull-lastmodified.js' => 'c715c123', + 'rsrc/js/application/doorkeeper/behavior-doorkeeper-tag.js' => '6a85bc5a', + 'rsrc/js/application/drydock/drydock-live-operation-status.js' => '47a0728b', + 'rsrc/js/application/fact/Chart.js' => '52e3ff03', + 'rsrc/js/application/fact/ChartCurtainView.js' => '86954222', + 'rsrc/js/application/fact/ChartFunctionLabel.js' => '81de1dab', + 'rsrc/js/application/files/behavior-document-engine.js' => '243d6c22', + 'rsrc/js/application/files/behavior-icon-composer.js' => '38a6cedb', + 'rsrc/js/application/files/behavior-launch-icon-composer.js' => 'a17b84f1', + 'rsrc/js/application/harbormaster/behavior-harbormaster-log.js' => 'b347a301', + 'rsrc/js/application/herald/HeraldRuleEditor.js' => '2633bef7', + 'rsrc/js/application/herald/PathTypeahead.js' => 'ad486db3', + 'rsrc/js/application/herald/herald-rule-editor.js' => '0922e81d', + 'rsrc/js/application/maniphest/behavior-batch-selector.js' => '139ef688', + 'rsrc/js/application/maniphest/behavior-line-chart.js' => 'ad258e28', + 'rsrc/js/application/maniphest/behavior-list-edit.js' => 'c687e867', + 'rsrc/js/application/owners/OwnersPathEditor.js' => '2a8b62d9', + 'rsrc/js/application/owners/owners-path-editor.js' => 'ff688a7a', + 'rsrc/js/application/passphrase/passphrase-credential-control.js' => '48fe33d0', + 'rsrc/js/application/pholio/behavior-pholio-mock-edit.js' => '3eed1f2b', + 'rsrc/js/application/pholio/behavior-pholio-mock-view.js' => '5aa1544e', + 'rsrc/js/application/phortune/behavior-stripe-payment-form.js' => '02cb4398', + 'rsrc/js/application/phortune/behavior-test-payment-form.js' => '4a7fb02b', + 'rsrc/js/application/phortune/phortune-credit-card-form.js' => 'd12d214f', + 'rsrc/js/application/policy/behavior-policy-control.js' => '0eaa33a9', + 'rsrc/js/application/policy/behavior-policy-rule-editor.js' => '9347f172', + 'rsrc/js/application/projects/WorkboardBoard.js' => 'b46d88c5', + 'rsrc/js/application/projects/WorkboardCard.js' => '0392a5d8', + 'rsrc/js/application/projects/WorkboardCardTemplate.js' => '84f82dad', + 'rsrc/js/application/projects/WorkboardColumn.js' => 'c3d24e63', + 'rsrc/js/application/projects/WorkboardController.js' => 'b9d0c2f3', + 'rsrc/js/application/projects/WorkboardDropEffect.js' => '8e0aa661', + 'rsrc/js/application/projects/WorkboardHeader.js' => '111bfd2d', + 'rsrc/js/application/projects/WorkboardHeaderTemplate.js' => 'ebe83a6b', + 'rsrc/js/application/projects/WorkboardOrderTemplate.js' => '03e8891f', + 'rsrc/js/application/projects/behavior-project-boards.js' => '58cb6a88', + 'rsrc/js/application/projects/behavior-project-create.js' => '34c53422', + 'rsrc/js/application/projects/behavior-reorder-columns.js' => '8ac32fd9', + 'rsrc/js/application/repository/repository-crossreference.js' => '44d48cd1', + 'rsrc/js/application/search/behavior-reorder-profile-menu-items.js' => 'e5bdb730', + 'rsrc/js/application/search/behavior-reorder-queries.js' => 'b86f297f', + 'rsrc/js/application/transactions/behavior-comment-actions.js' => '4dffaeb2', + 'rsrc/js/application/transactions/behavior-reorder-configs.js' => '4842f137', + 'rsrc/js/application/transactions/behavior-reorder-fields.js' => '0ad8d31f', + 'rsrc/js/application/transactions/behavior-show-older-transactions.js' => '8b5c7d65', + 'rsrc/js/application/transactions/behavior-transaction-comment-form.js' => '2bdadf1a', + 'rsrc/js/application/transactions/behavior-transaction-list.js' => '9cec214e', + 'rsrc/js/application/trigger/TriggerRule.js' => '41b7b4f6', + 'rsrc/js/application/trigger/TriggerRuleControl.js' => '5faf27b9', + 'rsrc/js/application/trigger/TriggerRuleEditor.js' => 'b49fd60c', + 'rsrc/js/application/trigger/TriggerRuleType.js' => '4feea7d3', + 'rsrc/js/application/trigger/trigger-rule-editor.js' => '398fdf13', + 'rsrc/js/application/typeahead/behavior-typeahead-browse.js' => '70245195', + 'rsrc/js/application/typeahead/behavior-typeahead-search.js' => '7b139193', + 'rsrc/js/application/uiexample/gesture-example.js' => '242dedd0', + 'rsrc/js/application/uiexample/notification-example.js' => '29819b75', + 'rsrc/js/core/Busy.js' => '5202e831', + 'rsrc/js/core/DragAndDropFileUpload.js' => '4370900d', + 'rsrc/js/core/DraggableList.js' => '0169e425', + 'rsrc/js/core/Favicon.js' => '7930776a', + 'rsrc/js/core/FileUpload.js' => 'ab85e184', + 'rsrc/js/core/Hovercard.js' => '6199f752', + 'rsrc/js/core/HovercardList.js' => 'de4b4919', + 'rsrc/js/core/KeyboardShortcut.js' => '1a844c06', + 'rsrc/js/core/KeyboardShortcutManager.js' => '81debc48', + 'rsrc/js/core/MultirowRowManager.js' => '5b54c823', + 'rsrc/js/core/Notification.js' => 'a9b91e3f', + 'rsrc/js/core/Prefab.js' => '5793d835', + 'rsrc/js/core/ShapedRequest.js' => '995f5102', + 'rsrc/js/core/TextAreaUtils.js' => 'f340a484', + 'rsrc/js/core/Title.js' => '43bc9360', + 'rsrc/js/core/ToolTip.js' => '83754533', + 'rsrc/js/core/behavior-audio-source.js' => '3dc5ad43', + 'rsrc/js/core/behavior-autofocus.js' => '65bb0011', + 'rsrc/js/core/behavior-badge-view.js' => '92cdd7b6', + 'rsrc/js/core/behavior-bulk-editor.js' => 'aa6d2308', + 'rsrc/js/core/behavior-choose-control.js' => '04f8a1e3', + 'rsrc/js/core/behavior-copy.js' => 'cf32921f', + 'rsrc/js/core/behavior-detect-timezone.js' => '78bc5d94', + 'rsrc/js/core/behavior-device.js' => 'ac2b1e01', + 'rsrc/js/core/behavior-drag-and-drop-textarea.js' => '3277c62d', + 'rsrc/js/core/behavior-fancy-datepicker.js' => '36821f8d', + 'rsrc/js/core/behavior-form.js' => '55d7b788', + 'rsrc/js/core/behavior-gesture.js' => 'b58d1a2a', + 'rsrc/js/core/behavior-global-drag-and-drop.js' => '1cab0e9a', + 'rsrc/js/core/behavior-high-security-warning.js' => 'dae2d55b', + 'rsrc/js/core/behavior-history-install.js' => '6a1583a8', + 'rsrc/js/core/behavior-hovercard.js' => '183738e6', + 'rsrc/js/core/behavior-keyboard-pager.js' => '1325b731', + 'rsrc/js/core/behavior-keyboard-shortcuts.js' => '42c44e8b', + 'rsrc/js/core/behavior-lightbox-attachments.js' => '14c7ab36', + 'rsrc/js/core/behavior-line-linker.js' => '0d915ff5', + 'rsrc/js/core/behavior-linked-container.js' => '74446546', + 'rsrc/js/core/behavior-more.js' => '506aa3f4', + 'rsrc/js/core/behavior-object-selector.js' => '98ef467f', + 'rsrc/js/core/behavior-oncopy.js' => 'da8f5259', + 'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => '54262396', + 'rsrc/js/core/behavior-read-only-warning.js' => 'b9109f8f', + 'rsrc/js/core/behavior-redirect.js' => '407ee861', + 'rsrc/js/core/behavior-refresh-csrf.js' => '46116c01', + 'rsrc/js/core/behavior-remarkup-load-image.js' => '202bfa3f', + 'rsrc/js/core/behavior-remarkup-preview.js' => 'd8a86cfb', + 'rsrc/js/core/behavior-reorder-applications.js' => 'aa371860', + 'rsrc/js/core/behavior-reveal-content.js' => 'b105a3a6', + 'rsrc/js/core/behavior-scrollbar.js' => '92388bae', + 'rsrc/js/core/behavior-search-typeahead.js' => '1cb7d027', + 'rsrc/js/core/behavior-select-content.js' => 'e8240b50', + 'rsrc/js/core/behavior-select-on-click.js' => '66365ee2', + 'rsrc/js/core/behavior-setup-check-https.js' => '01384686', + 'rsrc/js/core/behavior-time-typeahead.js' => '5803b9e7', + 'rsrc/js/core/behavior-toggle-class.js' => '32db8374', + 'rsrc/js/core/behavior-tokenizer.js' => '3b4899b0', + 'rsrc/js/core/behavior-tooltip.js' => '73ecc1f8', + 'rsrc/js/core/behavior-user-menu.js' => '60cd9241', + 'rsrc/js/core/behavior-watch-anchor.js' => 'a77e2cbd', + 'rsrc/js/core/behavior-workflow.js' => '9623adc1', + 'rsrc/js/core/darkconsole/DarkLog.js' => '3b869402', + 'rsrc/js/core/darkconsole/DarkMessage.js' => '26cd4b73', + 'rsrc/js/core/darkconsole/behavior-dark-console.js' => '457f4d16', + 'rsrc/js/core/phtize.js' => '2f1db1ed', + 'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '5cf0501a', + 'rsrc/js/phui/behavior-phui-file-upload.js' => 'e150bd50', + 'rsrc/js/phui/behavior-phui-selectable-list.js' => 'b26a41e4', + 'rsrc/js/phui/behavior-phui-submenu.js' => 'b5e9bff9', + 'rsrc/js/phui/behavior-phui-tab-group.js' => '242aa08b', + 'rsrc/js/phui/behavior-phui-timer-control.js' => 'f84bcbf4', + 'rsrc/js/phuix/PHUIXActionListView.js' => 'c68f183f', + 'rsrc/js/phuix/PHUIXActionView.js' => 'a8f573a9', + 'rsrc/js/phuix/PHUIXAutocomplete.js' => '2fbe234d', + 'rsrc/js/phuix/PHUIXButtonView.js' => '55a24e84', + 'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'b557770a', + 'rsrc/js/phuix/PHUIXExample.js' => 'c2c500a7', + 'rsrc/js/phuix/PHUIXFormControl.js' => '38c1f3fb', + 'rsrc/js/phuix/PHUIXFormationColumnView.js' => '4bcc1f78', + 'rsrc/js/phuix/PHUIXFormationFlankView.js' => '6648270a', + 'rsrc/js/phuix/PHUIXFormationView.js' => 'cef53b3e', + 'rsrc/js/phuix/PHUIXIconView.js' => 'a5257c4e', + ), + 'symbols' => array( + 'almanac-css' => '2e050f4f', + 'aphront-bars' => '4a327b4a', + 'aphront-dark-console-css' => '7f06cda2', + 'aphront-dialog-view-css' => '6f4ea703', + 'aphront-list-filter-view-css' => 'feb64255', + 'aphront-multi-column-view-css' => 'fbc00ba3', + 'aphront-panel-view-css' => '46923d46', + 'aphront-table-view-css' => '0bb61df1', + 'aphront-tokenizer-control-css' => '34e2a838', + 'aphront-tooltip-css' => 'e3f2412f', + 'aphront-typeahead-control-css' => '8779483d', + 'application-search-view-css' => '0f7c06d8', + 'auth-css' => 'c2f23d74', + 'bulk-job-css' => '73af99f5', + 'conduit-api-css' => 'ce2cfc41', + 'config-options-css' => '16c920ae', + 'conpherence-color-css' => 'b17746b0', + 'conpherence-durable-column-view' => '2d57072b', + 'conpherence-header-pane-css' => 'c9a3db8e', + 'conpherence-menu-css' => '67f4680d', + 'conpherence-message-pane-css' => 'd244db1e', + 'conpherence-notification-css' => '6a3d4e58', + 'conpherence-participant-pane-css' => '69e0058a', + 'conpherence-thread-manager' => 'aec8e38c', + 'conpherence-transaction-css' => '3a3f5e7e', + 'd3' => '9d068042', + 'diff-tree-view-css' => 'e2d3e222', + 'differential-changeset-view-css' => '60c3d405', + 'differential-core-view-css' => '7300a73e', + 'differential-revision-add-comment-css' => '7e5900d9', + 'differential-revision-comment-css' => '7dbc8d1d', + 'differential-revision-history-css' => '237a2979', + 'differential-revision-list-css' => '93d2df7d', + 'differential-table-of-contents-css' => 'bba788b9', + 'diffusion-css' => 'e46232d6', + 'diffusion-icons-css' => '23b31a1b', + 'diffusion-readme-css' => 'b68a76e4', + 'diffusion-repository-css' => 'b89e8c6c', + 'diviner-shared-css' => '4bd263b0', + 'font-fontawesome' => '3883938a', + 'font-lato' => '23631304', + 'fuel-grid-css' => '66697240', + 'fuel-handle-list-css' => '2c4cbeca', + 'fuel-map-css' => 'd6e31510', + 'fuel-menu-css' => '21f5d199', + 'global-drag-and-drop-css' => '1d2713a4', + 'harbormaster-css' => '8dfe16b2', + 'herald-css' => '648d39e2', + 'herald-rule-editor' => '2633bef7', + 'herald-test-css' => '7e7bbdae', + 'inline-comment-summary-css' => '81eb368d', + 'javelin-aphlict' => '022516b4', + 'javelin-behavior' => '1b6acc2a', + 'javelin-behavior-aphlict-dropdown' => 'e9a2940f', + 'javelin-behavior-aphlict-listen' => '4e61fa88', + 'javelin-behavior-aphlict-status' => 'c3703a16', + 'javelin-behavior-aphront-basic-tokenizer' => '3b4899b0', + 'javelin-behavior-aphront-drag-and-drop-textarea' => '3277c62d', + 'javelin-behavior-aphront-form-disable-on-submit' => '55d7b788', + 'javelin-behavior-aphront-more' => '506aa3f4', + 'javelin-behavior-audio-source' => '3dc5ad43', + 'javelin-behavior-audit-preview' => 'b7b73831', + 'javelin-behavior-badge-view' => '92cdd7b6', + 'javelin-behavior-bulk-editor' => 'aa6d2308', + 'javelin-behavior-bulk-job-reload' => '3829a3cf', + 'javelin-behavior-calendar-month-view' => '158c64e0', + 'javelin-behavior-choose-control' => '04f8a1e3', + 'javelin-behavior-comment-actions' => '4dffaeb2', + 'javelin-behavior-config-reorder-fields' => '2539f834', + 'javelin-behavior-conpherence-menu' => '8c2ed2bf', + 'javelin-behavior-conpherence-participant-pane' => '43ba89a2', + 'javelin-behavior-conpherence-pontificate' => '4ae58b5a', + 'javelin-behavior-conpherence-search' => '91befbcc', + 'javelin-behavior-countdown-timer' => '6a162524', + 'javelin-behavior-dark-console' => '457f4d16', + 'javelin-behavior-dashboard-async-panel' => '9c01e364', + 'javelin-behavior-dashboard-move-panels' => 'a2ab19be', + 'javelin-behavior-dashboard-query-panel-select' => '1e413dc9', + 'javelin-behavior-dashboard-tab-panel' => '0116d3e8', + 'javelin-behavior-day-view' => '727a5a61', + 'javelin-behavior-desktop-notifications-control' => '070679fe', + 'javelin-behavior-detect-timezone' => '78bc5d94', + 'javelin-behavior-device' => 'ac2b1e01', + 'javelin-behavior-differential-diff-radios' => '925fe8cd', + 'javelin-behavior-differential-populate' => 'b86ef6c2', + 'javelin-behavior-diffusion-commit-branches' => '4b671572', + 'javelin-behavior-diffusion-commit-graph' => 'ac10c917', + 'javelin-behavior-diffusion-locate-file' => '87428eb2', + 'javelin-behavior-diffusion-pull-lastmodified' => 'c715c123', + 'javelin-behavior-document-engine' => '243d6c22', + 'javelin-behavior-doorkeeper-tag' => '6a85bc5a', + 'javelin-behavior-drydock-live-operation-status' => '47a0728b', + 'javelin-behavior-durable-column' => 'fa6f30b2', + 'javelin-behavior-editengine-reorder-configs' => '4842f137', + 'javelin-behavior-editengine-reorder-fields' => '0ad8d31f', + 'javelin-behavior-event-all-day' => '0b1bc990', + 'javelin-behavior-fancy-datepicker' => '36821f8d', + 'javelin-behavior-global-drag-and-drop' => '1cab0e9a', + 'javelin-behavior-harbormaster-log' => 'b347a301', + 'javelin-behavior-herald-rule-editor' => '0922e81d', + 'javelin-behavior-high-security-warning' => 'dae2d55b', + 'javelin-behavior-history-install' => '6a1583a8', + 'javelin-behavior-icon-composer' => '38a6cedb', + 'javelin-behavior-launch-icon-composer' => 'a17b84f1', + 'javelin-behavior-lightbox-attachments' => '14c7ab36', + 'javelin-behavior-line-chart' => 'ad258e28', + 'javelin-behavior-linked-container' => '74446546', + 'javelin-behavior-maniphest-batch-selector' => '139ef688', + 'javelin-behavior-maniphest-list-editor' => 'c687e867', + 'javelin-behavior-owners-path-editor' => 'ff688a7a', + 'javelin-behavior-passphrase-credential-control' => '48fe33d0', + 'javelin-behavior-phabricator-autofocus' => '65bb0011', + 'javelin-behavior-phabricator-clipboard-copy' => 'cf32921f', + 'javelin-behavior-phabricator-gesture' => 'b58d1a2a', + 'javelin-behavior-phabricator-gesture-example' => '242dedd0', + 'javelin-behavior-phabricator-keyboard-pager' => '1325b731', + 'javelin-behavior-phabricator-keyboard-shortcuts' => '42c44e8b', + 'javelin-behavior-phabricator-line-linker' => '0d915ff5', + 'javelin-behavior-phabricator-notification-example' => '29819b75', + 'javelin-behavior-phabricator-object-selector' => '98ef467f', + 'javelin-behavior-phabricator-oncopy' => 'da8f5259', + 'javelin-behavior-phabricator-remarkup-assist' => '54262396', + 'javelin-behavior-phabricator-reveal-content' => 'b105a3a6', + 'javelin-behavior-phabricator-search-typeahead' => '1cb7d027', + 'javelin-behavior-phabricator-show-older-transactions' => '8b5c7d65', + 'javelin-behavior-phabricator-tooltips' => '73ecc1f8', + 'javelin-behavior-phabricator-transaction-comment-form' => '2bdadf1a', + 'javelin-behavior-phabricator-transaction-list' => '9cec214e', + 'javelin-behavior-phabricator-watch-anchor' => 'a77e2cbd', + 'javelin-behavior-pholio-mock-edit' => '3eed1f2b', + 'javelin-behavior-pholio-mock-view' => '5aa1544e', + 'javelin-behavior-phui-dropdown-menu' => '5cf0501a', + 'javelin-behavior-phui-file-upload' => 'e150bd50', + 'javelin-behavior-phui-hovercards' => '183738e6', + 'javelin-behavior-phui-selectable-list' => 'b26a41e4', + 'javelin-behavior-phui-submenu' => 'b5e9bff9', + 'javelin-behavior-phui-tab-group' => '242aa08b', + 'javelin-behavior-phui-timer-control' => 'f84bcbf4', + 'javelin-behavior-phuix-example' => 'c2c500a7', + 'javelin-behavior-policy-control' => '0eaa33a9', + 'javelin-behavior-policy-rule-editor' => '9347f172', + 'javelin-behavior-project-boards' => '58cb6a88', + 'javelin-behavior-project-create' => '34c53422', + 'javelin-behavior-quicksand-blacklist' => '5a6f6a06', + 'javelin-behavior-read-only-warning' => 'b9109f8f', + 'javelin-behavior-redirect' => '407ee861', + 'javelin-behavior-refresh-csrf' => '46116c01', + 'javelin-behavior-remarkup-load-image' => '202bfa3f', + 'javelin-behavior-remarkup-preview' => 'd8a86cfb', + 'javelin-behavior-reorder-applications' => 'aa371860', + 'javelin-behavior-reorder-columns' => '8ac32fd9', + 'javelin-behavior-reorder-profile-menu-items' => 'e5bdb730', + 'javelin-behavior-repository-crossreference' => '44d48cd1', + 'javelin-behavior-scrollbar' => '92388bae', + 'javelin-behavior-search-reorder-queries' => 'b86f297f', + 'javelin-behavior-select-content' => 'e8240b50', + 'javelin-behavior-select-on-click' => '66365ee2', + 'javelin-behavior-setup-check-https' => '01384686', + 'javelin-behavior-stripe-payment-form' => '02cb4398', + 'javelin-behavior-test-payment-form' => '4a7fb02b', + 'javelin-behavior-time-typeahead' => '5803b9e7', + 'javelin-behavior-toggle-class' => '32db8374', + 'javelin-behavior-toggle-widget' => '8f959ad0', + 'javelin-behavior-trigger-rule-editor' => '398fdf13', + 'javelin-behavior-typeahead-browse' => '70245195', + 'javelin-behavior-typeahead-search' => '7b139193', + 'javelin-behavior-user-menu' => '60cd9241', + 'javelin-behavior-view-placeholder' => 'a9942052', + 'javelin-behavior-workflow' => '9623adc1', + 'javelin-chart' => '52e3ff03', + 'javelin-chart-curtain-view' => '86954222', + 'javelin-chart-function-label' => '81de1dab', + 'javelin-color' => '78f811c9', + 'javelin-cookie' => '05d290ef', + 'javelin-diffusion-locate-file-source' => '94243d89', + 'javelin-dom' => 'e4c7622a', + 'javelin-dynval' => '202a2e85', + 'javelin-event' => 'c03f2fb4', + 'javelin-external-editor-link-engine' => '48a8641f', + 'javelin-fx' => '34450586', + 'javelin-history' => '030b4f7a', + 'javelin-install' => '5902260c', + 'javelin-json' => '541f81c3', + 'javelin-leader' => '0d2490ce', + 'javelin-magical-init' => '98e6504a', + 'javelin-mask' => '7c4d8998', + 'javelin-quicksand' => 'd3799cb4', + 'javelin-reactor' => '1c850a26', + 'javelin-reactor-dom' => '6cfa0008', + 'javelin-reactor-node-calmer' => '225bbb98', + 'javelin-reactornode' => '72960bc1', + 'javelin-request' => '84e6891f', + 'javelin-resource' => '20514cc2', + 'javelin-routable' => '6a18c42e', + 'javelin-router' => '32755edb', + 'javelin-scrollbar' => 'a43ae2ae', + 'javelin-sound' => 'd4cc2d2a', + 'javelin-stratcom' => '0889b835', + 'javelin-tokenizer' => '89a1ae3a', + 'javelin-typeahead' => 'a4356cde', + 'javelin-typeahead-composite-source' => '22ee68a5', + 'javelin-typeahead-normalizer' => 'a241536a', + 'javelin-typeahead-ondemand-source' => '23387297', + 'javelin-typeahead-preloaded-source' => '5a79f6c3', + 'javelin-typeahead-source' => '8badee71', + 'javelin-typeahead-static-source' => '80bff3af', + 'javelin-uri' => '2e255291', + 'javelin-util' => 'edb4d8c9', + 'javelin-vector' => 'e9c80beb', + 'javelin-view' => '289bf236', + 'javelin-view-html' => 'f8c4e135', + 'javelin-view-interpreter' => '876506b6', + 'javelin-view-renderer' => '9aae2b66', + 'javelin-view-visitor' => '308f9fe4', + 'javelin-websocket' => 'fdc13e4e', + 'javelin-workboard-board' => 'b46d88c5', + 'javelin-workboard-card' => '0392a5d8', + 'javelin-workboard-card-template' => '84f82dad', + 'javelin-workboard-column' => 'c3d24e63', + 'javelin-workboard-controller' => 'b9d0c2f3', + 'javelin-workboard-drop-effect' => '8e0aa661', + 'javelin-workboard-header' => '111bfd2d', + 'javelin-workboard-header-template' => 'ebe83a6b', + 'javelin-workboard-order-template' => '03e8891f', + 'javelin-workflow' => '945ff654', + 'maniphest-report-css' => '3d53188b', + 'maniphest-task-edit-css' => '272daa84', + 'maniphest-task-summary-css' => '61d1667e', + 'multirow-row-manager' => '5b54c823', + 'owners-path-editor' => '2a8b62d9', + 'owners-path-editor-css' => 'fa7c13ef', + 'paste-css' => 'b37bcd38', + 'path-typeahead' => 'ad486db3', + 'people-picture-menu-item-css' => 'fe8e07cf', + 'people-profile-css' => '2ea2daa1', + 'phabricator-action-list-view-css' => '1b0085b2', + 'phabricator-busy' => '5202e831', + 'phabricator-chatlog-css' => 'abdc76ee', + 'phabricator-content-source-view-css' => 'cdf0d579', + 'phabricator-core-css' => 'b3ebd90d', + 'phabricator-countdown-css' => 'bff8012f', + 'phabricator-darklog' => '3b869402', + 'phabricator-darkmessage' => '26cd4b73', + 'phabricator-dashboard-css' => '5a205b9d', + 'phabricator-diff-changeset' => 'd7d3ba75', + 'phabricator-diff-changeset-list' => 'cc2c5de5', + 'phabricator-diff-inline' => '9c775532', + 'phabricator-diff-inline-content-state' => 'aa51efb4', + 'phabricator-diff-path-view' => '8207abf9', + 'phabricator-diff-tree-view' => '5d83623b', + 'phabricator-drag-and-drop-file-upload' => '4370900d', + 'phabricator-draggable-list' => '0169e425', + 'phabricator-fatal-config-template-css' => '20babf50', + 'phabricator-favicon' => '7930776a', + 'phabricator-feed-css' => 'd8b6e3f8', + 'phabricator-file-upload' => 'ab85e184', + 'phabricator-flag-css' => '2b77be8d', + 'phabricator-keyboard-shortcut' => '1a844c06', + 'phabricator-keyboard-shortcut-manager' => '81debc48', + 'phabricator-main-menu-view' => 'bcec20f0', + 'phabricator-nav-view-css' => '423f92cc', + 'phabricator-notification' => 'a9b91e3f', + 'phabricator-notification-css' => '30240bd2', + 'phabricator-notification-menu-css' => '4df1ee30', + 'phabricator-object-selector-css' => 'ee77366f', + 'phabricator-phtize' => '2f1db1ed', + 'phabricator-prefab' => '5793d835', + 'phabricator-remarkup-css' => '5baa3bd9', + 'phabricator-search-results-css' => '9ea70ace', + 'phabricator-shaped-request' => '995f5102', + 'phabricator-slowvote-css' => '1694baed', + 'phabricator-source-code-view-css' => '03d7ac28', + 'phabricator-standard-page-view' => 'a374f94c', + 'phabricator-textareautils' => 'f340a484', + 'phabricator-title' => '43bc9360', + 'phabricator-tooltip' => '83754533', + 'phabricator-ui-example-css' => 'b4795059', + 'phabricator-zindex-css' => 'ac3bfcd4', + 'phame-css' => 'bb442327', + 'pholio-css' => '88ef5ef1', + 'pholio-edit-css' => '4df55b3b', + 'pholio-inline-comments-css' => '722b48c2', + 'phortune-credit-card-form' => 'd12d214f', + 'phortune-credit-card-form-css' => '3b9868a8', + 'phortune-css' => '508a1a5e', + 'phortune-invoice-css' => '4436b241', + 'phrequent-css' => 'bd79cc67', + 'phriction-document-css' => '03380da0', + 'phui-action-panel-css' => '6c386cbf', + 'phui-badge-view-css' => '666e25ad', + 'phui-basic-nav-view-css' => '56ebd66d', + 'phui-big-info-view-css' => '362ad37b', + 'phui-box-css' => '5ed3b8cb', + 'phui-bulk-editor-css' => '374d5e30', + 'phui-button-bar-css' => 'a4aa75c4', + 'phui-button-css' => 'ea704902', + 'phui-button-simple-css' => '1ff278aa', + 'phui-calendar-css' => 'f11073aa', + 'phui-calendar-day-css' => '9597d706', + 'phui-calendar-list-css' => 'ccd7e4e2', + 'phui-calendar-month-css' => 'cb758c42', + 'phui-chart-css' => '14df9ae3', + 'phui-cms-css' => '8c05c41e', + 'phui-comment-form-css' => '68a2d99a', + 'phui-comment-panel-css' => 'ec4e31c0', + 'phui-crumbs-view-css' => '614f43cf', + 'phui-curtain-object-ref-view-css' => '51d93266', + 'phui-curtain-view-css' => '68c5efb6', + 'phui-document-summary-view-css' => 'b068eed1', + 'phui-document-view-css' => '52b748a5', + 'phui-document-view-pro-css' => 'b9613a10', + 'phui-feed-story-css' => 'a0c05029', + 'phui-font-icon-base-css' => '303c9b87', + 'phui-fontkit-css' => '1ec937e5', + 'phui-form-css' => '1f177cb7', + 'phui-form-view-css' => '01b796c0', + 'phui-formation-view-css' => 'd2dec8ed', + 'phui-head-thing-view-css' => 'd7f293df', + 'phui-header-view-css' => '36c86a58', + 'phui-hovercard' => '6199f752', + 'phui-hovercard-list' => 'de4b4919', + 'phui-hovercard-view-css' => '6ca90fa0', + 'phui-icon-set-selector-css' => '7aa5f3ec', + 'phui-icon-view-css' => '4cbc684a', + 'phui-image-mask-css' => '62c7f4d2', + 'phui-info-view-css' => 'a10a909b', + 'phui-inline-comment-view-css' => '9863a85e', + 'phui-invisible-character-view-css' => 'c694c4a4', + 'phui-left-right-css' => '68513c34', + 'phui-lightbox-css' => '4ebf22da', + 'phui-list-view-css' => '0c04affd', + 'phui-object-box-css' => 'b8d7eea0', + 'phui-oi-big-ui-css' => 'fa74cc35', + 'phui-oi-color-css' => 'b517bfa0', + 'phui-oi-drag-ui-css' => 'da15d3dc', + 'phui-oi-flush-ui-css' => '490e2e2e', + 'phui-oi-list-view-css' => 'af98a277', + 'phui-oi-simple-ui-css' => '6a30fa46', + 'phui-pager-css' => 'd022c7ad', + 'phui-pinboard-view-css' => '1f08f5d8', + 'phui-policy-section-view-css' => '139fdc64', + 'phui-property-list-view-css' => '5adf7078', + 'phui-remarkup-preview-css' => '91767007', + 'phui-segment-bar-view-css' => '5166b370', + 'phui-spacing-css' => 'b05cadc3', + 'phui-status-list-view-css' => '293b5dad', + 'phui-tag-view-css' => 'fb811341', + 'phui-theme-css' => '35883b37', + 'phui-timeline-view-css' => '2d32d7a9', + 'phui-two-column-view-css' => 'f96d319f', + 'phui-workboard-color-css' => 'e86de308', + 'phui-workboard-view-css' => '74fc9d98', + 'phui-workcard-view-css' => '913441b6', + 'phui-workpanel-view-css' => '3ae89b20', + 'phuix-action-list-view' => 'c68f183f', + 'phuix-action-view' => 'a8f573a9', + 'phuix-autocomplete' => '2fbe234d', + 'phuix-button-view' => '55a24e84', + 'phuix-dropdown-menu' => 'b557770a', + 'phuix-form-control-view' => '38c1f3fb', + 'phuix-formation-column-view' => '4bcc1f78', + 'phuix-formation-flank-view' => '6648270a', + 'phuix-formation-view' => 'cef53b3e', + 'phuix-icon-view' => 'a5257c4e', + 'policy-css' => 'ceb56a08', + 'policy-edit-css' => '8794e2ed', + 'policy-transaction-detail-css' => 'c02b8384', + 'ponder-view-css' => '05a09d0a', + 'project-card-view-css' => 'a9f2c2dd', + 'project-triggers-css' => 'cd9c8bb9', + 'project-view-css' => '567858b3', + 'setup-issue-css' => '5eed85b2', + 'sprite-login-css' => '18b368a6', + 'sprite-tokens-css' => 'f1896dc5', + 'syntax-default-css' => '055fc231', + 'syntax-highlighting-css' => '548567f6', + 'tokens-css' => 'ce5a50bd', + 'trigger-rule' => '41b7b4f6', + 'trigger-rule-control' => '5faf27b9', + 'trigger-rule-editor' => 'b49fd60c', + 'trigger-rule-type' => '4feea7d3', + 'typeahead-browse-css' => 'b7ed02d2', + 'unhandled-exception-css' => '9ecfc00d', + ), + 'requires' => array( + '0116d3e8' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), + '01384686' => array( + 'javelin-behavior', + 'javelin-uri', + 'phabricator-notification', + ), + '0169e425' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-util', + 'javelin-vector', + 'javelin-magical-init', + ), + '022516b4' => array( + 'javelin-install', + 'javelin-util', + 'javelin-websocket', + 'javelin-leader', + 'javelin-json', + ), + '02cb4398' => array( + 'javelin-behavior', + 'javelin-dom', + 'phortune-credit-card-form', + ), + '030b4f7a' => array( + 'javelin-stratcom', + 'javelin-install', + 'javelin-uri', + 'javelin-util', + ), + '0392a5d8' => array( + 'javelin-install', + ), + '03e8891f' => array( + 'javelin-install', + ), + '04f8a1e3' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-workflow', + ), + '05d290ef' => array( + 'javelin-install', + 'javelin-util', + ), + '070679fe' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-uri', + 'phabricator-notification', + ), + '0889b835' => array( + 'javelin-install', + 'javelin-event', + 'javelin-util', + 'javelin-magical-init', + ), + '0922e81d' => array( + 'herald-rule-editor', + 'javelin-behavior', + ), + '0ad8d31f' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + '0d2490ce' => array( + 'javelin-install', + ), + '0d915ff5' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-history', + 'javelin-external-editor-link-engine', + ), + '0eaa33a9' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + 'javelin-workflow', + 'phuix-icon-view', + ), + '111bfd2d' => array( + 'javelin-install', + ), + '1325b731' => array( + 'javelin-behavior', + 'javelin-uri', + 'phabricator-keyboard-shortcut', + ), + '139ef688' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-util', + ), + '14c7ab36' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-mask', + 'javelin-util', + 'phuix-icon-view', + 'phabricator-busy', + ), + '183738e6' => array( + 'javelin-behavior', + 'javelin-behavior-device', + 'javelin-stratcom', + 'javelin-vector', + 'phui-hovercard', + 'phui-hovercard-list', + ), + '1a844c06' => array( + 'javelin-install', + 'javelin-util', + 'phabricator-keyboard-shortcut-manager', + ), + '1b6acc2a' => array( + 'javelin-magical-init', + 'javelin-util', + ), + '1c850a26' => array( + 'javelin-install', + 'javelin-util', + ), + '1cab0e9a' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-uri', + 'javelin-mask', + 'phabricator-drag-and-drop-file-upload', + ), + '1cb7d027' => array( + 'javelin-behavior', + 'javelin-typeahead-ondemand-source', + 'javelin-typeahead', + 'javelin-dom', + 'javelin-uri', + 'javelin-util', + 'javelin-stratcom', + 'phabricator-prefab', + 'phuix-icon-view', + ), + '1e413dc9' => array( + 'javelin-behavior', + 'javelin-dom', + ), + '1ff278aa' => array( + 'phui-button-css', + ), + '202a2e85' => array( + 'javelin-install', + 'javelin-reactornode', + 'javelin-util', + 'javelin-reactor', + ), + '202bfa3f' => array( + 'javelin-behavior', + 'javelin-request', + ), + '20514cc2' => array( + 'javelin-util', + 'javelin-uri', + 'javelin-install', + ), + '225bbb98' => array( + 'javelin-install', + 'javelin-reactor', + 'javelin-util', + ), + '22ee68a5' => array( + 'javelin-install', + 'javelin-typeahead-source', + 'javelin-util', + ), + 23387297 => array( + 'javelin-install', + 'javelin-util', + 'javelin-request', + 'javelin-typeahead-source', + ), + 23631304 => array( + 'phui-fontkit-css', + ), + '242aa08b' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '242dedd0' => array( + 'javelin-stratcom', + 'javelin-behavior', + 'javelin-vector', + 'javelin-dom', + ), + '243d6c22' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), + '2539f834' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-json', + 'phabricator-draggable-list', + ), + '2633bef7' => array( + 'multirow-row-manager', + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-json', + 'phabricator-prefab', + ), + '289bf236' => array( + 'javelin-install', + 'javelin-util', + ), + '29819b75' => array( + 'phabricator-notification', + 'javelin-stratcom', + 'javelin-behavior', + ), + '2a8b62d9' => array( + 'multirow-row-manager', + 'javelin-install', + 'path-typeahead', + 'javelin-dom', + 'javelin-util', + 'phabricator-prefab', + 'phuix-form-control-view', + ), + '2bdadf1a' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-request', + 'phabricator-shaped-request', + ), + '2e255291' => array( + 'javelin-install', + 'javelin-util', + 'javelin-stratcom', + ), + '2f1db1ed' => array( + 'javelin-util', + ), + '2fbe234d' => array( + 'javelin-install', + 'javelin-dom', + 'phuix-icon-view', + 'phabricator-prefab', + ), + '308f9fe4' => array( + 'javelin-install', + 'javelin-util', + ), + '32755edb' => array( + 'javelin-install', + 'javelin-util', + ), + '3277c62d' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-json', + 'phabricator-drag-and-drop-file-upload', + 'phabricator-textareautils', + ), + '32db8374' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 34450586 => array( + 'javelin-color', + 'javelin-install', + 'javelin-util', + ), + '34c53422' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + ), + '34e2a838' => array( + 'aphront-typeahead-control-css', + 'phui-tag-view-css', + ), + '36821f8d' => array( + 'javelin-behavior', + 'javelin-util', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-vector', + ), + '3829a3cf' => array( + 'javelin-behavior', + 'javelin-uri', + ), + '38a6cedb' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), + '38c1f3fb' => array( + 'javelin-install', + 'javelin-dom', + ), + '398fdf13' => array( + 'javelin-behavior', + 'trigger-rule-editor', + 'trigger-rule', + 'trigger-rule-type', + ), + '3ae89b20' => array( + 'phui-workcard-view-css', + ), + '3b4899b0' => array( + 'javelin-behavior', + 'phabricator-prefab', + ), + '3dc5ad43' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-vector', + 'javelin-dom', + ), + '3eed1f2b' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-workflow', + 'javelin-quicksand', + 'phabricator-phtize', + 'phabricator-drag-and-drop-file-upload', + 'phabricator-draggable-list', + ), + '407ee861' => array( + 'javelin-behavior', + 'javelin-uri', + ), + '42c44e8b' => array( + 'javelin-behavior', + 'javelin-workflow', + 'javelin-json', + 'javelin-dom', + 'phabricator-keyboard-shortcut', + ), + '4370900d' => array( + 'javelin-install', + 'javelin-util', + 'javelin-request', + 'javelin-dom', + 'javelin-uri', + 'phabricator-file-upload', + ), + '43ba89a2' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-util', + 'phabricator-notification', + 'conpherence-thread-manager', + ), + '43bc9360' => array( + 'javelin-install', + ), + '44d48cd1' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-uri', + ), + '457f4d16' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-util', + 'javelin-dom', + 'javelin-request', + 'phabricator-keyboard-shortcut', + 'phabricator-darklog', + 'phabricator-darkmessage', + ), + '46116c01' => array( + 'javelin-request', + 'javelin-behavior', + 'javelin-dom', + 'javelin-router', + 'javelin-util', + 'phabricator-busy', + ), + '47a0728b' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-request', + ), + '4842f137' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + '48a8641f' => array( + 'javelin-install', + ), + '48fe33d0' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-util', + 'javelin-uri', + ), + '490e2e2e' => array( + 'phui-oi-list-view-css', + ), + '4a7fb02b' => array( + 'javelin-behavior', + 'javelin-dom', + 'phortune-credit-card-form', + ), + '4ae58b5a' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-workflow', + 'javelin-stratcom', + 'conpherence-thread-manager', + ), + '4b671572' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-request', + ), + '4bcc1f78' => array( + 'javelin-install', + 'javelin-dom', + ), + '4dffaeb2' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phuix-form-control-view', + 'phuix-icon-view', + 'javelin-behavior-phabricator-gesture', + ), + '4e61fa88' => array( + 'javelin-behavior', + 'javelin-aphlict', + 'javelin-stratcom', + 'javelin-request', + 'javelin-uri', + 'javelin-dom', + 'javelin-json', + 'javelin-router', + 'javelin-util', + 'javelin-leader', + 'javelin-sound', + 'phabricator-notification', + ), + '4feea7d3' => array( + 'trigger-rule-control', + ), + '506aa3f4' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '5202e831' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-fx', + ), + '52e3ff03' => array( + 'phui-chart-css', + 'd3', + 'javelin-chart-curtain-view', + 'javelin-chart-function-label', + ), + '541f81c3' => array( + 'javelin-install', + ), + 54262396 => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'phabricator-phtize', + 'phabricator-textareautils', + 'javelin-workflow', + 'javelin-vector', + 'phuix-autocomplete', + 'javelin-mask', + ), + '548567f6' => array( + 'syntax-default-css', + ), + '55a24e84' => array( + 'javelin-install', + 'javelin-dom', + ), + '55d7b788' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '5793d835' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-typeahead', + 'javelin-tokenizer', + 'javelin-typeahead-preloaded-source', + 'javelin-typeahead-ondemand-source', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-util', + ), + '5803b9e7' => array( + 'javelin-behavior', + 'javelin-util', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-vector', + 'javelin-typeahead-static-source', + ), + '58cb6a88' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-vector', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-workboard-controller', + 'javelin-workboard-drop-effect', + ), + '5902260c' => array( + 'javelin-util', + 'javelin-magical-init', + ), + '5a6f6a06' => array( + 'javelin-behavior', + 'javelin-quicksand', + ), + '5a79f6c3' => array( + 'javelin-install', + 'javelin-util', + 'javelin-request', + 'javelin-typeahead-source', + ), + '5aa1544e' => array( + 'javelin-behavior', + 'javelin-util', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-vector', + 'javelin-magical-init', + 'javelin-request', + 'javelin-history', + 'javelin-workflow', + 'javelin-mask', + 'javelin-behavior-device', + 'phabricator-keyboard-shortcut', + ), + '5b54c823' => array( + 'javelin-install', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-util', + ), + '5cf0501a' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'phuix-dropdown-menu', + ), + '5d83623b' => array( + 'javelin-dom', + ), + '5faf27b9' => array( + 'phuix-form-control-view', + ), + '60c3d405' => array( + 'phui-inline-comment-view-css', + ), + '60cd9241' => array( + 'javelin-behavior', + ), + '6199f752' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-vector', + 'javelin-request', + 'javelin-uri', + ), + '65bb0011' => array( + 'javelin-behavior', + 'javelin-dom', + ), + '66365ee2' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '6648270a' => array( + 'javelin-install', + 'javelin-dom', + ), + '6a1583a8' => array( + 'javelin-behavior', + 'javelin-history', + ), + '6a162524' => array( + 'javelin-behavior', + 'javelin-dom', + ), + '6a18c42e' => array( + 'javelin-install', + ), + '6a30fa46' => array( + 'phui-oi-list-view-css', + ), + '6a85bc5a' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-json', + 'javelin-workflow', + 'javelin-magical-init', + ), + '6cfa0008' => array( + 'javelin-dom', + 'javelin-dynval', + 'javelin-reactor', + 'javelin-reactornode', + 'javelin-install', + 'javelin-util', + ), + 70245195 => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + ), + '727a5a61' => array( + 'phuix-icon-view', + ), + '72960bc1' => array( + 'javelin-install', + 'javelin-reactor', + 'javelin-util', + 'javelin-reactor-node-calmer', + ), + '73ecc1f8' => array( + 'javelin-behavior', + 'javelin-behavior-device', + 'javelin-stratcom', + 'phabricator-tooltip', + ), + 74446546 => array( + 'javelin-behavior', + 'javelin-dom', + ), + '78bc5d94' => array( + 'javelin-behavior', + 'javelin-uri', + 'phabricator-notification', + ), + '78f811c9' => array( + 'javelin-install', + ), + '7930776a' => array( + 'javelin-install', + 'javelin-dom', + ), + '7b139193' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + ), + '7c4d8998' => array( + 'javelin-install', + 'javelin-dom', + ), + '80bff3af' => array( + 'javelin-install', + 'javelin-typeahead-source', + ), + '81debc48' => array( + 'javelin-install', + 'javelin-util', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-vector', + ), + '8207abf9' => array( + 'javelin-dom', + ), + 83754533 => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-vector', + ), + '84e6891f' => array( + 'javelin-install', + 'javelin-stratcom', + 'javelin-util', + 'javelin-behavior', + 'javelin-json', + 'javelin-dom', + 'javelin-resource', + 'javelin-routable', + ), + '84f82dad' => array( + 'javelin-install', + ), + '87428eb2' => array( + 'javelin-behavior', + 'javelin-diffusion-locate-file-source', + 'javelin-dom', + 'javelin-typeahead', + 'javelin-uri', + ), + '876506b6' => array( + 'javelin-view', + 'javelin-install', + 'javelin-dom', + ), + '89a1ae3a' => array( + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-install', + ), + '8ac32fd9' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + '8b5c7d65' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'phabricator-busy', + ), + '8badee71' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-typeahead-normalizer', + ), + '8c2ed2bf' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-behavior-device', + 'javelin-history', + 'javelin-vector', + 'javelin-scrollbar', + 'phabricator-title', + 'phabricator-shaped-request', + 'conpherence-thread-manager', + ), + '8e0aa661' => array( + 'javelin-install', + 'javelin-dom', + ), + '8f959ad0' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-workflow', + 'javelin-stratcom', + ), + '91befbcc' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-workflow', + 'javelin-stratcom', + ), + '92388bae' => array( + 'javelin-behavior', + 'javelin-scrollbar', + ), + '925fe8cd' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '92cdd7b6' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + '9347f172' => array( + 'javelin-behavior', + 'multirow-row-manager', + 'javelin-dom', + 'javelin-util', + 'phabricator-prefab', + 'javelin-json', + ), + '94243d89' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-typeahead-preloaded-source', + 'javelin-util', + ), + '945ff654' => array( + 'javelin-stratcom', + 'javelin-request', + 'javelin-dom', + 'javelin-vector', + 'javelin-install', + 'javelin-util', + 'javelin-mask', + 'javelin-uri', + 'javelin-routable', + ), + '9623adc1' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'javelin-router', + ), + '98ef467f' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-request', + 'javelin-util', + ), + '995f5102' => array( + 'javelin-install', + 'javelin-util', + 'javelin-request', + 'javelin-router', + ), + '9aae2b66' => array( + 'javelin-install', + 'javelin-util', + ), + '9c01e364' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-workflow', + ), + '9c775532' => array( + 'javelin-dom', + 'phabricator-diff-inline-content-state', + ), + '9cec214e' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'javelin-uri', + 'phabricator-textareautils', + ), + 'a17b84f1' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-workflow', + ), + 'a241536a' => array( + 'javelin-install', + ), + 'a2ab19be' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'phabricator-draggable-list', + ), + 'a4356cde' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-vector', + 'javelin-util', + ), + 'a43ae2ae' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-vector', + ), + 'a4aa75c4' => array( + 'phui-button-css', + 'phui-button-simple-css', + ), + 'a5257c4e' => array( + 'javelin-install', + 'javelin-dom', + ), + 'a77e2cbd' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-vector', + ), + 'a8f573a9' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-util', + ), + 'a9942052' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-view-renderer', + 'javelin-install', + ), + 'a9b91e3f' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-util', + 'phabricator-notification-css', + ), + 'aa371860' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + 'aa51efb4' => array( + 'javelin-dom', + ), + 'aa6d2308' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'multirow-row-manager', + 'javelin-json', + 'phuix-form-control-view', + ), + 'ab85e184' => array( + 'javelin-install', + 'javelin-dom', + 'phabricator-notification', + ), + 'ac10c917' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), + 'ac2b1e01' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'javelin-vector', + 'javelin-install', + ), + 'ad258e28' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-chart', + ), + 'ad486db3' => array( + 'javelin-install', + 'javelin-typeahead', + 'javelin-dom', + 'javelin-request', + 'javelin-typeahead-ondemand-source', + 'javelin-util', + ), + 'aec8e38c' => array( + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-install', + 'javelin-aphlict', + 'javelin-workflow', + 'javelin-router', + 'javelin-behavior-device', + 'javelin-vector', + ), + 'b105a3a6' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 'b26a41e4' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 'b347a301' => array( + 'javelin-behavior', + ), + 'b46d88c5' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-workflow', + 'phabricator-draggable-list', + 'javelin-workboard-column', + 'javelin-workboard-header-template', + 'javelin-workboard-card-template', + 'javelin-workboard-order-template', + ), + 'b49fd60c' => array( + 'multirow-row-manager', + 'trigger-rule', + ), + 'b517bfa0' => array( + 'phui-oi-list-view-css', + ), + 'b557770a' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-vector', + 'javelin-stratcom', + ), + 'b58d1a2a' => array( + 'javelin-behavior', + 'javelin-behavior-device', + 'javelin-stratcom', + 'javelin-vector', + 'javelin-dom', + 'javelin-magical-init', + ), + 'b5e9bff9' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 'b7b73831' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'phabricator-shaped-request', + ), + 'b86ef6c2' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'phabricator-tooltip', + 'phabricator-diff-changeset-list', + 'phabricator-diff-changeset', + 'phuix-formation-view', + ), + 'b86f297f' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + 'b9109f8f' => array( + 'javelin-behavior', + 'javelin-uri', + 'phabricator-notification', + ), + 'b9d0c2f3' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-util', + 'javelin-vector', + 'javelin-stratcom', + 'javelin-workflow', + 'phabricator-drag-and-drop-file-upload', + 'javelin-workboard-board', + ), + 'bcec20f0' => array( + 'phui-theme-css', + ), + 'c03f2fb4' => array( + 'javelin-install', + ), + 'c2c500a7' => array( + 'javelin-install', + 'javelin-dom', + 'phuix-button-view', + ), + 'c3703a16' => array( + 'javelin-behavior', + 'javelin-aphlict', + 'phabricator-phtize', + 'javelin-dom', + ), + 'c3d24e63' => array( + 'javelin-install', + 'javelin-workboard-card', + 'javelin-workboard-header', + ), + 'c687e867' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-fx', + 'javelin-util', + ), + 'c68f183f' => array( + 'javelin-install', + 'javelin-dom', + ), + 'c715c123' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'javelin-workflow', + 'javelin-json', + ), + 'cc2c5de5' => array( + 'javelin-install', + 'phuix-button-view', + 'phabricator-diff-tree-view', + ), + 'cef53b3e' => array( + 'javelin-install', + 'javelin-dom', + 'phuix-formation-column-view', + 'phuix-formation-flank-view', + ), + 'cf32921f' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + ), + 'd12d214f' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-json', + 'javelin-workflow', + 'javelin-util', + ), + 'd3799cb4' => array( + 'javelin-install', + ), + 'd4cc2d2a' => array( + 'javelin-install', + ), + 'd7d3ba75' => array( + 'javelin-dom', + 'javelin-util', + 'javelin-stratcom', + 'javelin-install', + 'javelin-workflow', + 'javelin-router', + 'javelin-behavior-device', + 'javelin-vector', + 'phabricator-diff-inline', + 'phabricator-diff-path-view', + 'phuix-button-view', + 'javelin-external-editor-link-engine', + ), + 'd8a86cfb' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-util', + 'phabricator-shaped-request', + ), + 'da15d3dc' => array( + 'phui-oi-list-view-css', + ), + 'da8f5259' => array( + 'javelin-behavior', + 'javelin-dom', + ), + 'dae2d55b' => array( + 'javelin-behavior', + 'javelin-uri', + 'phabricator-notification', + ), + 'de4b4919' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-vector', + 'javelin-request', + 'javelin-uri', + 'phui-hovercard', + ), + 'e150bd50' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'phuix-dropdown-menu', + ), + 'e4c7622a' => array( + 'javelin-magical-init', + 'javelin-install', + 'javelin-util', + 'javelin-vector', + 'javelin-stratcom', + ), + 'e5bdb730' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-workflow', + 'javelin-dom', + 'phabricator-draggable-list', + ), + 'e8240b50' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 'e9a2940f' => array( + 'javelin-behavior', + 'javelin-request', + 'javelin-stratcom', + 'javelin-vector', + 'javelin-dom', + 'javelin-uri', + 'javelin-behavior-device', + 'phabricator-title', + 'phabricator-favicon', + ), + 'e9c80beb' => array( + 'javelin-install', + 'javelin-event', + ), + 'ebe83a6b' => array( + 'javelin-install', + ), + 'ec4e31c0' => array( + 'phui-timeline-view-css', + ), + 'ee77366f' => array( + 'aphront-dialog-view-css', + ), + 'f340a484' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-vector', + ), + 'f84bcbf4' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), + 'f8c4e135' => array( + 'javelin-install', + 'javelin-dom', + 'javelin-view-visitor', + 'javelin-util', + ), + 'fa6f30b2' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-stratcom', + 'javelin-behavior-device', + 'javelin-scrollbar', + 'javelin-quicksand', + 'phabricator-keyboard-shortcut', + 'conpherence-thread-manager', + ), + 'fa74cc35' => array( + 'phui-oi-list-view-css', + ), + 'fdc13e4e' => array( + 'javelin-install', + ), + 'ff688a7a' => array( + 'owners-path-editor', + 'javelin-behavior', + ), + ), + 'packages' => array( + 'conpherence.pkg.css' => array( + 'conpherence-menu-css', + 'conpherence-color-css', + 'conpherence-message-pane-css', + 'conpherence-notification-css', + 'conpherence-transaction-css', + 'conpherence-participant-pane-css', + 'conpherence-header-pane-css', + ), + 'conpherence.pkg.js' => array( + 'javelin-behavior-conpherence-menu', + 'javelin-behavior-conpherence-participant-pane', + 'javelin-behavior-conpherence-pontificate', + 'javelin-behavior-toggle-widget', + ), + 'core.pkg.css' => array( + 'phabricator-core-css', + 'phabricator-zindex-css', + 'phui-button-css', + 'phui-button-simple-css', + 'phui-theme-css', + 'phabricator-standard-page-view', + 'aphront-dialog-view-css', + 'phui-form-view-css', + 'aphront-panel-view-css', + 'aphront-table-view-css', + 'aphront-tokenizer-control-css', + 'aphront-typeahead-control-css', + 'aphront-list-filter-view-css', + 'application-search-view-css', + 'phabricator-remarkup-css', + 'syntax-highlighting-css', + 'syntax-default-css', + 'phui-pager-css', + 'aphront-tooltip-css', + 'phabricator-flag-css', + 'phui-info-view-css', + 'phabricator-main-menu-view', + 'phabricator-notification-css', + 'phabricator-notification-menu-css', + 'phui-lightbox-css', + 'phui-comment-panel-css', + 'phui-header-view-css', + 'phabricator-nav-view-css', + 'phui-basic-nav-view-css', + 'phui-crumbs-view-css', + 'phui-oi-list-view-css', + 'phui-oi-color-css', + 'phui-oi-big-ui-css', + 'phui-oi-drag-ui-css', + 'phui-oi-simple-ui-css', + 'phui-oi-flush-ui-css', + 'global-drag-and-drop-css', + 'phui-spacing-css', + 'phui-form-css', + 'phui-icon-view-css', + 'phabricator-action-list-view-css', + 'phui-property-list-view-css', + 'phui-tag-view-css', + 'phui-list-view-css', + 'font-fontawesome', + 'font-lato', + 'phui-font-icon-base-css', + 'phui-fontkit-css', + 'phui-box-css', + 'phui-object-box-css', + 'phui-timeline-view-css', + 'phui-two-column-view-css', + 'phui-curtain-view-css', + 'sprite-login-css', + 'sprite-tokens-css', + 'tokens-css', + 'auth-css', + 'phui-status-list-view-css', + 'phui-feed-story-css', + 'phabricator-feed-css', + 'phabricator-dashboard-css', + 'aphront-multi-column-view-css', + 'phui-curtain-object-ref-view-css', + 'phui-comment-form-css', + 'phui-head-thing-view-css', + 'conpherence-durable-column-view', + 'phui-button-bar-css', + ), + 'core.pkg.js' => array( + 'javelin-util', + 'javelin-install', + 'javelin-event', + 'javelin-stratcom', + 'javelin-behavior', + 'javelin-resource', + 'javelin-request', + 'javelin-vector', + 'javelin-dom', + 'javelin-json', + 'javelin-uri', + 'javelin-workflow', + 'javelin-mask', + 'javelin-typeahead', + 'javelin-typeahead-normalizer', + 'javelin-typeahead-source', + 'javelin-typeahead-preloaded-source', + 'javelin-typeahead-ondemand-source', + 'javelin-tokenizer', + 'javelin-history', + 'javelin-router', + 'javelin-routable', + 'javelin-behavior-aphront-basic-tokenizer', + 'javelin-behavior-workflow', + 'javelin-behavior-aphront-form-disable-on-submit', + 'phabricator-keyboard-shortcut-manager', + 'phabricator-keyboard-shortcut', + 'javelin-behavior-phabricator-keyboard-shortcuts', + 'javelin-behavior-refresh-csrf', + 'javelin-behavior-phabricator-watch-anchor', + 'javelin-behavior-phabricator-autofocus', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + 'phuix-icon-view', + 'phabricator-phtize', + 'javelin-behavior-phabricator-oncopy', + 'phabricator-tooltip', + 'javelin-behavior-phabricator-tooltips', + 'phabricator-prefab', + 'javelin-behavior-device', + 'javelin-behavior-toggle-class', + 'javelin-behavior-lightbox-attachments', + 'phabricator-busy', + 'javelin-sound', + 'javelin-aphlict', + 'phabricator-notification', + 'javelin-behavior-aphlict-listen', + 'javelin-behavior-phabricator-search-typeahead', + 'javelin-behavior-aphlict-dropdown', + 'javelin-behavior-history-install', + 'javelin-behavior-phabricator-gesture', + 'javelin-behavior-phabricator-remarkup-assist', + 'phabricator-textareautils', + 'phabricator-file-upload', + 'javelin-behavior-global-drag-and-drop', + 'javelin-behavior-phabricator-reveal-content', + 'phui-hovercard', + 'phui-hovercard-list', + 'javelin-behavior-phui-hovercards', + 'javelin-color', + 'javelin-fx', + 'phabricator-draggable-list', + 'javelin-behavior-phabricator-transaction-list', + 'javelin-behavior-phabricator-show-older-transactions', + 'javelin-behavior-phui-dropdown-menu', + 'javelin-behavior-doorkeeper-tag', + 'phabricator-title', + 'javelin-leader', + 'javelin-websocket', + 'javelin-behavior-dashboard-async-panel', + 'javelin-behavior-dashboard-tab-panel', + 'javelin-quicksand', + 'javelin-behavior-quicksand-blacklist', + 'javelin-behavior-high-security-warning', + 'javelin-behavior-read-only-warning', + 'javelin-scrollbar', + 'javelin-behavior-scrollbar', + 'javelin-behavior-durable-column', + 'conpherence-thread-manager', + 'javelin-behavior-detect-timezone', + 'javelin-behavior-setup-check-https', + 'javelin-behavior-aphlict-status', + 'javelin-behavior-user-menu', + 'phabricator-favicon', + 'javelin-behavior-phui-tab-group', + 'javelin-behavior-phui-submenu', + 'phuix-button-view', + 'javelin-behavior-comment-actions', + 'phuix-form-control-view', + 'phuix-autocomplete', + ), + 'dark-console.pkg.js' => array( + 'javelin-behavior-dark-console', + 'phabricator-darklog', + 'phabricator-darkmessage', + ), + 'differential.pkg.css' => array( + 'differential-core-view-css', + 'differential-changeset-view-css', + 'differential-revision-history-css', + 'differential-revision-list-css', + 'differential-table-of-contents-css', + 'differential-revision-comment-css', + 'differential-revision-add-comment-css', + 'phabricator-object-selector-css', + 'phabricator-content-source-view-css', + 'inline-comment-summary-css', + 'phui-inline-comment-view-css', + 'diff-tree-view-css', + 'phui-formation-view-css', + ), + 'differential.pkg.js' => array( + 'phabricator-drag-and-drop-file-upload', + 'phabricator-shaped-request', + 'javelin-behavior-differential-populate', + 'javelin-behavior-differential-diff-radios', + 'javelin-behavior-aphront-drag-and-drop-textarea', + 'javelin-behavior-phabricator-object-selector', + 'javelin-behavior-repository-crossreference', + 'javelin-behavior-aphront-more', + 'phabricator-diff-inline-content-state', + 'phabricator-diff-inline', + 'phabricator-diff-changeset', + 'phabricator-diff-changeset-list', + 'phabricator-diff-tree-view', + 'phabricator-diff-path-view', + 'phuix-formation-view', + 'phuix-formation-column-view', + 'phuix-formation-flank-view', + 'javelin-external-editor-link-engine', + ), + 'diffusion.pkg.css' => array( + 'diffusion-icons-css', + ), + 'diffusion.pkg.js' => array( + 'javelin-behavior-diffusion-pull-lastmodified', + 'javelin-behavior-diffusion-commit-graph', + 'javelin-behavior-audit-preview', + ), + 'maniphest.pkg.css' => array( + 'maniphest-task-summary-css', + ), + 'maniphest.pkg.js' => array( + 'javelin-behavior-maniphest-batch-selector', + 'javelin-behavior-maniphest-list-editor', + ), + ), +); diff --git a/resources/celerity/packages.php b/resources/celerity/packages.php new file mode 100644 index 0000000000..fc5a4f11b6 --- /dev/null +++ b/resources/celerity/packages.php @@ -0,0 +1,248 @@ + array( + 'javelin-util', + 'javelin-install', + 'javelin-event', + 'javelin-stratcom', + 'javelin-behavior', + 'javelin-resource', + 'javelin-request', + 'javelin-vector', + 'javelin-dom', + 'javelin-json', + 'javelin-uri', + 'javelin-workflow', + 'javelin-mask', + 'javelin-typeahead', + 'javelin-typeahead-normalizer', + 'javelin-typeahead-source', + 'javelin-typeahead-preloaded-source', + 'javelin-typeahead-ondemand-source', + 'javelin-tokenizer', + 'javelin-history', + 'javelin-router', + 'javelin-routable', + 'javelin-behavior-aphront-basic-tokenizer', + 'javelin-behavior-workflow', + 'javelin-behavior-aphront-form-disable-on-submit', + 'phabricator-keyboard-shortcut-manager', + 'phabricator-keyboard-shortcut', + 'javelin-behavior-phabricator-keyboard-shortcuts', + 'javelin-behavior-refresh-csrf', + 'javelin-behavior-phabricator-watch-anchor', + 'javelin-behavior-phabricator-autofocus', + 'phuix-dropdown-menu', + 'phuix-action-list-view', + 'phuix-action-view', + 'phuix-icon-view', + 'phabricator-phtize', + 'javelin-behavior-phabricator-oncopy', + 'phabricator-tooltip', + 'javelin-behavior-phabricator-tooltips', + 'phabricator-prefab', + 'javelin-behavior-device', + 'javelin-behavior-toggle-class', + 'javelin-behavior-lightbox-attachments', + 'phabricator-busy', + 'javelin-sound', + 'javelin-aphlict', + 'phabricator-notification', + 'javelin-behavior-aphlict-listen', + 'javelin-behavior-phabricator-search-typeahead', + 'javelin-behavior-aphlict-dropdown', + 'javelin-behavior-history-install', + 'javelin-behavior-phabricator-gesture', + 'javelin-behavior-phabricator-remarkup-assist', + 'phabricator-textareautils', + 'phabricator-file-upload', + 'javelin-behavior-global-drag-and-drop', + 'javelin-behavior-phabricator-reveal-content', + 'phui-hovercard', + 'phui-hovercard-list', + 'javelin-behavior-phui-hovercards', + 'javelin-color', + 'javelin-fx', + 'phabricator-draggable-list', + 'javelin-behavior-phabricator-transaction-list', + 'javelin-behavior-phabricator-show-older-transactions', + 'javelin-behavior-phui-dropdown-menu', + 'javelin-behavior-doorkeeper-tag', + 'phabricator-title', + 'javelin-leader', + 'javelin-websocket', + 'javelin-behavior-dashboard-async-panel', + 'javelin-behavior-dashboard-tab-panel', + 'javelin-quicksand', + 'javelin-behavior-quicksand-blacklist', + 'javelin-behavior-high-security-warning', + 'javelin-behavior-read-only-warning', + 'javelin-scrollbar', + 'javelin-behavior-scrollbar', + 'javelin-behavior-durable-column', + 'conpherence-thread-manager', + 'javelin-behavior-detect-timezone', + 'javelin-behavior-setup-check-https', + 'javelin-behavior-aphlict-status', + 'javelin-behavior-user-menu', + 'phabricator-favicon', + 'javelin-behavior-phui-tab-group', + 'javelin-behavior-phui-submenu', + 'phuix-button-view', + 'javelin-behavior-comment-actions', + 'phuix-form-control-view', + 'phuix-autocomplete', + ), + 'core.pkg.css' => array( + 'phabricator-core-css', + 'phabricator-zindex-css', + 'phui-button-css', + 'phui-button-simple-css', + 'phui-theme-css', + 'phabricator-standard-page-view', + 'aphront-dialog-view-css', + 'phui-form-view-css', + 'aphront-panel-view-css', + 'aphront-table-view-css', + 'aphront-tokenizer-control-css', + 'aphront-typeahead-control-css', + 'aphront-list-filter-view-css', + 'application-search-view-css', + + 'phabricator-remarkup-css', + 'syntax-highlighting-css', + 'syntax-default-css', + 'phui-pager-css', + 'aphront-tooltip-css', + 'phabricator-flag-css', + 'phui-info-view-css', + + 'phabricator-main-menu-view', + 'phabricator-notification-css', + 'phabricator-notification-menu-css', + 'phui-lightbox-css', + 'phui-comment-panel-css', + 'phui-header-view-css', + 'phabricator-nav-view-css', + 'phui-basic-nav-view-css', + 'phui-crumbs-view-css', + 'phui-oi-list-view-css', + 'phui-oi-color-css', + 'phui-oi-big-ui-css', + 'phui-oi-drag-ui-css', + 'phui-oi-simple-ui-css', + 'phui-oi-flush-ui-css', + 'global-drag-and-drop-css', + 'phui-spacing-css', + 'phui-form-css', + 'phui-icon-view-css', + + 'phabricator-action-list-view-css', + 'phui-property-list-view-css', + 'phui-tag-view-css', + 'phui-list-view-css', + + 'font-fontawesome', + 'font-lato', + 'phui-font-icon-base-css', + 'phui-fontkit-css', + 'phui-box-css', + 'phui-object-box-css', + 'phui-timeline-view-css', + 'phui-two-column-view-css', + 'phui-curtain-view-css', + + 'sprite-login-css', + 'sprite-tokens-css', + 'tokens-css', + 'auth-css', + + 'phui-status-list-view-css', + 'phui-feed-story-css', + 'phabricator-feed-css', + 'phabricator-dashboard-css', + 'aphront-multi-column-view-css', + 'phui-curtain-object-ref-view-css', + 'phui-comment-form-css', + 'phui-head-thing-view-css', + + 'conpherence-durable-column-view', + 'phui-button-bar-css', + ), + 'conpherence.pkg.css' => array( + 'conpherence-menu-css', + 'conpherence-color-css', + 'conpherence-message-pane-css', + 'conpherence-notification-css', + 'conpherence-transaction-css', + 'conpherence-participant-pane-css', + 'conpherence-header-pane-css', + ), + 'conpherence.pkg.js' => array( + 'javelin-behavior-conpherence-menu', + 'javelin-behavior-conpherence-participant-pane', + 'javelin-behavior-conpherence-pontificate', + 'javelin-behavior-toggle-widget', + ), + 'differential.pkg.css' => array( + 'differential-core-view-css', + 'differential-changeset-view-css', + 'differential-revision-history-css', + 'differential-revision-list-css', + 'differential-table-of-contents-css', + 'differential-revision-comment-css', + 'differential-revision-add-comment-css', + 'phabricator-object-selector-css', + 'phabricator-content-source-view-css', + 'inline-comment-summary-css', + 'phui-inline-comment-view-css', + 'diff-tree-view-css', + 'phui-formation-view-css', + ), + 'differential.pkg.js' => array( + 'phabricator-drag-and-drop-file-upload', + 'phabricator-shaped-request', + + 'javelin-behavior-differential-populate', + 'javelin-behavior-differential-diff-radios', + 'javelin-behavior-aphront-drag-and-drop-textarea', + 'javelin-behavior-phabricator-object-selector', + 'javelin-behavior-repository-crossreference', + + 'javelin-behavior-aphront-more', + + 'phabricator-diff-inline-content-state', + 'phabricator-diff-inline', + 'phabricator-diff-changeset', + 'phabricator-diff-changeset-list', + 'phabricator-diff-tree-view', + 'phabricator-diff-path-view', + + 'phuix-formation-view', + 'phuix-formation-column-view', + 'phuix-formation-flank-view', + + 'javelin-external-editor-link-engine', + ), + 'diffusion.pkg.css' => array( + 'diffusion-icons-css', + ), + 'diffusion.pkg.js' => array( + 'javelin-behavior-diffusion-pull-lastmodified', + 'javelin-behavior-diffusion-commit-graph', + 'javelin-behavior-audit-preview', + ), + 'maniphest.pkg.css' => array( + 'maniphest-task-summary-css', + ), + 'maniphest.pkg.js' => array( + 'javelin-behavior-maniphest-batch-selector', + 'javelin-behavior-maniphest-list-editor', + ), + 'dark-console.pkg.js' => array( + 'javelin-behavior-dark-console', + 'phabricator-darklog', + 'phabricator-darkmessage', + ), +); diff --git a/resources/cows/builtin/companion.cow b/resources/cows/builtin/companion.cow new file mode 100644 index 0000000000..e3514cda6f --- /dev/null +++ b/resources/cows/builtin/companion.cow @@ -0,0 +1,9 @@ + $thoughts + $thoughts + /---\__/---\\ + | / .... \ || + \ ..--.. // + |..($eyes). || + / ..--.. \\ + | \ .... / || + \---/--\---// diff --git a/resources/cows/custom/README b/resources/cows/custom/README new file mode 100644 index 0000000000..d0c28b6a56 --- /dev/null +++ b/resources/cows/custom/README @@ -0,0 +1,2 @@ +You can add custom ".cow" files here to make them available to the "cowsay" +interpreter in Remarkup. diff --git a/resources/emoji/manifest.json b/resources/emoji/manifest.json new file mode 100644 index 0000000000..47568fb43d --- /dev/null +++ b/resources/emoji/manifest.json @@ -0,0 +1,1630 @@ +{ + "8ball": "\ud83c\udfb1", + "a": "\ud83c\udd70", + "ab": "\ud83c\udd8e", + "abc": "\ud83d\udd24", + "abcd": "\ud83d\udd21", + "accept": "\ud83c\ude51", + "aerial_tramway": "\ud83d\udea1", + "airplane": "\u2708", + "airplane_arriving": "\ud83d\udeec", + "airplane_departure": "\ud83d\udeeb", + "airplane_small": "\ud83d\udee9", + "alarm_clock": "\u23f0", + "alembic": "\u2697", + "alien": "\ud83d\udc7d", + "ambulance": "\ud83d\ude91", + "amphora": "\ud83c\udffa", + "anchor": "\u2693", + "angel": "\ud83d\udc7c", + "angel_tone1": "\ud83d\udc7c\ud83c\udffb", + "angel_tone2": "\ud83d\udc7c\ud83c\udffc", + "angel_tone3": "\ud83d\udc7c\ud83c\udffd", + "angel_tone4": "\ud83d\udc7c\ud83c\udffe", + "angel_tone5": "\ud83d\udc7c\ud83c\udfff", + "anger": "\ud83d\udca2", + "anger_right": "\ud83d\uddef", + "angry": "\ud83d\ude20", + "anguished": "\ud83d\ude27", + "ant": "\ud83d\udc1c", + "apple": "\ud83c\udf4e", + "aquarius": "\u2652", + "aries": "\u2648", + "arrow_backward": "\u25c0", + "arrow_double_down": "\u23ec", + "arrow_double_up": "\u23eb", + "arrow_down": "\u2b07", + "arrow_down_small": "\ud83d\udd3d", + "arrow_forward": "\u25b6", + "arrow_heading_down": "\u2935", + "arrow_heading_up": "\u2934", + "arrow_left": "\u2b05", + "arrow_lower_left": "\u2199", + "arrow_lower_right": "\u2198", + "arrow_right": "\u27a1", + "arrow_right_hook": "\u21aa", + "arrow_up": "\u2b06", + "arrow_up_down": "\u2195", + "arrow_up_small": "\ud83d\udd3c", + "arrow_upper_left": "\u2196", + "arrow_upper_right": "\u2197", + "arrows_clockwise": "\ud83d\udd03", + "arrows_counterclockwise": "\ud83d\udd04", + "art": "\ud83c\udfa8", + "articulated_lorry": "\ud83d\ude9b", + "asterisk": "*\u20e3", + "astonished": "\ud83d\ude32", + "athletic_shoe": "\ud83d\udc5f", + "atm": "\ud83c\udfe7", + "atom": "\u269b", + "b": "\ud83c\udd71", + "baby": "\ud83d\udc76", + "baby_bottle": "\ud83c\udf7c", + "baby_chick": "\ud83d\udc24", + "baby_symbol": "\ud83d\udebc", + "baby_tone1": "\ud83d\udc76\ud83c\udffb", + "baby_tone2": "\ud83d\udc76\ud83c\udffc", + "baby_tone3": "\ud83d\udc76\ud83c\udffd", + "baby_tone4": "\ud83d\udc76\ud83c\udffe", + "baby_tone5": "\ud83d\udc76\ud83c\udfff", + "back": "\ud83d\udd19", + "badminton": "\ud83c\udff8", + "baggage_claim": "\ud83d\udec4", + "balloon": "\ud83c\udf88", + "ballot_box": "\ud83d\uddf3", + "ballot_box_with_check": "\u2611", + "bamboo": "\ud83c\udf8d", + "banana": "\ud83c\udf4c", + "bangbang": "\u203c", + "bank": "\ud83c\udfe6", + "bar_chart": "\ud83d\udcca", + "barber": "\ud83d\udc88", + "baseball": "\u26be", + "basketball": "\ud83c\udfc0", + "basketball_player": "\u26f9", + "basketball_player_tone1": "\u26f9\ud83c\udffb", + "basketball_player_tone2": "\u26f9\ud83c\udffc", + "basketball_player_tone3": "\u26f9\ud83c\udffd", + "basketball_player_tone4": "\u26f9\ud83c\udffe", + "basketball_player_tone5": "\u26f9\ud83c\udfff", + "bath": "\ud83d\udec0", + "bath_tone1": "\ud83d\udec0\ud83c\udffb", + "bath_tone2": "\ud83d\udec0\ud83c\udffc", + "bath_tone3": "\ud83d\udec0\ud83c\udffd", + "bath_tone4": "\ud83d\udec0\ud83c\udffe", + "bath_tone5": "\ud83d\udec0\ud83c\udfff", + "bathtub": "\ud83d\udec1", + "battery": "\ud83d\udd0b", + "beach": "\ud83c\udfd6", + "beach_umbrella": "\u26f1", + "bear": "\ud83d\udc3b", + "bed": "\ud83d\udecf", + "bee": "\ud83d\udc1d", + "beer": "\ud83c\udf7a", + "beers": "\ud83c\udf7b", + "beetle": "\ud83d\udc1e", + "beginner": "\ud83d\udd30", + "bell": "\ud83d\udd14", + "bellhop": "\ud83d\udece", + "bento": "\ud83c\udf71", + "bicyclist": "\ud83d\udeb4", + "bicyclist_tone1": "\ud83d\udeb4\ud83c\udffb", + "bicyclist_tone2": "\ud83d\udeb4\ud83c\udffc", + "bicyclist_tone3": "\ud83d\udeb4\ud83c\udffd", + "bicyclist_tone4": "\ud83d\udeb4\ud83c\udffe", + "bicyclist_tone5": "\ud83d\udeb4\ud83c\udfff", + "bike": "\ud83d\udeb2", + "bikini": "\ud83d\udc59", + "biohazard": "\u2623", + "bird": "\ud83d\udc26", + "birthday": "\ud83c\udf82", + "black_circle": "\u26ab", + "black_joker": "\ud83c\udccf", + "black_large_square": "\u2b1b", + "black_medium_small_square": "\u25fe", + "black_medium_square": "\u25fc", + "black_nib": "\u2712", + "black_small_square": "\u25aa", + "black_square_button": "\ud83d\udd32", + "blossom": "\ud83c\udf3c", + "blowfish": "\ud83d\udc21", + "blue_book": "\ud83d\udcd8", + "blue_car": "\ud83d\ude99", + "blue_heart": "\ud83d\udc99", + "blush": "\ud83d\ude0a", + "boar": "\ud83d\udc17", + "bomb": "\ud83d\udca3", + "book": "\ud83d\udcd6", + "bookmark": "\ud83d\udd16", + "bookmark_tabs": "\ud83d\udcd1", + "books": "\ud83d\udcda", + "boom": "\ud83d\udca5", + "boot": "\ud83d\udc62", + "bouquet": "\ud83d\udc90", + "bow": "\ud83d\ude47", + "bow_and_arrow": "\ud83c\udff9", + "bow_tone1": "\ud83d\ude47\ud83c\udffb", + "bow_tone2": "\ud83d\ude47\ud83c\udffc", + "bow_tone3": "\ud83d\ude47\ud83c\udffd", + "bow_tone4": "\ud83d\ude47\ud83c\udffe", + "bow_tone5": "\ud83d\ude47\ud83c\udfff", + "bowling": "\ud83c\udfb3", + "boy": "\ud83d\udc66", + "boy_tone1": "\ud83d\udc66\ud83c\udffb", + "boy_tone2": "\ud83d\udc66\ud83c\udffc", + "boy_tone3": "\ud83d\udc66\ud83c\udffd", + "boy_tone4": "\ud83d\udc66\ud83c\udffe", + "boy_tone5": "\ud83d\udc66\ud83c\udfff", + "bread": "\ud83c\udf5e", + "bride_with_veil": "\ud83d\udc70", + "bride_with_veil_tone1": "\ud83d\udc70\ud83c\udffb", + "bride_with_veil_tone2": "\ud83d\udc70\ud83c\udffc", + "bride_with_veil_tone3": "\ud83d\udc70\ud83c\udffd", + "bride_with_veil_tone4": "\ud83d\udc70\ud83c\udffe", + "bride_with_veil_tone5": "\ud83d\udc70\ud83c\udfff", + "bridge_at_night": "\ud83c\udf09", + "briefcase": "\ud83d\udcbc", + "broken_heart": "\ud83d\udc94", + "bug": "\ud83d\udc1b", + "bulb": "\ud83d\udca1", + "bullettrain_front": "\ud83d\ude85", + "bullettrain_side": "\ud83d\ude84", + "burrito": "\ud83c\udf2f", + "bus": "\ud83d\ude8c", + "busstop": "\ud83d\ude8f", + "bust_in_silhouette": "\ud83d\udc64", + "busts_in_silhouette": "\ud83d\udc65", + "cactus": "\ud83c\udf35", + "cake": "\ud83c\udf70", + "calendar": "\ud83d\udcc6", + "calendar_spiral": "\ud83d\uddd3", + "calling": "\ud83d\udcf2", + "camel": "\ud83d\udc2b", + "camera": "\ud83d\udcf7", + "camera_with_flash": "\ud83d\udcf8", + "camping": "\ud83c\udfd5", + "cancer": "\u264b", + "candle": "\ud83d\udd6f", + "candy": "\ud83c\udf6c", + "capital_abcd": "\ud83d\udd20", + "capricorn": "\u2651", + "card_box": "\ud83d\uddc3", + "card_index": "\ud83d\udcc7", + "carousel_horse": "\ud83c\udfa0", + "cat": "\ud83d\udc31", + "cat2": "\ud83d\udc08", + "cd": "\ud83d\udcbf", + "chains": "\u26d3", + "champagne": "\ud83c\udf7e", + "chart": "\ud83d\udcb9", + "chart_with_downwards_trend": "\ud83d\udcc9", + "chart_with_upwards_trend": "\ud83d\udcc8", + "checkered_flag": "\ud83c\udfc1", + "cheese": "\ud83e\uddc0", + "cherries": "\ud83c\udf52", + "cherry_blossom": "\ud83c\udf38", + "chestnut": "\ud83c\udf30", + "chicken": "\ud83d\udc14", + "children_crossing": "\ud83d\udeb8", + "chipmunk": "\ud83d\udc3f", + "chocolate_bar": "\ud83c\udf6b", + "christmas_tree": "\ud83c\udf84", + "church": "\u26ea", + "cinema": "\ud83c\udfa6", + "circus_tent": "\ud83c\udfaa", + "city_dusk": "\ud83c\udf06", + "city_sunset": "\ud83c\udf07", + "cityscape": "\ud83c\udfd9", + "cl": "\ud83c\udd91", + "clap": "\ud83d\udc4f", + "clap_tone1": "\ud83d\udc4f\ud83c\udffb", + "clap_tone2": "\ud83d\udc4f\ud83c\udffc", + "clap_tone3": "\ud83d\udc4f\ud83c\udffd", + "clap_tone4": "\ud83d\udc4f\ud83c\udffe", + "clap_tone5": "\ud83d\udc4f\ud83c\udfff", + "clapper": "\ud83c\udfac", + "classical_building": "\ud83c\udfdb", + "clipboard": "\ud83d\udccb", + "clock": "\ud83d\udd70", + "clock1": "\ud83d\udd50", + "clock10": "\ud83d\udd59", + "clock1030": "\ud83d\udd65", + "clock11": "\ud83d\udd5a", + "clock1130": "\ud83d\udd66", + "clock12": "\ud83d\udd5b", + "clock1230": "\ud83d\udd67", + "clock130": "\ud83d\udd5c", + "clock2": "\ud83d\udd51", + "clock230": "\ud83d\udd5d", + "clock3": "\ud83d\udd52", + "clock330": "\ud83d\udd5e", + "clock4": "\ud83d\udd53", + "clock430": "\ud83d\udd5f", + "clock5": "\ud83d\udd54", + "clock530": "\ud83d\udd60", + "clock6": "\ud83d\udd55", + "clock630": "\ud83d\udd61", + "clock7": "\ud83d\udd56", + "clock730": "\ud83d\udd62", + "clock8": "\ud83d\udd57", + "clock830": "\ud83d\udd63", + "clock9": "\ud83d\udd58", + "clock930": "\ud83d\udd64", + "closed_book": "\ud83d\udcd5", + "closed_lock_with_key": "\ud83d\udd10", + "closed_umbrella": "\ud83c\udf02", + "cloud": "\u2601", + "cloud_lightning": "\ud83c\udf29", + "cloud_rain": "\ud83c\udf27", + "cloud_snow": "\ud83c\udf28", + "cloud_tornado": "\ud83c\udf2a", + "clubs": "\u2663", + "cocktail": "\ud83c\udf78", + "coffee": "\u2615", + "coffin": "\u26b0", + "cold_sweat": "\ud83d\ude30", + "comet": "\u2604", + "compression": "\ud83d\udddc", + "computer": "\ud83d\udcbb", + "confetti_ball": "\ud83c\udf8a", + "confounded": "\ud83d\ude16", + "confused": "\ud83d\ude15", + "congratulations": "\u3297", + "construction": "\ud83d\udea7", + "construction_site": "\ud83c\udfd7", + "construction_worker": "\ud83d\udc77", + "construction_worker_tone1": "\ud83d\udc77\ud83c\udffb", + "construction_worker_tone2": "\ud83d\udc77\ud83c\udffc", + "construction_worker_tone3": "\ud83d\udc77\ud83c\udffd", + "construction_worker_tone4": "\ud83d\udc77\ud83c\udffe", + "construction_worker_tone5": "\ud83d\udc77\ud83c\udfff", + "control_knobs": "\ud83c\udf9b", + "convenience_store": "\ud83c\udfea", + "cookie": "\ud83c\udf6a", + "cool": "\ud83c\udd92", + "cop": "\ud83d\udc6e", + "cop_tone1": "\ud83d\udc6e\ud83c\udffb", + "cop_tone2": "\ud83d\udc6e\ud83c\udffc", + "cop_tone3": "\ud83d\udc6e\ud83c\udffd", + "cop_tone4": "\ud83d\udc6e\ud83c\udffe", + "cop_tone5": "\ud83d\udc6e\ud83c\udfff", + "copyright": "\u00a9", + "corn": "\ud83c\udf3d", + "couch": "\ud83d\udecb", + "couple": "\ud83d\udc6b", + "couple_mm": "\ud83d\udc68\u2764\ud83d\udc68", + "couple_with_heart": "\ud83d\udc91", + "couple_ww": "\ud83d\udc69\u2764\ud83d\udc69", + "couplekiss": "\ud83d\udc8f", + "cow": "\ud83d\udc2e", + "cow2": "\ud83d\udc04", + "crab": "\ud83e\udd80", + "crayon": "\ud83d\udd8d", + "credit_card": "\ud83d\udcb3", + "crescent_moon": "\ud83c\udf19", + "cricket": "\ud83c\udfcf", + "crocodile": "\ud83d\udc0a", + "cross": "\u271d", + "crossed_flags": "\ud83c\udf8c", + "crossed_swords": "\u2694", + "crown": "\ud83d\udc51", + "cruise_ship": "\ud83d\udef3", + "cry": "\ud83d\ude22", + "crying_cat_face": "\ud83d\ude3f", + "crystal_ball": "\ud83d\udd2e", + "cupid": "\ud83d\udc98", + "curly_loop": "\u27b0", + "currency_exchange": "\ud83d\udcb1", + "curry": "\ud83c\udf5b", + "custard": "\ud83c\udf6e", + "customs": "\ud83d\udec3", + "cyclone": "\ud83c\udf00", + "dagger": "\ud83d\udde1", + "dancer": "\ud83d\udc83", + "dancer_tone1": "\ud83d\udc83\ud83c\udffb", + "dancer_tone2": "\ud83d\udc83\ud83c\udffc", + "dancer_tone3": "\ud83d\udc83\ud83c\udffd", + "dancer_tone4": "\ud83d\udc83\ud83c\udffe", + "dancer_tone5": "\ud83d\udc83\ud83c\udfff", + "dancers": "\ud83d\udc6f", + "dango": "\ud83c\udf61", + "dark_sunglasses": "\ud83d\udd76", + "dart": "\ud83c\udfaf", + "dash": "\ud83d\udca8", + "date": "\ud83d\udcc5", + "deciduous_tree": "\ud83c\udf33", + "department_store": "\ud83c\udfec", + "desert": "\ud83c\udfdc", + "desktop": "\ud83d\udda5", + "diamond_shape_with_a_dot_inside": "\ud83d\udca0", + "diamonds": "\u2666", + "disappointed": "\ud83d\ude1e", + "disappointed_relieved": "\ud83d\ude25", + "dividers": "\ud83d\uddc2", + "dizzy": "\ud83d\udcab", + "dizzy_face": "\ud83d\ude35", + "do_not_litter": "\ud83d\udeaf", + "dog": "\ud83d\udc36", + "dog2": "\ud83d\udc15", + "dollar": "\ud83d\udcb5", + "dolls": "\ud83c\udf8e", + "dolphin": "\ud83d\udc2c", + "door": "\ud83d\udeaa", + "doughnut": "\ud83c\udf69", + "dove": "\ud83d\udd4a", + "dragon": "\ud83d\udc09", + "dragon_face": "\ud83d\udc32", + "dress": "\ud83d\udc57", + "dromedary_camel": "\ud83d\udc2a", + "droplet": "\ud83d\udca7", + "dvd": "\ud83d\udcc0", + "e-mail": "\ud83d\udce7", + "ear": "\ud83d\udc42", + "ear_of_rice": "\ud83c\udf3e", + "ear_tone1": "\ud83d\udc42\ud83c\udffb", + "ear_tone2": "\ud83d\udc42\ud83c\udffc", + "ear_tone3": "\ud83d\udc42\ud83c\udffd", + "ear_tone4": "\ud83d\udc42\ud83c\udffe", + "ear_tone5": "\ud83d\udc42\ud83c\udfff", + "earth_africa": "\ud83c\udf0d", + "earth_americas": "\ud83c\udf0e", + "earth_asia": "\ud83c\udf0f", + "egg": "\ud83c\udf73", + "eggplant": "\ud83c\udf46", + "eight": "8\u20e3", + "eight_pointed_black_star": "\u2734", + "eight_spoked_asterisk": "\u2733", + "electric_plug": "\ud83d\udd0c", + "elephant": "\ud83d\udc18", + "end": "\ud83d\udd1a", + "envelope": "\u2709", + "envelope_with_arrow": "\ud83d\udce9", + "euro": "\ud83d\udcb6", + "european_castle": "\ud83c\udff0", + "european_post_office": "\ud83c\udfe4", + "evergreen_tree": "\ud83c\udf32", + "exclamation": "\u2757", + "expressionless": "\ud83d\ude11", + "eye": "\ud83d\udc41", + "eye_in_speech_bubble": "\ud83d\udc41\ud83d\udde8", + "eyeglasses": "\ud83d\udc53", + "eyes": "\ud83d\udc40", + "factory": "\ud83c\udfed", + "fallen_leaf": "\ud83c\udf42", + "family": "\ud83d\udc6a", + "family_mmb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66", + "family_mmbb": "\ud83d\udc68\ud83d\udc68\ud83d\udc66\ud83d\udc66", + "family_mmg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67", + "family_mmgb": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc66", + "family_mmgg": "\ud83d\udc68\ud83d\udc68\ud83d\udc67\ud83d\udc67", + "family_mwbb": "\ud83d\udc68\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_mwg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67", + "family_mwgb": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_mwgg": "\ud83d\udc68\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "family_wwb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66", + "family_wwbb": "\ud83d\udc69\ud83d\udc69\ud83d\udc66\ud83d\udc66", + "family_wwg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67", + "family_wwgb": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc66", + "family_wwgg": "\ud83d\udc69\ud83d\udc69\ud83d\udc67\ud83d\udc67", + "fast_forward": "\u23e9", + "fax": "\ud83d\udce0", + "fearful": "\ud83d\ude28", + "feet": "\ud83d\udc3e", + "ferris_wheel": "\ud83c\udfa1", + "ferry": "\u26f4", + "field_hockey": "\ud83c\udfd1", + "file_cabinet": "\ud83d\uddc4", + "file_folder": "\ud83d\udcc1", + "film_frames": "\ud83c\udf9e", + "fire": "\ud83d\udd25", + "fire_engine": "\ud83d\ude92", + "fireworks": "\ud83c\udf86", + "first_quarter_moon": "\ud83c\udf13", + "first_quarter_moon_with_face": "\ud83c\udf1b", + "fish": "\ud83d\udc1f", + "fish_cake": "\ud83c\udf65", + "fishing_pole_and_fish": "\ud83c\udfa3", + "fist": "\u270a", + "fist_tone1": "\u270a\ud83c\udffb", + "fist_tone2": "\u270a\ud83c\udffc", + "fist_tone3": "\u270a\ud83c\udffd", + "fist_tone4": "\u270a\ud83c\udffe", + "fist_tone5": "\u270a\ud83c\udfff", + "five": "5\u20e3", + "flag_ac": "\ud83c\udde6\ud83c\udde8", + "flag_ad": "\ud83c\udde6\ud83c\udde9", + "flag_ae": "\ud83c\udde6\ud83c\uddea", + "flag_af": "\ud83c\udde6\ud83c\uddeb", + "flag_ag": "\ud83c\udde6\ud83c\uddec", + "flag_ai": "\ud83c\udde6\ud83c\uddee", + "flag_al": "\ud83c\udde6\ud83c\uddf1", + "flag_am": "\ud83c\udde6\ud83c\uddf2", + "flag_ao": "\ud83c\udde6\ud83c\uddf4", + "flag_aq": "\ud83c\udde6\ud83c\uddf6", + "flag_ar": "\ud83c\udde6\ud83c\uddf7", + "flag_as": "\ud83c\udde6\ud83c\uddf8", + "flag_at": "\ud83c\udde6\ud83c\uddf9", + "flag_au": "\ud83c\udde6\ud83c\uddfa", + "flag_aw": "\ud83c\udde6\ud83c\uddfc", + "flag_ax": "\ud83c\udde6\ud83c\uddfd", + "flag_az": "\ud83c\udde6\ud83c\uddff", + "flag_ba": "\ud83c\udde7\ud83c\udde6", + "flag_bb": "\ud83c\udde7\ud83c\udde7", + "flag_bd": "\ud83c\udde7\ud83c\udde9", + "flag_be": "\ud83c\udde7\ud83c\uddea", + "flag_bf": "\ud83c\udde7\ud83c\uddeb", + "flag_bg": "\ud83c\udde7\ud83c\uddec", + "flag_bh": "\ud83c\udde7\ud83c\udded", + "flag_bi": "\ud83c\udde7\ud83c\uddee", + "flag_bj": "\ud83c\udde7\ud83c\uddef", + "flag_bl": "\ud83c\udde7\ud83c\uddf1", + "flag_black": "\ud83c\udff4", + "flag_bm": "\ud83c\udde7\ud83c\uddf2", + "flag_bn": "\ud83c\udde7\ud83c\uddf3", + "flag_bo": "\ud83c\udde7\ud83c\uddf4", + "flag_bq": "\ud83c\udde7\ud83c\uddf6", + "flag_br": "\ud83c\udde7\ud83c\uddf7", + "flag_bs": "\ud83c\udde7\ud83c\uddf8", + "flag_bt": "\ud83c\udde7\ud83c\uddf9", + "flag_bv": "\ud83c\udde7\ud83c\uddfb", + "flag_bw": "\ud83c\udde7\ud83c\uddfc", + "flag_by": "\ud83c\udde7\ud83c\uddfe", + "flag_bz": "\ud83c\udde7\ud83c\uddff", + "flag_ca": "\ud83c\udde8\ud83c\udde6", + "flag_cc": "\ud83c\udde8\ud83c\udde8", + "flag_cd": "\ud83c\udde8\ud83c\udde9", + "flag_cf": "\ud83c\udde8\ud83c\uddeb", + "flag_cg": "\ud83c\udde8\ud83c\uddec", + "flag_ch": "\ud83c\udde8\ud83c\udded", + "flag_ci": "\ud83c\udde8\ud83c\uddee", + "flag_ck": "\ud83c\udde8\ud83c\uddf0", + "flag_cl": "\ud83c\udde8\ud83c\uddf1", + "flag_cm": "\ud83c\udde8\ud83c\uddf2", + "flag_cn": "\ud83c\udde8\ud83c\uddf3", + "flag_co": "\ud83c\udde8\ud83c\uddf4", + "flag_cp": "\ud83c\udde8\ud83c\uddf5", + "flag_cr": "\ud83c\udde8\ud83c\uddf7", + "flag_cu": "\ud83c\udde8\ud83c\uddfa", + "flag_cv": "\ud83c\udde8\ud83c\uddfb", + "flag_cw": "\ud83c\udde8\ud83c\uddfc", + "flag_cx": "\ud83c\udde8\ud83c\uddfd", + "flag_cy": "\ud83c\udde8\ud83c\uddfe", + "flag_cz": "\ud83c\udde8\ud83c\uddff", + "flag_de": "\ud83c\udde9\ud83c\uddea", + "flag_dg": "\ud83c\udde9\ud83c\uddec", + "flag_dj": "\ud83c\udde9\ud83c\uddef", + "flag_dk": "\ud83c\udde9\ud83c\uddf0", + "flag_dm": "\ud83c\udde9\ud83c\uddf2", + "flag_do": "\ud83c\udde9\ud83c\uddf4", + "flag_dz": "\ud83c\udde9\ud83c\uddff", + "flag_ea": "\ud83c\uddea\ud83c\udde6", + "flag_ec": "\ud83c\uddea\ud83c\udde8", + "flag_ee": "\ud83c\uddea\ud83c\uddea", + "flag_eg": "\ud83c\uddea\ud83c\uddec", + "flag_eh": "\ud83c\uddea\ud83c\udded", + "flag_er": "\ud83c\uddea\ud83c\uddf7", + "flag_es": "\ud83c\uddea\ud83c\uddf8", + "flag_et": "\ud83c\uddea\ud83c\uddf9", + "flag_eu": "\ud83c\uddea\ud83c\uddfa", + "flag_fi": "\ud83c\uddeb\ud83c\uddee", + "flag_fj": "\ud83c\uddeb\ud83c\uddef", + "flag_fk": "\ud83c\uddeb\ud83c\uddf0", + "flag_fm": "\ud83c\uddeb\ud83c\uddf2", + "flag_fo": "\ud83c\uddeb\ud83c\uddf4", + "flag_fr": "\ud83c\uddeb\ud83c\uddf7", + "flag_ga": "\ud83c\uddec\ud83c\udde6", + "flag_gb": "\ud83c\uddec\ud83c\udde7", + "flag_gd": "\ud83c\uddec\ud83c\udde9", + "flag_ge": "\ud83c\uddec\ud83c\uddea", + "flag_gf": "\ud83c\uddec\ud83c\uddeb", + "flag_gg": "\ud83c\uddec\ud83c\uddec", + "flag_gh": "\ud83c\uddec\ud83c\udded", + "flag_gi": "\ud83c\uddec\ud83c\uddee", + "flag_gl": "\ud83c\uddec\ud83c\uddf1", + "flag_gm": "\ud83c\uddec\ud83c\uddf2", + "flag_gn": "\ud83c\uddec\ud83c\uddf3", + "flag_gp": "\ud83c\uddec\ud83c\uddf5", + "flag_gq": "\ud83c\uddec\ud83c\uddf6", + "flag_gr": "\ud83c\uddec\ud83c\uddf7", + "flag_gs": "\ud83c\uddec\ud83c\uddf8", + "flag_gt": "\ud83c\uddec\ud83c\uddf9", + "flag_gu": "\ud83c\uddec\ud83c\uddfa", + "flag_gw": "\ud83c\uddec\ud83c\uddfc", + "flag_gy": "\ud83c\uddec\ud83c\uddfe", + "flag_hk": "\ud83c\udded\ud83c\uddf0", + "flag_hm": "\ud83c\udded\ud83c\uddf2", + "flag_hn": "\ud83c\udded\ud83c\uddf3", + "flag_hr": "\ud83c\udded\ud83c\uddf7", + "flag_ht": "\ud83c\udded\ud83c\uddf9", + "flag_hu": "\ud83c\udded\ud83c\uddfa", + "flag_ic": "\ud83c\uddee\ud83c\udde8", + "flag_id": "\ud83c\uddee\ud83c\udde9", + "flag_ie": "\ud83c\uddee\ud83c\uddea", + "flag_il": "\ud83c\uddee\ud83c\uddf1", + "flag_im": "\ud83c\uddee\ud83c\uddf2", + "flag_in": "\ud83c\uddee\ud83c\uddf3", + "flag_io": "\ud83c\uddee\ud83c\uddf4", + "flag_iq": "\ud83c\uddee\ud83c\uddf6", + "flag_ir": "\ud83c\uddee\ud83c\uddf7", + "flag_is": "\ud83c\uddee\ud83c\uddf8", + "flag_it": "\ud83c\uddee\ud83c\uddf9", + "flag_je": "\ud83c\uddef\ud83c\uddea", + "flag_jm": "\ud83c\uddef\ud83c\uddf2", + "flag_jo": "\ud83c\uddef\ud83c\uddf4", + "flag_jp": "\ud83c\uddef\ud83c\uddf5", + "flag_ke": "\ud83c\uddf0\ud83c\uddea", + "flag_kg": "\ud83c\uddf0\ud83c\uddec", + "flag_kh": "\ud83c\uddf0\ud83c\udded", + "flag_ki": "\ud83c\uddf0\ud83c\uddee", + "flag_km": "\ud83c\uddf0\ud83c\uddf2", + "flag_kn": "\ud83c\uddf0\ud83c\uddf3", + "flag_kp": "\ud83c\uddf0\ud83c\uddf5", + "flag_kr": "\ud83c\uddf0\ud83c\uddf7", + "flag_kw": "\ud83c\uddf0\ud83c\uddfc", + "flag_ky": "\ud83c\uddf0\ud83c\uddfe", + "flag_kz": "\ud83c\uddf0\ud83c\uddff", + "flag_la": "\ud83c\uddf1\ud83c\udde6", + "flag_lb": "\ud83c\uddf1\ud83c\udde7", + "flag_lc": "\ud83c\uddf1\ud83c\udde8", + "flag_li": "\ud83c\uddf1\ud83c\uddee", + "flag_lk": "\ud83c\uddf1\ud83c\uddf0", + "flag_lr": "\ud83c\uddf1\ud83c\uddf7", + "flag_ls": "\ud83c\uddf1\ud83c\uddf8", + "flag_lt": "\ud83c\uddf1\ud83c\uddf9", + "flag_lu": "\ud83c\uddf1\ud83c\uddfa", + "flag_lv": "\ud83c\uddf1\ud83c\uddfb", + "flag_ly": "\ud83c\uddf1\ud83c\uddfe", + "flag_ma": "\ud83c\uddf2\ud83c\udde6", + "flag_mc": "\ud83c\uddf2\ud83c\udde8", + "flag_md": "\ud83c\uddf2\ud83c\udde9", + "flag_me": "\ud83c\uddf2\ud83c\uddea", + "flag_mf": "\ud83c\uddf2\ud83c\uddeb", + "flag_mg": "\ud83c\uddf2\ud83c\uddec", + "flag_mh": "\ud83c\uddf2\ud83c\udded", + "flag_mk": "\ud83c\uddf2\ud83c\uddf0", + "flag_ml": "\ud83c\uddf2\ud83c\uddf1", + "flag_mm": "\ud83c\uddf2\ud83c\uddf2", + "flag_mn": "\ud83c\uddf2\ud83c\uddf3", + "flag_mo": "\ud83c\uddf2\ud83c\uddf4", + "flag_mp": "\ud83c\uddf2\ud83c\uddf5", + "flag_mq": "\ud83c\uddf2\ud83c\uddf6", + "flag_mr": "\ud83c\uddf2\ud83c\uddf7", + "flag_ms": "\ud83c\uddf2\ud83c\uddf8", + "flag_mt": "\ud83c\uddf2\ud83c\uddf9", + "flag_mu": "\ud83c\uddf2\ud83c\uddfa", + "flag_mv": "\ud83c\uddf2\ud83c\uddfb", + "flag_mw": "\ud83c\uddf2\ud83c\uddfc", + "flag_mx": "\ud83c\uddf2\ud83c\uddfd", + "flag_my": "\ud83c\uddf2\ud83c\uddfe", + "flag_mz": "\ud83c\uddf2\ud83c\uddff", + "flag_na": "\ud83c\uddf3\ud83c\udde6", + "flag_nc": "\ud83c\uddf3\ud83c\udde8", + "flag_ne": "\ud83c\uddf3\ud83c\uddea", + "flag_nf": "\ud83c\uddf3\ud83c\uddeb", + "flag_ng": "\ud83c\uddf3\ud83c\uddec", + "flag_ni": "\ud83c\uddf3\ud83c\uddee", + "flag_nl": "\ud83c\uddf3\ud83c\uddf1", + "flag_no": "\ud83c\uddf3\ud83c\uddf4", + "flag_np": "\ud83c\uddf3\ud83c\uddf5", + "flag_nr": "\ud83c\uddf3\ud83c\uddf7", + "flag_nu": "\ud83c\uddf3\ud83c\uddfa", + "flag_nz": "\ud83c\uddf3\ud83c\uddff", + "flag_om": "\ud83c\uddf4\ud83c\uddf2", + "flag_pa": "\ud83c\uddf5\ud83c\udde6", + "flag_pe": "\ud83c\uddf5\ud83c\uddea", + "flag_pf": "\ud83c\uddf5\ud83c\uddeb", + "flag_pg": "\ud83c\uddf5\ud83c\uddec", + "flag_ph": "\ud83c\uddf5\ud83c\udded", + "flag_pk": "\ud83c\uddf5\ud83c\uddf0", + "flag_pl": "\ud83c\uddf5\ud83c\uddf1", + "flag_pm": "\ud83c\uddf5\ud83c\uddf2", + "flag_pn": "\ud83c\uddf5\ud83c\uddf3", + "flag_pr": "\ud83c\uddf5\ud83c\uddf7", + "flag_ps": "\ud83c\uddf5\ud83c\uddf8", + "flag_pt": "\ud83c\uddf5\ud83c\uddf9", + "flag_pw": "\ud83c\uddf5\ud83c\uddfc", + "flag_py": "\ud83c\uddf5\ud83c\uddfe", + "flag_qa": "\ud83c\uddf6\ud83c\udde6", + "flag_re": "\ud83c\uddf7\ud83c\uddea", + "flag_ro": "\ud83c\uddf7\ud83c\uddf4", + "flag_rs": "\ud83c\uddf7\ud83c\uddf8", + "flag_ru": "\ud83c\uddf7\ud83c\uddfa", + "flag_rw": "\ud83c\uddf7\ud83c\uddfc", + "flag_sa": "\ud83c\uddf8\ud83c\udde6", + "flag_sb": "\ud83c\uddf8\ud83c\udde7", + "flag_sc": "\ud83c\uddf8\ud83c\udde8", + "flag_sd": "\ud83c\uddf8\ud83c\udde9", + "flag_se": "\ud83c\uddf8\ud83c\uddea", + "flag_sg": "\ud83c\uddf8\ud83c\uddec", + "flag_sh": "\ud83c\uddf8\ud83c\udded", + "flag_si": "\ud83c\uddf8\ud83c\uddee", + "flag_sj": "\ud83c\uddf8\ud83c\uddef", + "flag_sk": "\ud83c\uddf8\ud83c\uddf0", + "flag_sl": "\ud83c\uddf8\ud83c\uddf1", + "flag_sm": "\ud83c\uddf8\ud83c\uddf2", + "flag_sn": "\ud83c\uddf8\ud83c\uddf3", + "flag_so": "\ud83c\uddf8\ud83c\uddf4", + "flag_sr": "\ud83c\uddf8\ud83c\uddf7", + "flag_ss": "\ud83c\uddf8\ud83c\uddf8", + "flag_st": "\ud83c\uddf8\ud83c\uddf9", + "flag_sv": "\ud83c\uddf8\ud83c\uddfb", + "flag_sx": "\ud83c\uddf8\ud83c\uddfd", + "flag_sy": "\ud83c\uddf8\ud83c\uddfe", + "flag_sz": "\ud83c\uddf8\ud83c\uddff", + "flag_ta": "\ud83c\uddf9\ud83c\udde6", + "flag_tc": "\ud83c\uddf9\ud83c\udde8", + "flag_td": "\ud83c\uddf9\ud83c\udde9", + "flag_tf": "\ud83c\uddf9\ud83c\uddeb", + "flag_tg": "\ud83c\uddf9\ud83c\uddec", + "flag_th": "\ud83c\uddf9\ud83c\udded", + "flag_tj": "\ud83c\uddf9\ud83c\uddef", + "flag_tk": "\ud83c\uddf9\ud83c\uddf0", + "flag_tl": "\ud83c\uddf9\ud83c\uddf1", + "flag_tm": "\ud83c\uddf9\ud83c\uddf2", + "flag_tn": "\ud83c\uddf9\ud83c\uddf3", + "flag_to": "\ud83c\uddf9\ud83c\uddf4", + "flag_tr": "\ud83c\uddf9\ud83c\uddf7", + "flag_tt": "\ud83c\uddf9\ud83c\uddf9", + "flag_tv": "\ud83c\uddf9\ud83c\uddfb", + "flag_tw": "\ud83c\uddf9\ud83c\uddfc", + "flag_tz": "\ud83c\uddf9\ud83c\uddff", + "flag_ua": "\ud83c\uddfa\ud83c\udde6", + "flag_ug": "\ud83c\uddfa\ud83c\uddec", + "flag_um": "\ud83c\uddfa\ud83c\uddf2", + "flag_us": "\ud83c\uddfa\ud83c\uddf8", + "flag_uy": "\ud83c\uddfa\ud83c\uddfe", + "flag_uz": "\ud83c\uddfa\ud83c\uddff", + "flag_va": "\ud83c\uddfb\ud83c\udde6", + "flag_vc": "\ud83c\uddfb\ud83c\udde8", + "flag_ve": "\ud83c\uddfb\ud83c\uddea", + "flag_vg": "\ud83c\uddfb\ud83c\uddec", + "flag_vi": "\ud83c\uddfb\ud83c\uddee", + "flag_vn": "\ud83c\uddfb\ud83c\uddf3", + "flag_vu": "\ud83c\uddfb\ud83c\uddfa", + "flag_wf": "\ud83c\uddfc\ud83c\uddeb", + "flag_white": "\ud83c\udff3", + "flag_ws": "\ud83c\uddfc\ud83c\uddf8", + "flag_xk": "\ud83c\uddfd\ud83c\uddf0", + "flag_ye": "\ud83c\uddfe\ud83c\uddea", + "flag_yt": "\ud83c\uddfe\ud83c\uddf9", + "flag_za": "\ud83c\uddff\ud83c\udde6", + "flag_zm": "\ud83c\uddff\ud83c\uddf2", + "flag_zw": "\ud83c\uddff\ud83c\uddfc", + "flags": "\ud83c\udf8f", + "flashlight": "\ud83d\udd26", + "fleur-de-lis": "\u269c", + "floppy_disk": "\ud83d\udcbe", + "flower_playing_cards": "\ud83c\udfb4", + "flushed": "\ud83d\ude33", + "fog": "\ud83c\udf2b", + "foggy": "\ud83c\udf01", + "football": "\ud83c\udfc8", + "footprints": "\ud83d\udc63", + "fork_and_knife": "\ud83c\udf74", + "fork_knife_plate": "\ud83c\udf7d", + "fountain": "\u26f2", + "four": "4\u20e3", + "four_leaf_clover": "\ud83c\udf40", + "frame_photo": "\ud83d\uddbc", + "free": "\ud83c\udd93", + "fried_shrimp": "\ud83c\udf64", + "fries": "\ud83c\udf5f", + "frog": "\ud83d\udc38", + "frowning": "\ud83d\ude26", + "frowning2": "\u2639", + "fuelpump": "\u26fd", + "full_moon": "\ud83c\udf15", + "full_moon_with_face": "\ud83c\udf1d", + "game_die": "\ud83c\udfb2", + "gear": "\u2699", + "gem": "\ud83d\udc8e", + "gemini": "\u264a", + "ghost": "\ud83d\udc7b", + "gift": "\ud83c\udf81", + "gift_heart": "\ud83d\udc9d", + "girl": "\ud83d\udc67", + "girl_tone1": "\ud83d\udc67\ud83c\udffb", + "girl_tone2": "\ud83d\udc67\ud83c\udffc", + "girl_tone3": "\ud83d\udc67\ud83c\udffd", + "girl_tone4": "\ud83d\udc67\ud83c\udffe", + "girl_tone5": "\ud83d\udc67\ud83c\udfff", + "globe_with_meridians": "\ud83c\udf10", + "goat": "\ud83d\udc10", + "golf": "\u26f3", + "golfer": "\ud83c\udfcc", + "grapes": "\ud83c\udf47", + "green_apple": "\ud83c\udf4f", + "green_book": "\ud83d\udcd7", + "green_heart": "\ud83d\udc9a", + "grey_exclamation": "\u2755", + "grey_question": "\u2754", + "grimacing": "\ud83d\ude2c", + "grin": "\ud83d\ude01", + "grinning": "\ud83d\ude00", + "guardsman": "\ud83d\udc82", + "guardsman_tone1": "\ud83d\udc82\ud83c\udffb", + "guardsman_tone2": "\ud83d\udc82\ud83c\udffc", + "guardsman_tone3": "\ud83d\udc82\ud83c\udffd", + "guardsman_tone4": "\ud83d\udc82\ud83c\udffe", + "guardsman_tone5": "\ud83d\udc82\ud83c\udfff", + "guitar": "\ud83c\udfb8", + "gun": "\ud83d\udd2b", + "haircut": "\ud83d\udc87", + "haircut_tone1": "\ud83d\udc87\ud83c\udffb", + "haircut_tone2": "\ud83d\udc87\ud83c\udffc", + "haircut_tone3": "\ud83d\udc87\ud83c\udffd", + "haircut_tone4": "\ud83d\udc87\ud83c\udffe", + "haircut_tone5": "\ud83d\udc87\ud83c\udfff", + "hamburger": "\ud83c\udf54", + "hammer": "\ud83d\udd28", + "hammer_pick": "\u2692", + "hamster": "\ud83d\udc39", + "hand_splayed": "\ud83d\udd90", + "hand_splayed_tone1": "\ud83d\udd90\ud83c\udffb", + "hand_splayed_tone2": "\ud83d\udd90\ud83c\udffc", + "hand_splayed_tone3": "\ud83d\udd90\ud83c\udffd", + "hand_splayed_tone4": "\ud83d\udd90\ud83c\udffe", + "hand_splayed_tone5": "\ud83d\udd90\ud83c\udfff", + "handbag": "\ud83d\udc5c", + "hash": "#\u20e3", + "hatched_chick": "\ud83d\udc25", + "hatching_chick": "\ud83d\udc23", + "head_bandage": "\ud83e\udd15", + "headphones": "\ud83c\udfa7", + "hear_no_evil": "\ud83d\ude49", + "heart": "\u2764", + "heart_decoration": "\ud83d\udc9f", + "heart_exclamation": "\u2763", + "heart_eyes": "\ud83d\ude0d", + "heart_eyes_cat": "\ud83d\ude3b", + "heartbeat": "\ud83d\udc93", + "heartpulse": "\ud83d\udc97", + "hearts": "\u2665", + "heavy_check_mark": "\u2714", + "heavy_division_sign": "\u2797", + "heavy_dollar_sign": "\ud83d\udcb2", + "heavy_minus_sign": "\u2796", + "heavy_multiplication_x": "\u2716", + "heavy_plus_sign": "\u2795", + "helicopter": "\ud83d\ude81", + "helmet_with_cross": "\u26d1", + "herb": "\ud83c\udf3f", + "hibiscus": "\ud83c\udf3a", + "high_brightness": "\ud83d\udd06", + "high_heel": "\ud83d\udc60", + "hockey": "\ud83c\udfd2", + "hole": "\ud83d\udd73", + "homes": "\ud83c\udfd8", + "honey_pot": "\ud83c\udf6f", + "horse": "\ud83d\udc34", + "horse_racing": "\ud83c\udfc7", + "horse_racing_tone1": "\ud83c\udfc7\ud83c\udffb", + "horse_racing_tone2": "\ud83c\udfc7\ud83c\udffc", + "horse_racing_tone3": "\ud83c\udfc7\ud83c\udffd", + "horse_racing_tone4": "\ud83c\udfc7\ud83c\udffe", + "horse_racing_tone5": "\ud83c\udfc7\ud83c\udfff", + "hospital": "\ud83c\udfe5", + "hot_pepper": "\ud83c\udf36", + "hotdog": "\ud83c\udf2d", + "hotel": "\ud83c\udfe8", + "hotsprings": "\u2668", + "hourglass": "\u231b", + "hourglass_flowing_sand": "\u23f3", + "house": "\ud83c\udfe0", + "house_abandoned": "\ud83c\udfda", + "house_with_garden": "\ud83c\udfe1", + "hugging": "\ud83e\udd17", + "hushed": "\ud83d\ude2f", + "ice_cream": "\ud83c\udf68", + "ice_skate": "\u26f8", + "icecream": "\ud83c\udf66", + "id": "\ud83c\udd94", + "ideograph_advantage": "\ud83c\ude50", + "imp": "\ud83d\udc7f", + "inbox_tray": "\ud83d\udce5", + "incoming_envelope": "\ud83d\udce8", + "information_desk_person": "\ud83d\udc81", + "information_desk_person_tone1": "\ud83d\udc81\ud83c\udffb", + "information_desk_person_tone2": "\ud83d\udc81\ud83c\udffc", + "information_desk_person_tone3": "\ud83d\udc81\ud83c\udffd", + "information_desk_person_tone4": "\ud83d\udc81\ud83c\udffe", + "information_desk_person_tone5": "\ud83d\udc81\ud83c\udfff", + "information_source": "\u2139", + "innocent": "\ud83d\ude07", + "interrobang": "\u2049", + "iphone": "\ud83d\udcf1", + "island": "\ud83c\udfdd", + "izakaya_lantern": "\ud83c\udfee", + "jack_o_lantern": "\ud83c\udf83", + "japan": "\ud83d\uddfe", + "japanese_castle": "\ud83c\udfef", + "japanese_goblin": "\ud83d\udc7a", + "japanese_ogre": "\ud83d\udc79", + "jeans": "\ud83d\udc56", + "joy": "\ud83d\ude02", + "joy_cat": "\ud83d\ude39", + "joystick": "\ud83d\udd79", + "kaaba": "\ud83d\udd4b", + "key": "\ud83d\udd11", + "key2": "\ud83d\udddd", + "keyboard": "\u2328", + "kimono": "\ud83d\udc58", + "kiss": "\ud83d\udc8b", + "kiss_mm": "\ud83d\udc68\u2764\ud83d\udc8b\ud83d\udc68", + "kiss_ww": "\ud83d\udc69\u2764\ud83d\udc8b\ud83d\udc69", + "kissing": "\ud83d\ude17", + "kissing_cat": "\ud83d\ude3d", + "kissing_closed_eyes": "\ud83d\ude1a", + "kissing_heart": "\ud83d\ude18", + "kissing_smiling_eyes": "\ud83d\ude19", + "knife": "\ud83d\udd2a", + "koala": "\ud83d\udc28", + "koko": "\ud83c\ude01", + "label": "\ud83c\udff7", + "large_blue_circle": "\ud83d\udd35", + "large_blue_diamond": "\ud83d\udd37", + "large_orange_diamond": "\ud83d\udd36", + "last_quarter_moon": "\ud83c\udf17", + "last_quarter_moon_with_face": "\ud83c\udf1c", + "laughing": "\ud83d\ude06", + "leaves": "\ud83c\udf43", + "ledger": "\ud83d\udcd2", + "left_luggage": "\ud83d\udec5", + "left_right_arrow": "\u2194", + "leftwards_arrow_with_hook": "\u21a9", + "lemon": "\ud83c\udf4b", + "leo": "\u264c", + "leopard": "\ud83d\udc06", + "level_slider": "\ud83c\udf9a", + "levitate": "\ud83d\udd74", + "libra": "\u264e", + "lifter": "\ud83c\udfcb", + "lifter_tone1": "\ud83c\udfcb\ud83c\udffb", + "lifter_tone2": "\ud83c\udfcb\ud83c\udffc", + "lifter_tone3": "\ud83c\udfcb\ud83c\udffd", + "lifter_tone4": "\ud83c\udfcb\ud83c\udffe", + "lifter_tone5": "\ud83c\udfcb\ud83c\udfff", + "light_rail": "\ud83d\ude88", + "link": "\ud83d\udd17", + "lion_face": "\ud83e\udd81", + "lips": "\ud83d\udc44", + "lipstick": "\ud83d\udc84", + "lock": "\ud83d\udd12", + "lock_with_ink_pen": "\ud83d\udd0f", + "lollipop": "\ud83c\udf6d", + "loop": "\u27bf", + "loud_sound": "\ud83d\udd0a", + "loudspeaker": "\ud83d\udce2", + "love_hotel": "\ud83c\udfe9", + "love_letter": "\ud83d\udc8c", + "low_brightness": "\ud83d\udd05", + "m": "\u24c2", + "mag": "\ud83d\udd0d", + "mag_right": "\ud83d\udd0e", + "mahjong": "\ud83c\udc04", + "mailbox": "\ud83d\udceb", + "mailbox_closed": "\ud83d\udcea", + "mailbox_with_mail": "\ud83d\udcec", + "mailbox_with_no_mail": "\ud83d\udced", + "man": "\ud83d\udc68", + "man_tone1": "\ud83d\udc68\ud83c\udffb", + "man_tone2": "\ud83d\udc68\ud83c\udffc", + "man_tone3": "\ud83d\udc68\ud83c\udffd", + "man_tone4": "\ud83d\udc68\ud83c\udffe", + "man_tone5": "\ud83d\udc68\ud83c\udfff", + "man_with_gua_pi_mao": "\ud83d\udc72", + "man_with_gua_pi_mao_tone1": "\ud83d\udc72\ud83c\udffb", + "man_with_gua_pi_mao_tone2": "\ud83d\udc72\ud83c\udffc", + "man_with_gua_pi_mao_tone3": "\ud83d\udc72\ud83c\udffd", + "man_with_gua_pi_mao_tone4": "\ud83d\udc72\ud83c\udffe", + "man_with_gua_pi_mao_tone5": "\ud83d\udc72\ud83c\udfff", + "man_with_turban": "\ud83d\udc73", + "man_with_turban_tone1": "\ud83d\udc73\ud83c\udffb", + "man_with_turban_tone2": "\ud83d\udc73\ud83c\udffc", + "man_with_turban_tone3": "\ud83d\udc73\ud83c\udffd", + "man_with_turban_tone4": "\ud83d\udc73\ud83c\udffe", + "man_with_turban_tone5": "\ud83d\udc73\ud83c\udfff", + "mans_shoe": "\ud83d\udc5e", + "map": "\ud83d\uddfa", + "maple_leaf": "\ud83c\udf41", + "mask": "\ud83d\ude37", + "massage": "\ud83d\udc86", + "massage_tone1": "\ud83d\udc86\ud83c\udffb", + "massage_tone2": "\ud83d\udc86\ud83c\udffc", + "massage_tone3": "\ud83d\udc86\ud83c\udffd", + "massage_tone4": "\ud83d\udc86\ud83c\udffe", + "massage_tone5": "\ud83d\udc86\ud83c\udfff", + "meat_on_bone": "\ud83c\udf56", + "medal": "\ud83c\udfc5", + "mega": "\ud83d\udce3", + "melon": "\ud83c\udf48", + "menorah": "\ud83d\udd4e", + "mens": "\ud83d\udeb9", + "metal": "\ud83e\udd18", + "metal_tone1": "\ud83e\udd18\ud83c\udffb", + "metal_tone2": "\ud83e\udd18\ud83c\udffc", + "metal_tone3": "\ud83e\udd18\ud83c\udffd", + "metal_tone4": "\ud83e\udd18\ud83c\udffe", + "metal_tone5": "\ud83e\udd18\ud83c\udfff", + "metro": "\ud83d\ude87", + "microphone": "\ud83c\udfa4", + "microphone2": "\ud83c\udf99", + "microscope": "\ud83d\udd2c", + "middle_finger": "\ud83d\udd95", + "middle_finger_tone1": "\ud83d\udd95\ud83c\udffb", + "middle_finger_tone2": "\ud83d\udd95\ud83c\udffc", + "middle_finger_tone3": "\ud83d\udd95\ud83c\udffd", + "middle_finger_tone4": "\ud83d\udd95\ud83c\udffe", + "middle_finger_tone5": "\ud83d\udd95\ud83c\udfff", + "military_medal": "\ud83c\udf96", + "milky_way": "\ud83c\udf0c", + "minibus": "\ud83d\ude90", + "minidisc": "\ud83d\udcbd", + "mobile_phone_off": "\ud83d\udcf4", + "money_mouth": "\ud83e\udd11", + "money_with_wings": "\ud83d\udcb8", + "moneybag": "\ud83d\udcb0", + "monkey": "\ud83d\udc12", + "monkey_face": "\ud83d\udc35", + "monorail": "\ud83d\ude9d", + "mortar_board": "\ud83c\udf93", + "mosque": "\ud83d\udd4c", + "motorboat": "\ud83d\udee5", + "motorcycle": "\ud83c\udfcd", + "motorway": "\ud83d\udee3", + "mount_fuji": "\ud83d\uddfb", + "mountain": "\u26f0", + "mountain_bicyclist": "\ud83d\udeb5", + "mountain_bicyclist_tone1": "\ud83d\udeb5\ud83c\udffb", + "mountain_bicyclist_tone2": "\ud83d\udeb5\ud83c\udffc", + "mountain_bicyclist_tone3": "\ud83d\udeb5\ud83c\udffd", + "mountain_bicyclist_tone4": "\ud83d\udeb5\ud83c\udffe", + "mountain_bicyclist_tone5": "\ud83d\udeb5\ud83c\udfff", + "mountain_cableway": "\ud83d\udea0", + "mountain_railway": "\ud83d\ude9e", + "mountain_snow": "\ud83c\udfd4", + "mouse": "\ud83d\udc2d", + "mouse2": "\ud83d\udc01", + "mouse_three_button": "\ud83d\uddb1", + "movie_camera": "\ud83c\udfa5", + "moyai": "\ud83d\uddff", + "muscle": "\ud83d\udcaa", + "muscle_tone1": "\ud83d\udcaa\ud83c\udffb", + "muscle_tone2": "\ud83d\udcaa\ud83c\udffc", + "muscle_tone3": "\ud83d\udcaa\ud83c\udffd", + "muscle_tone4": "\ud83d\udcaa\ud83c\udffe", + "muscle_tone5": "\ud83d\udcaa\ud83c\udfff", + "mushroom": "\ud83c\udf44", + "musical_keyboard": "\ud83c\udfb9", + "musical_note": "\ud83c\udfb5", + "musical_score": "\ud83c\udfbc", + "mute": "\ud83d\udd07", + "nail_care": "\ud83d\udc85", + "nail_care_tone1": "\ud83d\udc85\ud83c\udffb", + "nail_care_tone2": "\ud83d\udc85\ud83c\udffc", + "nail_care_tone3": "\ud83d\udc85\ud83c\udffd", + "nail_care_tone4": "\ud83d\udc85\ud83c\udffe", + "nail_care_tone5": "\ud83d\udc85\ud83c\udfff", + "name_badge": "\ud83d\udcdb", + "necktie": "\ud83d\udc54", + "negative_squared_cross_mark": "\u274e", + "nerd": "\ud83e\udd13", + "neutral_face": "\ud83d\ude10", + "new": "\ud83c\udd95", + "new_moon": "\ud83c\udf11", + "new_moon_with_face": "\ud83c\udf1a", + "newspaper": "\ud83d\udcf0", + "newspaper2": "\ud83d\uddde", + "ng": "\ud83c\udd96", + "night_with_stars": "\ud83c\udf03", + "nine": "9\u20e3", + "no_bell": "\ud83d\udd15", + "no_bicycles": "\ud83d\udeb3", + "no_entry": "\u26d4", + "no_entry_sign": "\ud83d\udeab", + "no_good": "\ud83d\ude45", + "no_good_tone1": "\ud83d\ude45\ud83c\udffb", + "no_good_tone2": "\ud83d\ude45\ud83c\udffc", + "no_good_tone3": "\ud83d\ude45\ud83c\udffd", + "no_good_tone4": "\ud83d\ude45\ud83c\udffe", + "no_good_tone5": "\ud83d\ude45\ud83c\udfff", + "no_mobile_phones": "\ud83d\udcf5", + "no_mouth": "\ud83d\ude36", + "no_pedestrians": "\ud83d\udeb7", + "no_smoking": "\ud83d\udead", + "non-potable_water": "\ud83d\udeb1", + "nose": "\ud83d\udc43", + "nose_tone1": "\ud83d\udc43\ud83c\udffb", + "nose_tone2": "\ud83d\udc43\ud83c\udffc", + "nose_tone3": "\ud83d\udc43\ud83c\udffd", + "nose_tone4": "\ud83d\udc43\ud83c\udffe", + "nose_tone5": "\ud83d\udc43\ud83c\udfff", + "notebook": "\ud83d\udcd3", + "notebook_with_decorative_cover": "\ud83d\udcd4", + "notepad_spiral": "\ud83d\uddd2", + "notes": "\ud83c\udfb6", + "nut_and_bolt": "\ud83d\udd29", + "o": "\u2b55", + "o2": "\ud83c\udd7e", + "ocean": "\ud83c\udf0a", + "octopus": "\ud83d\udc19", + "oden": "\ud83c\udf62", + "office": "\ud83c\udfe2", + "oil": "\ud83d\udee2", + "ok": "\ud83c\udd97", + "ok_hand": "\ud83d\udc4c", + "ok_hand_tone1": "\ud83d\udc4c\ud83c\udffb", + "ok_hand_tone2": "\ud83d\udc4c\ud83c\udffc", + "ok_hand_tone3": "\ud83d\udc4c\ud83c\udffd", + "ok_hand_tone4": "\ud83d\udc4c\ud83c\udffe", + "ok_hand_tone5": "\ud83d\udc4c\ud83c\udfff", + "ok_woman": "\ud83d\ude46", + "ok_woman_tone1": "\ud83d\ude46\ud83c\udffb", + "ok_woman_tone2": "\ud83d\ude46\ud83c\udffc", + "ok_woman_tone3": "\ud83d\ude46\ud83c\udffd", + "ok_woman_tone4": "\ud83d\ude46\ud83c\udffe", + "ok_woman_tone5": "\ud83d\ude46\ud83c\udfff", + "older_man": "\ud83d\udc74", + "older_man_tone1": "\ud83d\udc74\ud83c\udffb", + "older_man_tone2": "\ud83d\udc74\ud83c\udffc", + "older_man_tone3": "\ud83d\udc74\ud83c\udffd", + "older_man_tone4": "\ud83d\udc74\ud83c\udffe", + "older_man_tone5": "\ud83d\udc74\ud83c\udfff", + "older_woman": "\ud83d\udc75", + "older_woman_tone1": "\ud83d\udc75\ud83c\udffb", + "older_woman_tone2": "\ud83d\udc75\ud83c\udffc", + "older_woman_tone3": "\ud83d\udc75\ud83c\udffd", + "older_woman_tone4": "\ud83d\udc75\ud83c\udffe", + "older_woman_tone5": "\ud83d\udc75\ud83c\udfff", + "om_symbol": "\ud83d\udd49", + "on": "\ud83d\udd1b", + "oncoming_automobile": "\ud83d\ude98", + "oncoming_bus": "\ud83d\ude8d", + "oncoming_police_car": "\ud83d\ude94", + "oncoming_taxi": "\ud83d\ude96", + "one": "1\u20e3", + "open_file_folder": "\ud83d\udcc2", + "open_hands": "\ud83d\udc50", + "open_hands_tone1": "\ud83d\udc50\ud83c\udffb", + "open_hands_tone2": "\ud83d\udc50\ud83c\udffc", + "open_hands_tone3": "\ud83d\udc50\ud83c\udffd", + "open_hands_tone4": "\ud83d\udc50\ud83c\udffe", + "open_hands_tone5": "\ud83d\udc50\ud83c\udfff", + "open_mouth": "\ud83d\ude2e", + "ophiuchus": "\u26ce", + "orange_book": "\ud83d\udcd9", + "orthodox_cross": "\u2626", + "outbox_tray": "\ud83d\udce4", + "ox": "\ud83d\udc02", + "package": "\ud83d\udce6", + "page_facing_up": "\ud83d\udcc4", + "page_with_curl": "\ud83d\udcc3", + "pager": "\ud83d\udcdf", + "paintbrush": "\ud83d\udd8c", + "palm_tree": "\ud83c\udf34", + "panda_face": "\ud83d\udc3c", + "paperclip": "\ud83d\udcce", + "paperclips": "\ud83d\udd87", + "park": "\ud83c\udfde", + "parking": "\ud83c\udd7f", + "part_alternation_mark": "\u303d", + "partly_sunny": "\u26c5", + "passport_control": "\ud83d\udec2", + "pause_button": "\u23f8", + "peace": "\u262e", + "peach": "\ud83c\udf51", + "pear": "\ud83c\udf50", + "pen_ballpoint": "\ud83d\udd8a", + "pen_fountain": "\ud83d\udd8b", + "pencil": "\ud83d\udcdd", + "pencil2": "\u270f", + "penguin": "\ud83d\udc27", + "pensive": "\ud83d\ude14", + "performing_arts": "\ud83c\udfad", + "persevere": "\ud83d\ude23", + "person_frowning": "\ud83d\ude4d", + "person_frowning_tone1": "\ud83d\ude4d\ud83c\udffb", + "person_frowning_tone2": "\ud83d\ude4d\ud83c\udffc", + "person_frowning_tone3": "\ud83d\ude4d\ud83c\udffd", + "person_frowning_tone4": "\ud83d\ude4d\ud83c\udffe", + "person_frowning_tone5": "\ud83d\ude4d\ud83c\udfff", + "person_with_blond_hair": "\ud83d\udc71", + "person_with_blond_hair_tone1": "\ud83d\udc71\ud83c\udffb", + "person_with_blond_hair_tone2": "\ud83d\udc71\ud83c\udffc", + "person_with_blond_hair_tone3": "\ud83d\udc71\ud83c\udffd", + "person_with_blond_hair_tone4": "\ud83d\udc71\ud83c\udffe", + "person_with_blond_hair_tone5": "\ud83d\udc71\ud83c\udfff", + "person_with_pouting_face": "\ud83d\ude4e", + "person_with_pouting_face_tone1": "\ud83d\ude4e\ud83c\udffb", + "person_with_pouting_face_tone2": "\ud83d\ude4e\ud83c\udffc", + "person_with_pouting_face_tone3": "\ud83d\ude4e\ud83c\udffd", + "person_with_pouting_face_tone4": "\ud83d\ude4e\ud83c\udffe", + "person_with_pouting_face_tone5": "\ud83d\ude4e\ud83c\udfff", + "pick": "\u26cf", + "pig": "\ud83d\udc37", + "pig2": "\ud83d\udc16", + "pig_nose": "\ud83d\udc3d", + "pill": "\ud83d\udc8a", + "pineapple": "\ud83c\udf4d", + "ping_pong": "\ud83c\udfd3", + "pisces": "\u2653", + "pizza": "\ud83c\udf55", + "place_of_worship": "\ud83d\uded0", + "play_pause": "\u23ef", + "point_down": "\ud83d\udc47", + "point_down_tone1": "\ud83d\udc47\ud83c\udffb", + "point_down_tone2": "\ud83d\udc47\ud83c\udffc", + "point_down_tone3": "\ud83d\udc47\ud83c\udffd", + "point_down_tone4": "\ud83d\udc47\ud83c\udffe", + "point_down_tone5": "\ud83d\udc47\ud83c\udfff", + "point_left": "\ud83d\udc48", + "point_left_tone1": "\ud83d\udc48\ud83c\udffb", + "point_left_tone2": "\ud83d\udc48\ud83c\udffc", + "point_left_tone3": "\ud83d\udc48\ud83c\udffd", + "point_left_tone4": "\ud83d\udc48\ud83c\udffe", + "point_left_tone5": "\ud83d\udc48\ud83c\udfff", + "point_right": "\ud83d\udc49", + "point_right_tone1": "\ud83d\udc49\ud83c\udffb", + "point_right_tone2": "\ud83d\udc49\ud83c\udffc", + "point_right_tone3": "\ud83d\udc49\ud83c\udffd", + "point_right_tone4": "\ud83d\udc49\ud83c\udffe", + "point_right_tone5": "\ud83d\udc49\ud83c\udfff", + "point_up": "\u261d", + "point_up_2": "\ud83d\udc46", + "point_up_2_tone1": "\ud83d\udc46\ud83c\udffb", + "point_up_2_tone2": "\ud83d\udc46\ud83c\udffc", + "point_up_2_tone3": "\ud83d\udc46\ud83c\udffd", + "point_up_2_tone4": "\ud83d\udc46\ud83c\udffe", + "point_up_2_tone5": "\ud83d\udc46\ud83c\udfff", + "point_up_tone1": "\u261d\ud83c\udffb", + "point_up_tone2": "\u261d\ud83c\udffc", + "point_up_tone3": "\u261d\ud83c\udffd", + "point_up_tone4": "\u261d\ud83c\udffe", + "point_up_tone5": "\u261d\ud83c\udfff", + "police_car": "\ud83d\ude93", + "poodle": "\ud83d\udc29", + "poop": "\ud83d\udca9", + "popcorn": "\ud83c\udf7f", + "post_office": "\ud83c\udfe3", + "postal_horn": "\ud83d\udcef", + "postbox": "\ud83d\udcee", + "potable_water": "\ud83d\udeb0", + "pouch": "\ud83d\udc5d", + "poultry_leg": "\ud83c\udf57", + "pound": "\ud83d\udcb7", + "pouting_cat": "\ud83d\ude3e", + "pray": "\ud83d\ude4f", + "pray_tone1": "\ud83d\ude4f\ud83c\udffb", + "pray_tone2": "\ud83d\ude4f\ud83c\udffc", + "pray_tone3": "\ud83d\ude4f\ud83c\udffd", + "pray_tone4": "\ud83d\ude4f\ud83c\udffe", + "pray_tone5": "\ud83d\ude4f\ud83c\udfff", + "prayer_beads": "\ud83d\udcff", + "princess": "\ud83d\udc78", + "princess_tone1": "\ud83d\udc78\ud83c\udffb", + "princess_tone2": "\ud83d\udc78\ud83c\udffc", + "princess_tone3": "\ud83d\udc78\ud83c\udffd", + "princess_tone4": "\ud83d\udc78\ud83c\udffe", + "princess_tone5": "\ud83d\udc78\ud83c\udfff", + "printer": "\ud83d\udda8", + "projector": "\ud83d\udcfd", + "punch": "\ud83d\udc4a", + "punch_tone1": "\ud83d\udc4a\ud83c\udffb", + "punch_tone2": "\ud83d\udc4a\ud83c\udffc", + "punch_tone3": "\ud83d\udc4a\ud83c\udffd", + "punch_tone4": "\ud83d\udc4a\ud83c\udffe", + "punch_tone5": "\ud83d\udc4a\ud83c\udfff", + "purple_heart": "\ud83d\udc9c", + "purse": "\ud83d\udc5b", + "pushpin": "\ud83d\udccc", + "put_litter_in_its_place": "\ud83d\udeae", + "question": "\u2753", + "rabbit": "\ud83d\udc30", + "rabbit2": "\ud83d\udc07", + "race_car": "\ud83c\udfce", + "racehorse": "\ud83d\udc0e", + "radio": "\ud83d\udcfb", + "radio_button": "\ud83d\udd18", + "radioactive": "\u2622", + "rage": "\ud83d\ude21", + "railway_car": "\ud83d\ude83", + "railway_track": "\ud83d\udee4", + "rainbow": "\ud83c\udf08", + "raised_hand": "\u270b", + "raised_hand_tone1": "\u270b\ud83c\udffb", + "raised_hand_tone2": "\u270b\ud83c\udffc", + "raised_hand_tone3": "\u270b\ud83c\udffd", + "raised_hand_tone4": "\u270b\ud83c\udffe", + "raised_hand_tone5": "\u270b\ud83c\udfff", + "raised_hands": "\ud83d\ude4c", + "raised_hands_tone1": "\ud83d\ude4c\ud83c\udffb", + "raised_hands_tone2": "\ud83d\ude4c\ud83c\udffc", + "raised_hands_tone3": "\ud83d\ude4c\ud83c\udffd", + "raised_hands_tone4": "\ud83d\ude4c\ud83c\udffe", + "raised_hands_tone5": "\ud83d\ude4c\ud83c\udfff", + "raising_hand": "\ud83d\ude4b", + "raising_hand_tone1": "\ud83d\ude4b\ud83c\udffb", + "raising_hand_tone2": "\ud83d\ude4b\ud83c\udffc", + "raising_hand_tone3": "\ud83d\ude4b\ud83c\udffd", + "raising_hand_tone4": "\ud83d\ude4b\ud83c\udffe", + "raising_hand_tone5": "\ud83d\ude4b\ud83c\udfff", + "ram": "\ud83d\udc0f", + "ramen": "\ud83c\udf5c", + "rat": "\ud83d\udc00", + "record_button": "\u23fa", + "recycle": "\u267b", + "red_car": "\ud83d\ude97", + "red_circle": "\ud83d\udd34", + "registered": "\u00ae", + "relaxed": "\u263a", + "relieved": "\ud83d\ude0c", + "reminder_ribbon": "\ud83c\udf97", + "repeat": "\ud83d\udd01", + "repeat_one": "\ud83d\udd02", + "restroom": "\ud83d\udebb", + "revolving_hearts": "\ud83d\udc9e", + "rewind": "\u23ea", + "ribbon": "\ud83c\udf80", + "rice": "\ud83c\udf5a", + "rice_ball": "\ud83c\udf59", + "rice_cracker": "\ud83c\udf58", + "rice_scene": "\ud83c\udf91", + "ring": "\ud83d\udc8d", + "robot": "\ud83e\udd16", + "rocket": "\ud83d\ude80", + "roller_coaster": "\ud83c\udfa2", + "rolling_eyes": "\ud83d\ude44", + "rooster": "\ud83d\udc13", + "rose": "\ud83c\udf39", + "rosette": "\ud83c\udff5", + "rotating_light": "\ud83d\udea8", + "round_pushpin": "\ud83d\udccd", + "rowboat": "\ud83d\udea3", + "rowboat_tone1": "\ud83d\udea3\ud83c\udffb", + "rowboat_tone2": "\ud83d\udea3\ud83c\udffc", + "rowboat_tone3": "\ud83d\udea3\ud83c\udffd", + "rowboat_tone4": "\ud83d\udea3\ud83c\udffe", + "rowboat_tone5": "\ud83d\udea3\ud83c\udfff", + "rugby_football": "\ud83c\udfc9", + "runner": "\ud83c\udfc3", + "runner_tone1": "\ud83c\udfc3\ud83c\udffb", + "runner_tone2": "\ud83c\udfc3\ud83c\udffc", + "runner_tone3": "\ud83c\udfc3\ud83c\udffd", + "runner_tone4": "\ud83c\udfc3\ud83c\udffe", + "runner_tone5": "\ud83c\udfc3\ud83c\udfff", + "running_shirt_with_sash": "\ud83c\udfbd", + "sa": "\ud83c\ude02", + "sagittarius": "\u2650", + "sailboat": "\u26f5", + "sake": "\ud83c\udf76", + "sandal": "\ud83d\udc61", + "santa": "\ud83c\udf85", + "santa_tone1": "\ud83c\udf85\ud83c\udffb", + "santa_tone2": "\ud83c\udf85\ud83c\udffc", + "santa_tone3": "\ud83c\udf85\ud83c\udffd", + "santa_tone4": "\ud83c\udf85\ud83c\udffe", + "santa_tone5": "\ud83c\udf85\ud83c\udfff", + "satellite": "\ud83d\udce1", + "satellite_orbital": "\ud83d\udef0", + "saxophone": "\ud83c\udfb7", + "scales": "\u2696", + "school": "\ud83c\udfeb", + "school_satchel": "\ud83c\udf92", + "scissors": "\u2702", + "scorpion": "\ud83e\udd82", + "scorpius": "\u264f", + "scream": "\ud83d\ude31", + "scream_cat": "\ud83d\ude40", + "scroll": "\ud83d\udcdc", + "seat": "\ud83d\udcba", + "secret": "\u3299", + "see_no_evil": "\ud83d\ude48", + "seedling": "\ud83c\udf31", + "seven": "7\u20e3", + "shamrock": "\u2618", + "shaved_ice": "\ud83c\udf67", + "sheep": "\ud83d\udc11", + "shell": "\ud83d\udc1a", + "shield": "\ud83d\udee1", + "shinto_shrine": "\u26e9", + "ship": "\ud83d\udea2", + "shirt": "\ud83d\udc55", + "shopping_bags": "\ud83d\udecd", + "shower": "\ud83d\udebf", + "signal_strength": "\ud83d\udcf6", + "six": "6\u20e3", + "six_pointed_star": "\ud83d\udd2f", + "ski": "\ud83c\udfbf", + "skier": "\u26f7", + "skull": "\ud83d\udc80", + "skull_crossbones": "\u2620", + "sleeping": "\ud83d\ude34", + "sleeping_accommodation": "\ud83d\udecc", + "sleepy": "\ud83d\ude2a", + "slight_frown": "\ud83d\ude41", + "slight_smile": "\ud83d\ude42", + "slot_machine": "\ud83c\udfb0", + "small_blue_diamond": "\ud83d\udd39", + "small_orange_diamond": "\ud83d\udd38", + "small_red_triangle": "\ud83d\udd3a", + "small_red_triangle_down": "\ud83d\udd3b", + "smile": "\ud83d\ude04", + "smile_cat": "\ud83d\ude38", + "smiley": "\ud83d\ude03", + "smiley_cat": "\ud83d\ude3a", + "smiling_imp": "\ud83d\ude08", + "smirk": "\ud83d\ude0f", + "smirk_cat": "\ud83d\ude3c", + "smoking": "\ud83d\udeac", + "snail": "\ud83d\udc0c", + "snake": "\ud83d\udc0d", + "snowboarder": "\ud83c\udfc2", + "snowflake": "\u2744", + "snowman": "\u26c4", + "snowman2": "\u2603", + "sob": "\ud83d\ude2d", + "soccer": "\u26bd", + "soon": "\ud83d\udd1c", + "sos": "\ud83c\udd98", + "sound": "\ud83d\udd09", + "space_invader": "\ud83d\udc7e", + "spades": "\u2660", + "spaghetti": "\ud83c\udf5d", + "sparkle": "\u2747", + "sparkler": "\ud83c\udf87", + "sparkles": "\u2728", + "sparkling_heart": "\ud83d\udc96", + "speak_no_evil": "\ud83d\ude4a", + "speaker": "\ud83d\udd08", + "speaking_head": "\ud83d\udde3", + "speech_balloon": "\ud83d\udcac", + "speedboat": "\ud83d\udea4", + "spider": "\ud83d\udd77", + "spider_web": "\ud83d\udd78", + "spy": "\ud83d\udd75", + "spy_tone1": "\ud83d\udd75\ud83c\udffb", + "spy_tone2": "\ud83d\udd75\ud83c\udffc", + "spy_tone3": "\ud83d\udd75\ud83c\udffd", + "spy_tone4": "\ud83d\udd75\ud83c\udffe", + "spy_tone5": "\ud83d\udd75\ud83c\udfff", + "stadium": "\ud83c\udfdf", + "star": "\u2b50", + "star2": "\ud83c\udf1f", + "star_and_crescent": "\u262a", + "star_of_david": "\u2721", + "stars": "\ud83c\udf20", + "station": "\ud83d\ude89", + "statue_of_liberty": "\ud83d\uddfd", + "steam_locomotive": "\ud83d\ude82", + "stew": "\ud83c\udf72", + "stop_button": "\u23f9", + "stopwatch": "\u23f1", + "straight_ruler": "\ud83d\udccf", + "strawberry": "\ud83c\udf53", + "stuck_out_tongue": "\ud83d\ude1b", + "stuck_out_tongue_closed_eyes": "\ud83d\ude1d", + "stuck_out_tongue_winking_eye": "\ud83d\ude1c", + "sun_with_face": "\ud83c\udf1e", + "sunflower": "\ud83c\udf3b", + "sunglasses": "\ud83d\ude0e", + "sunny": "\u2600", + "sunrise": "\ud83c\udf05", + "sunrise_over_mountains": "\ud83c\udf04", + "surfer": "\ud83c\udfc4", + "surfer_tone1": "\ud83c\udfc4\ud83c\udffb", + "surfer_tone2": "\ud83c\udfc4\ud83c\udffc", + "surfer_tone3": "\ud83c\udfc4\ud83c\udffd", + "surfer_tone4": "\ud83c\udfc4\ud83c\udffe", + "surfer_tone5": "\ud83c\udfc4\ud83c\udfff", + "sushi": "\ud83c\udf63", + "suspension_railway": "\ud83d\ude9f", + "sweat": "\ud83d\ude13", + "sweat_drops": "\ud83d\udca6", + "sweat_smile": "\ud83d\ude05", + "sweet_potato": "\ud83c\udf60", + "swimmer": "\ud83c\udfca", + "swimmer_tone1": "\ud83c\udfca\ud83c\udffb", + "swimmer_tone2": "\ud83c\udfca\ud83c\udffc", + "swimmer_tone3": "\ud83c\udfca\ud83c\udffd", + "swimmer_tone4": "\ud83c\udfca\ud83c\udffe", + "swimmer_tone5": "\ud83c\udfca\ud83c\udfff", + "symbols": "\ud83d\udd23", + "synagogue": "\ud83d\udd4d", + "syringe": "\ud83d\udc89", + "taco": "\ud83c\udf2e", + "tada": "\ud83c\udf89", + "tanabata_tree": "\ud83c\udf8b", + "tangerine": "\ud83c\udf4a", + "taurus": "\u2649", + "taxi": "\ud83d\ude95", + "tea": "\ud83c\udf75", + "telephone": "\u260e", + "telephone_receiver": "\ud83d\udcde", + "telescope": "\ud83d\udd2d", + "ten": "\ud83d\udd1f", + "tennis": "\ud83c\udfbe", + "tent": "\u26fa", + "thermometer": "\ud83c\udf21", + "thermometer_face": "\ud83e\udd12", + "thinking": "\ud83e\udd14", + "thought_balloon": "\ud83d\udcad", + "three": "3\u20e3", + "thumbsdown": "\ud83d\udc4e", + "thumbsdown_tone1": "\ud83d\udc4e\ud83c\udffb", + "thumbsdown_tone2": "\ud83d\udc4e\ud83c\udffc", + "thumbsdown_tone3": "\ud83d\udc4e\ud83c\udffd", + "thumbsdown_tone4": "\ud83d\udc4e\ud83c\udffe", + "thumbsdown_tone5": "\ud83d\udc4e\ud83c\udfff", + "thumbsup": "\ud83d\udc4d", + "thumbsup_tone1": "\ud83d\udc4d\ud83c\udffb", + "thumbsup_tone2": "\ud83d\udc4d\ud83c\udffc", + "thumbsup_tone3": "\ud83d\udc4d\ud83c\udffd", + "thumbsup_tone4": "\ud83d\udc4d\ud83c\udffe", + "thumbsup_tone5": "\ud83d\udc4d\ud83c\udfff", + "thunder_cloud_rain": "\u26c8", + "ticket": "\ud83c\udfab", + "tickets": "\ud83c\udf9f", + "tiger": "\ud83d\udc2f", + "tiger2": "\ud83d\udc05", + "timer": "\u23f2", + "tired_face": "\ud83d\ude2b", + "tm": "\u2122", + "toilet": "\ud83d\udebd", + "tokyo_tower": "\ud83d\uddfc", + "tomato": "\ud83c\udf45", + "tone1": "\ud83c\udffb", + "tone2": "\ud83c\udffc", + "tone3": "\ud83c\udffd", + "tone4": "\ud83c\udffe", + "tone5": "\ud83c\udfff", + "tongue": "\ud83d\udc45", + "tools": "\ud83d\udee0", + "top": "\ud83d\udd1d", + "tophat": "\ud83c\udfa9", + "track_next": "\u23ed", + "track_previous": "\u23ee", + "trackball": "\ud83d\uddb2", + "tractor": "\ud83d\ude9c", + "traffic_light": "\ud83d\udea5", + "train": "\ud83d\ude8b", + "train2": "\ud83d\ude86", + "tram": "\ud83d\ude8a", + "triangular_flag_on_post": "\ud83d\udea9", + "triangular_ruler": "\ud83d\udcd0", + "trident": "\ud83d\udd31", + "triumph": "\ud83d\ude24", + "trolleybus": "\ud83d\ude8e", + "trophy": "\ud83c\udfc6", + "tropical_drink": "\ud83c\udf79", + "tropical_fish": "\ud83d\udc20", + "truck": "\ud83d\ude9a", + "trumpet": "\ud83c\udfba", + "tulip": "\ud83c\udf37", + "turkey": "\ud83e\udd83", + "turtle": "\ud83d\udc22", + "tv": "\ud83d\udcfa", + "twisted_rightwards_arrows": "\ud83d\udd00", + "two": "2\u20e3", + "two_hearts": "\ud83d\udc95", + "two_men_holding_hands": "\ud83d\udc6c", + "two_women_holding_hands": "\ud83d\udc6d", + "u5272": "\ud83c\ude39", + "u5408": "\ud83c\ude34", + "u55b6": "\ud83c\ude3a", + "u6307": "\ud83c\ude2f", + "u6708": "\ud83c\ude37", + "u6709": "\ud83c\ude36", + "u6e80": "\ud83c\ude35", + "u7121": "\ud83c\ude1a", + "u7533": "\ud83c\ude38", + "u7981": "\ud83c\ude32", + "u7a7a": "\ud83c\ude33", + "umbrella": "\u2614", + "umbrella2": "\u2602", + "unamused": "\ud83d\ude12", + "underage": "\ud83d\udd1e", + "unicorn": "\ud83e\udd84", + "unlock": "\ud83d\udd13", + "up": "\ud83c\udd99", + "upside_down": "\ud83d\ude43", + "urn": "\u26b1", + "v": "\u270c", + "v_tone1": "\u270c\ud83c\udffb", + "v_tone2": "\u270c\ud83c\udffc", + "v_tone3": "\u270c\ud83c\udffd", + "v_tone4": "\u270c\ud83c\udffe", + "v_tone5": "\u270c\ud83c\udfff", + "vertical_traffic_light": "\ud83d\udea6", + "vhs": "\ud83d\udcfc", + "vibration_mode": "\ud83d\udcf3", + "video_camera": "\ud83d\udcf9", + "video_game": "\ud83c\udfae", + "violin": "\ud83c\udfbb", + "virgo": "\u264d", + "volcano": "\ud83c\udf0b", + "volleyball": "\ud83c\udfd0", + "vs": "\ud83c\udd9a", + "vulcan": "\ud83d\udd96", + "vulcan_tone1": "\ud83d\udd96\ud83c\udffb", + "vulcan_tone2": "\ud83d\udd96\ud83c\udffc", + "vulcan_tone3": "\ud83d\udd96\ud83c\udffd", + "vulcan_tone4": "\ud83d\udd96\ud83c\udffe", + "vulcan_tone5": "\ud83d\udd96\ud83c\udfff", + "walking": "\ud83d\udeb6", + "walking_tone1": "\ud83d\udeb6\ud83c\udffb", + "walking_tone2": "\ud83d\udeb6\ud83c\udffc", + "walking_tone3": "\ud83d\udeb6\ud83c\udffd", + "walking_tone4": "\ud83d\udeb6\ud83c\udffe", + "walking_tone5": "\ud83d\udeb6\ud83c\udfff", + "waning_crescent_moon": "\ud83c\udf18", + "waning_gibbous_moon": "\ud83c\udf16", + "warning": "\u26a0", + "wastebasket": "\ud83d\uddd1", + "watch": "\u231a", + "water_buffalo": "\ud83d\udc03", + "watermelon": "\ud83c\udf49", + "wave": "\ud83d\udc4b", + "wave_tone1": "\ud83d\udc4b\ud83c\udffb", + "wave_tone2": "\ud83d\udc4b\ud83c\udffc", + "wave_tone3": "\ud83d\udc4b\ud83c\udffd", + "wave_tone4": "\ud83d\udc4b\ud83c\udffe", + "wave_tone5": "\ud83d\udc4b\ud83c\udfff", + "wavy_dash": "\u3030", + "waxing_crescent_moon": "\ud83c\udf12", + "waxing_gibbous_moon": "\ud83c\udf14", + "wc": "\ud83d\udebe", + "weary": "\ud83d\ude29", + "wedding": "\ud83d\udc92", + "whale": "\ud83d\udc33", + "whale2": "\ud83d\udc0b", + "wheel_of_dharma": "\u2638", + "wheelchair": "\u267f", + "white_check_mark": "\u2705", + "white_circle": "\u26aa", + "white_flower": "\ud83d\udcae", + "white_large_square": "\u2b1c", + "white_medium_small_square": "\u25fd", + "white_medium_square": "\u25fb", + "white_small_square": "\u25ab", + "white_square_button": "\ud83d\udd33", + "white_sun_cloud": "\ud83c\udf25", + "white_sun_rain_cloud": "\ud83c\udf26", + "white_sun_small_cloud": "\ud83c\udf24", + "wind_blowing_face": "\ud83c\udf2c", + "wind_chime": "\ud83c\udf90", + "wine_glass": "\ud83c\udf77", + "wink": "\ud83d\ude09", + "wolf": "\ud83d\udc3a", + "woman": "\ud83d\udc69", + "woman_tone1": "\ud83d\udc69\ud83c\udffb", + "woman_tone2": "\ud83d\udc69\ud83c\udffc", + "woman_tone3": "\ud83d\udc69\ud83c\udffd", + "woman_tone4": "\ud83d\udc69\ud83c\udffe", + "woman_tone5": "\ud83d\udc69\ud83c\udfff", + "womans_clothes": "\ud83d\udc5a", + "womans_hat": "\ud83d\udc52", + "womens": "\ud83d\udeba", + "worried": "\ud83d\ude1f", + "wrench": "\ud83d\udd27", + "writing_hand": "\u270d", + "writing_hand_tone1": "\u270d\ud83c\udffb", + "writing_hand_tone2": "\u270d\ud83c\udffc", + "writing_hand_tone3": "\u270d\ud83c\udffd", + "writing_hand_tone4": "\u270d\ud83c\udffe", + "writing_hand_tone5": "\u270d\ud83c\udfff", + "x": "\u274c", + "yellow_heart": "\ud83d\udc9b", + "yen": "\ud83d\udcb4", + "yin_yang": "\u262f", + "yum": "\ud83d\ude0b", + "zap": "\u26a1", + "zero": "0\u20e3", + "zipper_mouth": "\ud83e\udd10", + "zzz": "\ud83d\udca4", + "100": "\ud83d\udcaf", + "1234": "\ud83d\udd22", + + "party": "\ud83c\udf89", + "celebration": "\ud83c\udf89", + "confetti": "\ud83c\udf89" +} diff --git a/resources/figlet/custom/README b/resources/figlet/custom/README new file mode 100644 index 0000000000..c667bb20e3 --- /dev/null +++ b/resources/figlet/custom/README @@ -0,0 +1,2 @@ +Add Figlet ".flf" font files here to make them available to the "figlet" +Remarkup interpreter. diff --git a/resources/font/tuffy.ttf b/resources/font/tuffy.ttf new file mode 100644 index 0000000000..9df064674f Binary files /dev/null and b/resources/font/tuffy.ttf differ diff --git a/resources/ircbot/example_config.json b/resources/ircbot/example_config.json deleted file mode 100644 index b2bbf5210d..0000000000 --- a/resources/ircbot/example_config.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "server" : "irc.freenode.net", - "port" : 6667, - "nick" : "phabot", - "join" : [ - "#phabot-test" - ], - "handlers" : [ - "PhabricatorIRCProtocolHandler", - "PhabricatorIRCObjectNameHandler", - "PhabricatorIRCLogHandler", - "PhabricatorIRCWhatsNewHandler", - "PhabricatorIRCDifferentialNotificationHandler", - "PhabricatorIRCMacroHandler" - ], - - "conduit.uri" : null, - "conduit.user" : null, - "conduit.cert" : null, - - "macro.size" : 48, - "macro.sleep" : 0.25, - "macro.aspect" : 0.66, - - "notification.channels" : ["#phabot-test"] -} diff --git a/resources/sprite/login_1x/Amazon.png b/resources/sprite/login_1x/Amazon.png new file mode 100644 index 0000000000..5bfe01331a Binary files /dev/null and b/resources/sprite/login_1x/Amazon.png differ diff --git a/resources/sprite/login_1x/Asana.png b/resources/sprite/login_1x/Asana.png new file mode 100644 index 0000000000..9b2fc85239 Binary files /dev/null and b/resources/sprite/login_1x/Asana.png differ diff --git a/resources/sprite/login_1x/Bitbucket.png b/resources/sprite/login_1x/Bitbucket.png new file mode 100644 index 0000000000..22722998c7 Binary files /dev/null and b/resources/sprite/login_1x/Bitbucket.png differ diff --git a/resources/sprite/login_1x/Disqus.png b/resources/sprite/login_1x/Disqus.png new file mode 100644 index 0000000000..1d9ac9b519 Binary files /dev/null and b/resources/sprite/login_1x/Disqus.png differ diff --git a/resources/sprite/login_1x/Facebook.png b/resources/sprite/login_1x/Facebook.png new file mode 100644 index 0000000000..8c7201b05e Binary files /dev/null and b/resources/sprite/login_1x/Facebook.png differ diff --git a/resources/sprite/login_1x/Generic.png b/resources/sprite/login_1x/Generic.png new file mode 100644 index 0000000000..8e322aa842 Binary files /dev/null and b/resources/sprite/login_1x/Generic.png differ diff --git a/resources/sprite/login_1x/Github.png b/resources/sprite/login_1x/Github.png new file mode 100644 index 0000000000..5187cefd2b Binary files /dev/null and b/resources/sprite/login_1x/Github.png differ diff --git a/resources/sprite/login_1x/Google.png b/resources/sprite/login_1x/Google.png new file mode 100644 index 0000000000..e0989b9c56 Binary files /dev/null and b/resources/sprite/login_1x/Google.png differ diff --git a/resources/sprite/login_1x/HTTP.png b/resources/sprite/login_1x/HTTP.png new file mode 100644 index 0000000000..6270291d59 Binary files /dev/null and b/resources/sprite/login_1x/HTTP.png differ diff --git a/resources/sprite/login_1x/Jira.png b/resources/sprite/login_1x/Jira.png new file mode 100644 index 0000000000..74c26c1347 Binary files /dev/null and b/resources/sprite/login_1x/Jira.png differ diff --git a/resources/sprite/login_1x/LDAP.png b/resources/sprite/login_1x/LDAP.png new file mode 100644 index 0000000000..447aa737b1 Binary files /dev/null and b/resources/sprite/login_1x/LDAP.png differ diff --git a/resources/sprite/login_1x/MediaWiki.png b/resources/sprite/login_1x/MediaWiki.png new file mode 100644 index 0000000000..64fa50d972 Binary files /dev/null and b/resources/sprite/login_1x/MediaWiki.png differ diff --git a/resources/sprite/login_1x/PayPal.png b/resources/sprite/login_1x/PayPal.png new file mode 100644 index 0000000000..3294d4b3e1 Binary files /dev/null and b/resources/sprite/login_1x/PayPal.png differ diff --git a/resources/sprite/login_1x/Phabricator.png b/resources/sprite/login_1x/Phabricator.png new file mode 100644 index 0000000000..b998007a3c Binary files /dev/null and b/resources/sprite/login_1x/Phabricator.png differ diff --git a/resources/sprite/login_1x/Slack.png b/resources/sprite/login_1x/Slack.png new file mode 100644 index 0000000000..411bf73c13 Binary files /dev/null and b/resources/sprite/login_1x/Slack.png differ diff --git a/resources/sprite/login_1x/Stripe.png b/resources/sprite/login_1x/Stripe.png new file mode 100644 index 0000000000..b82a26ae49 Binary files /dev/null and b/resources/sprite/login_1x/Stripe.png differ diff --git a/resources/sprite/login_1x/TestPayment.png b/resources/sprite/login_1x/TestPayment.png new file mode 100644 index 0000000000..7b0505b721 Binary files /dev/null and b/resources/sprite/login_1x/TestPayment.png differ diff --git a/resources/sprite/login_1x/TwitchTV.png b/resources/sprite/login_1x/TwitchTV.png new file mode 100644 index 0000000000..1e5733f90e Binary files /dev/null and b/resources/sprite/login_1x/TwitchTV.png differ diff --git a/resources/sprite/login_1x/Twitter.png b/resources/sprite/login_1x/Twitter.png new file mode 100644 index 0000000000..8f2d91673f Binary files /dev/null and b/resources/sprite/login_1x/Twitter.png differ diff --git a/resources/sprite/login_1x/WePay.png b/resources/sprite/login_1x/WePay.png new file mode 100644 index 0000000000..2e1f74d5f1 Binary files /dev/null and b/resources/sprite/login_1x/WePay.png differ diff --git a/resources/sprite/login_1x/WordPressCOM.png b/resources/sprite/login_1x/WordPressCOM.png new file mode 100644 index 0000000000..fbfa199797 Binary files /dev/null and b/resources/sprite/login_1x/WordPressCOM.png differ diff --git a/resources/sprite/login_2x/Amazon.png b/resources/sprite/login_2x/Amazon.png new file mode 100644 index 0000000000..938dd94215 Binary files /dev/null and b/resources/sprite/login_2x/Amazon.png differ diff --git a/resources/sprite/login_2x/Asana.png b/resources/sprite/login_2x/Asana.png new file mode 100644 index 0000000000..6000ddc1bb Binary files /dev/null and b/resources/sprite/login_2x/Asana.png differ diff --git a/resources/sprite/login_2x/Bitbucket.png b/resources/sprite/login_2x/Bitbucket.png new file mode 100644 index 0000000000..cbe92da0fa Binary files /dev/null and b/resources/sprite/login_2x/Bitbucket.png differ diff --git a/resources/sprite/login_2x/Disqus.png b/resources/sprite/login_2x/Disqus.png new file mode 100644 index 0000000000..6d9d428450 Binary files /dev/null and b/resources/sprite/login_2x/Disqus.png differ diff --git a/resources/sprite/login_2x/Facebook.png b/resources/sprite/login_2x/Facebook.png new file mode 100644 index 0000000000..b3cac2bee5 Binary files /dev/null and b/resources/sprite/login_2x/Facebook.png differ diff --git a/resources/sprite/login_2x/Generic.png b/resources/sprite/login_2x/Generic.png new file mode 100644 index 0000000000..c4b15320f6 Binary files /dev/null and b/resources/sprite/login_2x/Generic.png differ diff --git a/resources/sprite/login_2x/Github.png b/resources/sprite/login_2x/Github.png new file mode 100644 index 0000000000..17e77c4f42 Binary files /dev/null and b/resources/sprite/login_2x/Github.png differ diff --git a/resources/sprite/login_2x/Google.png b/resources/sprite/login_2x/Google.png new file mode 100644 index 0000000000..f16ad8c55b Binary files /dev/null and b/resources/sprite/login_2x/Google.png differ diff --git a/resources/sprite/login_2x/HTTP.png b/resources/sprite/login_2x/HTTP.png new file mode 100644 index 0000000000..b4a8b00d40 Binary files /dev/null and b/resources/sprite/login_2x/HTTP.png differ diff --git a/resources/sprite/login_2x/Jira.png b/resources/sprite/login_2x/Jira.png new file mode 100644 index 0000000000..d55a5b75d1 Binary files /dev/null and b/resources/sprite/login_2x/Jira.png differ diff --git a/resources/sprite/login_2x/LDAP.png b/resources/sprite/login_2x/LDAP.png new file mode 100644 index 0000000000..5f8793e431 Binary files /dev/null and b/resources/sprite/login_2x/LDAP.png differ diff --git a/resources/sprite/login_2x/MediaWiki.png b/resources/sprite/login_2x/MediaWiki.png new file mode 100644 index 0000000000..db64d841eb Binary files /dev/null and b/resources/sprite/login_2x/MediaWiki.png differ diff --git a/resources/sprite/login_2x/PayPal.png b/resources/sprite/login_2x/PayPal.png new file mode 100644 index 0000000000..4fad779020 Binary files /dev/null and b/resources/sprite/login_2x/PayPal.png differ diff --git a/resources/sprite/login_2x/Phabricator.png b/resources/sprite/login_2x/Phabricator.png new file mode 100644 index 0000000000..3792f723fc Binary files /dev/null and b/resources/sprite/login_2x/Phabricator.png differ diff --git a/resources/sprite/login_2x/Slack.png b/resources/sprite/login_2x/Slack.png new file mode 100644 index 0000000000..163d96cea0 Binary files /dev/null and b/resources/sprite/login_2x/Slack.png differ diff --git a/resources/sprite/login_2x/Stripe.png b/resources/sprite/login_2x/Stripe.png new file mode 100644 index 0000000000..c3d92c1ae6 Binary files /dev/null and b/resources/sprite/login_2x/Stripe.png differ diff --git a/resources/sprite/login_2x/TestPayment.png b/resources/sprite/login_2x/TestPayment.png new file mode 100644 index 0000000000..704e7e61f4 Binary files /dev/null and b/resources/sprite/login_2x/TestPayment.png differ diff --git a/resources/sprite/login_2x/TwitchTV.png b/resources/sprite/login_2x/TwitchTV.png new file mode 100644 index 0000000000..5fd4b916fc Binary files /dev/null and b/resources/sprite/login_2x/TwitchTV.png differ diff --git a/resources/sprite/login_2x/Twitter.png b/resources/sprite/login_2x/Twitter.png new file mode 100644 index 0000000000..d06ccc0416 Binary files /dev/null and b/resources/sprite/login_2x/Twitter.png differ diff --git a/resources/sprite/login_2x/WePay.png b/resources/sprite/login_2x/WePay.png new file mode 100644 index 0000000000..5b44bd2c61 Binary files /dev/null and b/resources/sprite/login_2x/WePay.png differ diff --git a/resources/sprite/login_2x/WordPressCOM.png b/resources/sprite/login_2x/WordPressCOM.png new file mode 100644 index 0000000000..78e87fb988 Binary files /dev/null and b/resources/sprite/login_2x/WordPressCOM.png differ diff --git a/resources/sprite/manifest/login.json b/resources/sprite/manifest/login.json new file mode 100644 index 0000000000..59312820e1 --- /dev/null +++ b/resources/sprite/manifest/login.json @@ -0,0 +1,116 @@ +{ + "version": 1, + "sprites": { + "login-Amazon": { + "name": "login-Amazon", + "rule": ".login-Amazon", + "hash": "e915cc22543027da014126a956a2b3a1" + }, + "login-Asana": { + "name": "login-Asana", + "rule": ".login-Asana", + "hash": "cfc35b62afb103c5d484a715071e3cc3" + }, + "login-Bitbucket": { + "name": "login-Bitbucket", + "rule": ".login-Bitbucket", + "hash": "32f7cf08badb1181f883c211eddd89f5" + }, + "login-Disqus": { + "name": "login-Disqus", + "rule": ".login-Disqus", + "hash": "77b29d56329a3c30b79d6b6673b0e39b" + }, + "login-Facebook": { + "name": "login-Facebook", + "rule": ".login-Facebook", + "hash": "1b12a5a5cfe103d4d96213cf7d1ce18a" + }, + "login-Generic": { + "name": "login-Generic", + "rule": ".login-Generic", + "hash": "c8a57930d9b2bca35adbd8e87b1d4a2f" + }, + "login-Github": { + "name": "login-Github", + "rule": ".login-Github", + "hash": "984f7d78e9c6f5e08da259ca319f6be3" + }, + "login-Google": { + "name": "login-Google", + "rule": ".login-Google", + "hash": "72e7b0e1005c92f059f4d5881592ee72" + }, + "login-HTTP": { + "name": "login-HTTP", + "rule": ".login-HTTP", + "hash": "4b2150566fd6c43c530ea56aa3c7feb4" + }, + "login-Jira": { + "name": "login-Jira", + "rule": ".login-Jira", + "hash": "454fab6635fbc3782380dbb1842a794c" + }, + "login-LDAP": { + "name": "login-LDAP", + "rule": ".login-LDAP", + "hash": "e31df2e9faf8ca0925ef93128a82fa7a" + }, + "login-MediaWiki": { + "name": "login-MediaWiki", + "rule": ".login-MediaWiki", + "hash": "68eba44e85ea942ecf14d3c08992a2e2" + }, + "login-PayPal": { + "name": "login-PayPal", + "rule": ".login-PayPal", + "hash": "dfa09f45369c93bb0fd82a333b0fe927" + }, + "login-Phabricator": { + "name": "login-Phabricator", + "rule": ".login-Phabricator", + "hash": "54f5ddae4b9d138c438ec00ed42544d2" + }, + "login-Slack": { + "name": "login-Slack", + "rule": ".login-Slack", + "hash": "fe0df2df040032b949aa05948b6bd986" + }, + "login-Stripe": { + "name": "login-Stripe", + "rule": ".login-Stripe", + "hash": "26a00cf2d548bbb9f57d1a6362e996f5" + }, + "login-TestPayment": { + "name": "login-TestPayment", + "rule": ".login-TestPayment", + "hash": "7a8b41cbac5edcde63aa64959fe30b7b" + }, + "login-TwitchTV": { + "name": "login-TwitchTV", + "rule": ".login-TwitchTV", + "hash": "02320cb010a226fb6505d5b31f1f0246" + }, + "login-Twitter": { + "name": "login-Twitter", + "rule": ".login-Twitter", + "hash": "5a60e22662a2f5c5c1bc036153f64a18" + }, + "login-WePay": { + "name": "login-WePay", + "rule": ".login-WePay", + "hash": "39a4c5ec26ee8400239b246761b83aa3" + }, + "login-WordPressCOM": { + "name": "login-WordPressCOM", + "rule": ".login-WordPressCOM", + "hash": "9eae4205dbed0c42a18ee4f8e0fa151b" + } + }, + "scales": [ + 1, + 2 + ], + "header": "/**\n * @provides sprite-login-css\n * @generated\n */\n\n.sprite-login {\n background-image: url(http://github.com/rsrc/image/sprite-login.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5),\nonly screen and (min-resolution: 1.5dppx) {\n .sprite-login {\n background-image: url(http://github.com/rsrc/image/sprite-login-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n", + "type": "standard" +} diff --git a/resources/sprite/manifest/tokens.json b/resources/sprite/manifest/tokens.json new file mode 100644 index 0000000000..c9768db11f --- /dev/null +++ b/resources/sprite/manifest/tokens.json @@ -0,0 +1,131 @@ +{ + "version": 1, + "sprites": { + "tokens-coin-1": { + "name": "tokens-coin-1", + "rule": ".tokens-coin-1", + "hash": "5343d745423994c45c5fc689edc47d05" + }, + "tokens-coin-2": { + "name": "tokens-coin-2", + "rule": ".tokens-coin-2", + "hash": "9a94b5f925f3e6f8eed673d50fbfe148" + }, + "tokens-coin-3": { + "name": "tokens-coin-3", + "rule": ".tokens-coin-3", + "hash": "68db03ca248309a76cee97ada64239c6" + }, + "tokens-coin-4": { + "name": "tokens-coin-4", + "rule": ".tokens-coin-4", + "hash": "75832b7e42df9287b3c35c6afed12a93" + }, + "tokens-emoji-1": { + "name": "tokens-emoji-1", + "rule": ".tokens-emoji-1", + "hash": "17f57bdeb4078f9c05f1f037ccb1c162" + }, + "tokens-emoji-2": { + "name": "tokens-emoji-2", + "rule": ".tokens-emoji-2", + "hash": "6877c6e0c63522d5819531aaf4aba787" + }, + "tokens-emoji-3": { + "name": "tokens-emoji-3", + "rule": ".tokens-emoji-3", + "hash": "cc67534b0119d4cc385a93ed5aff86e4" + }, + "tokens-emoji-4": { + "name": "tokens-emoji-4", + "rule": ".tokens-emoji-4", + "hash": "f2a6febd638670962dfb5fdd76b23cfb" + }, + "tokens-emoji-5": { + "name": "tokens-emoji-5", + "rule": ".tokens-emoji-5", + "hash": "22bc23d162449fde492e0fd3eccc7301" + }, + "tokens-emoji-6": { + "name": "tokens-emoji-6", + "rule": ".tokens-emoji-6", + "hash": "e3689840f410ff1bbf365f6b06043d3f" + }, + "tokens-emoji-7": { + "name": "tokens-emoji-7", + "rule": ".tokens-emoji-7", + "hash": "a689b9fe7c9f6f300d757b5350e2cc4b" + }, + "tokens-emoji-8": { + "name": "tokens-emoji-8", + "rule": ".tokens-emoji-8", + "hash": "26570ef132caea33307e1e7574d754e8" + }, + "tokens-heart-1": { + "name": "tokens-heart-1", + "rule": ".tokens-heart-1", + "hash": "2d4812b2129a8eb05fcdbed1e9654422" + }, + "tokens-heart-2": { + "name": "tokens-heart-2", + "rule": ".tokens-heart-2", + "hash": "64cbdbfb0dc565f17b6f13b5e41bc000" + }, + "tokens-like-1": { + "name": "tokens-like-1", + "rule": ".tokens-like-1", + "hash": "1b3966d6e0e5d902b558fe3d76ed8a79" + }, + "tokens-like-2": { + "name": "tokens-like-2", + "rule": ".tokens-like-2", + "hash": "b74308407fdaa94e08492cfd9b44f2a2" + }, + "tokens-medal-1": { + "name": "tokens-medal-1", + "rule": ".tokens-medal-1", + "hash": "33d837e703091060c1892c402535eef0" + }, + "tokens-medal-2": { + "name": "tokens-medal-2", + "rule": ".tokens-medal-2", + "hash": "fa2f3b237d7616a6cb309718ad162d7a" + }, + "tokens-medal-3": { + "name": "tokens-medal-3", + "rule": ".tokens-medal-3", + "hash": "d7282911ba57373b54b4093986143f3e" + }, + "tokens-medal-4": { + "name": "tokens-medal-4", + "rule": ".tokens-medal-4", + "hash": "a107a334968d57314ec6a71620c45b99" + }, + "tokens-misc-1": { + "name": "tokens-misc-1", + "rule": ".tokens-misc-1", + "hash": "671ce03f62c7b0946482ec92d35b8aa3" + }, + "tokens-misc-2": { + "name": "tokens-misc-2", + "rule": ".tokens-misc-2", + "hash": "872353ba82e41512c3b54e5dc2aa3d43" + }, + "tokens-misc-3": { + "name": "tokens-misc-3", + "rule": ".tokens-misc-3", + "hash": "cdf9171ec6397b95ea9abe1edeaab359" + }, + "tokens-misc-4": { + "name": "tokens-misc-4", + "rule": ".tokens-misc-4", + "hash": "7371fa5ecde282e718b7a15b02ca51e8" + } + }, + "scales": [ + 1, + 2 + ], + "header": "/**\n * @provides sprite-tokens-css\n * @generated\n */\n\n.sprite-tokens {\n background-image: url(http://github.com/rsrc/image/sprite-tokens.png);\n background-repeat: no-repeat;\n}\n\n@media\nonly screen and (min-device-pixel-ratio: 1.5),\nonly screen and (-webkit-min-device-pixel-ratio: 1.5),\nonly screen and (min-resolution: 1.5dppx) {\n .sprite-tokens {\n background-image: url(http://github.com/rsrc/image/sprite-tokens-X2.png);\n background-size: {X}px {Y}px;\n }\n}\n", + "type": "standard" +} diff --git a/resources/sprite/tokens_1x/coin-1.png b/resources/sprite/tokens_1x/coin-1.png new file mode 100644 index 0000000000..ec7b376f31 Binary files /dev/null and b/resources/sprite/tokens_1x/coin-1.png differ diff --git a/resources/sprite/tokens_1x/coin-2.png b/resources/sprite/tokens_1x/coin-2.png new file mode 100644 index 0000000000..8a6bdb5dc5 Binary files /dev/null and b/resources/sprite/tokens_1x/coin-2.png differ diff --git a/resources/sprite/tokens_1x/coin-3.png b/resources/sprite/tokens_1x/coin-3.png new file mode 100644 index 0000000000..c89f3d5a53 Binary files /dev/null and b/resources/sprite/tokens_1x/coin-3.png differ diff --git a/resources/sprite/tokens_1x/coin-4.png b/resources/sprite/tokens_1x/coin-4.png new file mode 100644 index 0000000000..27cd25c15d Binary files /dev/null and b/resources/sprite/tokens_1x/coin-4.png differ diff --git a/resources/sprite/tokens_1x/emoji-1.png b/resources/sprite/tokens_1x/emoji-1.png new file mode 100644 index 0000000000..dfc2ec784a Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-1.png differ diff --git a/resources/sprite/tokens_1x/emoji-2.png b/resources/sprite/tokens_1x/emoji-2.png new file mode 100644 index 0000000000..124b5a84d1 Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-2.png differ diff --git a/resources/sprite/tokens_1x/emoji-3.png b/resources/sprite/tokens_1x/emoji-3.png new file mode 100644 index 0000000000..8d3b9f10e0 Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-3.png differ diff --git a/resources/sprite/tokens_1x/emoji-4.png b/resources/sprite/tokens_1x/emoji-4.png new file mode 100644 index 0000000000..92ff339ce2 Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-4.png differ diff --git a/resources/sprite/tokens_1x/emoji-5.png b/resources/sprite/tokens_1x/emoji-5.png new file mode 100644 index 0000000000..66c746910d Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-5.png differ diff --git a/resources/sprite/tokens_1x/emoji-6.png b/resources/sprite/tokens_1x/emoji-6.png new file mode 100644 index 0000000000..4509a81684 Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-6.png differ diff --git a/resources/sprite/tokens_1x/emoji-7.png b/resources/sprite/tokens_1x/emoji-7.png new file mode 100644 index 0000000000..cb4780d99b Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-7.png differ diff --git a/resources/sprite/tokens_1x/emoji-8.png b/resources/sprite/tokens_1x/emoji-8.png new file mode 100644 index 0000000000..eb50ae85cb Binary files /dev/null and b/resources/sprite/tokens_1x/emoji-8.png differ diff --git a/resources/sprite/tokens_1x/heart-1.png b/resources/sprite/tokens_1x/heart-1.png new file mode 100644 index 0000000000..65c469ea5d Binary files /dev/null and b/resources/sprite/tokens_1x/heart-1.png differ diff --git a/resources/sprite/tokens_1x/heart-2.png b/resources/sprite/tokens_1x/heart-2.png new file mode 100644 index 0000000000..387be5eaf8 Binary files /dev/null and b/resources/sprite/tokens_1x/heart-2.png differ diff --git a/resources/sprite/tokens_1x/like-1.png b/resources/sprite/tokens_1x/like-1.png new file mode 100644 index 0000000000..dfb7cc2a90 Binary files /dev/null and b/resources/sprite/tokens_1x/like-1.png differ diff --git a/resources/sprite/tokens_1x/like-2.png b/resources/sprite/tokens_1x/like-2.png new file mode 100644 index 0000000000..287a04d553 Binary files /dev/null and b/resources/sprite/tokens_1x/like-2.png differ diff --git a/resources/sprite/tokens_1x/medal-1.png b/resources/sprite/tokens_1x/medal-1.png new file mode 100644 index 0000000000..adb1dbfaf9 Binary files /dev/null and b/resources/sprite/tokens_1x/medal-1.png differ diff --git a/resources/sprite/tokens_1x/medal-2.png b/resources/sprite/tokens_1x/medal-2.png new file mode 100644 index 0000000000..ec0c3c5342 Binary files /dev/null and b/resources/sprite/tokens_1x/medal-2.png differ diff --git a/resources/sprite/tokens_1x/medal-3.png b/resources/sprite/tokens_1x/medal-3.png new file mode 100644 index 0000000000..7c9bf7bfe1 Binary files /dev/null and b/resources/sprite/tokens_1x/medal-3.png differ diff --git a/resources/sprite/tokens_1x/medal-4.png b/resources/sprite/tokens_1x/medal-4.png new file mode 100644 index 0000000000..ceb8bd255e Binary files /dev/null and b/resources/sprite/tokens_1x/medal-4.png differ diff --git a/resources/sprite/tokens_1x/misc-1.png b/resources/sprite/tokens_1x/misc-1.png new file mode 100644 index 0000000000..9d7a74199b Binary files /dev/null and b/resources/sprite/tokens_1x/misc-1.png differ diff --git a/resources/sprite/tokens_1x/misc-2.png b/resources/sprite/tokens_1x/misc-2.png new file mode 100644 index 0000000000..773b38915a Binary files /dev/null and b/resources/sprite/tokens_1x/misc-2.png differ diff --git a/resources/sprite/tokens_1x/misc-3.png b/resources/sprite/tokens_1x/misc-3.png new file mode 100644 index 0000000000..3f4e9c90db Binary files /dev/null and b/resources/sprite/tokens_1x/misc-3.png differ diff --git a/resources/sprite/tokens_1x/misc-4.png b/resources/sprite/tokens_1x/misc-4.png new file mode 100644 index 0000000000..956bb1bbaf Binary files /dev/null and b/resources/sprite/tokens_1x/misc-4.png differ diff --git a/resources/sprite/tokens_2x/coin-1.png b/resources/sprite/tokens_2x/coin-1.png new file mode 100644 index 0000000000..6f73730ec0 Binary files /dev/null and b/resources/sprite/tokens_2x/coin-1.png differ diff --git a/resources/sprite/tokens_2x/coin-2.png b/resources/sprite/tokens_2x/coin-2.png new file mode 100644 index 0000000000..5c462eb73b Binary files /dev/null and b/resources/sprite/tokens_2x/coin-2.png differ diff --git a/resources/sprite/tokens_2x/coin-3.png b/resources/sprite/tokens_2x/coin-3.png new file mode 100644 index 0000000000..2b79bc3050 Binary files /dev/null and b/resources/sprite/tokens_2x/coin-3.png differ diff --git a/resources/sprite/tokens_2x/coin-4.png b/resources/sprite/tokens_2x/coin-4.png new file mode 100644 index 0000000000..10436a617c Binary files /dev/null and b/resources/sprite/tokens_2x/coin-4.png differ diff --git a/resources/sprite/tokens_2x/emoji-1.png b/resources/sprite/tokens_2x/emoji-1.png new file mode 100644 index 0000000000..ba8dfc6fa3 Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-1.png differ diff --git a/resources/sprite/tokens_2x/emoji-2.png b/resources/sprite/tokens_2x/emoji-2.png new file mode 100644 index 0000000000..42ade697bd Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-2.png differ diff --git a/resources/sprite/tokens_2x/emoji-3.png b/resources/sprite/tokens_2x/emoji-3.png new file mode 100644 index 0000000000..1a5cbc1947 Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-3.png differ diff --git a/resources/sprite/tokens_2x/emoji-4.png b/resources/sprite/tokens_2x/emoji-4.png new file mode 100644 index 0000000000..5ac7e115ae Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-4.png differ diff --git a/resources/sprite/tokens_2x/emoji-5.png b/resources/sprite/tokens_2x/emoji-5.png new file mode 100644 index 0000000000..4284870eda Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-5.png differ diff --git a/resources/sprite/tokens_2x/emoji-6.png b/resources/sprite/tokens_2x/emoji-6.png new file mode 100644 index 0000000000..13771dd348 Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-6.png differ diff --git a/resources/sprite/tokens_2x/emoji-7.png b/resources/sprite/tokens_2x/emoji-7.png new file mode 100644 index 0000000000..b7df3d7e95 Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-7.png differ diff --git a/resources/sprite/tokens_2x/emoji-8.png b/resources/sprite/tokens_2x/emoji-8.png new file mode 100644 index 0000000000..f468e6112a Binary files /dev/null and b/resources/sprite/tokens_2x/emoji-8.png differ diff --git a/resources/sprite/tokens_2x/heart-1.png b/resources/sprite/tokens_2x/heart-1.png new file mode 100644 index 0000000000..baa1024882 Binary files /dev/null and b/resources/sprite/tokens_2x/heart-1.png differ diff --git a/resources/sprite/tokens_2x/heart-2.png b/resources/sprite/tokens_2x/heart-2.png new file mode 100644 index 0000000000..fabce4406b Binary files /dev/null and b/resources/sprite/tokens_2x/heart-2.png differ diff --git a/resources/sprite/tokens_2x/like-1.png b/resources/sprite/tokens_2x/like-1.png new file mode 100644 index 0000000000..4d4a4d6a9d Binary files /dev/null and b/resources/sprite/tokens_2x/like-1.png differ diff --git a/resources/sprite/tokens_2x/like-2.png b/resources/sprite/tokens_2x/like-2.png new file mode 100644 index 0000000000..4d41fa4975 Binary files /dev/null and b/resources/sprite/tokens_2x/like-2.png differ diff --git a/resources/sprite/tokens_2x/medal-1.png b/resources/sprite/tokens_2x/medal-1.png new file mode 100644 index 0000000000..9a07e5defe Binary files /dev/null and b/resources/sprite/tokens_2x/medal-1.png differ diff --git a/resources/sprite/tokens_2x/medal-2.png b/resources/sprite/tokens_2x/medal-2.png new file mode 100644 index 0000000000..4587141553 Binary files /dev/null and b/resources/sprite/tokens_2x/medal-2.png differ diff --git a/resources/sprite/tokens_2x/medal-3.png b/resources/sprite/tokens_2x/medal-3.png new file mode 100644 index 0000000000..2aa37023ce Binary files /dev/null and b/resources/sprite/tokens_2x/medal-3.png differ diff --git a/resources/sprite/tokens_2x/medal-4.png b/resources/sprite/tokens_2x/medal-4.png new file mode 100644 index 0000000000..1347eacb11 Binary files /dev/null and b/resources/sprite/tokens_2x/medal-4.png differ diff --git a/resources/sprite/tokens_2x/misc-1.png b/resources/sprite/tokens_2x/misc-1.png new file mode 100644 index 0000000000..956429d607 Binary files /dev/null and b/resources/sprite/tokens_2x/misc-1.png differ diff --git a/resources/sprite/tokens_2x/misc-2.png b/resources/sprite/tokens_2x/misc-2.png new file mode 100644 index 0000000000..9ebcc2fdbb Binary files /dev/null and b/resources/sprite/tokens_2x/misc-2.png differ diff --git a/resources/sprite/tokens_2x/misc-3.png b/resources/sprite/tokens_2x/misc-3.png new file mode 100644 index 0000000000..c40e5a28b3 Binary files /dev/null and b/resources/sprite/tokens_2x/misc-3.png differ diff --git a/resources/sprite/tokens_2x/misc-4.png b/resources/sprite/tokens_2x/misc-4.png new file mode 100644 index 0000000000..56b6220ec4 Binary files /dev/null and b/resources/sprite/tokens_2x/misc-4.png differ diff --git a/resources/sql/autopatches/20140104.harbormastercmd.sql b/resources/sql/autopatches/20140104.harbormastercmd.sql new file mode 100644 index 0000000000..8d4d2f5125 --- /dev/null +++ b/resources/sql/autopatches/20140104.harbormastercmd.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildcommand ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + targetPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + command VARCHAR(128) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_target` (targetPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build + DROP cancelRequested; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + ADD targetStatus VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + SET targetStatus = 'target/pending' WHERE targetStatus = ''; diff --git a/resources/sql/autopatches/20140106.macromailkey.1.sql b/resources/sql/autopatches/20140106.macromailkey.1.sql new file mode 100644 index 0000000000..39bdc9aed4 --- /dev/null +++ b/resources/sql/autopatches/20140106.macromailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140106.macromailkey.2.php b/resources/sql/autopatches/20140106.macromailkey.2.php new file mode 100644 index 0000000000..a91e5a2c20 --- /dev/null +++ b/resources/sql/autopatches/20140106.macromailkey.2.php @@ -0,0 +1,23 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $macro) { + $id = $macro->getID(); + + echo pht('Populating macro %d...', $id)."\n"; + + if (!$macro->getMailKey()) { + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140108.ddbpname.1.sql b/resources/sql/autopatches/20140108.ddbpname.1.sql new file mode 100644 index 0000000000..3fe80875db --- /dev/null +++ b/resources/sql/autopatches/20140108.ddbpname.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_blueprint + ADD blueprintName VARCHAR(255) NOT NULL AFTER className; diff --git a/resources/sql/autopatches/20140108.ddbpname.2.php b/resources/sql/autopatches/20140108.ddbpname.2.php new file mode 100644 index 0000000000..3316f3df1d --- /dev/null +++ b/resources/sql/autopatches/20140108.ddbpname.2.php @@ -0,0 +1,23 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $blueprint) { + $id = $blueprint->getID(); + + echo pht('Populating blueprint %d...', $id)."\n"; + + if (!strlen($blueprint->getBlueprintName())) { + queryfx( + $conn_w, + 'UPDATE %T SET blueprintName = %s WHERE id = %d', + $table->getTableName(), + pht('Blueprint %s', $id), + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140109.ddxactions.sql b/resources/sql/autopatches/20140109.ddxactions.sql new file mode 100644 index 0000000000..54e410021b --- /dev/null +++ b/resources/sql/autopatches/20140109.ddxactions.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_drydock.drydock_blueprinttransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140109.projectcolumnsdates.sql b/resources/sql/autopatches/20140109.projectcolumnsdates.sql new file mode 100644 index 0000000000..96dda544e4 --- /dev/null +++ b/resources/sql/autopatches/20140109.projectcolumnsdates.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD dateCreated INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_project.project_column + ADD dateModified INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20140113.legalpadsig.1.sql b/resources/sql/autopatches/20140113.legalpadsig.1.sql new file mode 100644 index 0000000000..52f0ccdd61 --- /dev/null +++ b/resources/sql/autopatches/20140113.legalpadsig.1.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD secretKey VARCHAR(20) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD verified TINYINT(1) DEFAULT 0; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD KEY `secretKey` (secretKey); diff --git a/resources/sql/autopatches/20140113.legalpadsig.2.php b/resources/sql/autopatches/20140113.legalpadsig.2.php new file mode 100644 index 0000000000..6c7b0131b2 --- /dev/null +++ b/resources/sql/autopatches/20140113.legalpadsig.2.php @@ -0,0 +1,23 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $sig) { + $id = $sig->getID(); + + echo pht('Populating signature %d...', $id)."\n"; + + if (!$sig->getSecretKey()) { + queryfx( + $conn_w, + 'UPDATE %T SET secretKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140115.auth.1.id.sql b/resources/sql/autopatches/20140115.auth.1.id.sql new file mode 100644 index 0000000000..ba173c126a --- /dev/null +++ b/resources/sql/autopatches/20140115.auth.1.id.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + DROP PRIMARY KEY; + +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; + +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD KEY `key_identity` (userPHID, type); diff --git a/resources/sql/autopatches/20140115.auth.2.expires.sql b/resources/sql/autopatches/20140115.auth.2.expires.sql new file mode 100644 index 0000000000..94b36af7da --- /dev/null +++ b/resources/sql/autopatches/20140115.auth.2.expires.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD sessionExpires INT UNSIGNED NOT NULL; + +UPDATE {$NAMESPACE}_user.phabricator_session + SET sessionExpires = UNIX_TIMESTAMP() + (60 * 60 * 24 * 30); + +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD KEY `key_expires` (sessionExpires); diff --git a/resources/sql/autopatches/20140115.auth.3.unlimit.php b/resources/sql/autopatches/20140115.auth.3.unlimit.php new file mode 100644 index 0000000000..9e5bc7fed3 --- /dev/null +++ b/resources/sql/autopatches/20140115.auth.3.unlimit.php @@ -0,0 +1,26 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($session_table) as $session) { + $id = $session->getID(); + + echo pht('Migrating session %d...', $id)."\n"; + $old_type = $session->getType(); + $new_type = preg_replace('/-.*$/', '', $old_type); + + if ($old_type !== $new_type) { + queryfx( + $conn_w, + 'UPDATE %T SET type = %s WHERE id = %d', + $session_table->getTableName(), + $new_type, + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140115.legalpadsigkey.sql b/resources/sql/autopatches/20140115.legalpadsigkey.sql new file mode 100644 index 0000000000..c02873bebc --- /dev/null +++ b/resources/sql/autopatches/20140115.legalpadsigkey.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + DROP KEY `key_document`; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD KEY `key_document` (`documentPHID`,`signerPHID`, `documentVersion`); diff --git a/resources/sql/autopatches/20140116.reporefcursor.sql b/resources/sql/autopatches/20140116.reporefcursor.sql new file mode 100644 index 0000000000..e9593f7abc --- /dev/null +++ b/resources/sql/autopatches/20140116.reporefcursor.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_refcursor ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + refType VARCHAR(32) NOT NULL COLLATE utf8_bin, + refNameHash VARCHAR(12) NOT NULL COLLATE latin1_bin, + refNameRaw LONGTEXT NOT NULL COLLATE latin1_bin, + refNameEncoding VARCHAR(16) COLLATE utf8_bin, + commitIdentifier VARCHAR(40) NOT NULL COLLATE utf8_bin, + + KEY `key_cursor` (repositoryPHID, refType, refNameHash) +) ENGINE=InnoDB, COLLATE=utf8_general_ci; diff --git a/resources/sql/autopatches/20140126.diff.1.parentrevisionid.sql b/resources/sql/autopatches/20140126.diff.1.parentrevisionid.sql new file mode 100644 index 0000000000..4468e240b4 --- /dev/null +++ b/resources/sql/autopatches/20140126.diff.1.parentrevisionid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + DROP COLUMN parentRevisionID; diff --git a/resources/sql/autopatches/20140126.diff.2.repositoryphid.sql b/resources/sql/autopatches/20140126.diff.2.repositoryphid.sql new file mode 100644 index 0000000000..336c15f741 --- /dev/null +++ b/resources/sql/autopatches/20140126.diff.2.repositoryphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + ADD COLUMN repositoryPHID VARCHAR(64) COLLATE utf8_bin AFTER authorPHID; diff --git a/resources/sql/autopatches/20140130.dash.1.board.sql b/resources/sql/autopatches/20140130.dash.1.board.sql new file mode 100644 index 0000000000..51f82c02a5 --- /dev/null +++ b/resources/sql/autopatches/20140130.dash.1.board.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE=utf8_general_ci; diff --git a/resources/sql/autopatches/20140130.dash.2.panel.sql b/resources/sql/autopatches/20140130.dash.2.panel.sql new file mode 100644 index 0000000000..3176ed3f63 --- /dev/null +++ b/resources/sql/autopatches/20140130.dash.2.panel.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_panel ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + properties LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE=utf8_general_ci; diff --git a/resources/sql/autopatches/20140130.dash.3.boardxaction.sql b/resources/sql/autopatches/20140130.dash.3.boardxaction.sql new file mode 100644 index 0000000000..a29a4f0e1b --- /dev/null +++ b/resources/sql/autopatches/20140130.dash.3.boardxaction.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140130.dash.4.panelxaction.sql b/resources/sql/autopatches/20140130.dash.4.panelxaction.sql new file mode 100644 index 0000000000..cf36381416 --- /dev/null +++ b/resources/sql/autopatches/20140130.dash.4.panelxaction.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_paneltransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140130.mail.1.retry.sql b/resources/sql/autopatches/20140130.mail.1.retry.sql new file mode 100644 index 0000000000..42ff5afab2 --- /dev/null +++ b/resources/sql/autopatches/20140130.mail.1.retry.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + DROP COLUMN retryCount; diff --git a/resources/sql/autopatches/20140130.mail.2.next.sql b/resources/sql/autopatches/20140130.mail.2.next.sql new file mode 100644 index 0000000000..78e5693cf1 --- /dev/null +++ b/resources/sql/autopatches/20140130.mail.2.next.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + DROP COLUMN nextRetry; diff --git a/resources/sql/autopatches/20140201.gc.1.mailsent.sql b/resources/sql/autopatches/20140201.gc.1.mailsent.sql new file mode 100644 index 0000000000..21254ca890 --- /dev/null +++ b/resources/sql/autopatches/20140201.gc.1.mailsent.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + ADD KEY `key_created` (dateCreated); diff --git a/resources/sql/autopatches/20140201.gc.2.mailreceived.sql b/resources/sql/autopatches/20140201.gc.2.mailreceived.sql new file mode 100644 index 0000000000..e9de922182 --- /dev/null +++ b/resources/sql/autopatches/20140201.gc.2.mailreceived.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_receivedmail + ADD KEY `key_created` (dateCreated); diff --git a/resources/sql/autopatches/20140205.cal.1.rename.sql b/resources/sql/autopatches/20140205.cal.1.rename.sql new file mode 100644 index 0000000000..83622ae3ad --- /dev/null +++ b/resources/sql/autopatches/20140205.cal.1.rename.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_status + RENAME {$NAMESPACE}_calendar.calendar_event; diff --git a/resources/sql/autopatches/20140205.cal.2.phid-col.sql b/resources/sql/autopatches/20140205.cal.2.phid-col.sql new file mode 100644 index 0000000000..3f1e10e423 --- /dev/null +++ b/resources/sql/autopatches/20140205.cal.2.phid-col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD phid VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER id; diff --git a/resources/sql/autopatches/20140205.cal.3.phid-mig.php b/resources/sql/autopatches/20140205.cal.3.phid-mig.php new file mode 100644 index 0000000000..7aff389d17 --- /dev/null +++ b/resources/sql/autopatches/20140205.cal.3.phid-mig.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +echo pht('Assigning PHIDs to events...')."\n"; +foreach (new LiskMigrationIterator($table) as $event) { + $id = $event->getID(); + + echo pht('Updating event %d...', $id)."\n"; + if ($event->getPHID()) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $id); +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140205.cal.4.phid-key.sql b/resources/sql/autopatches/20140205.cal.4.phid-key.sql new file mode 100644 index 0000000000..cde0e10b78 --- /dev/null +++ b/resources/sql/autopatches/20140205.cal.4.phid-key.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/autopatches/20140210.herald.rule-condition-mig.php b/resources/sql/autopatches/20140210.herald.rule-condition-mig.php new file mode 100644 index 0000000000..9a5e40ba0c --- /dev/null +++ b/resources/sql/autopatches/20140210.herald.rule-condition-mig.php @@ -0,0 +1,32 @@ +establishConnection('w'); + +echo pht( + "Migrating Herald conditions of type Herald rule from IDs to PHIDs...\n"); +foreach (new LiskMigrationIterator($table) as $condition) { + if ($condition->getFieldName() != HeraldAnotherRuleField::FIELDCONST) { + continue; + } + + $value = $condition->getValue(); + if (!is_numeric($value)) { + continue; + } + $id = $condition->getID(); + echo pht('Updating condition %s...', $id)."\n"; + + $rule = id(new HeraldRuleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIDs(array($value)) + ->executeOne(); + + queryfx( + $conn_w, + 'UPDATE %T SET value = %s WHERE id = %d', + $table->getTableName(), + json_encode($rule->getPHID()), + $id); +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140210.projcfield.1.blurb.php b/resources/sql/autopatches/20140210.projcfield.1.blurb.php new file mode 100644 index 0000000000..90c4242e8d --- /dev/null +++ b/resources/sql/autopatches/20140210.projcfield.1.blurb.php @@ -0,0 +1,25 @@ +establishConnection('w'); +$table_name = id(new PhabricatorProjectCustomFieldStorage())->getTableName(); + +$rows = new LiskRawMigrationIterator($conn_w, 'project_profile'); + +echo pht('Migrating project descriptions to custom storage...')."\n"; +foreach ($rows as $row) { + $phid = $row['projectPHID']; + + $desc = $row['blurb']; + if (strlen($desc)) { + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T (objectPHID, fieldIndex, fieldValue) + VALUES (%s, %s, %s)', + $table_name, + $phid, + PhabricatorHash::digestForIndex('std:project:internal:description'), + $desc); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140210.projcfield.2.piccol.sql b/resources/sql/autopatches/20140210.projcfield.2.piccol.sql new file mode 100644 index 0000000000..08e1c11ed8 --- /dev/null +++ b/resources/sql/autopatches/20140210.projcfield.2.piccol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD profileImagePHID VARCHAR(64) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140210.projcfield.3.picmig.sql b/resources/sql/autopatches/20140210.projcfield.3.picmig.sql new file mode 100644 index 0000000000..0b9814035e --- /dev/null +++ b/resources/sql/autopatches/20140210.projcfield.3.picmig.sql @@ -0,0 +1,4 @@ +UPDATE {$NAMESPACE}_project.project proj, + {$NAMESPACE}_project.project_profile profile + SET proj.profileImagePHID = profile.profileImagePHID + WHERE proj.phid = profile.projectPHID; diff --git a/resources/sql/autopatches/20140210.projcfield.4.memmig.sql b/resources/sql/autopatches/20140210.projcfield.4.memmig.sql new file mode 100644 index 0000000000..f719f52a60 --- /dev/null +++ b/resources/sql/autopatches/20140210.projcfield.4.memmig.sql @@ -0,0 +1,8 @@ +/* These are here so `grep` will find them if we ever change things: */ + +/* PhabricatorProjectProjectHasMemberEdgeType::EDGECONST = 13 */ +/* PhabricatorObjectHasSubscriberEdgeType::EDGECONST = 21 */ + +INSERT IGNORE INTO {$NAMESPACE}_project.edge (src, type, dst, dateCreated) + SELECT src, 21, dst, dateCreated FROM {$NAMESPACE}_project.edge + WHERE type = 13; diff --git a/resources/sql/autopatches/20140210.projcfield.5.dropprofile.sql b/resources/sql/autopatches/20140210.projcfield.5.dropprofile.sql new file mode 100644 index 0000000000..ddaaa0eeeb --- /dev/null +++ b/resources/sql/autopatches/20140210.projcfield.5.dropprofile.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_project.project_profile; diff --git a/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql b/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql new file mode 100644 index 0000000000..3132bec7ab --- /dev/null +++ b/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + CHANGE changesetID changesetID INT UNSIGNED; diff --git a/resources/sql/autopatches/20140211.dx.2.migcommenttext.php b/resources/sql/autopatches/20140211.dx.2.migcommenttext.php new file mode 100644 index 0000000000..7c531f51f8 --- /dev/null +++ b/resources/sql/autopatches/20140211.dx.2.migcommenttext.php @@ -0,0 +1,70 @@ +establishConnection('w'); +$rows = new LiskRawMigrationIterator($conn_w, 'differential_comment'); + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +echo pht('Migrating Differential comment text to modern storage...')."\n"; +foreach ($rows as $row) { + $id = $row['id']; + echo pht('Migrating Differential comment %d...', $id)."\n"; + if (!strlen($row['content'])) { + echo pht('Comment has no text, continuing.')."\n"; + continue; + } + + $revision = id(new DifferentialRevision())->load($row['revisionID']); + if (!$revision) { + echo pht('Comment has no valid revision, continuing.')."\n"; + continue; + } + + $revision_phid = $revision->getPHID(); + + $dst_table = 'differential_inline_comment'; + + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + DifferentialRevisionPHIDType::TYPECONST); + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT, + DifferentialRevisionPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T + (phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified, revisionPHID, changesetID, + legacyCommentID) + VALUES (%s, %s, %s, %s, %s, + %d, %s, %s, %d, + %d, %d, %s, %nd, + %d)', + 'differential_transaction_comment', + + // phid, transactionPHID, authorPHID, viewPolicy, editPolicy + $comment_phid, + $xaction_phid, + $row['authorPHID'], + 'public', + $row['authorPHID'], + + // commentVersion, content, contentSource, isDeleted + 1, + $row['content'], + $content_source, + 0, + + // dateCreated, dateModified, revisionPHID, changesetID, legacyCommentID + $row['dateCreated'], + $row['dateModified'], + $revision_phid, + null, + $row['id']); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140211.dx.3.migsubscriptions.sql b/resources/sql/autopatches/20140211.dx.3.migsubscriptions.sql new file mode 100644 index 0000000000..1b0d3777a2 --- /dev/null +++ b/resources/sql/autopatches/20140211.dx.3.migsubscriptions.sql @@ -0,0 +1,10 @@ +/* For `grep`: */ + +/* PhabricatorObjectHasSubscriberEdgeType::EDGECONST = 21 */ + +INSERT IGNORE INTO {$NAMESPACE}_differential.edge (src, type, dst, seq) + SELECT rev.phid, 21, rel.objectPHID, rel.sequence + FROM {$NAMESPACE}_differential.differential_revision rev + JOIN {$NAMESPACE}_differential.differential_relationship rel + ON rev.id = rel.revisionID + WHERE relation = 'subd'; diff --git a/resources/sql/autopatches/20140211.dx.999.drop.relationships.sql b/resources/sql/autopatches/20140211.dx.999.drop.relationships.sql new file mode 100644 index 0000000000..464128f58c --- /dev/null +++ b/resources/sql/autopatches/20140211.dx.999.drop.relationships.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_relationship; diff --git a/resources/sql/autopatches/20140212.dx.1.armageddon.php b/resources/sql/autopatches/20140212.dx.1.armageddon.php new file mode 100644 index 0000000000..a7e978b559 --- /dev/null +++ b/resources/sql/autopatches/20140212.dx.1.armageddon.php @@ -0,0 +1,221 @@ +establishConnection('w'); +$rows = new LiskRawMigrationIterator($conn_w, 'differential_comment'); + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +echo pht('Migrating Differential comments to modern storage...')."\n"; +foreach ($rows as $row) { + $id = $row['id']; + echo pht('Migrating comment %d...', $id)."\n"; + + $revision = id(new DifferentialRevision())->load($row['revisionID']); + if (!$revision) { + echo pht('No revision, continuing.')."\n"; + continue; + } + + $revision_phid = $revision->getPHID(); + + $comments = queryfx_all( + $conn_w, + 'SELECT * FROM %T WHERE legacyCommentID = %d', + 'differential_transaction_comment', + $id); + + $main_comments = array(); + $inline_comments = array(); + + foreach ($comments as $comment) { + if ($comment['changesetID']) { + $inline_comments[] = $comment; + } else { + $main_comments[] = $comment; + } + } + + $metadata = json_decode($row['metadata'], true); + if (!is_array($metadata)) { + $metadata = array(); + } + + $key_cc = 'added-ccs'; + $key_add_rev = 'added-reviewers'; + $key_rem_rev = 'removed-reviewers'; + $key_diff_id = 'diff-id'; + + $xactions = array(); + + // Build the main action transaction. + switch ($row['action']) { + case DifferentialAction::ACTION_COMMENT: + case DifferentialAction::ACTION_ADDREVIEWERS: + case DifferentialAction::ACTION_ADDCCS: + case DifferentialAction::ACTION_UPDATE: + case DifferentialTransaction::TYPE_INLINE: + // These actions will have their transactions created by other rules. + break; + default: + // Otherwise, this is a normal action (like an accept or reject). + $xactions[] = array( + 'type' => DifferentialTransaction::TYPE_ACTION, + 'old' => null, + 'new' => $row['action'], + ); + break; + } + + // Build the diff update transaction, if one exists. + $diff_id = idx($metadata, $key_diff_id); + if (!is_scalar($diff_id)) { + $diff_id = null; + } + + if ($diff_id || $row['action'] == DifferentialAction::ACTION_UPDATE) { + $xactions[] = array( + 'type' => DifferentialRevisionUpdateTransaction::TRANSACTIONTYPE, + 'old' => null, + 'new' => $diff_id, + ); + } + + // Build the add/remove reviewers transaction, if one exists. + $add_rev = idx($metadata, $key_add_rev, array()); + if (!is_array($add_rev)) { + $add_rev = array(); + } + $rem_rev = idx($metadata, $key_rem_rev, array()); + if (!is_array($rem_rev)) { + $rem_rev = array(); + } + + if ($add_rev || $rem_rev) { + $old = array(); + foreach ($rem_rev as $phid) { + if (!is_scalar($phid)) { + continue; + } + $old[$phid] = array( + 'src' => $revision_phid, + 'type' => DifferentialRevisionHasReviewerEdgeType::EDGECONST, + 'dst' => $phid, + ); + } + + $new = array(); + foreach ($add_rev as $phid) { + if (!is_scalar($phid)) { + continue; + } + $new[$phid] = array( + 'src' => $revision_phid, + 'type' => DifferentialRevisionHasReviewerEdgeType::EDGECONST, + 'dst' => $phid, + ); + } + + $xactions[] = array( + 'type' => PhabricatorTransactions::TYPE_EDGE, + 'old' => $old, + 'new' => $new, + 'meta' => array( + 'edge:type' => DifferentialRevisionHasReviewerEdgeType::EDGECONST, + ), + ); + } + + // Build the CC transaction, if one exists. + $add_cc = idx($metadata, $key_cc, array()); + if (!is_array($add_cc)) { + $add_cc = array(); + } + + if ($add_cc) { + $xactions[] = array( + 'type' => PhabricatorTransactions::TYPE_SUBSCRIBERS, + 'old' => array(), + 'new' => array_fuse($add_cc), + ); + } + + + // Build the main comment transaction. + foreach ($main_comments as $main) { + $xactions[] = array( + 'type' => PhabricatorTransactions::TYPE_COMMENT, + 'old' => null, + 'new' => null, + 'phid' => $main['transactionPHID'], + 'comment' => $main, + ); + } + + // Build inline comment transactions. + foreach ($inline_comments as $inline) { + $xactions[] = array( + 'type' => DifferentialTransaction::TYPE_INLINE, + 'old' => null, + 'new' => null, + 'phid' => $inline['transactionPHID'], + 'comment' => $inline, + ); + } + + foreach ($xactions as $xaction) { + // Generate a new PHID, if we don't already have one from the comment + // table. We pregenerated into the comment table to make this a little + // easier, so we only need to write to one table. + $xaction_phid = idx($xaction, 'phid'); + if (!$xaction_phid) { + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + DifferentialRevisionPHIDType::TYPECONST); + } + unset($xaction['phid']); + + $comment_phid = null; + $comment_version = 0; + if (idx($xaction, 'comment')) { + $comment_phid = $xaction['comment']['phid']; + $comment_version = 1; + } + + $old = idx($xaction, 'old'); + $new = idx($xaction, 'new'); + $meta = idx($xaction, 'meta', array()); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %ns, %d, %s, %ns, %ns, %s, %s, %d, %d)', + 'differential_transaction', + + // PHID, authorPHID, objectPHID + $xaction_phid, + (string)$row['authorPHID'], + $revision_phid, + + // viewPolicy, editPolicy, commentPHID, commentVersion + 'public', + (string)$row['authorPHID'], + $comment_phid, + $comment_version, + + // transactionType, oldValue, newValue, contentSource, metadata + $xaction['type'], + json_encode($old), + json_encode($new), + $content_source, + json_encode($meta), + + // dates + $row['dateCreated'], + $row['dateModified']); + } + +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140214.clean.1.legacycommentid.sql b/resources/sql/autopatches/20140214.clean.1.legacycommentid.sql new file mode 100644 index 0000000000..2efb997183 --- /dev/null +++ b/resources/sql/autopatches/20140214.clean.1.legacycommentid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + DROP COLUMN legacyCommentID; diff --git a/resources/sql/autopatches/20140214.clean.2.dropcomment.sql b/resources/sql/autopatches/20140214.clean.2.dropcomment.sql new file mode 100644 index 0000000000..e8cef208d0 --- /dev/null +++ b/resources/sql/autopatches/20140214.clean.2.dropcomment.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_comment; diff --git a/resources/sql/autopatches/20140214.clean.3.dropinline.sql b/resources/sql/autopatches/20140214.clean.3.dropinline.sql new file mode 100644 index 0000000000..58ad0210c1 --- /dev/null +++ b/resources/sql/autopatches/20140214.clean.3.dropinline.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_inlinecomment; diff --git a/resources/sql/autopatches/20140218.differentialdraft.sql b/resources/sql/autopatches/20140218.differentialdraft.sql new file mode 100644 index 0000000000..7421e08c98 --- /dev/null +++ b/resources/sql/autopatches/20140218.differentialdraft.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_draft( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + draftKey VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_unique` (objectPHID, authorPHID, draftKey) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140218.passwords.1.extend.sql b/resources/sql/autopatches/20140218.passwords.1.extend.sql new file mode 100644 index 0000000000..d1fbb3a519 --- /dev/null +++ b/resources/sql/autopatches/20140218.passwords.1.extend.sql @@ -0,0 +1,4 @@ +/* Extend from 32 characters to 128. */ + +ALTER TABLE {$NAMESPACE}_user.user + CHANGE passwordHash passwordHash VARCHAR(128) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140218.passwords.2.prefix.sql b/resources/sql/autopatches/20140218.passwords.2.prefix.sql new file mode 100644 index 0000000000..175f81cd93 --- /dev/null +++ b/resources/sql/autopatches/20140218.passwords.2.prefix.sql @@ -0,0 +1,5 @@ +/* Mark all existing password hashes as "Iterated MD5". */ + +UPDATE {$NAMESPACE}_user.user + SET passwordHash = CONCAT('md5:', passwordHash) + WHERE LENGTH(passwordHash) > 0; diff --git a/resources/sql/autopatches/20140218.passwords.3.vcsextend.sql b/resources/sql/autopatches/20140218.passwords.3.vcsextend.sql new file mode 100644 index 0000000000..38753cc6d3 --- /dev/null +++ b/resources/sql/autopatches/20140218.passwords.3.vcsextend.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_vcspassword + CHANGE passwordHash passwordHash VARCHAR(128) COLLATE utf8_bin NOT NULL; diff --git a/resources/sql/autopatches/20140218.passwords.4.vcs.php b/resources/sql/autopatches/20140218.passwords.4.vcs.php new file mode 100644 index 0000000000..c811844c27 --- /dev/null +++ b/resources/sql/autopatches/20140218.passwords.4.vcs.php @@ -0,0 +1,13 @@ +establishConnection('w'); +$rows = new LiskRawMigrationIterator($conn_w, 'differential_auxiliaryfield'); + +echo pht('Modernizing Differential auxiliary field storage...')."\n"; + +$table_name = id(new DifferentialCustomFieldStorage())->getTableName(); +foreach ($rows as $row) { + $id = $row['id']; + echo pht('Migrating row %d...', $id)."\n"; + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T (objectPHID, fieldIndex, fieldValue) + VALUES (%s, %s, %s)', + $table_name, + $row['revisionPHID'], + PhabricatorHash::digestForIndex($row['name']), + $row['value']); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140226.dxcustom.99.drop.sql b/resources/sql/autopatches/20140226.dxcustom.99.drop.sql new file mode 100644 index 0000000000..f8bbb2b6c5 --- /dev/null +++ b/resources/sql/autopatches/20140226.dxcustom.99.drop.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_auxiliaryfield; diff --git a/resources/sql/autopatches/20140228.dxcomment.1.sql b/resources/sql/autopatches/20140228.dxcomment.1.sql new file mode 100644 index 0000000000..a62de29fc9 --- /dev/null +++ b/resources/sql/autopatches/20140228.dxcomment.1.sql @@ -0,0 +1,4 @@ +/* Make this column nullable. */ + +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + CHANGE revisionPHID revisionPHID VARCHAR(64) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140305.diviner.1.slugcol.sql b/resources/sql/autopatches/20140305.diviner.1.slugcol.sql new file mode 100644 index 0000000000..741cd8df45 --- /dev/null +++ b/resources/sql/autopatches/20140305.diviner.1.slugcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_diviner.diviner_livesymbol + ADD titleSlugHash CHAR(12) COLLATE latin1_bin AFTER title; diff --git a/resources/sql/autopatches/20140305.diviner.2.slugkey.sql b/resources/sql/autopatches/20140305.diviner.2.slugkey.sql new file mode 100644 index 0000000000..1316a69ccc --- /dev/null +++ b/resources/sql/autopatches/20140305.diviner.2.slugkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_diviner.diviner_livesymbol + ADD KEY `key_slug` (titleSlugHash); diff --git a/resources/sql/autopatches/20140311.mdroplegacy.sql b/resources/sql/autopatches/20140311.mdroplegacy.sql new file mode 100644 index 0000000000..ba8176c775 --- /dev/null +++ b/resources/sql/autopatches/20140311.mdroplegacy.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_maniphest.maniphest_transaction_legacy; diff --git a/resources/sql/autopatches/20140314.projectcolumn.1.statuscol.sql b/resources/sql/autopatches/20140314.projectcolumn.1.statuscol.sql new file mode 100644 index 0000000000..d2357bef89 --- /dev/null +++ b/resources/sql/autopatches/20140314.projectcolumn.1.statuscol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD COLUMN status INT UNSIGNED NOT NULL AFTER name; diff --git a/resources/sql/autopatches/20140314.projectcolumn.2.statuskey.sql b/resources/sql/autopatches/20140314.projectcolumn.2.statuskey.sql new file mode 100644 index 0000000000..b2d53548a0 --- /dev/null +++ b/resources/sql/autopatches/20140314.projectcolumn.2.statuskey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD KEY `key_status` (`projectPHID`,`status`,`sequence`); diff --git a/resources/sql/autopatches/20140317.mupdatedkey.sql b/resources/sql/autopatches/20140317.mupdatedkey.sql new file mode 100644 index 0000000000..404e753e83 --- /dev/null +++ b/resources/sql/autopatches/20140317.mupdatedkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD KEY `key_dateModified` (dateModified); diff --git a/resources/sql/autopatches/20140321.harbor.1.bxaction.sql b/resources/sql/autopatches/20140321.harbor.1.bxaction.sql new file mode 100644 index 0000000000..1d65d2914a --- /dev/null +++ b/resources/sql/autopatches/20140321.harbor.1.bxaction.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildsteptransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140321.mstatus.1.col.sql b/resources/sql/autopatches/20140321.mstatus.1.col.sql new file mode 100644 index 0000000000..df407e0908 --- /dev/null +++ b/resources/sql/autopatches/20140321.mstatus.1.col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + CHANGE status status VARCHAR(12) NOT NULL COLLATE latin1_bin; diff --git a/resources/sql/autopatches/20140321.mstatus.2.mig.php b/resources/sql/autopatches/20140321.mstatus.2.mig.php new file mode 100644 index 0000000000..654ca7881c --- /dev/null +++ b/resources/sql/autopatches/20140321.mstatus.2.mig.php @@ -0,0 +1,95 @@ + 'open', + 1 => 'resolved', + 2 => 'wontfix', + 3 => 'invalid', + 4 => 'duplicate', + 5 => 'spite', +); + +$conn_w = id(new ManiphestTask())->establishConnection('w'); + +echo pht('Migrating tasks to new status constants...')."\n"; +foreach (new LiskMigrationIterator(new ManiphestTask()) as $task) { + $id = $task->getID(); + echo pht('Migrating %s...', "T{$id}")."\n"; + + $status = $task->getStatus(); + if (isset($status_map[$status])) { + queryfx( + $conn_w, + 'UPDATE %T SET status = %s WHERE id = %d', + $task->getTableName(), + $status_map[$status], + $id); + } +} + +echo pht('Done.')."\n"; + + +echo pht('Migrating task transactions to new status constants...')."\n"; +foreach (new LiskMigrationIterator(new ManiphestTransaction()) as $xaction) { + $id = $xaction->getID(); + echo pht('Migrating %d...', $id)."\n"; + + $xn_type = ManiphestTaskStatusTransaction::TRANSACTIONTYPE; + if ($xaction->getTransactionType() == $xn_type) { + $old = $xaction->getOldValue(); + if ($old !== null && isset($status_map[$old])) { + $old = $status_map[$old]; + } + + $new = $xaction->getNewValue(); + if (isset($status_map[$new])) { + $new = $status_map[$new]; + } + + queryfx( + $conn_w, + 'UPDATE %T SET oldValue = %s, newValue = %s WHERE id = %d', + $xaction->getTableName(), + json_encode($old), + json_encode($new), + $id); + } +} +echo pht('Done.')."\n"; + +$conn_w = id(new PhabricatorSavedQuery())->establishConnection('w'); + +echo pht('Migrating searches to new status constants...')."\n"; +foreach (new LiskMigrationIterator(new PhabricatorSavedQuery()) as $query) { + $id = $query->getID(); + echo pht('Migrating %d...', $id)."\n"; + + if ($query->getEngineClassName() !== 'ManiphestTaskSearchEngine') { + continue; + } + + $params = $query->getParameters(); + $statuses = idx($params, 'statuses', array()); + if ($statuses) { + $changed = false; + foreach ($statuses as $key => $status) { + if (isset($status_map[$status])) { + $statuses[$key] = $status_map[$status]; + $changed = true; + } + } + + if ($changed) { + $params['statuses'] = $statuses; + + queryfx( + $conn_w, + 'UPDATE %T SET parameters = %s WHERE id = %d', + $query->getTableName(), + json_encode($params), + $id); + } + } +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140323.harbor.1.renames.php b/resources/sql/autopatches/20140323.harbor.1.renames.php new file mode 100644 index 0000000000..8aab25d876 --- /dev/null +++ b/resources/sql/autopatches/20140323.harbor.1.renames.php @@ -0,0 +1,35 @@ +getTableName(), + id(new HarbormasterBuildTarget())->getTableName(), +); + +echo pht('Renaming Harbormaster classes...')."\n"; + +$conn_w = id(new HarbormasterBuildStep())->establishConnection('w'); +foreach ($names as $name) { + $old = $name; + $new = 'Harbormaster'.$name; + + echo pht('Renaming %s -> %s...', $old, $new)."\n"; + foreach ($tables as $table) { + queryfx( + $conn_w, + 'UPDATE %T SET className = %s WHERE className = %s', + $table, + $new, + $old); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140323.harbor.2.message.sql b/resources/sql/autopatches/20140323.harbor.2.message.sql new file mode 100644 index 0000000000..0181d8856d --- /dev/null +++ b/resources/sql/autopatches/20140323.harbor.2.message.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildmessage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildTargetPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(16) NOT NULL, + isConsumed BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_buildtarget` (buildTargetPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140325.push.1.event.sql b/resources/sql/autopatches/20140325.push.1.event.sql new file mode 100644 index 0000000000..d6290f25f6 --- /dev/null +++ b/resources/sql/autopatches/20140325.push.1.event.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_pushevent ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + repositoryPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + epoch INT UNSIGNED NOT NULL, + pusherPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + remoteAddress INT UNSIGNED, + remoteProtocol VARCHAR(32), + rejectCode INT UNSIGNED NOT NULL, + rejectDetails VARCHAR(64) COLLATE utf8_bin, + + UNIQUE KEY `key_phid` (phid), + KEY `key_repository` (repositoryPHID) + +) ENGINE=InnoDB, COLLATE=utf8_general_ci; diff --git a/resources/sql/autopatches/20140325.push.2.eventphid.sql b/resources/sql/autopatches/20140325.push.2.eventphid.sql new file mode 100644 index 0000000000..32d0136f65 --- /dev/null +++ b/resources/sql/autopatches/20140325.push.2.eventphid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + ADD pushEventPHID VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER epoch; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + ADD KEY `key_event` (pushEventPHID); diff --git a/resources/sql/autopatches/20140325.push.3.groups.php b/resources/sql/autopatches/20140325.push.3.groups.php new file mode 100644 index 0000000000..8706da306a --- /dev/null +++ b/resources/sql/autopatches/20140325.push.3.groups.php @@ -0,0 +1,43 @@ +establishConnection('w'); + +echo pht('Adding transaction log event groups...')."\n"; + +$logs = queryfx_all( + $conn_w, + 'SELECT * FROM %T GROUP BY transactionKey ORDER BY id ASC', + 'repository_pushlog'); +foreach ($logs as $log) { + $id = $log['id']; + echo pht('Migrating log %d...', $id)."\n"; + if ($log['pushEventPHID']) { + continue; + } + + $event_phid = id(new PhabricatorRepositoryPushEvent())->generatePHID(); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, repositoryPHID, epoch, pusherPHID, remoteAddress, + remoteProtocol, rejectCode, rejectDetails) + VALUES (%s, %s, %d, %s, %d, %s, %d, %s)', + 'repository_pushevent', + $event_phid, + $log['repositoryPHID'], + $log['epoch'], + $log['pusherPHID'], + $log['remoteAddress'], + $log['remoteProtocol'], + $log['rejectCode'], + $log['rejectDetails']); + + queryfx( + $conn_w, + 'UPDATE %T SET pushEventPHID = %s WHERE transactionKey = %s', + 'repository_pushlog', + $event_phid, + $log['transactionKey']); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140325.push.4.prune.sql b/resources/sql/autopatches/20140325.push.4.prune.sql new file mode 100644 index 0000000000..c0e3a4a6bd --- /dev/null +++ b/resources/sql/autopatches/20140325.push.4.prune.sql @@ -0,0 +1,14 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + DROP remoteAddress; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + DROP remoteProtocol; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + DROP transactionKey; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + DROP rejectCode; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + DROP rejectDetails; diff --git a/resources/sql/autopatches/20140326.project.1.colxaction.sql b/resources/sql/autopatches/20140326.project.1.colxaction.sql new file mode 100644 index 0000000000..c35bcb614a --- /dev/null +++ b/resources/sql/autopatches/20140326.project.1.colxaction.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_project.project_columntransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140328.releeph.1.productxaction.sql b/resources/sql/autopatches/20140328.releeph.1.productxaction.sql new file mode 100644 index 0000000000..b7db3cf9b2 --- /dev/null +++ b/resources/sql/autopatches/20140328.releeph.1.productxaction.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_projecttransaction + RENAME {$NAMESPACE}_releeph.releeph_producttransaction; diff --git a/resources/sql/autopatches/20140330.flagtext.sql b/resources/sql/autopatches/20140330.flagtext.sql new file mode 100644 index 0000000000..b4ba5e328e --- /dev/null +++ b/resources/sql/autopatches/20140330.flagtext.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_flag.flag + CHANGE note note LONGTEXT NOT NULL COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140402.actionlog.sql b/resources/sql/autopatches/20140402.actionlog.sql new file mode 100644 index 0000000000..057542e92b --- /dev/null +++ b/resources/sql/autopatches/20140402.actionlog.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_system.system_actionlog ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + actorHash CHAR(12) NOT NULL COLLATE latin1_bin, + actorIdentity VARCHAR(255) NOT NULL COLLATE utf8_bin, + action CHAR(32) NOT NULL COLLATE utf8_bin, + score DOUBLE NOT NULL, + epoch INT UNSIGNED NOT NULL, + + KEY `key_epoch` (epoch), + KEY `key_action` (actorHash, action, epoch) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140410.accountsecret.1.sql b/resources/sql/autopatches/20140410.accountsecret.1.sql new file mode 100644 index 0000000000..5b6b39e49c --- /dev/null +++ b/resources/sql/autopatches/20140410.accountsecret.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD accountSecret CHAR(64) NOT NULL COLLATE latin1_bin; diff --git a/resources/sql/autopatches/20140410.accountsecret.2.php b/resources/sql/autopatches/20140410.accountsecret.2.php new file mode 100644 index 0000000000..7d0cf7ad88 --- /dev/null +++ b/resources/sql/autopatches/20140410.accountsecret.2.php @@ -0,0 +1,21 @@ +getID(); + echo pht('Updating %d...', $id)."\n"; + + if (strlen($user->getAccountSecret())) { + continue; + } + + queryfx( + $user->establishConnection('w'), + 'UPDATE %T SET accountSecret = %s WHERE id = %d', + $user->getTableName(), + Filesystem::readRandomCharacters(64), + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140416.harbor.1.sql b/resources/sql/autopatches/20140416.harbor.1.sql new file mode 100644 index 0000000000..0cc30cfdf1 --- /dev/null +++ b/resources/sql/autopatches/20140416.harbor.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildable + DROP buildStatus; diff --git a/resources/sql/autopatches/20140420.rel.1.objectphid.sql b/resources/sql/autopatches/20140420.rel.1.objectphid.sql new file mode 100644 index 0000000000..397b988d92 --- /dev/null +++ b/resources/sql/autopatches/20140420.rel.1.objectphid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_request + ADD COLUMN requestedObjectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL; + +ALTER TABLE {$NAMESPACE}_releeph.releeph_request + ADD KEY `key_requestedObject` (requestedObjectPHID); diff --git a/resources/sql/autopatches/20140420.rel.2.objectmig.php b/resources/sql/autopatches/20140420.rel.2.objectmig.php new file mode 100644 index 0000000000..f54416a5b0 --- /dev/null +++ b/resources/sql/autopatches/20140420.rel.2.objectmig.php @@ -0,0 +1,45 @@ +getTableName(); +$conn_w = $pull_table->establishConnection('w'); + +echo pht('Setting object PHIDs for requests...')."\n"; +foreach (new LiskMigrationIterator($pull_table) as $pull) { + $id = $pull->getID(); + + echo pht('Migrating pull request %d...', $id)."\n"; + if ($pull->getRequestedObjectPHID()) { + // We already have a valid PHID, so skip this request. + continue; + } + + $commit_phids = $pull->getCommitPHIDs(); + if (count($commit_phids) != 1) { + // At the time this migration was written, all requests had exactly one + // commit. If a request has more than one, we don't have the information + // we need to process it. + continue; + } + + $commit_phid = head($commit_phids); + + $revision_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( + $commit_phid, + DiffusionCommitHasRevisionEdgeType::EDGECONST); + + if ($revision_phids) { + $object_phid = head($revision_phids); + } else { + $object_phid = $commit_phid; + } + + queryfx( + $conn_w, + 'UPDATE %T SET requestedObjectPHID = %s WHERE id = %d', + $table_name, + $object_phid, + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140421.slowvotecolumnsisclosed.sql b/resources/sql/autopatches/20140421.slowvotecolumnsisclosed.sql new file mode 100644 index 0000000000..2e48566562 --- /dev/null +++ b/resources/sql/autopatches/20140421.slowvotecolumnsisclosed.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + ADD COLUMN isClosed BOOL NOT NULL; diff --git a/resources/sql/autopatches/20140423.session.1.hisec.sql b/resources/sql/autopatches/20140423.session.1.hisec.sql new file mode 100644 index 0000000000..4b49d1b563 --- /dev/null +++ b/resources/sql/autopatches/20140423.session.1.hisec.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD highSecurityUntil INT UNSIGNED; diff --git a/resources/sql/autopatches/20140427.mfactor.1.sql b/resources/sql/autopatches/20140427.mfactor.1.sql new file mode 100644 index 0000000000..c6d35f9234 --- /dev/null +++ b/resources/sql/autopatches/20140427.mfactor.1.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_factorconfig ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + userPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + factorKey VARCHAR(64) NOT NULL COLLATE utf8_bin, + factorName LONGTEXT NOT NULL COLLATE utf8_general_ci, + factorSecret LONGTEXT NOT NULL COLLATE utf8_bin, + properties LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_user` (userPHID), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140430.auth.1.partial.sql b/resources/sql/autopatches/20140430.auth.1.partial.sql new file mode 100644 index 0000000000..7f104ac8d6 --- /dev/null +++ b/resources/sql/autopatches/20140430.auth.1.partial.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD isPartial BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20140430.dash.1.paneltype.sql b/resources/sql/autopatches/20140430.dash.1.paneltype.sql new file mode 100644 index 0000000000..d90655cf98 --- /dev/null +++ b/resources/sql/autopatches/20140430.dash.1.paneltype.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard_panel + ADD panelType VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER name; diff --git a/resources/sql/autopatches/20140430.dash.2.edge.sql b/resources/sql/autopatches/20140430.dash.2.edge.sql new file mode 100644 index 0000000000..0e3ef01f60 --- /dev/null +++ b/resources/sql/autopatches/20140430.dash.2.edge.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_dashboard.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_dashboard.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140501.passphraselockcredential.sql b/resources/sql/autopatches/20140501.passphraselockcredential.sql new file mode 100644 index 0000000000..c398afc1fe --- /dev/null +++ b/resources/sql/autopatches/20140501.passphraselockcredential.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_passphrase.passphrase_credential + ADD COLUMN isLocked BOOL NOT NULL; diff --git a/resources/sql/autopatches/20140501.remove.1.dlog.sql b/resources/sql/autopatches/20140501.remove.1.dlog.sql new file mode 100644 index 0000000000..526bcd87da --- /dev/null +++ b/resources/sql/autopatches/20140501.remove.1.dlog.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_system.system_destructionlog ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectClass VARCHAR(128) NOT NULL COLLATE utf8_bin, + rootLogID INT UNSIGNED, + objectPHID VARCHAR(64) COLLATE utf8_bin, + objectMonogram VARCHAR(64) COLLATE utf8_bin, + epoch INT UNSIGNED NOT NULL, + KEY `key_epoch` (epoch) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140507.smstable.sql b/resources/sql/autopatches/20140507.smstable.sql new file mode 100644 index 0000000000..ae3f329e3d --- /dev/null +++ b/resources/sql/autopatches/20140507.smstable.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_metamta.sms ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + providerShortName VARCHAR(16) NOT NULL COLLATE utf8_bin, + providerSMSID VARCHAR(40) NOT NULL COLLATE utf8_bin, + toNumber VARCHAR(20) NOT NULL COLLATE utf8_bin, + fromNumber VARCHAR(20) COLLATE utf8_bin, + body LONGTEXT NOT NULL COLLATE utf8_bin, + sendStatus VARCHAR(16) COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_provider` (providerSMSID, providerShortName) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140509.coverage.1.sql b/resources/sql/autopatches/20140509.coverage.1.sql new file mode 100644 index 0000000000..f8bf09dfe2 --- /dev/null +++ b/resources/sql/autopatches/20140509.coverage.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_coverage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + branchID INT UNSIGNED NOT NULL, + commitID INT UNSIGNED NOT NULL, + pathID INT UNSIGNED NOT NULL, + coverage LONGTEXT NOT NULL COLLATE latin1_bin, + KEY `key_path` (branchID, pathID, commitID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140509.dashboardlayoutconfig.sql b/resources/sql/autopatches/20140509.dashboardlayoutconfig.sql new file mode 100644 index 0000000000..2ffb549f0a --- /dev/null +++ b/resources/sql/autopatches/20140509.dashboardlayoutconfig.sql @@ -0,0 +1,4 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard + ADD COLUMN layoutConfig LONGTEXT NOT NULL COLLATE utf8_bin AFTER name; + +UPDATE {$NAMESPACE}_dashboard.dashboard SET layoutConfig = '[]'; diff --git a/resources/sql/autopatches/20140512.dparents.1.sql b/resources/sql/autopatches/20140512.dparents.1.sql new file mode 100644 index 0000000000..5305e9625c --- /dev/null +++ b/resources/sql/autopatches/20140512.dparents.1.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_parents ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + childCommitID INT UNSIGNED NOT NULL, + parentCommitID INT UNSIGNED NOT NULL, + UNIQUE `key_child` (childCommitID, parentCommitID), + KEY `key_parent` (parentCommitID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140514.harbormasterbuildabletransaction.sql b/resources/sql/autopatches/20140514.harbormasterbuildabletransaction.sql new file mode 100644 index 0000000000..7a3a0325f4 --- /dev/null +++ b/resources/sql/autopatches/20140514.harbormasterbuildabletransaction.sql @@ -0,0 +1,43 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildabletransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140514.pholiomockclose.sql b/resources/sql/autopatches/20140514.pholiomockclose.sql new file mode 100644 index 0000000000..2a4c2768f7 --- /dev/null +++ b/resources/sql/autopatches/20140514.pholiomockclose.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + ADD COLUMN status VARCHAR(12) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_pholio.pholio_mock + SET status = "open" WHERE status = ""; diff --git a/resources/sql/autopatches/20140515.trust-emails.sql b/resources/sql/autopatches/20140515.trust-emails.sql new file mode 100644 index 0000000000..8233f73542 --- /dev/null +++ b/resources/sql/autopatches/20140515.trust-emails.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_providerconfig + ADD `shouldTrustEmails` tinyint(1) NOT NULL DEFAULT 0 AFTER shouldAllowUnlink; diff --git a/resources/sql/autopatches/20140517.dxbinarycache.sql b/resources/sql/autopatches/20140517.dxbinarycache.sql new file mode 100644 index 0000000000..acf7162b65 --- /dev/null +++ b/resources/sql/autopatches/20140517.dxbinarycache.sql @@ -0,0 +1,4 @@ +TRUNCATE {$NAMESPACE}_differential.differential_changeset_parse_cache; + +ALTER TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache + CHANGE cache cache LONGTEXT COLLATE latin1_bin NOT NULL; diff --git a/resources/sql/autopatches/20140518.dxmorebinarycache.sql b/resources/sql/autopatches/20140518.dxmorebinarycache.sql new file mode 100644 index 0000000000..27859bfd4b --- /dev/null +++ b/resources/sql/autopatches/20140518.dxmorebinarycache.sql @@ -0,0 +1,4 @@ +TRUNCATE {$NAMESPACE}_differential.differential_changeset_parse_cache; + +ALTER TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache + CHANGE cache cache LONGBLOB NOT NULL; diff --git a/resources/sql/autopatches/20140519.dashboardinstall.sql b/resources/sql/autopatches/20140519.dashboardinstall.sql new file mode 100644 index 0000000000..71bd551e92 --- /dev/null +++ b/resources/sql/autopatches/20140519.dashboardinstall.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_install ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + installerPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + applicationClass VARCHAR(64) NOT NULL COLLATE utf8_bin, + dashboardPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY (objectPHID, applicationClass) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140520.authtemptoken.sql b/resources/sql/autopatches/20140520.authtemptoken.sql new file mode 100644 index 0000000000..2d7a83ae7e --- /dev/null +++ b/resources/sql/autopatches/20140520.authtemptoken.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_temporarytoken ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + tokenType VARCHAR(64) NOT NULL COLLATE utf8_bin, + tokenExpires INT UNSIGNED NOT NULL, + tokenCode VARCHAR(64) NOT NULL COLLATE utf8_bin, + + UNIQUE KEY `key_token` (objectPHID, tokenType, tokenCode), + KEY `key_expires` (tokenExpires) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140521.projectslug.1.create.sql b/resources/sql/autopatches/20140521.projectslug.1.create.sql new file mode 100644 index 0000000000..f42558142a --- /dev/null +++ b/resources/sql/autopatches/20140521.projectslug.1.create.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_project.project_slug ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + projectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + slug VARCHAR(128) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_slug` (slug), + KEY `key_projectPHID` (projectPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140521.projectslug.2.mig.php b/resources/sql/autopatches/20140521.projectslug.2.mig.php new file mode 100644 index 0000000000..e0ad4b5070 --- /dev/null +++ b/resources/sql/autopatches/20140521.projectslug.2.mig.php @@ -0,0 +1,36 @@ +getTableName(); +$conn_w = $project_table->establishConnection('w'); +$slug_table_name = id(new PhabricatorProjectSlug())->getTableName(); +$time = PhabricatorTime::getNow(); + +echo pht('Migrating projects to slugs...')."\n"; +foreach (new LiskMigrationIterator($project_table) as $project) { + $id = $project->getID(); + + echo pht('Migrating project %d...', $id)."\n"; + + $slug_text = PhabricatorSlug::normalizeProjectSlug($project->getName()); + $slug = id(new PhabricatorProjectSlug()) + ->loadOneWhere('slug = %s', $slug_text); + + if ($slug) { + echo pht('Already migrated %d... Continuing.', $id)."\n"; + continue; + } + + queryfx( + $conn_w, + 'INSERT INTO %T (projectPHID, slug, dateCreated, dateModified) '. + 'VALUES (%s, %s, %d, %d)', + $slug_table_name, + $project->getPHID(), + $slug_text, + $time, + $time); + echo pht('Migrated %d.', $id)."\n"; +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140522.projecticon.sql b/resources/sql/autopatches/20140522.projecticon.sql new file mode 100644 index 0000000000..66cf71ed72 --- /dev/null +++ b/resources/sql/autopatches/20140522.projecticon.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD COLUMN icon VARCHAR(32) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_project.project + SET icon = "fa-briefcase" WHERE icon = ""; diff --git a/resources/sql/autopatches/20140524.auth.mfa.cache.sql b/resources/sql/autopatches/20140524.auth.mfa.cache.sql new file mode 100644 index 0000000000..74d9d8304e --- /dev/null +++ b/resources/sql/autopatches/20140524.auth.mfa.cache.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD isEnrolledInMultiFactor BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20140525.hunkmodern.sql b/resources/sql/autopatches/20140525.hunkmodern.sql new file mode 100644 index 0000000000..dd865e4d4d --- /dev/null +++ b/resources/sql/autopatches/20140525.hunkmodern.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_hunk_modern ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + changesetID INT UNSIGNED NOT NULL, + oldOffset INT UNSIGNED NOT NULL, + oldLen INT UNSIGNED NOT NULL, + newOffset INT UNSIGNED NOT NULL, + newLen INT UNSIGNED NOT NULL, + dataType CHAR(4) NOT NULL COLLATE latin1_bin, + dataEncoding VARCHAR(16) COLLATE latin1_bin, + dataFormat CHAR(4) NOT NULL COLLATE latin1_bin, + data LONGBLOB NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + KEY `key_changeset` (changesetID), + KEY `key_created` (dateCreated) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140615.pholioedit.1.sql b/resources/sql/autopatches/20140615.pholioedit.1.sql new file mode 100644 index 0000000000..a3bcfe3e07 --- /dev/null +++ b/resources/sql/autopatches/20140615.pholioedit.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + ADD editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140615.pholioedit.2.sql b/resources/sql/autopatches/20140615.pholioedit.2.sql new file mode 100644 index 0000000000..42824467ba --- /dev/null +++ b/resources/sql/autopatches/20140615.pholioedit.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_pholio.pholio_mock + SET editPolicy = authorPHID WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20140617.daemon.explicit-argv.sql b/resources/sql/autopatches/20140617.daemon.explicit-argv.sql new file mode 100644 index 0000000000..8b3a8a35a7 --- /dev/null +++ b/resources/sql/autopatches/20140617.daemon.explicit-argv.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD COLUMN explicitArgv longtext CHARACTER SET utf8 + COLLATE utf8_bin NOT NULL AFTER argv; diff --git a/resources/sql/autopatches/20140617.daemonlog.sql b/resources/sql/autopatches/20140617.daemonlog.sql new file mode 100644 index 0000000000..5904af039c --- /dev/null +++ b/resources/sql/autopatches/20140617.daemonlog.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD KEY (dateCreated); diff --git a/resources/sql/autopatches/20140624.projcolor.1.sql b/resources/sql/autopatches/20140624.projcolor.1.sql new file mode 100644 index 0000000000..73c1f82d9e --- /dev/null +++ b/resources/sql/autopatches/20140624.projcolor.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD color VARCHAR(32) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140624.projcolor.2.sql b/resources/sql/autopatches/20140624.projcolor.2.sql new file mode 100644 index 0000000000..8ff9ffb1e4 --- /dev/null +++ b/resources/sql/autopatches/20140624.projcolor.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_project.project + SET color = 'blue' WHERE color = ''; diff --git a/resources/sql/autopatches/20140629.dasharchive.1.sql b/resources/sql/autopatches/20140629.dasharchive.1.sql new file mode 100644 index 0000000000..e6a10594aa --- /dev/null +++ b/resources/sql/autopatches/20140629.dasharchive.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard_panel + ADD isArchived BOOL NOT NULL DEFAULT 0 AFTER editPolicy; diff --git a/resources/sql/autopatches/20140629.legalsig.1.sql b/resources/sql/autopatches/20140629.legalsig.1.sql new file mode 100644 index 0000000000..5efd1164f4 --- /dev/null +++ b/resources/sql/autopatches/20140629.legalsig.1.sql @@ -0,0 +1,7 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD signerName VARCHAR(255) NOT NULL COLLATE utf8_general_ci + AFTER signerPHID; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD signerEmail VARCHAR(255) NOT NULL COLLATE utf8_general_ci + AFTER signerName; diff --git a/resources/sql/autopatches/20140629.legalsig.2.php b/resources/sql/autopatches/20140629.legalsig.2.php new file mode 100644 index 0000000000..6ded26b9e0 --- /dev/null +++ b/resources/sql/autopatches/20140629.legalsig.2.php @@ -0,0 +1,17 @@ +establishConnection('w'); +foreach (new LiskMigrationIterator($table) as $signature) { + echo pht("Updating Legalpad signature %d...\n", $signature->getID()); + + $data = $signature->getSignatureData(); + + queryfx( + $conn_w, + 'UPDATE %T SET signerName = %s, signerEmail = %s WHERE id = %d', + $table->getTableName(), + (string)idx($data, 'name'), + (string)idx($data, 'email'), + $signature->getID()); +} diff --git a/resources/sql/autopatches/20140701.legalexemption.1.sql b/resources/sql/autopatches/20140701.legalexemption.1.sql new file mode 100644 index 0000000000..45ad89d77f --- /dev/null +++ b/resources/sql/autopatches/20140701.legalexemption.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD isExemption BOOL NOT NULL DEFAULT 0 AFTER verified; diff --git a/resources/sql/autopatches/20140701.legalexemption.2.sql b/resources/sql/autopatches/20140701.legalexemption.2.sql new file mode 100644 index 0000000000..70e8b4cbe9 --- /dev/null +++ b/resources/sql/autopatches/20140701.legalexemption.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD exemptionPHID VARCHAR(64) COLLATE utf8_bin AFTER isExemption; diff --git a/resources/sql/autopatches/20140703.legalcorp.1.sql b/resources/sql/autopatches/20140703.legalcorp.1.sql new file mode 100644 index 0000000000..abc86c7768 --- /dev/null +++ b/resources/sql/autopatches/20140703.legalcorp.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + ADD signatureType VARCHAR(4) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140703.legalcorp.2.sql b/resources/sql/autopatches/20140703.legalcorp.2.sql new file mode 100644 index 0000000000..82fe9c8eac --- /dev/null +++ b/resources/sql/autopatches/20140703.legalcorp.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_legalpad.legalpad_document + SET signatureType = 'user' WHERE signatureType = ''; diff --git a/resources/sql/autopatches/20140703.legalcorp.3.sql b/resources/sql/autopatches/20140703.legalcorp.3.sql new file mode 100644 index 0000000000..be18b7f3ec --- /dev/null +++ b/resources/sql/autopatches/20140703.legalcorp.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD signatureType VARCHAR(4) NOT NULL COLLATE utf8_bin AFTER documentVersion; diff --git a/resources/sql/autopatches/20140703.legalcorp.4.sql b/resources/sql/autopatches/20140703.legalcorp.4.sql new file mode 100644 index 0000000000..c05f000ee6 --- /dev/null +++ b/resources/sql/autopatches/20140703.legalcorp.4.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_legalpad.legalpad_documentsignature + SET signatureType = 'user' WHERE signatureType = ''; diff --git a/resources/sql/autopatches/20140703.legalcorp.5.sql b/resources/sql/autopatches/20140703.legalcorp.5.sql new file mode 100644 index 0000000000..b1e9ae76f1 --- /dev/null +++ b/resources/sql/autopatches/20140703.legalcorp.5.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + CHANGE signerPHID signerPHID VARCHAR(64) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140704.harbormasterstep.1.sql b/resources/sql/autopatches/20140704.harbormasterstep.1.sql new file mode 100644 index 0000000000..318765a024 --- /dev/null +++ b/resources/sql/autopatches/20140704.harbormasterstep.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildstep + ADD name VARCHAR(255) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140704.harbormasterstep.2.sql b/resources/sql/autopatches/20140704.harbormasterstep.2.sql new file mode 100644 index 0000000000..517d29baac --- /dev/null +++ b/resources/sql/autopatches/20140704.harbormasterstep.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + ADD name VARCHAR(255) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140704.legalpreamble.1.sql b/resources/sql/autopatches/20140704.legalpreamble.1.sql new file mode 100644 index 0000000000..4ba1cde0e1 --- /dev/null +++ b/resources/sql/autopatches/20140704.legalpreamble.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + ADD preamble LONGTEXT NOT NULL COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140706.harbormasterdepend.1.php b/resources/sql/autopatches/20140706.harbormasterdepend.1.php new file mode 100644 index 0000000000..26bea1ad7f --- /dev/null +++ b/resources/sql/autopatches/20140706.harbormasterdepend.1.php @@ -0,0 +1,54 @@ +establishConnection('w'); +foreach (new LiskMigrationIterator($plan_table) as $plan) { + + echo pht( + "Migrating build plan %d: %s...\n", + $plan->getID(), + $plan->getName()); + + // Load all build steps in order using the step sequence. + $steps = queryfx_all( + $conn_w, + 'SELECT id FROM %T WHERE buildPlanPHID = %s ORDER BY sequence ASC;', + $step_table->getTableName(), + $plan->getPHID()); + + $previous_step = null; + foreach ($steps as $step) { + $id = $step['id']; + + $loaded_step = id(new HarbormasterBuildStep())->load($id); + + $depends_on = $loaded_step->getDetail('dependsOn'); + if ($depends_on !== null) { + // This plan already contains steps with depends_on set, so + // we skip since there's nothing to migrate. + break; + } + + if ($previous_step === null) { + $depends_on = array(); + } else { + $depends_on = array($previous_step->getPHID()); + } + + $loaded_step->setDetail('dependsOn', $depends_on); + queryfx( + $conn_w, + 'UPDATE %T SET details = %s WHERE id = %d', + $step_table->getTableName(), + json_encode($loaded_step->getDetails()), + $loaded_step->getID()); + + $previous_step = $loaded_step; + + echo pht( + " Migrated build step %d.\n", + $loaded_step->getID()); + } + +} diff --git a/resources/sql/autopatches/20140706.pedge.1.sql b/resources/sql/autopatches/20140706.pedge.1.sql new file mode 100644 index 0000000000..3dd049105c --- /dev/null +++ b/resources/sql/autopatches/20140706.pedge.1.sql @@ -0,0 +1,10 @@ +/* PhabricatorProjectObjectHasProjectEdgeType::EDGECONST = 41 */ +/* PhabricatorProjectProjectHasObjectEdgeType::EDGECONST = 42 */ + +INSERT IGNORE INTO {$NAMESPACE}_maniphest.edge (src, type, dst) + SELECT taskPHID, 41, projectPHID + FROM {$NAMESPACE}_maniphest.maniphest_taskproject; + +INSERT IGNORE INTO {$NAMESPACE}_project.edge (src, type, dst) + SELECT projectPHID, 42, taskPHID + FROM {$NAMESPACE}_maniphest.maniphest_taskproject; diff --git a/resources/sql/autopatches/20140711.pnames.1.sql b/resources/sql/autopatches/20140711.pnames.1.sql new file mode 100644 index 0000000000..9fce73a47e --- /dev/null +++ b/resources/sql/autopatches/20140711.pnames.1.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_project.project_datasourcetoken ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + projectID INT UNSIGNED NOT NULL, + token VARCHAR(128) NOT NULL COLLATE utf8_general_ci, + UNIQUE KEY (token, projectID), + KEY (projectID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/autopatches/20140711.pnames.2.php b/resources/sql/autopatches/20140711.pnames.2.php new file mode 100644 index 0000000000..16030b5853 --- /dev/null +++ b/resources/sql/autopatches/20140711.pnames.2.php @@ -0,0 +1,11 @@ +getName(); + echo pht("Updating project '%d'...", $name)."\n"; + $project->updateDatasourceTokens(); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140711.workerpriority.sql b/resources/sql/autopatches/20140711.workerpriority.sql new file mode 100644 index 0000000000..3fabc545c3 --- /dev/null +++ b/resources/sql/autopatches/20140711.workerpriority.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD COLUMN priority int unsigned NOT NULL; + +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD KEY (leaseOwner, priority, id); + +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD COLUMN priority int unsigned NOT NULL; + +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD KEY (leaseOwner, priority, id); diff --git a/resources/sql/autopatches/20140712.projcoluniq.sql b/resources/sql/autopatches/20140712.projcoluniq.sql new file mode 100644 index 0000000000..0b0030dd0a --- /dev/null +++ b/resources/sql/autopatches/20140712.projcoluniq.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + DROP KEY key_sequence; + +ALTER TABLE {$NAMESPACE}_project.project_column + ADD KEY key_sequence (projectPHID, sequence); diff --git a/resources/sql/autopatches/20140721.phortune.1.cart.sql b/resources/sql/autopatches/20140721.phortune.1.cart.sql new file mode 100644 index 0000000000..f1ddfd4d2e --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.1.cart.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_cart ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_account` (accountPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140721.phortune.2.purchase.sql b/resources/sql/autopatches/20140721.phortune.2.purchase.sql new file mode 100644 index 0000000000..b1f6de7ebd --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.2.purchase.sql @@ -0,0 +1,17 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_purchase ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + productPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + cartPHID VARCHAR(64) COLLATE utf8_bin, + basePriceInCents INT NOT NULL, + quantity INT UNSIGNED NOT NULL, + totalPriceInCents INT NOT NULL, + status VARCHAR(32) NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_cart` (cartPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140721.phortune.3.charge.sql b/resources/sql/autopatches/20140721.phortune.3.charge.sql new file mode 100644 index 0000000000..b75f05ff1a --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.3.charge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_charge ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + cartPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + paymentMethodPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + amountInCents INT NOT NULL, + status VARCHAR(32) NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_cart` (cartPHID), + KEY `key_account` (accountPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql b/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql new file mode 100644 index 0000000000..fc18eb78dc --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.4.cartstatus.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD status VARCHAR(32) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql b/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql new file mode 100644 index 0000000000..1232164f46 --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.5.cstatusdefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_phortune.phortune_cart + SET status = 'cart:ready' WHERE status = ''; diff --git a/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql b/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql new file mode 100644 index 0000000000..4152efb0d0 --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.6.onetimecharge.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD paymentProviderKey VARCHAR(128) NOT NULL COLLATE utf8_bin + AFTER cartPHID; diff --git a/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql b/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql new file mode 100644 index 0000000000..d843251bb0 --- /dev/null +++ b/resources/sql/autopatches/20140721.phortune.7.nullmethod.sql @@ -0,0 +1,4 @@ +/* Make this nullable to support one-time providers. */ + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + CHANGE paymentMethodPHID paymentMethodPHID VARCHAR(64) COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140722.appname.php b/resources/sql/autopatches/20140722.appname.php new file mode 100644 index 0000000000..dd8e929357 --- /dev/null +++ b/resources/sql/autopatches/20140722.appname.php @@ -0,0 +1,127 @@ +getValue(); +$new_config = array(); + +if ($old_config) { + foreach ($old_config as $application => $uninstalled) { + $new_config[idx($map, $application, $application)] = $uninstalled; + } + + $config + ->setIsDeleted(0) + ->setValue($new_config) + ->save(); +} + + +/* -( phabricator.application-settings )----------------------------------- */ + +$config_key = 'phabricator.application-settings'; +echo pht('Migrating `%s` config...', $config_key)."\n"; + +$config = PhabricatorConfigEntry::loadConfigEntry($config_key); +$old_config = $config->getValue(); +$new_config = array(); + +if ($old_config) { + foreach ($old_config as $application => $settings) { + $application = preg_replace('/^PHID-APPS-/', '', $application); + $new_config['PHID-APPS-'.idx($map, $application, $application)] = $settings; + } + + $config + ->setIsDeleted(0) + ->setValue($new_config) + ->save(); +} diff --git a/resources/sql/autopatches/20140722.audit.1.xactions.sql b/resources/sql/autopatches/20140722.audit.1.xactions.sql new file mode 100644 index 0000000000..8c089e5ec7 --- /dev/null +++ b/resources/sql/autopatches/20140722.audit.1.xactions.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_audit.audit_transaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140722.audit.2.comments.sql b/resources/sql/autopatches/20140722.audit.2.comments.sql new file mode 100644 index 0000000000..75013ae567 --- /dev/null +++ b/resources/sql/autopatches/20140722.audit.2.comments.sql @@ -0,0 +1,29 @@ +CREATE TABLE {$NAMESPACE}_audit.audit_transaction_comment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content longtext COLLATE utf8_bin NOT NULL, + contentSource longtext COLLATE utf8_bin NOT NULL, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + commitPHID VARCHAR(64) COLLATE utf8_bin, + pathID INT UNSIGNED, + isNewFile BOOL NOT NULL, + lineNumber INT UNSIGNED NOT NULL, + lineLength INT UNSIGNED NOT NULL, + fixedState VARCHAR(12) COLLATE utf8_bin, + hasReplies BOOL NOT NULL, + replyToCommentPHID VARCHAR(64) COLLATE utf8_bin, + legacyCommentID INT UNSIGNED, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + KEY `key_path` (pathID), + KEY `key_draft` (authorPHID, transactionPHID), + KEY `key_commit` (commitPHID), + KEY `key_legacy` (legacyCommentID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140722.audit.3.miginlines.php b/resources/sql/autopatches/20140722.audit.3.miginlines.php new file mode 100644 index 0000000000..d816b534eb --- /dev/null +++ b/resources/sql/autopatches/20140722.audit.3.miginlines.php @@ -0,0 +1,76 @@ +establishConnection('w'); +$conn_w->openTransaction(); + +$src_table = 'audit_inlinecomment'; +$dst_table = 'audit_transaction_comment'; + +echo pht('Migrating Audit inline comments to new format...')."\n"; + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +$rows = new LiskRawMigrationIterator($conn_w, $src_table); +foreach ($rows as $row) { + $id = $row['id']; + + echo pht('Migrating inline #%d...', $id); + + if ($row['auditCommentID']) { + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + PhabricatorRepositoryCommitPHIDType::TYPECONST); + } else { + $xaction_phid = null; + } + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT, + PhabricatorRepositoryCommitPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T + (id, phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified, commitPHID, pathID, + isNewFile, lineNumber, lineLength, hasReplies, legacyCommentID) + VALUES (%d, %s, %ns, %s, %s, %s, + %d, %s, %s, %d, + %d, %d, %s, %nd, + %d, %d, %d, %d, %nd)', + $dst_table, + + // id, phid, transactionPHID, authorPHID, viewPolicy, editPolicy + $row['id'], + $comment_phid, + $xaction_phid, + $row['authorPHID'], + 'public', + $row['authorPHID'], + + // commentVersion, content, contentSource, isDeleted + 1, + $row['content'], + $content_source, + 0, + + // dateCreated, dateModified, commitPHID, pathID + $row['dateCreated'], + $row['dateModified'], + $row['commitPHID'], + $row['pathID'], + + // isNewFile, lineNumber, lineLength, hasReplies, legacyCommentID + $row['isNewFile'], + $row['lineNumber'], + $row['lineLength'], + 0, + $row['auditCommentID']); + +} + +$conn_w->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140722.audit.4.migtext.php b/resources/sql/autopatches/20140722.audit.4.migtext.php new file mode 100644 index 0000000000..c2a775058b --- /dev/null +++ b/resources/sql/autopatches/20140722.audit.4.migtext.php @@ -0,0 +1,60 @@ +establishConnection('w'); +$rows = new LiskRawMigrationIterator($conn_w, 'audit_comment'); + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +echo pht('Migrating Audit comment text to modern storage...')."\n"; +foreach ($rows as $row) { + $id = $row['id']; + echo pht('Migrating Audit comment %d...', $id)."\n"; + if (!strlen($row['content'])) { + echo pht('Comment has no text, continuing.')."\n"; + continue; + } + + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + PhabricatorRepositoryCommitPHIDType::TYPECONST); + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT, + PhabricatorRepositoryCommitPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T + (phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified, commitPHID, pathID, + legacyCommentID) + VALUES (%s, %s, %s, %s, %s, + %d, %s, %s, %d, + %d, %d, %s, %nd, + %d)', + 'audit_transaction_comment', + + // phid, transactionPHID, authorPHID, viewPolicy, editPolicy + $comment_phid, + $xaction_phid, + $row['actorPHID'], + 'public', + $row['actorPHID'], + + // commentVersion, content, contentSource, isDeleted + 1, + $row['content'], + $content_source, + 0, + + // dateCreated, dateModified, commitPHID, pathID, legacyCommentID + $row['dateCreated'], + $row['dateModified'], + $row['targetPHID'], + null, + $row['id']); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140722.renameauth.php b/resources/sql/autopatches/20140722.renameauth.php new file mode 100644 index 0000000000..225031d2f1 --- /dev/null +++ b/resources/sql/autopatches/20140722.renameauth.php @@ -0,0 +1,34 @@ + 'PhabricatorAmazonAuthProvider', + 'PhabricatorAuthProviderOAuthAsana' => 'PhabricatorAsanaAuthProvider', + 'PhabricatorAuthProviderOAuth1Bitbucket' + => 'PhabricatorBitbucketAuthProvider', + 'PhabricatorAuthProviderOAuthDisqus' => 'PhabricatorDisqusAuthProvider', + 'PhabricatorAuthProviderOAuthFacebook' => 'PhabricatorFacebookAuthProvider', + 'PhabricatorAuthProviderOAuthGitHub' => 'PhabricatorGitHubAuthProvider', + 'PhabricatorAuthProviderOAuthGoogle' => 'PhabricatorGoogleAuthProvider', + 'PhabricatorAuthProviderOAuth1JIRA' => 'PhabricatorJIRAAuthProvider', + 'PhabricatorAuthProviderLDAP' => 'PhabricatorLDAPAuthProvider', + 'PhabricatorAuthProviderPassword' => 'PhabricatorPasswordAuthProvider', + 'PhabricatorAuthProviderPersona' => 'PhabricatorPersonaAuthProvider', + 'PhabricatorAuthProviderOAuthTwitch' => 'PhabricatorTwitchAuthProvider', + 'PhabricatorAuthProviderOAuth1Twitter' => 'PhabricatorTwitterAuthProvider', + 'PhabricatorAuthProviderOAuthWordPress' => 'PhabricatorWordPressAuthProvider', +); + +echo pht('Migrating auth providers...')."\n"; +$table = new PhabricatorAuthProviderConfig(); +$conn_w = $table->establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $provider) { + $provider_class = $provider->getProviderClass(); + + queryfx( + $conn_w, + 'UPDATE %T SET providerClass = %s WHERE id = %d', + $provider->getTableName(), + idx($map, $provider_class, $provider_class), + $provider->getID()); +} diff --git a/resources/sql/autopatches/20140723.apprenamexaction.sql b/resources/sql/autopatches/20140723.apprenamexaction.sql new file mode 100644 index 0000000000..e7939ba617 --- /dev/null +++ b/resources/sql/autopatches/20140723.apprenamexaction.sql @@ -0,0 +1,13 @@ +UPDATE {$NAMESPACE}_differential.differential_transaction + SET authorPHID = 'PHID-APPS-PhabricatorHeraldApplication' + WHERE authorPHID = 'PHID-APPS-PhabricatorApplicationHerald'; +UPDATE {$NAMESPACE}_maniphest.maniphest_transaction + SET authorPHID = 'PHID-APPS-PhabricatorHeraldApplication' + WHERE authorPHID = 'PHID-APPS-PhabricatorApplicationHerald'; +UPDATE {$NAMESPACE}_pholio.pholio_transaction + SET authorPHID = 'PHID-APPS-PhabricatorHeraldApplication' + WHERE authorPHID = 'PHID-APPS-PhabricatorApplicationHerald'; + +UPDATE {$NAMESPACE}_differential.differential_transaction + SET authorPHID = 'PHID-APPS-PhabricatorHarbormasterApplication' + WHERE authorPHID = 'PHID-APPS-PhabricatorApplicationHarbormaster'; diff --git a/resources/sql/autopatches/20140725.audit.1.migxactions.php b/resources/sql/autopatches/20140725.audit.1.migxactions.php new file mode 100644 index 0000000000..4eb0897aeb --- /dev/null +++ b/resources/sql/autopatches/20140725.audit.1.migxactions.php @@ -0,0 +1,149 @@ +establishConnection('w'); +$rows = new LiskRawMigrationIterator($conn_w, 'audit_comment'); + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +echo pht('Migrating Audit comments to modern storage...')."\n"; +foreach ($rows as $row) { + $id = $row['id']; + echo pht('Migrating comment %d...', $id)."\n"; + + $comments = queryfx_all( + $conn_w, + 'SELECT * FROM %T WHERE legacyCommentID = %d', + 'audit_transaction_comment', + $id); + + $main_comments = array(); + $inline_comments = array(); + + foreach ($comments as $comment) { + if ($comment['pathID']) { + $inline_comments[] = $comment; + } else { + $main_comments[] = $comment; + } + } + + $metadata = json_decode($row['metadata'], true); + if (!is_array($metadata)) { + $metadata = array(); + } + + $xactions = array(); + + // Build the main action transaction. + switch ($row['action']) { + case PhabricatorAuditActionConstants::ADD_AUDITORS: + $phids = idx($metadata, 'added-auditors', array()); + $xactions[] = array( + 'type' => $row['action'], + 'old' => null, + 'new' => array_fuse($phids), + ); + break; + case PhabricatorAuditActionConstants::ADD_CCS: + $phids = idx($metadata, 'added-ccs', array()); + $xactions[] = array( + 'type' => $row['action'], + 'old' => null, + 'new' => array_fuse($phids), + ); + break; + case PhabricatorAuditActionConstants::COMMENT: + case PhabricatorAuditActionConstants::INLINE: + // These actions will have their transactions created by other rules. + break; + default: + // Otherwise, this is an accept/concern/etc action. + $xactions[] = array( + 'type' => PhabricatorAuditActionConstants::ACTION, + 'old' => null, + 'new' => $row['action'], + ); + break; + } + + + // Build the main comment transaction. + foreach ($main_comments as $main) { + $xactions[] = array( + 'type' => PhabricatorTransactions::TYPE_COMMENT, + 'old' => null, + 'new' => null, + 'phid' => $main['transactionPHID'], + 'comment' => $main, + ); + } + + // Build inline comment transactions. + foreach ($inline_comments as $inline) { + $xactions[] = array( + 'type' => PhabricatorAuditActionConstants::INLINE, + 'old' => null, + 'new' => null, + 'phid' => $inline['transactionPHID'], + 'comment' => $inline, + ); + } + + foreach ($xactions as $xaction) { + // Generate a new PHID, if we don't already have one from the comment + // table. We pregenerated into the comment table to make this a little + // easier, so we only need to write to one table. + $xaction_phid = idx($xaction, 'phid'); + if (!$xaction_phid) { + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + PhabricatorRepositoryCommitPHIDType::TYPECONST); + } + unset($xaction['phid']); + + $comment_phid = null; + $comment_version = 0; + if (idx($xaction, 'comment')) { + $comment_phid = $xaction['comment']['phid']; + $comment_version = 1; + } + + $old = idx($xaction, 'old'); + $new = idx($xaction, 'new'); + $meta = idx($xaction, 'meta', array()); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %ns, %d, %s, %ns, %ns, %s, %s, %d, %d)', + 'audit_transaction', + + // PHID, authorPHID, objectPHID + $xaction_phid, + $row['actorPHID'], + $row['targetPHID'], + + // viewPolicy, editPolicy, commentPHID, commentVersion + 'public', + $row['actorPHID'], + $comment_phid, + $comment_version, + + // transactionType, oldValue, newValue, contentSource, metadata + $xaction['type'], + json_encode($old), + json_encode($new), + $content_source, + json_encode($meta), + + // dates + $row['dateCreated'], + $row['dateModified']); + } + +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140731.audit.1.subscribers.php b/resources/sql/autopatches/20140731.audit.1.subscribers.php new file mode 100644 index 0000000000..b452275295 --- /dev/null +++ b/resources/sql/autopatches/20140731.audit.1.subscribers.php @@ -0,0 +1,30 @@ +establishConnection('w'); + +echo pht('Migrating Audit subscribers to subscriptions...')."\n"; +foreach (new LiskMigrationIterator($table) as $request) { + $id = $request->getID(); + + echo pht("Migrating audit %d...\n", $id); + + if ($request->getAuditStatus() != 'cc') { + // This isn't a "subscriber", so skip it. + continue; + } + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T (src, type, dst) VALUES (%s, %d, %s)', + PhabricatorEdgeConfig::TABLE_NAME_EDGE, + $request->getCommitPHID(), + PhabricatorObjectHasSubscriberEdgeType::EDGECONST, + $request->getAuditorPHID()); + + + // Wipe the row. + $request->delete(); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140731.cancdn.php b/resources/sql/autopatches/20140731.cancdn.php new file mode 100644 index 0000000000..f4090b092c --- /dev/null +++ b/resources/sql/autopatches/20140731.cancdn.php @@ -0,0 +1,20 @@ +establishConnection('w'); +foreach (new LiskMigrationIterator($table) as $file) { + $id = $file->getID(); + echo pht('Updating flags for file %d...', $id)."\n"; + $meta = $file->getMetadata(); + if (!idx($meta, 'canCDN')) { + + $meta['canCDN'] = true; + + queryfx( + $conn_w, + 'UPDATE %T SET metadata = %s WHERE id = %d', + $table->getTableName(), + json_encode($meta), + $id); + } +} diff --git a/resources/sql/autopatches/20140731.harbormasterstepdesc.sql b/resources/sql/autopatches/20140731.harbormasterstepdesc.sql new file mode 100644 index 0000000000..8824727afb --- /dev/null +++ b/resources/sql/autopatches/20140731.harbormasterstepdesc.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildstep + ADD description LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140805.boardcol.1.sql b/resources/sql/autopatches/20140805.boardcol.1.sql new file mode 100644 index 0000000000..e8099e50e5 --- /dev/null +++ b/resources/sql/autopatches/20140805.boardcol.1.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_project.project_columnposition ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + boardPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + columnPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + sequence INT UNSIGNED NOT NULL, + UNIQUE KEY (boardPHID, columnPHID, objectPHID), + KEY (objectPHID, boardPHID), + KEY (boardPHID, columnPHID, sequence) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140805.boardcol.2.php b/resources/sql/autopatches/20140805.boardcol.2.php new file mode 100644 index 0000000000..40d6c46ec2 --- /dev/null +++ b/resources/sql/autopatches/20140805.boardcol.2.php @@ -0,0 +1,53 @@ +establishConnection('w'); + +$rows = queryfx_all( + $conn_w, + 'SELECT src, dst FROM %T WHERE type = %d', + PhabricatorEdgeConfig::TABLE_NAME_EDGE, + $type_has_object); + +$cols = array(); +foreach ($rows as $row) { + $cols[$row['src']][] = $row['dst']; +} + +$sql = array(); +foreach ($cols as $col_phid => $obj_phids) { + echo pht("Migrating column '%s'...", $col_phid)."\n"; + $column = id(new PhabricatorProjectColumn())->loadOneWhere( + 'phid = %s', + $col_phid); + if (!$column) { + echo pht("Column '%s' does not exist.", $col_phid)."\n"; + continue; + } + + $sequence = 0; + foreach ($obj_phids as $obj_phid) { + $sql[] = qsprintf( + $conn_w, + '(%s, %s, %s, %d)', + $column->getProjectPHID(), + $column->getPHID(), + $obj_phid, + $sequence++); + } +} + +echo pht('Inserting rows...')."\n"; +foreach (PhabricatorLiskDAO::chunkSQL($sql) as $chunk) { + queryfx( + $conn_w, + 'INSERT INTO %T (boardPHID, columnPHID, objectPHID, sequence) + VALUES %LQ', + id(new PhabricatorProjectColumnPosition())->getTableName(), + $chunk); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140807.harbormastertargettime.sql b/resources/sql/autopatches/20140807.harbormastertargettime.sql new file mode 100644 index 0000000000..88b8c175f9 --- /dev/null +++ b/resources/sql/autopatches/20140807.harbormastertargettime.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + ADD dateStarted INT UNSIGNED NULL; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + ADD dateCompleted INT UNSIGNED NULL; diff --git a/resources/sql/autopatches/20140808.boardprop.1.sql b/resources/sql/autopatches/20140808.boardprop.1.sql new file mode 100644 index 0000000000..9325c148a4 --- /dev/null +++ b/resources/sql/autopatches/20140808.boardprop.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD properties LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140808.boardprop.2.sql b/resources/sql/autopatches/20140808.boardprop.2.sql new file mode 100644 index 0000000000..d7716898dd --- /dev/null +++ b/resources/sql/autopatches/20140808.boardprop.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_project.project_column + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20140808.boardprop.3.php b/resources/sql/autopatches/20140808.boardprop.3.php new file mode 100644 index 0000000000..947ce85f60 --- /dev/null +++ b/resources/sql/autopatches/20140808.boardprop.3.php @@ -0,0 +1,24 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $column) { + $id = $column->getID(); + + echo pht('Adjusting column %d...', $id)."\n"; + if ($column->getSequence() == 0) { + + $properties = $column->getProperties(); + $properties['isDefault'] = true; + + queryfx( + $conn_w, + 'UPDATE %T SET properties = %s WHERE id = %d', + $table->getTableName(), + json_encode($properties), + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140811.blob.1.sql b/resources/sql/autopatches/20140811.blob.1.sql new file mode 100644 index 0000000000..059adc1df4 --- /dev/null +++ b/resources/sql/autopatches/20140811.blob.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + CHANGE refNameRaw refNameRaw LONGBLOB NOT NULL; diff --git a/resources/sql/autopatches/20140811.blob.2.sql b/resources/sql/autopatches/20140811.blob.2.sql new file mode 100644 index 0000000000..f30d9d98c6 --- /dev/null +++ b/resources/sql/autopatches/20140811.blob.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + CHANGE refNameRaw refNameRaw LONGBLOB; diff --git a/resources/sql/autopatches/20140812.projkey.1.sql b/resources/sql/autopatches/20140812.projkey.1.sql new file mode 100644 index 0000000000..c1726843ad --- /dev/null +++ b/resources/sql/autopatches/20140812.projkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD KEY `key_icon` (icon); diff --git a/resources/sql/autopatches/20140812.projkey.2.sql b/resources/sql/autopatches/20140812.projkey.2.sql new file mode 100644 index 0000000000..c48a54d4d8 --- /dev/null +++ b/resources/sql/autopatches/20140812.projkey.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD KEY `key_color` (color); diff --git a/resources/sql/autopatches/20140814.passphrasecredentialconduit.sql b/resources/sql/autopatches/20140814.passphrasecredentialconduit.sql new file mode 100644 index 0000000000..6dda0aaf6a --- /dev/null +++ b/resources/sql/autopatches/20140814.passphrasecredentialconduit.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_passphrase.passphrase_credential + ADD COLUMN allowConduit BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20140815.cancdncase.php b/resources/sql/autopatches/20140815.cancdncase.php new file mode 100644 index 0000000000..0e9cafaabd --- /dev/null +++ b/resources/sql/autopatches/20140815.cancdncase.php @@ -0,0 +1,27 @@ +establishConnection('w'); +foreach (new LiskMigrationIterator($table) as $file) { + $id = $file->getID(); + echo pht( + "Updating capitalization of %s property for file %d...\n", + 'canCDN', + $id); + $meta = $file->getMetadata(); + + if (isset($meta['cancdn'])) { + $meta['canCDN'] = $meta['cancdn']; + unset($meta['cancdn']); + + queryfx( + $conn_w, + 'UPDATE %T SET metadata = %s WHERE id = %d', + $table->getTableName(), + json_encode($meta), + $id); + } +} diff --git a/resources/sql/autopatches/20140818.harbormasterindex.1.sql b/resources/sql/autopatches/20140818.harbormasterindex.1.sql new file mode 100644 index 0000000000..4c72645d45 --- /dev/null +++ b/resources/sql/autopatches/20140818.harbormasterindex.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog + ADD KEY `key_buildtarget` (buildTargetPHID); diff --git a/resources/sql/autopatches/20140821.harbormasterbuildgen.1.sql b/resources/sql/autopatches/20140821.harbormasterbuildgen.1.sql new file mode 100644 index 0000000000..a687146f60 --- /dev/null +++ b/resources/sql/autopatches/20140821.harbormasterbuildgen.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build + ADD COLUMN `buildGeneration` INT UNSIGNED NOT NULL DEFAULT 0; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget + ADD COLUMN `buildGeneration` INT UNSIGNED NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20140822.daemonenvhash.sql b/resources/sql/autopatches/20140822.daemonenvhash.sql new file mode 100644 index 0000000000..fb95ecec35 --- /dev/null +++ b/resources/sql/autopatches/20140822.daemonenvhash.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD COLUMN `envHash` CHAR(40) NOT NULL DEFAULT '' AFTER `dateModified`; diff --git a/resources/sql/autopatches/20140902.almanacdevice.1.sql b/resources/sql/autopatches/20140902.almanacdevice.1.sql new file mode 100644 index 0000000000..712b2de7ff --- /dev/null +++ b/resources/sql/autopatches/20140902.almanacdevice.1.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_device ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(255) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_bin; + +CREATE TABLE {$NAMESPACE}_almanac.almanac_deviceproperty ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + devicePHID VARBINARY(64) NOT NULL, + `key` VARCHAR(128) NOT NULL COLLATE utf8_bin, + value LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_device` (devicePHID, `key`) +) ENGINE=InnoDB, COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20140904.macroattach.php b/resources/sql/autopatches/20140904.macroattach.php new file mode 100644 index 0000000000..4c4f4e8494 --- /dev/null +++ b/resources/sql/autopatches/20140904.macroattach.php @@ -0,0 +1,26 @@ +getName(); + + echo pht("Linking macro '%s'...", $name)."\n"; + + $editor = new PhabricatorEdgeEditor(); + + $phids[] = $macro->getFilePHID(); + $phids[] = $macro->getAudioPHID(); + $phids = array_filter($phids); + + if ($phids) { + foreach ($phids as $phid) { + $editor->addEdge( + $macro->getPHID(), + 25, + $phid); + } + $editor->save(); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140911.fund.1.initiative.sql b/resources/sql/autopatches/20140911.fund.1.initiative.sql new file mode 100644 index 0000000000..8e170dbcb0 --- /dev/null +++ b/resources/sql/autopatches/20140911.fund.1.initiative.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiative ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + ownerPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + description LONGTEXT NOT NULL, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + status VARCHAR(32) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_status` (status), + KEY `key_owner` (ownerPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140911.fund.2.xaction.sql b/resources/sql/autopatches/20140911.fund.2.xaction.sql new file mode 100644 index 0000000000..bfa3f9c3e2 --- /dev/null +++ b/resources/sql/autopatches/20140911.fund.2.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiativetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140911.fund.3.edge.sql b/resources/sql/autopatches/20140911.fund.3.edge.sql new file mode 100644 index 0000000000..0dc5821762 --- /dev/null +++ b/resources/sql/autopatches/20140911.fund.3.edge.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_fund.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_fund.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140911.fund.4.backer.sql b/resources/sql/autopatches/20140911.fund.4.backer.sql new file mode 100644 index 0000000000..1dd6815192 --- /dev/null +++ b/resources/sql/autopatches/20140911.fund.4.backer.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_backer ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + initiativePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + backerPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + status VARCHAR(32) NOT NULL COLLATE utf8_bin, + amountInCents INT UNSIGNED NOT NULL, + properties LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_initiative` (initiativePHID), + KEY `key_backer` (backerPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140911.fund.5.backxaction.sql b/resources/sql/autopatches/20140911.fund.5.backxaction.sql new file mode 100644 index 0000000000..e9b5acbc0c --- /dev/null +++ b/resources/sql/autopatches/20140911.fund.5.backxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_backertransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140914.betaproto.php b/resources/sql/autopatches/20140914.betaproto.php new file mode 100644 index 0000000000..849c5acb3b --- /dev/null +++ b/resources/sql/autopatches/20140914.betaproto.php @@ -0,0 +1,24 @@ +setIsDeleted(0) + ->setValue($old) + ->save(); + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20140917.project.canlock.sql b/resources/sql/autopatches/20140917.project.canlock.sql new file mode 100644 index 0000000000..e00b425d5b --- /dev/null +++ b/resources/sql/autopatches/20140917.project.canlock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD isMembershipLocked TINYINT(1) NOT NULL DEFAULT 0 AFTER joinPolicy; diff --git a/resources/sql/autopatches/20140918.schema.1.dropaudit.sql b/resources/sql/autopatches/20140918.schema.1.dropaudit.sql new file mode 100644 index 0000000000..ee01e84883 --- /dev/null +++ b/resources/sql/autopatches/20140918.schema.1.dropaudit.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_audit.audit_comment; diff --git a/resources/sql/autopatches/20140918.schema.2.dropauditinline.sql b/resources/sql/autopatches/20140918.schema.2.dropauditinline.sql new file mode 100644 index 0000000000..692261cb3b --- /dev/null +++ b/resources/sql/autopatches/20140918.schema.2.dropauditinline.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_audit.audit_inlinecomment; diff --git a/resources/sql/autopatches/20140918.schema.3.wipecache.sql b/resources/sql/autopatches/20140918.schema.3.wipecache.sql new file mode 100644 index 0000000000..636f2ef3ea --- /dev/null +++ b/resources/sql/autopatches/20140918.schema.3.wipecache.sql @@ -0,0 +1 @@ +TRUNCATE TABLE {$NAMESPACE}_cache.cache_markupcache; diff --git a/resources/sql/autopatches/20140918.schema.4.cachetype.sql b/resources/sql/autopatches/20140918.schema.4.cachetype.sql new file mode 100644 index 0000000000..1ce047798a --- /dev/null +++ b/resources/sql/autopatches/20140918.schema.4.cachetype.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_cache.cache_markupcache + CHANGE cacheData cacheData LONGBLOB NOT NULL; diff --git a/resources/sql/autopatches/20140918.schema.5.slowvote.sql b/resources/sql/autopatches/20140918.schema.5.slowvote.sql new file mode 100644 index 0000000000..1830552c73 --- /dev/null +++ b/resources/sql/autopatches/20140918.schema.5.slowvote.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_slowvote.slowvote_comment; diff --git a/resources/sql/autopatches/20140919.schema.01.calstatus.sql b/resources/sql/autopatches/20140919.schema.01.calstatus.sql new file mode 100644 index 0000000000..0eb1907404 --- /dev/null +++ b/resources/sql/autopatches/20140919.schema.01.calstatus.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + CHANGE status status INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20140919.schema.02.calname.sql b/resources/sql/autopatches/20140919.schema.02.calname.sql new file mode 100644 index 0000000000..49b5d6aee2 --- /dev/null +++ b/resources/sql/autopatches/20140919.schema.02.calname.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_holiday + CHANGE name name VARCHAR(64) NOT NULL COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20140919.schema.03.dropaux.sql b/resources/sql/autopatches/20140919.schema.03.dropaux.sql new file mode 100644 index 0000000000..c87dbbdeca --- /dev/null +++ b/resources/sql/autopatches/20140919.schema.03.dropaux.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_maniphest.maniphest_taskauxiliarystorage; diff --git a/resources/sql/autopatches/20140919.schema.04.droptaskproj.sql b/resources/sql/autopatches/20140919.schema.04.droptaskproj.sql new file mode 100644 index 0000000000..1415997b7d --- /dev/null +++ b/resources/sql/autopatches/20140919.schema.04.droptaskproj.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_maniphest.maniphest_taskproject; diff --git a/resources/sql/autopatches/20140926.schema.01.droprelev.sql b/resources/sql/autopatches/20140926.schema.01.droprelev.sql new file mode 100644 index 0000000000..7542e2b209 --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.01.droprelev.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_releeph.releeph_event; diff --git a/resources/sql/autopatches/20140926.schema.02.droprelreqev.sql b/resources/sql/autopatches/20140926.schema.02.droprelreqev.sql new file mode 100644 index 0000000000..de0218ef2d --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.02.droprelreqev.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_releeph.releeph_requestevent; diff --git a/resources/sql/autopatches/20140926.schema.03.dropldapinfo.sql b/resources/sql/autopatches/20140926.schema.03.dropldapinfo.sql new file mode 100644 index 0000000000..11c732d57b --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.03.dropldapinfo.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_user.user_ldapinfo; diff --git a/resources/sql/autopatches/20140926.schema.04.dropoauthinfo.sql b/resources/sql/autopatches/20140926.schema.04.dropoauthinfo.sql new file mode 100644 index 0000000000..fb70d81d00 --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.04.dropoauthinfo.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_user.user_oauthinfo; diff --git a/resources/sql/autopatches/20140926.schema.05.dropprojaffil.sql b/resources/sql/autopatches/20140926.schema.05.dropprojaffil.sql new file mode 100644 index 0000000000..fca4b35db3 --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.05.dropprojaffil.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_project.project_affiliation; diff --git a/resources/sql/autopatches/20140926.schema.06.dropsubproject.sql b/resources/sql/autopatches/20140926.schema.06.dropsubproject.sql new file mode 100644 index 0000000000..9049f82329 --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.06.dropsubproject.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_project.project_subproject; diff --git a/resources/sql/autopatches/20140926.schema.07.droppondcom.sql b/resources/sql/autopatches/20140926.schema.07.droppondcom.sql new file mode 100644 index 0000000000..d040e2b5bd --- /dev/null +++ b/resources/sql/autopatches/20140926.schema.07.droppondcom.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_ponder.ponder_comment; diff --git a/resources/sql/autopatches/20140927.schema.01.dropsearchq.sql b/resources/sql/autopatches/20140927.schema.01.dropsearchq.sql new file mode 100644 index 0000000000..69d40b5e04 --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.01.dropsearchq.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_search.search_query; diff --git a/resources/sql/autopatches/20140927.schema.02.pholio1.sql b/resources/sql/autopatches/20140927.schema.02.pholio1.sql new file mode 100644 index 0000000000..65703f3fff --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.02.pholio1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_transaction_comment + DROP KEY `key_draft`; diff --git a/resources/sql/autopatches/20140927.schema.03.pholio2.sql b/resources/sql/autopatches/20140927.schema.03.pholio2.sql new file mode 100644 index 0000000000..eaa728d29f --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.03.pholio2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_transaction_comment + ADD UNIQUE KEY `key_draft` (authorPHID, imageID, transactionPHID); diff --git a/resources/sql/autopatches/20140927.schema.04.pholio3.sql b/resources/sql/autopatches/20140927.schema.04.pholio3.sql new file mode 100644 index 0000000000..03ec4b5bbe --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.04.pholio3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_transaction_comment + DROP COLUMN mockID; diff --git a/resources/sql/autopatches/20140927.schema.05.phragment1.sql b/resources/sql/autopatches/20140927.schema.05.phragment1.sql new file mode 100644 index 0000000000..505414d0e2 --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.05.phragment1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phragment.phragment_snapshot + DROP COLUMN description; diff --git a/resources/sql/autopatches/20140927.schema.06.releeph1.sql b/resources/sql/autopatches/20140927.schema.06.releeph1.sql new file mode 100644 index 0000000000..e82be76165 --- /dev/null +++ b/resources/sql/autopatches/20140927.schema.06.releeph1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_request + DROP COLUMN summary; diff --git a/resources/sql/autopatches/20141001.schema.01.version.sql b/resources/sql/autopatches/20141001.schema.01.version.sql new file mode 100644 index 0000000000..2eef5f1f4d --- /dev/null +++ b/resources/sql/autopatches/20141001.schema.01.version.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_meta_data.schema_version; diff --git a/resources/sql/autopatches/20141001.schema.02.taskmail.sql b/resources/sql/autopatches/20141001.schema.02.taskmail.sql new file mode 100644 index 0000000000..84c970ac1c --- /dev/null +++ b/resources/sql/autopatches/20141001.schema.02.taskmail.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_maniphest.maniphest_task + SET mailKey = SUBSTRING(mailKey, 1, 20) WHERE LENGTH(mailKey) > 20; diff --git a/resources/sql/autopatches/20141002.schema.01.liskcounter.sql b/resources/sql/autopatches/20141002.schema.01.liskcounter.sql new file mode 100644 index 0000000000..bf498f0a9d --- /dev/null +++ b/resources/sql/autopatches/20141002.schema.01.liskcounter.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_harbormaster.lisk_counter; diff --git a/resources/sql/autopatches/20141002.schema.02.draftnull.sql b/resources/sql/autopatches/20141002.schema.02.draftnull.sql new file mode 100644 index 0000000000..afd387d09d --- /dev/null +++ b/resources/sql/autopatches/20141002.schema.02.draftnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_draft.draft + MODIFY metadata LONGTEXT NOT NULL; diff --git a/resources/sql/autopatches/20141004.currency.01.sql b/resources/sql/autopatches/20141004.currency.01.sql new file mode 100644 index 0000000000..f91672fdad --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.01.sql @@ -0,0 +1,4 @@ +TRUNCATE TABLE {$NAMESPACE}_fund.fund_backer; + +ALTER TABLE {$NAMESPACE}_fund.fund_backer + CHANGE amountInCents amountAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141004.currency.02.sql b/resources/sql/autopatches/20141004.currency.02.sql new file mode 100644 index 0000000000..90ba461dce --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.02.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_account + DROP balanceInCents; diff --git a/resources/sql/autopatches/20141004.currency.03.sql b/resources/sql/autopatches/20141004.currency.03.sql new file mode 100644 index 0000000000..907e2a12f9 --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.03.sql @@ -0,0 +1,4 @@ +TRUNCATE {$NAMESPACE}_phortune.phortune_charge; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + CHANGE amountInCents amountAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141004.currency.04.sql b/resources/sql/autopatches/20141004.currency.04.sql new file mode 100644 index 0000000000..4db75c0c39 --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.04.sql @@ -0,0 +1,13 @@ +TRUNCATE {$NAMESPACE}_phortune.phortune_product; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP status; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP billingIntervalInMonths; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP trialPeriodInDays; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + CHANGE priceInCents priceAsCurrency VARCHAR(64) NOT NULL collate utf8_bin; diff --git a/resources/sql/autopatches/20141004.currency.05.sql b/resources/sql/autopatches/20141004.currency.05.sql new file mode 100644 index 0000000000..71f0338b3a --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.05.sql @@ -0,0 +1,8 @@ +TRUNCATE {$NAMESPACE}_phortune.phortune_purchase; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_purchase + DROP totalPriceInCents; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_purchase + CHANGE basePriceInCents basePriceAsCurrency VARCHAR(64) + NOT NULL collate utf8_bin; diff --git a/resources/sql/autopatches/20141004.currency.06.sql b/resources/sql/autopatches/20141004.currency.06.sql new file mode 100644 index 0000000000..f214e38589 --- /dev/null +++ b/resources/sql/autopatches/20141004.currency.06.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP productType; diff --git a/resources/sql/autopatches/20141004.harborliskcounter.sql b/resources/sql/autopatches/20141004.harborliskcounter.sql new file mode 100644 index 0000000000..6441feee56 --- /dev/null +++ b/resources/sql/autopatches/20141004.harborliskcounter.sql @@ -0,0 +1,4 @@ +CREATE TABLE `{$NAMESPACE}_harbormaster`.`lisk_counter` ( + counterName VARCHAR(64) COLLATE utf8_bin PRIMARY KEY, + counterValue BIGINT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/autopatches/20141005.phortuneproduct.sql b/resources/sql/autopatches/20141005.phortuneproduct.sql new file mode 100644 index 0000000000..ac7aaa87f0 --- /dev/null +++ b/resources/sql/autopatches/20141005.phortuneproduct.sql @@ -0,0 +1,22 @@ +DROP TABLE {$NAMESPACE}_phortune.phortune_producttransaction; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP productName; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + DROP priceAsCurrency; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + ADD productClassKey BINARY(12) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + ADD productClass VARCHAR(128) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + ADD productRefKey BINARY(12) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + ADD productRef VARCHAR(128) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_product + ADD UNIQUE KEY `key_product` (productClassKey, productRefKey); diff --git a/resources/sql/autopatches/20141006.phortunecart.sql b/resources/sql/autopatches/20141006.phortunecart.sql new file mode 100644 index 0000000000..faf04dd9e2 --- /dev/null +++ b/resources/sql/autopatches/20141006.phortunecart.sql @@ -0,0 +1,4 @@ +TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_cart; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD cartClass VARCHAR(128) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141006.phortunemerchant.sql b/resources/sql/autopatches/20141006.phortunemerchant.sql new file mode 100644 index 0000000000..8f59688f75 --- /dev/null +++ b/resources/sql/autopatches/20141006.phortunemerchant.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_merchant ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE=utf8_bin; diff --git a/resources/sql/autopatches/20141006.phortunemerchantx.sql b/resources/sql/autopatches/20141006.phortunemerchantx.sql new file mode 100644 index 0000000000..2129af3dfe --- /dev/null +++ b/resources/sql/autopatches/20141006.phortunemerchantx.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_merchanttransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141007.fundmerchant.sql b/resources/sql/autopatches/20141007.fundmerchant.sql new file mode 100644 index 0000000000..f75afec46f --- /dev/null +++ b/resources/sql/autopatches/20141007.fundmerchant.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + ADD merchantPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20141007.fundrisks.sql b/resources/sql/autopatches/20141007.fundrisks.sql new file mode 100644 index 0000000000..3fbbd0816e --- /dev/null +++ b/resources/sql/autopatches/20141007.fundrisks.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + ADD risks LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141007.fundtotal.sql b/resources/sql/autopatches/20141007.fundtotal.sql new file mode 100644 index 0000000000..d9b2d2714c --- /dev/null +++ b/resources/sql/autopatches/20141007.fundtotal.sql @@ -0,0 +1,4 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + ADD totalAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_fund.fund_initiative SET totalAsCurrency = '0.00 USD'; diff --git a/resources/sql/autopatches/20141007.phortunecartmerchant.sql b/resources/sql/autopatches/20141007.phortunecartmerchant.sql new file mode 100644 index 0000000000..930c31b854 --- /dev/null +++ b/resources/sql/autopatches/20141007.phortunecartmerchant.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD merchantPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD KEY `key_merchant` (merchantPHID); diff --git a/resources/sql/autopatches/20141007.phortunecharge.sql b/resources/sql/autopatches/20141007.phortunecharge.sql new file mode 100644 index 0000000000..a146adc196 --- /dev/null +++ b/resources/sql/autopatches/20141007.phortunecharge.sql @@ -0,0 +1,16 @@ +TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_charge; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + DROP paymentProviderKey; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD merchantPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD providerPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD KEY `key_merchant` (merchantPHID); + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD KEY `key_provider` (providerPHID); diff --git a/resources/sql/autopatches/20141007.phortunepayment.sql b/resources/sql/autopatches/20141007.phortunepayment.sql new file mode 100644 index 0000000000..6afb830589 --- /dev/null +++ b/resources/sql/autopatches/20141007.phortunepayment.sql @@ -0,0 +1,16 @@ +TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + DROP providerType; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + DROP providerDomain; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD merchantPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD providerPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD KEY `key_merchant` (merchantPHID, accountPHID); diff --git a/resources/sql/autopatches/20141007.phortuneprovider.sql b/resources/sql/autopatches/20141007.phortuneprovider.sql new file mode 100644 index 0000000000..c8f47f7485 --- /dev/null +++ b/resources/sql/autopatches/20141007.phortuneprovider.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfig ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + merchantPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + providerClassKey BINARY(12) NOT NULL, + providerClass VARCHAR(128) NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_merchant` (merchantPHID, providerClassKey) +) ENGINE=InnoDB, COLLATE=utf8_bin; diff --git a/resources/sql/autopatches/20141007.phortuneproviderx.sql b/resources/sql/autopatches/20141007.phortuneproviderx.sql new file mode 100644 index 0000000000..0bc1f72896 --- /dev/null +++ b/resources/sql/autopatches/20141007.phortuneproviderx.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfigtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141008.phortunemerchdesc.sql b/resources/sql/autopatches/20141008.phortunemerchdesc.sql new file mode 100644 index 0000000000..06f5c00843 --- /dev/null +++ b/resources/sql/autopatches/20141008.phortunemerchdesc.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant + ADD description LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141008.phortuneprovdis.sql b/resources/sql/autopatches/20141008.phortuneprovdis.sql new file mode 100644 index 0000000000..bf7fef0248 --- /dev/null +++ b/resources/sql/autopatches/20141008.phortuneprovdis.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentproviderconfig + ADD isEnabled BOOL NOT NULL; + +UPDATE {$NAMESPACE}_phortune.phortune_paymentproviderconfig + SET isEnabled = 1; diff --git a/resources/sql/autopatches/20141008.phortunerefund.sql b/resources/sql/autopatches/20141008.phortunerefund.sql new file mode 100644 index 0000000000..225008cf72 --- /dev/null +++ b/resources/sql/autopatches/20141008.phortunerefund.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD amountRefundedAsCurrency VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_phortune.phortune_charge + SET amountRefundedAsCurrency = '0.00 USD'; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD refundingPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_phortune.phortune_charge + ADD refundedChargePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20141010.fundmailkey.sql b/resources/sql/autopatches/20141010.fundmailkey.sql new file mode 100644 index 0000000000..5e6fa8a83e --- /dev/null +++ b/resources/sql/autopatches/20141010.fundmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + ADD mailKey BINARY(20) NOT NULL; diff --git a/resources/sql/autopatches/20141011.phortunemerchedit.sql b/resources/sql/autopatches/20141011.phortunemerchedit.sql new file mode 100644 index 0000000000..ee1efcd20c --- /dev/null +++ b/resources/sql/autopatches/20141011.phortunemerchedit.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant + DROP editPolicy; diff --git a/resources/sql/autopatches/20141012.phortunecartxaction.sql b/resources/sql/autopatches/20141012.phortunecartxaction.sql new file mode 100644 index 0000000000..9789377b37 --- /dev/null +++ b/resources/sql/autopatches/20141012.phortunecartxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_carttransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141013.phortunecartkey.sql b/resources/sql/autopatches/20141013.phortunecartkey.sql new file mode 100644 index 0000000000..73c2425050 --- /dev/null +++ b/resources/sql/autopatches/20141013.phortunecartkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD mailKey BINARY(20) NOT NULL; diff --git a/resources/sql/autopatches/20141016.almanac.device.sql b/resources/sql/autopatches/20141016.almanac.device.sql new file mode 100644 index 0000000000..d309524fa0 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.device.sql @@ -0,0 +1,22 @@ +TRUNCATE TABLE {$NAMESPACE}_almanac.almanac_device; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + CHANGE name name VARCHAR(128) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD nameIndex BINARY(12) NOT NULL; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD mailKey BINARY(20) NOT NULL; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD UNIQUE KEY `key_name` (nameIndex); + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD KEY `key_nametext` (name); + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD viewPolicy VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20141016.almanac.dxaction.sql b/resources/sql/autopatches/20141016.almanac.dxaction.sql new file mode 100644 index 0000000000..5600ec6276 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.dxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_devicetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141016.almanac.interface.sql b/resources/sql/autopatches/20141016.almanac.interface.sql new file mode 100644 index 0000000000..a23450e1bd --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.interface.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_interface ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + devicePHID VARBINARY(64) NOT NULL, + networkPHID VARBINARY(64) NOT NULL, + address VARCHAR(128) NOT NULL COLLATE utf8_bin, + port INT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_location` (networkPHID, address, port), + KEY `key_device` (devicePHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141016.almanac.network.sql b/resources/sql/autopatches/20141016.almanac.network.sql new file mode 100644 index 0000000000..d35ab3ea36 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.network.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_network ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(128) NOT NULL COLLATE utf8_bin, + mailKey BINARY(20) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141016.almanac.nxaction.sql b/resources/sql/autopatches/20141016.almanac.nxaction.sql new file mode 100644 index 0000000000..60a2679cf6 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.nxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_networktransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141016.almanac.service.sql b/resources/sql/autopatches/20141016.almanac.service.sql new file mode 100644 index 0000000000..7891dff409 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.service.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_service ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(128) NOT NULL COLLATE utf8_bin, + nameIndex BINARY(12) NOT NULL, + mailKey BINARY(20) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_name` (nameIndex), + KEY `key_nametext` (name) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141016.almanac.sxaction.sql b/resources/sql/autopatches/20141016.almanac.sxaction.sql new file mode 100644 index 0000000000..ea154f8b86 --- /dev/null +++ b/resources/sql/autopatches/20141016.almanac.sxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_servicetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141017.almanac.binding.sql b/resources/sql/autopatches/20141017.almanac.binding.sql new file mode 100644 index 0000000000..da02069b43 --- /dev/null +++ b/resources/sql/autopatches/20141017.almanac.binding.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_binding ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + servicePHID VARBINARY(64) NOT NULL, + devicePHID VARBINARY(64) NOT NULL, + interfacePHID VARBINARY(64) NOT NULL, + mailKey BINARY(20) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_service` (servicePHID, interfacePHID), + KEY `key_device` (devicePHID), + KEY `key_interface` (interfacePHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141017.almanac.bxaction.sql b/resources/sql/autopatches/20141017.almanac.bxaction.sql new file mode 100644 index 0000000000..12cd214e4a --- /dev/null +++ b/resources/sql/autopatches/20141017.almanac.bxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_bindingtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141025.phriction.1.xaction.sql b/resources/sql/autopatches/20141025.phriction.1.xaction.sql new file mode 100644 index 0000000000..c2527cf1bc --- /dev/null +++ b/resources/sql/autopatches/20141025.phriction.1.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_transaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL, + authorPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + objectPHID VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + commentPHID VARCHAR(64) COLLATE utf8_bin DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE utf8_bin NOT NULL, + oldValue LONGTEXT COLLATE utf8_bin NOT NULL, + newValue LONGTEXT COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT COLLATE utf8_bin NOT NULL, + metadata LONGTEXT COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/autopatches/20141025.phriction.2.xaction.sql b/resources/sql/autopatches/20141025.phriction.2.xaction.sql new file mode 100644 index 0000000000..ddbb4c5da9 --- /dev/null +++ b/resources/sql/autopatches/20141025.phriction.2.xaction.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_transaction_comment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + transactionPHID VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + authorPHID VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + contentSource LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + isDeleted TINYINT(1) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 diff --git a/resources/sql/autopatches/20141025.phriction.mailkey.sql b/resources/sql/autopatches/20141025.phriction.mailkey.sql new file mode 100644 index 0000000000..7f0bd4d1f2 --- /dev/null +++ b/resources/sql/autopatches/20141025.phriction.mailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + ADD mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/autopatches/20141103.almanac.1.delprop.sql b/resources/sql/autopatches/20141103.almanac.1.delprop.sql new file mode 100644 index 0000000000..55fa77942d --- /dev/null +++ b/resources/sql/autopatches/20141103.almanac.1.delprop.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_almanac.almanac_deviceproperty; diff --git a/resources/sql/autopatches/20141103.almanac.2.addprop.sql b/resources/sql/autopatches/20141103.almanac.2.addprop.sql new file mode 100644 index 0000000000..a7a6ec9272 --- /dev/null +++ b/resources/sql/autopatches/20141103.almanac.2.addprop.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_property ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + fieldIndex BINARY(12) NOT NULL, + fieldName VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + fieldValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `objectPHID` (objectPHID, fieldIndex) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20141104.almanac.3.edge.sql b/resources/sql/autopatches/20141104.almanac.3.edge.sql new file mode 100644 index 0000000000..31de2a5e12 --- /dev/null +++ b/resources/sql/autopatches/20141104.almanac.3.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_almanac.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_almanac.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20141105.ssh.1.rename.sql b/resources/sql/autopatches/20141105.ssh.1.rename.sql new file mode 100644 index 0000000000..3aaff9e4d7 --- /dev/null +++ b/resources/sql/autopatches/20141105.ssh.1.rename.sql @@ -0,0 +1 @@ +RENAME TABLE {$NAMESPACE}_user.user_sshkey TO {$NAMESPACE}_auth.auth_sshkey; diff --git a/resources/sql/autopatches/20141106.dropold.sql b/resources/sql/autopatches/20141106.dropold.sql new file mode 100644 index 0000000000..7716e90bf3 --- /dev/null +++ b/resources/sql/autopatches/20141106.dropold.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_metamta.phid_type; diff --git a/resources/sql/autopatches/20141106.uniqdrafts.php b/resources/sql/autopatches/20141106.uniqdrafts.php new file mode 100644 index 0000000000..85b05f9ced --- /dev/null +++ b/resources/sql/autopatches/20141106.uniqdrafts.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +echo pht('Populating Phriction policies.')."\n"; + +$default_view_policy = PhabricatorPolicies::POLICY_USER; +$default_edit_policy = PhabricatorPolicies::POLICY_USER; + +foreach (new LiskMigrationIterator($table) as $doc) { + $id = $doc->getID(); + + if ($doc->getViewPolicy() && $doc->getEditPolicy()) { + echo pht('Skipping document %d; already has policy set.', $id)."\n"; + continue; + } + + $new_view_policy = $default_view_policy; + $new_edit_policy = $default_edit_policy; + + // If this was previously a magical project wiki page (under projects/, but + // not projects/ itself) we need to apply the project policies. Otherwise, + // apply the default policies. + $slug = $doc->getSlug(); + $slug = PhabricatorSlug::normalize($slug); + $prefix = 'projects/'; + if (($slug != $prefix) && (strncmp($slug, $prefix, strlen($prefix)) === 0)) { + $parts = explode('/', $slug); + + $project_slug = $parts[1]; + $project_slug = PhabricatorSlug::normalizeProjectSlug($project_slug); + + $project_slugs = array($project_slug); + $project = id(new PhabricatorProjectQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withSlugs($project_slugs) + ->executeOne(); + + if ($project) { + $view_policy = nonempty($project->getViewPolicy(), $default_view_policy); + $edit_policy = nonempty($project->getEditPolicy(), $default_edit_policy); + + $new_view_policy = $view_policy; + $new_edit_policy = $edit_policy; + } + } + + echo pht('Migrating document %d to new policy...', $id)."\n"; + + queryfx( + $conn_w, + 'UPDATE %R SET viewPolicy = %s, editPolicy = %s + WHERE id = %d', + $table, + $new_view_policy, + $new_edit_policy, + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20141107.phriction.popkeys.php b/resources/sql/autopatches/20141107.phriction.popkeys.php new file mode 100644 index 0000000000..31629c7fea --- /dev/null +++ b/resources/sql/autopatches/20141107.phriction.popkeys.php @@ -0,0 +1,29 @@ +establishConnection('w'); + +echo pht('Populating Phriction mailkeys.')."\n"; + +foreach (new LiskMigrationIterator($table) as $doc) { + $id = $doc->getID(); + + $key = $doc->getMailKey(); + if ((strlen($key) == 20) && (strpos($key, "\0") === false)) { + // To be valid, keys must have length 20 and not contain any null bytes. + // See T6487. + echo pht('Document has valid mailkey.')."\n"; + continue; + } else { + echo pht('Populating mailkey for document %d...', $id)."\n"; + $mail_key = Filesystem::readRandomCharacters(20); + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + $mail_key, + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20141107.ssh.1.colname.sql b/resources/sql/autopatches/20141107.ssh.1.colname.sql new file mode 100644 index 0000000000..af34fd7277 --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.1.colname.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE userPHID objectPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20141107.ssh.2.keyhash.sql b/resources/sql/autopatches/20141107.ssh.2.keyhash.sql new file mode 100644 index 0000000000..71c11edb16 --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.2.keyhash.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + DROP COLUMN keyHash; diff --git a/resources/sql/autopatches/20141107.ssh.3.keyindex.sql b/resources/sql/autopatches/20141107.ssh.3.keyindex.sql new file mode 100644 index 0000000000..8df02acfe5 --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.3.keyindex.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD COLUMN keyIndex BINARY(12); diff --git a/resources/sql/autopatches/20141107.ssh.4.keymig.php b/resources/sql/autopatches/20141107.ssh.4.keymig.php new file mode 100644 index 0000000000..f3e2d3f098 --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.4.keymig.php @@ -0,0 +1,50 @@ +establishConnection('w'); + +echo pht('Updating SSH public key indexes...')."\n"; + +$keys = new LiskMigrationIterator($table); +foreach ($keys as $key) { + $id = $key->getID(); + + echo pht('Updating key %d...', $id)."\n"; + + try { + $hash = $key->toPublicKey()->getHash(); + } catch (Exception $ex) { + echo pht('Key has bad format! Removing key.')."\n"; + queryfx( + $conn_w, + 'DELETE FROM %T WHERE id = %d', + $table->getTableName(), + $id); + continue; + } + + $collision = queryfx_all( + $conn_w, + 'SELECT * FROM %T WHERE keyIndex = %s AND id < %d', + $table->getTableName(), + $hash, + $key->getID()); + if ($collision) { + echo pht('Key is a duplicate! Removing key.')."\n"; + queryfx( + $conn_w, + 'DELETE FROM %T WHERE id = %d', + $table->getTableName(), + $id); + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET keyIndex = %s WHERE id = %d', + $table->getTableName(), + $hash, + $key->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20141107.ssh.5.indexnull.sql b/resources/sql/autopatches/20141107.ssh.5.indexnull.sql new file mode 100644 index 0000000000..c011ecc9fc --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.5.indexnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE keyIndex keyIndex BINARY(12) NOT NULL; diff --git a/resources/sql/autopatches/20141107.ssh.6.indexkey.sql b/resources/sql/autopatches/20141107.ssh.6.indexkey.sql new file mode 100644 index 0000000000..967c813beb --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.6.indexkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD UNIQUE KEY `key_unique` (keyIndex); diff --git a/resources/sql/autopatches/20141107.ssh.7.colnull.sql b/resources/sql/autopatches/20141107.ssh.7.colnull.sql new file mode 100644 index 0000000000..3182c2d9c7 --- /dev/null +++ b/resources/sql/autopatches/20141107.ssh.7.colnull.sql @@ -0,0 +1,23 @@ +UPDATE {$NAMESPACE}_auth.auth_sshkey + SET name = '' WHERE name IS NULL; + +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE name name VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL; + +UPDATE {$NAMESPACE}_auth.auth_sshkey + SET keyType = '' WHERE keyType IS NULL; + +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE keyType keyType VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL; + +UPDATE {$NAMESPACE}_auth.auth_sshkey + SET keyBody = '' WHERE keyBody IS NULL; + +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE keyBody keyBody LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; + +UPDATE {$NAMESPACE}_auth.auth_sshkey + SET keyComment = '' WHERE keyComment IS NULL; + +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + CHANGE keyComment keyComment VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20141113.auditdupes.php b/resources/sql/autopatches/20141113.auditdupes.php new file mode 100644 index 0000000000..32a6586ca5 --- /dev/null +++ b/resources/sql/autopatches/20141113.auditdupes.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +echo pht('Removing duplicate Audit requests...')."\n"; +$seen_audit_map = array(); +foreach (new LiskMigrationIterator($table) as $request) { + $commit_phid = $request->getCommitPHID(); + $auditor_phid = $request->getAuditorPHID(); + if (isset($seen_audit_map[$commit_phid][$auditor_phid])) { + $request->delete(); + } + + if (!isset($seen_audit_map[$commit_phid])) { + $seen_audit_map[$commit_phid] = array(); + } + + $seen_audit_map[$commit_phid][$auditor_phid] = 1; +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20141118.diffxaction.sql b/resources/sql/autopatches/20141118.diffxaction.sql new file mode 100644 index 0000000000..4ee0554131 --- /dev/null +++ b/resources/sql/autopatches/20141118.diffxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_difftransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64), + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20141119.commitpedge.sql b/resources/sql/autopatches/20141119.commitpedge.sql new file mode 100644 index 0000000000..bb5c1ec56c --- /dev/null +++ b/resources/sql/autopatches/20141119.commitpedge.sql @@ -0,0 +1,11 @@ +INSERT IGNORE INTO {$NAMESPACE}_repository.edge + (src, type, dst, dateCreated, seq) + SELECT src, 41, dst, dateCreated, seq + FROM {$NAMESPACE}_repository.edge + WHERE type = 15; + +INSERT IGNORE INTO {$NAMESPACE}_project.edge + (src, type, dst, dateCreated, seq) + SELECT src, 42, dst, dateCreated, seq + FROM {$NAMESPACE}_project.edge + WHERE type = 16; diff --git a/resources/sql/autopatches/20141119.differential.diff.policy.sql b/resources/sql/autopatches/20141119.differential.diff.policy.sql new file mode 100644 index 0000000000..b6c19c0dea --- /dev/null +++ b/resources/sql/autopatches/20141119.differential.diff.policy.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + ADD viewPolicy VARBINARY(64) NOT NULL; + +UPDATE {$NAMESPACE}_differential.differential_diff + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/autopatches/20141119.sshtrust.sql b/resources/sql/autopatches/20141119.sshtrust.sql new file mode 100644 index 0000000000..a75255b1c8 --- /dev/null +++ b/resources/sql/autopatches/20141119.sshtrust.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD isTrusted BOOL NOT NULL; diff --git a/resources/sql/autopatches/20141123.taskpriority.1.sql b/resources/sql/autopatches/20141123.taskpriority.1.sql new file mode 100644 index 0000000000..b7790e711e --- /dev/null +++ b/resources/sql/autopatches/20141123.taskpriority.1.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_worker.worker_activetask + SET priority = 5000 - priority; diff --git a/resources/sql/autopatches/20141123.taskpriority.2.sql b/resources/sql/autopatches/20141123.taskpriority.2.sql new file mode 100644 index 0000000000..91b8979112 --- /dev/null +++ b/resources/sql/autopatches/20141123.taskpriority.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_worker.worker_archivetask + SET priority = 5000 - priority; diff --git a/resources/sql/autopatches/20141210.maniphestsubscribersmig.1.sql b/resources/sql/autopatches/20141210.maniphestsubscribersmig.1.sql new file mode 100644 index 0000000000..ca1fcd467a --- /dev/null +++ b/resources/sql/autopatches/20141210.maniphestsubscribersmig.1.sql @@ -0,0 +1,9 @@ +INSERT IGNORE INTO {$NAMESPACE}_maniphest.edge (src, type, dst) + SELECT taskPHID, 21, subscriberPHID + FROM {$NAMESPACE}_maniphest.maniphest_tasksubscriber + WHERE subscriberPHID != ''; + +INSERT IGNORE INTO {$NAMESPACE}_maniphest.edge (src, type, dst) + SELECT subscriberPHID, 22, taskPHID + FROM {$NAMESPACE}_maniphest.maniphest_tasksubscriber + WHERE subscriberPHID != ''; diff --git a/resources/sql/autopatches/20141210.maniphestsubscribersmig.2.sql b/resources/sql/autopatches/20141210.maniphestsubscribersmig.2.sql new file mode 100644 index 0000000000..d937524951 --- /dev/null +++ b/resources/sql/autopatches/20141210.maniphestsubscribersmig.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + DROP ccPHIDs; diff --git a/resources/sql/autopatches/20141210.reposervice.sql b/resources/sql/autopatches/20141210.reposervice.sql new file mode 100644 index 0000000000..554bc77b89 --- /dev/null +++ b/resources/sql/autopatches/20141210.reposervice.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD almanacServicePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20141212.conduittoken.sql b/resources/sql/autopatches/20141212.conduittoken.sql new file mode 100644 index 0000000000..d3abda89a6 --- /dev/null +++ b/resources/sql/autopatches/20141212.conduittoken.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_conduit.conduit_token ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + tokenType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + token VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + expires INT UNSIGNED, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_object` (objectPHID, tokenType), + UNIQUE KEY `key_token` (token), + KEY `key_expires` (expires) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20141215.almanacservicetype.sql b/resources/sql/autopatches/20141215.almanacservicetype.sql new file mode 100644 index 0000000000..55624a3018 --- /dev/null +++ b/resources/sql/autopatches/20141215.almanacservicetype.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_service + ADD serviceClass VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; + +ALTER TABLE {$NAMESPACE}_almanac.almanac_service + ADD KEY `key_class` (serviceClass); + +UPDATE {$NAMESPACE}_almanac.almanac_service + SET serviceClass = 'AlmanacCustomServiceType' WHERE serviceClass = ''; diff --git a/resources/sql/autopatches/20141217.almanacdevicelock.sql b/resources/sql/autopatches/20141217.almanacdevicelock.sql new file mode 100644 index 0000000000..1cf00f60b4 --- /dev/null +++ b/resources/sql/autopatches/20141217.almanacdevicelock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD isLocked BOOL NOT NULL; diff --git a/resources/sql/autopatches/20141217.almanaclock.sql b/resources/sql/autopatches/20141217.almanaclock.sql new file mode 100644 index 0000000000..2b6c53deaa --- /dev/null +++ b/resources/sql/autopatches/20141217.almanaclock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_service + ADD isLocked BOOL NOT NULL; diff --git a/resources/sql/autopatches/20141218.maniphestcctxn.php b/resources/sql/autopatches/20141218.maniphestcctxn.php new file mode 100644 index 0000000000..4ac3c62101 --- /dev/null +++ b/resources/sql/autopatches/20141218.maniphestcctxn.php @@ -0,0 +1,21 @@ +establishConnection('w'); + +echo pht( + "Converting Maniphest CC transactions to modern ". + "subscriber transactions...\n"); +foreach (new LiskMigrationIterator($table) as $txn) { + // ManiphestTransaction::TYPE_CCS + if ($txn->getTransactionType() == 'ccs') { + queryfx( + $conn_w, + 'UPDATE %T SET transactionType = %s WHERE id = %d', + $table->getTableName(), + PhabricatorTransactions::TYPE_SUBSCRIBERS, + $txn->getID()); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20141222.maniphestprojtxn.php b/resources/sql/autopatches/20141222.maniphestprojtxn.php new file mode 100644 index 0000000000..31aae8b986 --- /dev/null +++ b/resources/sql/autopatches/20141222.maniphestprojtxn.php @@ -0,0 +1,61 @@ +establishConnection('w'); + +echo pht( + "Converting Maniphest project transactions to modern edge transactions...\n"); +$metadata = array( + 'edge:type' => PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, +); +foreach (new LiskMigrationIterator($table) as $txn) { + if ($txn->getTransactionType() != 'projects') { + continue; + } + + $old_value = mig20141222_build_edge_data( + $txn->getOldValue(), + $txn->getObjectPHID()); + + $new_value = mig20141222_build_edge_data( + $txn->getNewValue(), + $txn->getObjectPHID()); + + queryfx( + $conn_w, + 'UPDATE %T SET '. + 'transactionType = %s, oldValue = %s, newValue = %s, metaData = %s '. + 'WHERE id = %d', + $table->getTableName(), + PhabricatorTransactions::TYPE_EDGE, + json_encode($old_value), + json_encode($new_value), + json_encode($metadata), + $txn->getID()); +} + +echo pht('Done.')."\n"; + +function mig20141222_build_edge_data($project_phids, $task_phid) { + $edge_data = array(); + + // See T9464. If we didn't get a proper array value out of the transaction, + // just return an empty value so we can move forward. + if (!is_array($project_phids)) { + return $edge_data; + } + + foreach ($project_phids as $project_phid) { + if (!is_scalar($project_phid)) { + continue; + } + + $edge_data[$project_phid] = array( + 'src' => $task_phid, + 'type' => PhabricatorProjectObjectHasProjectEdgeType::EDGECONST, + 'dst' => $project_phid, + ); + } + + return $edge_data; +} diff --git a/resources/sql/autopatches/20141223.daemonloguser.sql b/resources/sql/autopatches/20141223.daemonloguser.sql new file mode 100644 index 0000000000..ee1f14ad0a --- /dev/null +++ b/resources/sql/autopatches/20141223.daemonloguser.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD runningAsUser VARCHAR(255) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20141223.daemonobjectphid.sql b/resources/sql/autopatches/20141223.daemonobjectphid.sql new file mode 100644 index 0000000000..6f2856eb55 --- /dev/null +++ b/resources/sql/autopatches/20141223.daemonobjectphid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD objectPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD objectPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20141230.pasteeditpolicycolumn.sql b/resources/sql/autopatches/20141230.pasteeditpolicycolumn.sql new file mode 100644 index 0000000000..bd8f518e0d --- /dev/null +++ b/resources/sql/autopatches/20141230.pasteeditpolicycolumn.sql @@ -0,0 +1,3 @@ +ALTER TABLE `{$NAMESPACE}_pastebin`.`pastebin_paste` + ADD `editPolicy` VARBINARY(64) NOT NULL + AFTER `viewPolicy`; diff --git a/resources/sql/autopatches/20141230.pasteeditpolicyexisting.sql b/resources/sql/autopatches/20141230.pasteeditpolicyexisting.sql new file mode 100644 index 0000000000..6c731acf9b --- /dev/null +++ b/resources/sql/autopatches/20141230.pasteeditpolicyexisting.sql @@ -0,0 +1,2 @@ +UPDATE `{$NAMESPACE}_pastebin`.`pastebin_paste` SET editPolicy = authorPHID + WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20150102.policyname.php b/resources/sql/autopatches/20150102.policyname.php new file mode 100644 index 0000000000..cf94b918e7 --- /dev/null +++ b/resources/sql/autopatches/20150102.policyname.php @@ -0,0 +1,38 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $policy) { + $old_rules = $policy->getRules(); + $new_rules = array(); + + foreach ($old_rules as $rule) { + $existing_rule = $rule['rule']; + $rule['rule'] = idx($map, $existing_rule, $existing_rule); + $new_rules[] = $rule; + } + + queryfx( + $conn_w, + 'UPDATE %T SET rules = %s WHERE id = %d', + $table->getTableName(), + json_encode($new_rules), + $policy->getID()); +} diff --git a/resources/sql/autopatches/20150102.tasksubscriber.sql b/resources/sql/autopatches/20150102.tasksubscriber.sql new file mode 100644 index 0000000000..7bbd41f167 --- /dev/null +++ b/resources/sql/autopatches/20150102.tasksubscriber.sql @@ -0,0 +1 @@ +DROP TABLE `{$NAMESPACE}_maniphest`.`maniphest_tasksubscriber`; diff --git a/resources/sql/autopatches/20150105.conpsearch.sql b/resources/sql/autopatches/20150105.conpsearch.sql new file mode 100644 index 0000000000..78c8bcec30 --- /dev/null +++ b/resources/sql/autopatches/20150105.conpsearch.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_conpherence.conpherence_index ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + threadPHID VARBINARY(64) NOT NULL, + transactionPHID VARBINARY(64) NOT NULL, + previousTransactionPHID VARBINARY(64), + corpus longtext + CHARACTER SET {$CHARSET_FULLTEXT} + COLLATE {$COLLATE_FULLTEXT} + NOT NULL, + KEY `key_thread` (threadPHID), + UNIQUE KEY `key_transaction` (transactionPHID), + UNIQUE KEY `key_previous` (previousTransactionPHID), + FULLTEXT KEY `key_corpus` (corpus) +) ENGINE=MyISAM DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150114.oauthserver.client.policy.sql b/resources/sql/autopatches/20150114.oauthserver.client.policy.sql new file mode 100644 index 0000000000..8f46afc5c9 --- /dev/null +++ b/resources/sql/autopatches/20150114.oauthserver.client.policy.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_oauth_server.oauth_server_oauthserverclient + ADD viewPolicy VARBINARY(64) NOT NULL AFTER creatorPHID; + +UPDATE {$NAMESPACE}_oauth_server.oauth_server_oauthserverclient + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +ALTER TABLE {$NAMESPACE}_oauth_server.oauth_server_oauthserverclient + ADD editPolicy VARBINARY(64) NOT NULL AFTER viewPolicy; + +UPDATE {$NAMESPACE}_oauth_server.oauth_server_oauthserverclient + SET editPolicy = creatorPHID WHERE viewPolicy = ''; diff --git a/resources/sql/autopatches/20150115.applicationemails.sql b/resources/sql/autopatches/20150115.applicationemails.sql new file mode 100644 index 0000000000..a39bd16534 --- /dev/null +++ b/resources/sql/autopatches/20150115.applicationemails.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_metamta.metamta_applicationemail ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + applicationPHID VARBINARY(64) NOT NULL, + address VARCHAR(128) NOT NULL COLLATE {$COLLATE_SORT}, + configData LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_application` (applicationPHID), + UNIQUE KEY `key_address` (address), + UNIQUE KEY `key_phid` (phid) +) ENGINE=MyISAM DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150115.trigger.1.sql b/resources/sql/autopatches/20150115.trigger.1.sql new file mode 100644 index 0000000000..e03759f161 --- /dev/null +++ b/resources/sql/autopatches/20150115.trigger.1.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_trigger ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + triggerVersion INT UNSIGNED NOT NULL, + clockClass VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + clockProperties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + actionClass VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + actionProperties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_trigger` (triggerVersion) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150115.trigger.2.sql b/resources/sql/autopatches/20150115.trigger.2.sql new file mode 100644 index 0000000000..164bc9858a --- /dev/null +++ b/resources/sql/autopatches/20150115.trigger.2.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_triggerevent ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + triggerID INT UNSIGNED NOT NULL, + lastEventEpoch INT UNSIGNED, + nextEventEpoch INT UNSIGNED, + UNIQUE KEY `key_trigger` (triggerID), + KEY `key_next` (nextEventEpoch) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150116.maniphestapplicationemails.php b/resources/sql/autopatches/20150116.maniphestapplicationemails.php new file mode 100644 index 0000000000..91430568ca --- /dev/null +++ b/resources/sql/autopatches/20150116.maniphestapplicationemails.php @@ -0,0 +1,20 @@ +setAddress($value) + ->setApplicationPHID($maniphest->getPHID()) + ->save(); + } catch (AphrontDuplicateKeyQueryException $ex) { + // Already migrated? + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150120.maniphestdefaultauthor.php b/resources/sql/autopatches/20150120.maniphestdefaultauthor.php new file mode 100644 index 0000000000..352dd4cbbd --- /dev/null +++ b/resources/sql/autopatches/20150120.maniphestdefaultauthor.php @@ -0,0 +1,22 @@ +setViewer(PhabricatorUser::getOmnipotentUser()) + ->withApplicationPHIDs(array($maniphest->getPHID())) + ->execute(); + + foreach ($app_emails as $app_email) { + $app_email->setConfigValue($config_key, $value); + $app_email->save(); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150124.subs.1.sql b/resources/sql/autopatches/20150124.subs.1.sql new file mode 100644 index 0000000000..07d60d5792 --- /dev/null +++ b/resources/sql/autopatches/20150124.subs.1.sql @@ -0,0 +1,20 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_subscription ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + accountPHID VARBINARY(64) NOT NULL, + merchantPHID VARBINARY(64) NOT NULL, + triggerPHID VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + subscriptionClassKey BINARY(12) NOT NULL, + subscriptionClass VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + subscriptionRefKey BINARY(12) NOT NULL, + subscriptionRef VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + metadata LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_subscription` (subscriptionClassKey, subscriptionRefKey), + KEY `key_account` (accountPHID), + KEY `key_merchant` (merchantPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150129.pastefileapplicationemails.php b/resources/sql/autopatches/20150129.pastefileapplicationemails.php new file mode 100644 index 0000000000..80e92fb307 --- /dev/null +++ b/resources/sql/autopatches/20150129.pastefileapplicationemails.php @@ -0,0 +1,40 @@ +setAddress($value_files) + ->setApplicationPHID($files_app->getPHID()) + ->save(); + } catch (AphrontDuplicateKeyQueryException $ex) { + // Already migrated? + } +} + +$value_paste = PhabricatorEnv::getEnvConfigIfExists($key_paste); +$paste_app = new PhabricatorPasteApplication(); + +if ($value_paste) { + try { + PhabricatorMetaMTAApplicationEmail::initializeNewAppEmail( + PhabricatorUser::getOmnipotentUser()) + ->setAddress($value_paste) + ->setApplicationPHID($paste_app->getPHID()) + ->save(); + } catch (AphrontDuplicateKeyQueryException $ex) { + // Already migrated? + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150130.phortune.1.subphid.sql b/resources/sql/autopatches/20150130.phortune.1.subphid.sql new file mode 100644 index 0000000000..f2eae091da --- /dev/null +++ b/resources/sql/autopatches/20150130.phortune.1.subphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD subscriptionPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150130.phortune.2.subkey.sql b/resources/sql/autopatches/20150130.phortune.2.subkey.sql new file mode 100644 index 0000000000..10d0225afc --- /dev/null +++ b/resources/sql/autopatches/20150130.phortune.2.subkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD KEY `key_subscription` (subscriptionPHID); diff --git a/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql b/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql new file mode 100644 index 0000000000..aa990fe0b9 --- /dev/null +++ b/resources/sql/autopatches/20150131.phortune.1.defaultpayment.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_subscription + ADD defaultPaymentMethodPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150205.authprovider.autologin.sql b/resources/sql/autopatches/20150205.authprovider.autologin.sql new file mode 100644 index 0000000000..7fb0bbf255 --- /dev/null +++ b/resources/sql/autopatches/20150205.authprovider.autologin.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_providerconfig + ADD shouldAutoLogin TINYINT(1) NOT NULL DEFAULT '0'; diff --git a/resources/sql/autopatches/20150205.daemonenv.sql b/resources/sql/autopatches/20150205.daemonenv.sql new file mode 100644 index 0000000000..fccf6f0810 --- /dev/null +++ b/resources/sql/autopatches/20150205.daemonenv.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD envInfo LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150209.invite.sql b/resources/sql/autopatches/20150209.invite.sql new file mode 100644 index 0000000000..edd42440a9 --- /dev/null +++ b/resources/sql/autopatches/20150209.invite.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_user.user_authinvite ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + authorPHID VARBINARY(64) NOT NULL, + emailAddress VARCHAR(128) NOT NULL COLLATE {$COLLATE_SORT}, + verificationHash BINARY(12) NOT NULL, + acceptedByPHID VARBINARY(64), + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_address` (emailAddress), + UNIQUE KEY `key_code` (verificationHash) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150209.oauthclient.trust.sql b/resources/sql/autopatches/20150209.oauthclient.trust.sql new file mode 100644 index 0000000000..5b4b8e4adf --- /dev/null +++ b/resources/sql/autopatches/20150209.oauthclient.trust.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_oauth_server.oauth_server_oauthserverclient + ADD isTrusted TINYINT(1) NOT NULL DEFAULT '0' AFTER creatorPHID; diff --git a/resources/sql/autopatches/20150210.invitephid.sql b/resources/sql/autopatches/20150210.invitephid.sql new file mode 100644 index 0000000000..eaa6bcd4f9 --- /dev/null +++ b/resources/sql/autopatches/20150210.invitephid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_user.user_authinvite + ADD phid VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_user.user_authinvite + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/autopatches/20150212.legalpad.session.1.sql b/resources/sql/autopatches/20150212.legalpad.session.1.sql new file mode 100644 index 0000000000..7f7c5df79f --- /dev/null +++ b/resources/sql/autopatches/20150212.legalpad.session.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD signedLegalpadDocuments BOOL NOT NULL DEFAULT 0; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + ADD requireSignature BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20150212.legalpad.session.2.sql b/resources/sql/autopatches/20150212.legalpad.session.2.sql new file mode 100644 index 0000000000..a712c6001a --- /dev/null +++ b/resources/sql/autopatches/20150212.legalpad.session.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + ADD KEY `key_required` (requireSignature, dateModified); diff --git a/resources/sql/autopatches/20150219.scratch.nonmutable.sql b/resources/sql/autopatches/20150219.scratch.nonmutable.sql new file mode 100644 index 0000000000..96dc08a7ce --- /dev/null +++ b/resources/sql/autopatches/20150219.scratch.nonmutable.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_scratchtable + ADD nonmutableData VARCHAR(64) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150223.daemon.1.id.sql b/resources/sql/autopatches/20150223.daemon.1.id.sql new file mode 100644 index 0000000000..cd757cb817 --- /dev/null +++ b/resources/sql/autopatches/20150223.daemon.1.id.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD daemonID VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150223.daemon.2.idlegacy.sql b/resources/sql/autopatches/20150223.daemon.2.idlegacy.sql new file mode 100644 index 0000000000..34583ad96f --- /dev/null +++ b/resources/sql/autopatches/20150223.daemon.2.idlegacy.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_daemon.daemon_log + SET daemonID = CONCAT('legacy-', id) WHERE daemonID = ''; diff --git a/resources/sql/autopatches/20150223.daemon.3.idkey.sql b/resources/sql/autopatches/20150223.daemon.3.idkey.sql new file mode 100644 index 0000000000..b9ad068291 --- /dev/null +++ b/resources/sql/autopatches/20150223.daemon.3.idkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD UNIQUE KEY `key_daemonID` (daemonID); diff --git a/resources/sql/autopatches/20150312.filechunk.1.sql b/resources/sql/autopatches/20150312.filechunk.1.sql new file mode 100644 index 0000000000..c191f970d5 --- /dev/null +++ b/resources/sql/autopatches/20150312.filechunk.1.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_file.file_chunk ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + chunkHandle BINARY(12) NOT NULL, + byteStart BIGINT UNSIGNED NOT NULL, + byteEnd BIGINT UNSIGNED NOT NULL, + dataFilePHID VARBINARY(64), + KEY `key_file` (chunkhandle, byteStart, byteEnd), + KEY `key_data` (dataFilePHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150312.filechunk.2.sql b/resources/sql/autopatches/20150312.filechunk.2.sql new file mode 100644 index 0000000000..a6bb5bf8ad --- /dev/null +++ b/resources/sql/autopatches/20150312.filechunk.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD isPartial BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20150312.filechunk.3.sql b/resources/sql/autopatches/20150312.filechunk.3.sql new file mode 100644 index 0000000000..82032692f8 --- /dev/null +++ b/resources/sql/autopatches/20150312.filechunk.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD KEY `key_partial` (authorPHID, isPartial); diff --git a/resources/sql/autopatches/20150317.conpherence.isroom.1.sql b/resources/sql/autopatches/20150317.conpherence.isroom.1.sql new file mode 100644 index 0000000000..9cfdb5d0c1 --- /dev/null +++ b/resources/sql/autopatches/20150317.conpherence.isroom.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD isRoom BOOL NOT NULL DEFAULT 0 AFTER title; diff --git a/resources/sql/autopatches/20150317.conpherence.isroom.2.sql b/resources/sql/autopatches/20150317.conpherence.isroom.2.sql new file mode 100644 index 0000000000..e298282813 --- /dev/null +++ b/resources/sql/autopatches/20150317.conpherence.isroom.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD KEY `key_room` (isRoom, dateModified); diff --git a/resources/sql/autopatches/20150317.conpherence.policy.sql b/resources/sql/autopatches/20150317.conpherence.policy.sql new file mode 100644 index 0000000000..a593279a83 --- /dev/null +++ b/resources/sql/autopatches/20150317.conpherence.policy.sql @@ -0,0 +1,17 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD viewPolicy VARBINARY(64) NOT NULL AFTER recentParticipantPHIDs; + +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD editPolicy VARBINARY(64) NOT NULL AFTER viewPolicy; + +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET editPolicy = 'users' WHERE editPolicy = ''; + +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD joinPolicy VARBINARY(64) NOT NULL AFTER editPolicy; + +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET joinPolicy = 'users' WHERE joinPolicy = ''; diff --git a/resources/sql/autopatches/20150410.nukeruleedit.sql b/resources/sql/autopatches/20150410.nukeruleedit.sql new file mode 100644 index 0000000000..29302c75b6 --- /dev/null +++ b/resources/sql/autopatches/20150410.nukeruleedit.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_herald.herald_ruleedit; diff --git a/resources/sql/autopatches/20150420.invoice.1.sql b/resources/sql/autopatches/20150420.invoice.1.sql new file mode 100644 index 0000000000..3986b344ad --- /dev/null +++ b/resources/sql/autopatches/20150420.invoice.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_cart + ADD isInvoice BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150420.invoice.2.sql b/resources/sql/autopatches/20150420.invoice.2.sql new file mode 100644 index 0000000000..dfbe39de46 --- /dev/null +++ b/resources/sql/autopatches/20150420.invoice.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_phortune.phortune_cart + SET isInvoice = 1 WHERE subscriptionPHID IS NOT NULL; diff --git a/resources/sql/autopatches/20150425.isclosed.sql b/resources/sql/autopatches/20150425.isclosed.sql new file mode 100644 index 0000000000..3d8586b565 --- /dev/null +++ b/resources/sql/autopatches/20150425.isclosed.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + ADD isClosed BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150427.calendar.1.edge.sql b/resources/sql/autopatches/20150427.calendar.1.edge.sql new file mode 100644 index 0000000000..3c608e89db --- /dev/null +++ b/resources/sql/autopatches/20150427.calendar.1.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_calendar.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_calendar.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150427.calendar.1.xaction.sql b/resources/sql/autopatches/20150427.calendar.1.xaction.sql new file mode 100644 index 0000000000..0cdcfd0126 --- /dev/null +++ b/resources/sql/autopatches/20150427.calendar.1.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_eventtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150427.calendar.2.xaction.sql b/resources/sql/autopatches/20150427.calendar.2.xaction.sql new file mode 100644 index 0000000000..0497f99d1b --- /dev/null +++ b/resources/sql/autopatches/20150427.calendar.2.xaction.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_eventtransaction_comment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + transactionPHID VARBINARY(64) DEFAULT NULL, + authorPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + isDeleted TINYINT(1) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB COLLATE {$COLLATE_TEXT} diff --git a/resources/sql/autopatches/20150428.calendar.1.iscancelled.sql b/resources/sql/autopatches/20150428.calendar.1.iscancelled.sql new file mode 100644 index 0000000000..8b6d95dd67 --- /dev/null +++ b/resources/sql/autopatches/20150428.calendar.1.iscancelled.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD isCancelled BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150428.calendar.1.name.sql b/resources/sql/autopatches/20150428.calendar.1.name.sql new file mode 100644 index 0000000000..7e5e8da6c9 --- /dev/null +++ b/resources/sql/autopatches/20150428.calendar.1.name.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD name LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20150429.calendar.1.invitee.sql b/resources/sql/autopatches/20150429.calendar.1.invitee.sql new file mode 100644 index 0000000000..b39294b670 --- /dev/null +++ b/resources/sql/autopatches/20150429.calendar.1.invitee.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_calendar.`calendar_eventinvitee` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, + `eventPHID` varbinary(64) NOT NULL, + `inviteePHID` varbinary(64) NOT NULL, + `inviterPHID` varbinary(64) NOT NULL, + `status` VARCHAR(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + UNIQUE KEY `key_event` (`eventPHID`, `inviteePHID`), + KEY `key_invitee` (`inviteePHID`) +) ENGINE=InnoDB COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150430.calendar.1.policies.sql b/resources/sql/autopatches/20150430.calendar.1.policies.sql new file mode 100644 index 0000000000..aa0bdff261 --- /dev/null +++ b/resources/sql/autopatches/20150430.calendar.1.policies.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD viewPolicy varbinary(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD editPolicy varbinary(64) NOT NULL; + +UPDATE {$NAMESPACE}_calendar.calendar_event + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +UPDATE {$NAMESPACE}_calendar.calendar_event + SET editPolicy = userPHID; diff --git a/resources/sql/autopatches/20150430.multimeter.1.sql b/resources/sql/autopatches/20150430.multimeter.1.sql new file mode 100644 index 0000000000..5929d4e31f --- /dev/null +++ b/resources/sql/autopatches/20150430.multimeter.1.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_multimeter.multimeter_event ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + eventType INT UNSIGNED NOT NULL, + eventLabelID INT UNSIGNED NOT NULL, + resourceCost BIGINT NOT NULL, + sampleRate INT UNSIGNED NOT NULL, + eventContextID INT UNSIGNED NOT NULL, + eventHostID INT UNSIGNED NOT NULL, + eventViewerID INT UNSIGNED NOT NULL, + epoch INT UNSIGNED NOT NULL, + requestKey BINARY(12) NOT NULL, + KEY `key_request` (requestKey), + KEY `key_type` (eventType, epoch) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150430.multimeter.2.host.sql b/resources/sql/autopatches/20150430.multimeter.2.host.sql new file mode 100644 index 0000000000..779bde1198 --- /dev/null +++ b/resources/sql/autopatches/20150430.multimeter.2.host.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_multimeter.multimeter_host ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + nameHash BINARY(12) NOT NULL, + UNIQUE KEY `key_hash` (nameHash) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150430.multimeter.3.viewer.sql b/resources/sql/autopatches/20150430.multimeter.3.viewer.sql new file mode 100644 index 0000000000..5dfa5f18d5 --- /dev/null +++ b/resources/sql/autopatches/20150430.multimeter.3.viewer.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_multimeter.multimeter_viewer ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + nameHash BINARY(12) NOT NULL, + UNIQUE KEY `key_hash` (nameHash) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150430.multimeter.4.context.sql b/resources/sql/autopatches/20150430.multimeter.4.context.sql new file mode 100644 index 0000000000..8171bbefb3 --- /dev/null +++ b/resources/sql/autopatches/20150430.multimeter.4.context.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_multimeter.multimeter_context ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + nameHash BINARY(12) NOT NULL, + UNIQUE KEY `key_hash` (nameHash) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150430.multimeter.5.label.sql b/resources/sql/autopatches/20150430.multimeter.5.label.sql new file mode 100644 index 0000000000..c1da143456 --- /dev/null +++ b/resources/sql/autopatches/20150430.multimeter.5.label.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_multimeter.multimeter_label ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + nameHash BINARY(12) NOT NULL, + UNIQUE KEY `key_hash` (nameHash) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150501.calendar.1.reply.sql b/resources/sql/autopatches/20150501.calendar.1.reply.sql new file mode 100644 index 0000000000..1f0a450758 --- /dev/null +++ b/resources/sql/autopatches/20150501.calendar.1.reply.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150501.calendar.2.reply.php b/resources/sql/autopatches/20150501.calendar.2.reply.php new file mode 100644 index 0000000000..2dab8268a6 --- /dev/null +++ b/resources/sql/autopatches/20150501.calendar.2.reply.php @@ -0,0 +1,21 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $event) { + $id = $event->getID(); + + echo pht('Populating event %d...', $id)."\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150501.conpherencepics.sql b/resources/sql/autopatches/20150501.conpherencepics.sql new file mode 100644 index 0000000000..a12464afb8 --- /dev/null +++ b/resources/sql/autopatches/20150501.conpherencepics.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD imagePHIDs LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL AFTER title; + +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET imagePHIDS = '[]'; diff --git a/resources/sql/autopatches/20150503.repositorysymbols.1.sql b/resources/sql/autopatches/20150503.repositorysymbols.1.sql new file mode 100644 index 0000000000..8b9799c104 --- /dev/null +++ b/resources/sql/autopatches/20150503.repositorysymbols.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_symbol + ADD repositoryPHID varbinary(64) NOT NULL AFTER arcanistProjectID; diff --git a/resources/sql/autopatches/20150503.repositorysymbols.2.php b/resources/sql/autopatches/20150503.repositorysymbols.2.php new file mode 100644 index 0000000000..35aa0aecec --- /dev/null +++ b/resources/sql/autopatches/20150503.repositorysymbols.2.php @@ -0,0 +1,6 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $event) { + $id = $event->getID(); + + if (strlen($event->getName()) == 0) { + echo pht('Renaming event %d...', $id)."\n"; + $viewer = PhabricatorUser::getOmnipotentUser(); + + // NOTE: This uses PeopleQuery directly, instead of HandleQuery, to avoid + // performing cache fills as a side effect; the caches were added by a + // later patch. See T8209. + $user = id(new PhabricatorPeopleQuery()) + ->setViewer($viewer) + ->withPHIDs(array($event->getHostPHID())) + ->executeOne(); + + if ($user) { + $new_name = $user->getUsername(); + } else { + $new_name = pht('Unnamed Event'); + } + + queryfx( + $conn_w, + 'UPDATE %T SET name = %s WHERE id = %d', + $table->getTableName(), + $new_name, + $id); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150507.calendar.1.isallday.sql b/resources/sql/autopatches/20150507.calendar.1.isallday.sql new file mode 100644 index 0000000000..172015b1be --- /dev/null +++ b/resources/sql/autopatches/20150507.calendar.1.isallday.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD isAllDay BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150513.user.cache.1.sql b/resources/sql/autopatches/20150513.user.cache.1.sql new file mode 100644 index 0000000000..f6bf6e1e6a --- /dev/null +++ b/resources/sql/autopatches/20150513.user.cache.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD profileImageCache VARCHAR(255) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150514.calendar.status.sql b/resources/sql/autopatches/20150514.calendar.status.sql new file mode 100644 index 0000000000..984205d99e --- /dev/null +++ b/resources/sql/autopatches/20150514.calendar.status.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + DROP status; diff --git a/resources/sql/autopatches/20150514.phame.blog.xaction.sql b/resources/sql/autopatches/20150514.phame.blog.xaction.sql new file mode 100644 index 0000000000..7d85c98082 --- /dev/null +++ b/resources/sql/autopatches/20150514.phame.blog.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blogtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150514.user.cache.2.sql b/resources/sql/autopatches/20150514.user.cache.2.sql new file mode 100644 index 0000000000..fc53324dc3 --- /dev/null +++ b/resources/sql/autopatches/20150514.user.cache.2.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD availabilityCache VARCHAR(255) COLLATE {$COLLATE_TEXT}; + +ALTER TABLE {$NAMESPACE}_user.user + ADD availabilityCacheTTL INT UNSIGNED; diff --git a/resources/sql/autopatches/20150515.phame.post.xaction.sql b/resources/sql/autopatches/20150515.phame.post.xaction.sql new file mode 100644 index 0000000000..a39bf52fb7 --- /dev/null +++ b/resources/sql/autopatches/20150515.phame.post.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_posttransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150515.project.mailkey.1.sql b/resources/sql/autopatches/20150515.project.mailkey.1.sql new file mode 100644 index 0000000000..277fbdafda --- /dev/null +++ b/resources/sql/autopatches/20150515.project.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150515.project.mailkey.2.php b/resources/sql/autopatches/20150515.project.mailkey.2.php new file mode 100644 index 0000000000..358c57d96d --- /dev/null +++ b/resources/sql/autopatches/20150515.project.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $project) { + $id = $project->getID(); + + echo pht('Adding mail key for project %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150519.calendar.calendaricon.sql b/resources/sql/autopatches/20150519.calendar.calendaricon.sql new file mode 100644 index 0000000000..d91520df0a --- /dev/null +++ b/resources/sql/autopatches/20150519.calendar.calendaricon.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD COLUMN icon VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL; + +UPDATE {$NAMESPACE}_calendar.calendar_event + SET icon = "fa-calendar" WHERE icon = ""; diff --git a/resources/sql/autopatches/20150521.releephrepository.sql b/resources/sql/autopatches/20150521.releephrepository.sql new file mode 100644 index 0000000000..6626cb8730 --- /dev/null +++ b/resources/sql/autopatches/20150521.releephrepository.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_project + MODIFY arcanistProjectID int(10) unsigned NULL; diff --git a/resources/sql/autopatches/20150525.diff.hidden.1.sql b/resources/sql/autopatches/20150525.diff.hidden.1.sql new file mode 100644 index 0000000000..d6b3df6440 --- /dev/null +++ b/resources/sql/autopatches/20150525.diff.hidden.1.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_hiddencomment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + userPHID VARBINARY(64) NOT NULL, + commentID INT UNSIGNED NOT NULL, + UNIQUE KEY `key_user` (userPHID, commentID), + KEY `key_comment` (commentID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150526.owners.mailkey.1.sql b/resources/sql/autopatches/20150526.owners.mailkey.1.sql new file mode 100644 index 0000000000..6e83129ec3 --- /dev/null +++ b/resources/sql/autopatches/20150526.owners.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150526.owners.mailkey.2.php b/resources/sql/autopatches/20150526.owners.mailkey.2.php new file mode 100644 index 0000000000..c6bb5f8266 --- /dev/null +++ b/resources/sql/autopatches/20150526.owners.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $package) { + $id = $package->getID(); + + echo pht('Adding mail key for package %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150526.owners.xaction.sql b/resources/sql/autopatches/20150526.owners.xaction.sql new file mode 100644 index 0000000000..f25b3dfdb6 --- /dev/null +++ b/resources/sql/autopatches/20150526.owners.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_packagetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150527.calendar.recurringevents.sql b/resources/sql/autopatches/20150527.calendar.recurringevents.sql new file mode 100644 index 0000000000..43fa15177b --- /dev/null +++ b/resources/sql/autopatches/20150527.calendar.recurringevents.sql @@ -0,0 +1,17 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD isRecurring BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD recurrenceFrequency LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; + +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD recurrenceEndDate INT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD instanceOfEventPHID varbinary(64); + +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD sequenceIndex INT UNSIGNED; + +UPDATE {$NAMESPACE}_calendar.calendar_event + SET recurrenceFrequency = '[]' WHERE recurrenceFrequency = ''; diff --git a/resources/sql/autopatches/20150601.spaces.1.namespace.sql b/resources/sql/autopatches/20150601.spaces.1.namespace.sql new file mode 100644 index 0000000000..302e5e8277 --- /dev/null +++ b/resources/sql/autopatches/20150601.spaces.1.namespace.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_spaces.spaces_namespace ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + namespaceName VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + isDefaultNamespace BOOL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_default` (isDefaultNamespace) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150601.spaces.2.xaction.sql b/resources/sql/autopatches/20150601.spaces.2.xaction.sql new file mode 100644 index 0000000000..4222593c6b --- /dev/null +++ b/resources/sql/autopatches/20150601.spaces.2.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_spaces.spaces_namespacetransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64), + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + oldValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + newValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + metadata LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150602.mlist.1.sql b/resources/sql/autopatches/20150602.mlist.1.sql new file mode 100644 index 0000000000..5479b972a6 --- /dev/null +++ b/resources/sql/autopatches/20150602.mlist.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD isMailingList BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150602.mlist.2.php b/resources/sql/autopatches/20150602.mlist.2.php new file mode 100644 index 0000000000..26d08e6f89 --- /dev/null +++ b/resources/sql/autopatches/20150602.mlist.2.php @@ -0,0 +1,146 @@ +establishConnection('w'); +$lists = new LiskRawMigrationIterator($conn_w, 'metamta_mailinglist'); + +echo pht('Migrating mailing lists...')."\n"; + +foreach ($lists as $list) { + $name = $list['name']; + $email = $list['email']; + $uri = $list['uri']; + $old_phid = $list['phid']; + + $username = preg_replace('/[^a-zA-Z0-9_-]+/', '-', $name); + $username = preg_replace('/-{2,}/', '-', $username); + $username = trim($username, '-'); + if (!strlen($username)) { + $username = 'mailinglist'; + } + $username .= '-list'; + + $username_okay = false; + for ($suffix = 1; $suffix <= 9; $suffix++) { + if ($suffix == 1) { + $effective_username = $username; + } else { + $effective_username = $username.$suffix; + } + + $collision = id(new PhabricatorPeopleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withUsernames(array($effective_username)) + ->executeOne(); + if (!$collision) { + $username_okay = true; + break; + } + } + + if (!$username_okay) { + echo pht( + 'Failed to migrate mailing list "%s": unable to generate a unique '. + 'username for it.', + $name)."\n"; + continue; + } + + $username = $effective_username; + if (!PhabricatorUser::validateUsername($username)) { + echo pht( + 'Failed to migrate mailing list "%s": unable to generate a valid '. + 'username for it.', + $name)."\n"; + continue; + } + + $address = id(new PhabricatorUserEmail())->loadOneWhere( + 'address = %s', + $email); + if ($address) { + echo pht( + 'Failed to migrate mailing list "%s": an existing user already '. + 'has the email address "%s".', + $name, + $email)."\n"; + continue; + } + + $user = id(new PhabricatorUser()) + ->setUsername($username) + ->setRealName(pht('Mailing List "%s"', $name)) + ->setIsApproved(1) + ->setIsMailingList(1); + + $email_object = id(new PhabricatorUserEmail()) + ->setAddress($email) + ->setIsVerified(1); + + try { + id(new PhabricatorUserEditor()) + ->setActor($user) + ->createNewUser($user, $email_object); + } catch (Exception $ex) { + echo pht( + 'Failed to migrate mailing list "%s": %s.', + $name, + $ex->getMessage())."\n"; + continue; + } + + $new_phid = $user->getPHID(); + + // NOTE: After the PHID type is removed we can't use any Edge code to + // modify edges. + + $edge_type = PhabricatorSubscribedToObjectEdgeType::EDGECONST; + $edge_inverse = PhabricatorObjectHasSubscriberEdgeType::EDGECONST; + + $map = PhabricatorPHIDType::getAllTypes(); + foreach ($map as $type => $spec) { + try { + $object = $spec->newObject(); + if (!$object) { + continue; + } + $object_conn_w = $object->establishConnection('w'); + queryfx( + $object_conn_w, + 'UPDATE %T SET dst = %s WHERE dst = %s AND type = %s', + PhabricatorEdgeConfig::TABLE_NAME_EDGE, + $new_phid, + $old_phid, + $edge_inverse); + } catch (Exception $ex) { + // Just ignore these; they're mostly tables not existing. + continue; + } + } + + try { + $dst_phids = queryfx_all( + $conn_w, + 'SELECT dst FROM %T WHERE src = %s AND type = %s', + PhabricatorEdgeConfig::TABLE_NAME_EDGE, + $old_phid, + $edge_type); + if ($dst_phids) { + $editor = new PhabricatorEdgeEditor(); + foreach ($dst_phids as $dst_phid) { + $editor->addEdge($new_phid, $edge_type, $dst_phid['dst']); + } + $editor->save(); + } + } catch (Exception $ex) { + echo pht( + 'Unable to migrate some inverse edges for mailing list "%s": %s.', + $name, + $ex->getMessage())."\n"; + continue; + } + + echo pht( + 'Migrated mailing list "%s" to mailing list user "%s".', + $name, + $user->getUsername())."\n"; +} diff --git a/resources/sql/autopatches/20150604.spaces.1.sql b/resources/sql/autopatches/20150604.spaces.1.sql new file mode 100644 index 0000000000..6fdfd66d82 --- /dev/null +++ b/resources/sql/autopatches/20150604.spaces.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150605.diviner.edges.sql b/resources/sql/autopatches/20150605.diviner.edges.sql new file mode 100644 index 0000000000..b0e1d61705 --- /dev/null +++ b/resources/sql/autopatches/20150605.diviner.edges.sql @@ -0,0 +1,17 @@ +CREATE TABLE {$NAMESPACE}_diviner.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + + PRIMARY KEY (src, type, dst), + KEY src (src, type, dateCreated, seq), + UNIQUE KEY key_dst (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_diviner.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150605.diviner.editPolicy.sql b/resources/sql/autopatches/20150605.diviner.editPolicy.sql new file mode 100644 index 0000000000..8c960a4f07 --- /dev/null +++ b/resources/sql/autopatches/20150605.diviner.editPolicy.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_diviner.diviner_livebook + ADD COLUMN editPolicy VARBINARY(64) NOT NULL AFTER viewPolicy; + +UPDATE {$NAMESPACE}_diviner.diviner_livebook + SET editPolicy = 'admin' + WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20150605.diviner.xaction.sql b/resources/sql/autopatches/20150605.diviner.xaction.sql new file mode 100644 index 0000000000..33f9b5d313 --- /dev/null +++ b/resources/sql/autopatches/20150605.diviner.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_diviner.diviner_livebooktransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY key_phid (phid), + KEY key_object (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150606.mlist.1.php b/resources/sql/autopatches/20150606.mlist.1.php new file mode 100644 index 0000000000..5ba458b68d --- /dev/null +++ b/resources/sql/autopatches/20150606.mlist.1.php @@ -0,0 +1,152 @@ +establishConnection('r'); + +$rows = queryfx_all( + $conn_r, + 'SELECT phid, email FROM %T', + 'metamta_mailinglist'); +if (!$rows) { + echo pht('No mailing lists to migrate.')."\n"; + return; +} + +$list_map = array(); +foreach ($rows as $row) { + $list_map[phutil_utf8_strtolower($row['email'])] = $row['phid']; +} + +$emails = id(new PhabricatorUserEmail())->loadAllWhere( + 'address IN (%Ls)', + array_keys($list_map)); +if (!$emails) { + echo pht('No mailing lists match addresses.')."\n"; + return; +} + +// Create a map from old mailing list PHIDs to new user PHIDs. +$map = array(); +foreach ($emails as $email) { + $user_phid = $email->getUserPHID(); + if (!$user_phid) { + continue; + } + + $address = $email->getAddress(); + $address = phutil_utf8_strtolower($address); + if (isset($list_map[$address])) { + $map[$list_map[$address]] = $user_phid; + } +} + +if (!$map) { + echo pht('No mailing lists match users.')."\n"; + return; +} + +echo pht('Migrating Herald conditions which use mailing lists..')."\n"; + +$table = new HeraldCondition(); +$conn_w = $table->establishConnection('w'); +foreach (new LiskMigrationIterator($table) as $condition) { + $name = $condition->getFieldName(); + if ($name == 'cc') { + // Okay, we can migrate these. + } else { + // This is not a condition type which has mailing lists in its value, so + // don't try to migrate it. + continue; + } + + $value = $condition->getValue(); + if (!is_array($value)) { + // Only migrate PHID lists. + continue; + } + + foreach ($value as $v) { + if (!is_string($v)) { + // Only migrate PHID lists where all members are PHIDs. + continue 2; + } + } + + $new = array(); + $any_change = false; + foreach ($value as $v) { + if (isset($map[$v])) { + $new[] = $map[$v]; + $any_change = true; + } else { + $new[] = $v; + } + } + + if (!$any_change) { + continue; + } + + $id = $condition->getID(); + + queryfx( + $conn_w, + 'UPDATE %T SET value = %s WHERE id = %d', + $table->getTableName(), + json_encode($new), + $id); + + + echo pht('Updated mailing lists in Herald condition %d.', $id)."\n"; +} + +$table = new HeraldActionRecord(); +$conn_w = $table->establishConnection('w'); +foreach (new LiskMigrationIterator($table) as $action) { + $name = $action->getAction(); + if ($name == 'addcc' || $name == 'remcc') { + // Okay, we can migrate these. + } else { + // This is not an action type which has mailing lists in its targets, so + // don't try to migrate it. + continue; + } + + $value = $action->getTarget(); + if (!is_array($value)) { + // Only migrate PHID lists. + continue; + } + + foreach ($value as $v) { + if (!is_string($v)) { + // Only migrate PHID lists where all members are PHIDs. + continue 2; + } + } + + $new = array(); + $any_change = false; + foreach ($value as $v) { + if (isset($map[$v])) { + $new[] = $map[$v]; + $any_change = true; + } else { + $new[] = $v; + } + } + + if (!$any_change) { + continue; + } + + $id = $action->getID(); + + queryfx( + $conn_w, + 'UPDATE %T SET target = %s WHERE id = %d', + $table->getTableName(), + json_encode($new), + $id); + + echo pht('Updated mailing lists in Herald action %d.', $id)."\n"; +} diff --git a/resources/sql/autopatches/20150609.inline.sql b/resources/sql/autopatches/20150609.inline.sql new file mode 100644 index 0000000000..1c9765ac5f --- /dev/null +++ b/resources/sql/autopatches/20150609.inline.sql @@ -0,0 +1,4 @@ +/* This cleans up some errant transactions, see T8483. */ + +DELETE FROM {$NAMESPACE}_differential.differential_transaction + WHERE transactionType = 'core:inlinestate' AND newValue = 'null'; diff --git a/resources/sql/autopatches/20150609.spaces.1.pholio.sql b/resources/sql/autopatches/20150609.spaces.1.pholio.sql new file mode 100644 index 0000000000..903afb86da --- /dev/null +++ b/resources/sql/autopatches/20150609.spaces.1.pholio.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150609.spaces.2.maniphest.sql b/resources/sql/autopatches/20150609.spaces.2.maniphest.sql new file mode 100644 index 0000000000..d46b5e5908 --- /dev/null +++ b/resources/sql/autopatches/20150609.spaces.2.maniphest.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150610.spaces.1.desc.sql b/resources/sql/autopatches/20150610.spaces.1.desc.sql new file mode 100644 index 0000000000..c62cd8aece --- /dev/null +++ b/resources/sql/autopatches/20150610.spaces.1.desc.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_spaces.spaces_namespace + ADD description LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20150610.spaces.2.edge.sql b/resources/sql/autopatches/20150610.spaces.2.edge.sql new file mode 100644 index 0000000000..bc72ed2225 --- /dev/null +++ b/resources/sql/autopatches/20150610.spaces.2.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_spaces.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_spaces.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150610.spaces.3.archive.sql b/resources/sql/autopatches/20150610.spaces.3.archive.sql new file mode 100644 index 0000000000..8dd55959a3 --- /dev/null +++ b/resources/sql/autopatches/20150610.spaces.3.archive.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_spaces.spaces_namespace + ADD isArchived BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150611.spaces.1.mailxaction.sql b/resources/sql/autopatches/20150611.spaces.1.mailxaction.sql new file mode 100644 index 0000000000..fe519f48ab --- /dev/null +++ b/resources/sql/autopatches/20150611.spaces.1.mailxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_metamta.metamta_applicationemailtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150611.spaces.2.appmail.sql b/resources/sql/autopatches/20150611.spaces.2.appmail.sql new file mode 100644 index 0000000000..c846e4338f --- /dev/null +++ b/resources/sql/autopatches/20150611.spaces.2.appmail.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_applicationemail + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150616.divinerrepository.sql b/resources/sql/autopatches/20150616.divinerrepository.sql new file mode 100644 index 0000000000..8e6875c7d9 --- /dev/null +++ b/resources/sql/autopatches/20150616.divinerrepository.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_diviner.diviner_livebook + ADD COLUMN repositoryPHID VARBINARY(64) AFTER name; + +ALTER TABLE {$NAMESPACE}_diviner.diviner_livesymbol + ADD COLUMN repositoryPHID VARBINARY(64) AFTER bookPHID; diff --git a/resources/sql/autopatches/20150617.harbor.1.lint.sql b/resources/sql/autopatches/20150617.harbor.1.lint.sql new file mode 100644 index 0000000000..ff23386509 --- /dev/null +++ b/resources/sql/autopatches/20150617.harbor.1.lint.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlintmessage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + buildTargetPHID VARBINARY(64) NOT NULL, + path LONGTEXT NOT NULL, + line INT UNSIGNED, + characterOffset INT UNSIGNED, + code VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + severity VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + name VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL, + properties LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_target` (buildTargetPHID) +) ENGINE=INNODB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150617.harbor.2.unit.sql b/resources/sql/autopatches/20150617.harbor.2.unit.sql new file mode 100644 index 0000000000..3140947652 --- /dev/null +++ b/resources/sql/autopatches/20150617.harbor.2.unit.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildunitmessage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + buildTargetPHID VARBINARY(64) NOT NULL, + engine VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL, + namespace VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL, + name VARCHAR(255) COLLATE {$COLLATE_TEXT} NOT NULL, + result VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + duration DOUBLE, + properties LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_target` (buildTargetPHID) +) ENGINE=INNODB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150618.harbor.1.planauto.sql b/resources/sql/autopatches/20150618.harbor.1.planauto.sql new file mode 100644 index 0000000000..915006824c --- /dev/null +++ b/resources/sql/autopatches/20150618.harbor.1.planauto.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplan + ADD planAutoKey VARCHAR(32) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150618.harbor.2.stepauto.sql b/resources/sql/autopatches/20150618.harbor.2.stepauto.sql new file mode 100644 index 0000000000..6b95c9db3d --- /dev/null +++ b/resources/sql/autopatches/20150618.harbor.2.stepauto.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildstep + ADD stepAutoKey VARCHAR(32) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150618.harbor.3.buildauto.sql b/resources/sql/autopatches/20150618.harbor.3.buildauto.sql new file mode 100644 index 0000000000..660577728f --- /dev/null +++ b/resources/sql/autopatches/20150618.harbor.3.buildauto.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build + ADD planAutoKey VARCHAR(32) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150619.conpherencerooms.1.sql b/resources/sql/autopatches/20150619.conpherencerooms.1.sql new file mode 100644 index 0000000000..c7c5c56053 --- /dev/null +++ b/resources/sql/autopatches/20150619.conpherencerooms.1.sql @@ -0,0 +1,6 @@ +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET + viewPolicy = 'obj.conpherence.members', + editPolicy = 'obj.conpherence.members', + joinPolicy = 'obj.conpherence.members' + WHERE isRoom = 0; diff --git a/resources/sql/autopatches/20150619.conpherencerooms.2.sql b/resources/sql/autopatches/20150619.conpherencerooms.2.sql new file mode 100644 index 0000000000..e6c54a0921 --- /dev/null +++ b/resources/sql/autopatches/20150619.conpherencerooms.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + DROP KEY `key_room`; diff --git a/resources/sql/autopatches/20150619.conpherencerooms.3.sql b/resources/sql/autopatches/20150619.conpherencerooms.3.sql new file mode 100644 index 0000000000..c4fb35b57c --- /dev/null +++ b/resources/sql/autopatches/20150619.conpherencerooms.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + DROP COLUMN isRoom; diff --git a/resources/sql/autopatches/20150621.phrase.1.sql b/resources/sql/autopatches/20150621.phrase.1.sql new file mode 100644 index 0000000000..323b2b2208 --- /dev/null +++ b/resources/sql/autopatches/20150621.phrase.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_passphrase.passphrase_credential + ADD authorPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20150621.phrase.2.sql b/resources/sql/autopatches/20150621.phrase.2.sql new file mode 100644 index 0000000000..06fa7e2bf2 --- /dev/null +++ b/resources/sql/autopatches/20150621.phrase.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_passphrase.passphrase_credential + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150622.bulk.1.job.sql b/resources/sql/autopatches/20150622.bulk.1.job.sql new file mode 100644 index 0000000000..a0cdb5d678 --- /dev/null +++ b/resources/sql/autopatches/20150622.bulk.1.job.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_bulkjob ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + jobTypeKey VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + status VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + parameters LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + size INT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_type` (jobTypeKey), + KEY `key_author` (authorPHID), + KEY `key_status` (status) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150622.bulk.2.task.sql b/resources/sql/autopatches/20150622.bulk.2.task.sql new file mode 100644 index 0000000000..f98c205180 --- /dev/null +++ b/resources/sql/autopatches/20150622.bulk.2.task.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_bulktask ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + bulkJobPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + status VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + data LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + KEY `key_job` (bulkJobPHID, status), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150622.bulk.3.xaction.sql b/resources/sql/autopatches/20150622.bulk.3.xaction.sql new file mode 100644 index 0000000000..27aa2d5caf --- /dev/null +++ b/resources/sql/autopatches/20150622.bulk.3.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_bulkjobtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150622.bulk.4.edge.sql b/resources/sql/autopatches/20150622.bulk.4.edge.sql new file mode 100644 index 0000000000..3d81a1bcf6 --- /dev/null +++ b/resources/sql/autopatches/20150622.bulk.4.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_worker.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_worker.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150622.metamta.1.phid-col.sql b/resources/sql/autopatches/20150622.metamta.1.phid-col.sql new file mode 100644 index 0000000000..9bdd1a005e --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.1.phid-col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + ADD phid VARBINARY(64) NOT NULL AFTER id; diff --git a/resources/sql/autopatches/20150622.metamta.2.phid-mig.php b/resources/sql/autopatches/20150622.metamta.2.phid-mig.php new file mode 100644 index 0000000000..35932a701b --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.2.phid-mig.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +echo pht('Assigning PHIDs to mails...')."\n"; +foreach (new LiskMigrationIterator($table) as $mail) { + $id = $mail->getID(); + + echo pht('Updating mail %d...', $id)."\n"; + if ($mail->getPHID()) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $id); +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150622.metamta.3.phid-key.sql b/resources/sql/autopatches/20150622.metamta.3.phid-key.sql new file mode 100644 index 0000000000..dae8d7e604 --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.3.phid-key.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/autopatches/20150622.metamta.4.actor-phid-col.sql b/resources/sql/autopatches/20150622.metamta.4.actor-phid-col.sql new file mode 100644 index 0000000000..cc0bcb221a --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.4.actor-phid-col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + ADD actorPHID VARBINARY(64) AFTER phid; diff --git a/resources/sql/autopatches/20150622.metamta.5.actor-phid-mig.php b/resources/sql/autopatches/20150622.metamta.5.actor-phid-mig.php new file mode 100644 index 0000000000..d27e54098f --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.5.actor-phid-mig.php @@ -0,0 +1,27 @@ +establishConnection('w'); + +echo pht('Assigning actorPHIDs to mails...')."\n"; +foreach (new LiskMigrationIterator($table) as $mail) { + $id = $mail->getID(); + + echo pht('Updating mail %d...', $id)."\n"; + if ($mail->getActorPHID()) { + continue; + } + + $actor_phid = $mail->getFrom(); + if ($actor_phid === null) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET actorPHID = %s WHERE id = %d', + $table->getTableName(), + $actor_phid, + $id); +} +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20150622.metamta.6.actor-phid-key.sql b/resources/sql/autopatches/20150622.metamta.6.actor-phid-key.sql new file mode 100644 index 0000000000..7b0bb0e867 --- /dev/null +++ b/resources/sql/autopatches/20150622.metamta.6.actor-phid-key.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_metamta.metamta_mail + ADD KEY `key_actorPHID` (actorPHID); diff --git a/resources/sql/autopatches/20150624.spaces.1.repo.sql b/resources/sql/autopatches/20150624.spaces.1.repo.sql new file mode 100644 index 0000000000..dbb1e23206 --- /dev/null +++ b/resources/sql/autopatches/20150624.spaces.1.repo.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150626.spaces.1.calendar.sql b/resources/sql/autopatches/20150626.spaces.1.calendar.sql new file mode 100644 index 0000000000..0560bc94fc --- /dev/null +++ b/resources/sql/autopatches/20150626.spaces.1.calendar.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150630.herald.1.sql b/resources/sql/autopatches/20150630.herald.1.sql new file mode 100644 index 0000000000..e06532f640 --- /dev/null +++ b/resources/sql/autopatches/20150630.herald.1.sql @@ -0,0 +1,5 @@ +# NOTE: This is a spelling correction. + +UPDATE {$NAMESPACE}_herald.herald_condition + SET fieldName = 'application-email' + WHERE fieldName = 'applicaton-email'; diff --git a/resources/sql/autopatches/20150630.herald.2.sql b/resources/sql/autopatches/20150630.herald.2.sql new file mode 100644 index 0000000000..3c5d6ee628 --- /dev/null +++ b/resources/sql/autopatches/20150630.herald.2.sql @@ -0,0 +1,30 @@ +# This converts old conditions which use common fields like "body" to new +# conditions which use modular rules like "Maniphest Task Description". + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'maniphest.task.title' + WHERE r.contentType = 'HeraldManiphestTaskAdapter' + AND c.fieldName = 'title'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'maniphest.task.description' + WHERE r.contentType = 'HeraldManiphestTaskAdapter' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'maniphest.task.author' + WHERE r.contentType = 'HeraldManiphestTaskAdapter' + AND c.fieldName = 'author'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'maniphest.task.assignee' + WHERE r.contentType = 'HeraldManiphestTaskAdapter' + AND c.fieldName = 'assignee'; diff --git a/resources/sql/autopatches/20150701.herald.1.sql b/resources/sql/autopatches/20150701.herald.1.sql new file mode 100644 index 0000000000..61817bb530 --- /dev/null +++ b/resources/sql/autopatches/20150701.herald.1.sql @@ -0,0 +1,20 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'pholio.mock.name' + WHERE r.contentType = 'HeraldPholioMockAdapter' + AND c.fieldName = 'title'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'pholio.mock.description' + WHERE r.contentType = 'HeraldPholioMockAdapter' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'pholio.mock.author' + WHERE r.contentType = 'HeraldPholioMockAdapter' + AND c.fieldName = 'author'; diff --git a/resources/sql/autopatches/20150701.herald.2.sql b/resources/sql/autopatches/20150701.herald.2.sql new file mode 100644 index 0000000000..e65cc2c971 --- /dev/null +++ b/resources/sql/autopatches/20150701.herald.2.sql @@ -0,0 +1,20 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'phriction.document.title' + WHERE r.contentType = 'PhrictionDocumentHeraldAdapter' + AND c.fieldName = 'title'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'phriction.document.content' + WHERE r.contentType = 'PhrictionDocumentHeraldAdapter' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'phriction.document.author' + WHERE r.contentType = 'PhrictionDocumentHeraldAdapter' + AND c.fieldName = 'author'; diff --git a/resources/sql/autopatches/20150702.spaces.1.slowvote.sql b/resources/sql/autopatches/20150702.spaces.1.slowvote.sql new file mode 100644 index 0000000000..54b7f90003 --- /dev/null +++ b/resources/sql/autopatches/20150702.spaces.1.slowvote.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll +ADD spacePHID varbinary(64); diff --git a/resources/sql/autopatches/20150706.herald.1.sql b/resources/sql/autopatches/20150706.herald.1.sql new file mode 100644 index 0000000000..04a402c5c0 --- /dev/null +++ b/resources/sql/autopatches/20150706.herald.1.sql @@ -0,0 +1,133 @@ +UPDATE {$NAMESPACE}_herald.herald_condition + SET fieldName = 'diffusion.commit.autoclose' + WHERE fieldName = 'repository-autoclose-branch'; + +UPDATE {$NAMESPACE}_herald.herald_condition + SET fieldName = 'diffusion.commit.package.audit' + WHERE fieldName = 'need-audit-for-package'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.affected' + WHERE r.contentType = 'commit' + AND c.fieldName = 'diff-file'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.author' + WHERE r.contentType = 'commit' + AND c.fieldName = 'author'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.branches' + WHERE r.contentType = 'commit' + AND c.fieldName = 'branches'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.committer' + WHERE r.contentType = 'commit' + AND c.fieldName = 'committer'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.diff.new' + WHERE r.contentType = 'commit' + AND c.fieldName = 'diff-added-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.diff' + WHERE r.contentType = 'commit' + AND c.fieldName = 'diff-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.diff.old' + WHERE r.contentType = 'commit' + AND c.fieldName = 'diff-removed-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.enormous' + WHERE r.contentType = 'commit' + AND c.fieldName = 'diff-enormous'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.message' + WHERE r.contentType = 'commit' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.package' + WHERE r.contentType = 'commit' + AND c.fieldName = 'affected-package'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.package.owners' + WHERE r.contentType = 'commit' + AND c.fieldName = 'affected-package-owner'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.repository' + WHERE r.contentType = 'commit' + AND c.fieldName = 'repository'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.repository.projects' + WHERE r.contentType = 'commit' + AND c.fieldName = 'repository-projects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.reviewer' + WHERE r.contentType = 'commit' + AND c.fieldName = 'reviewer'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.revision.accepted' + WHERE r.contentType = 'commit' + AND c.fieldName = 'differential-accepted'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.revision' + WHERE r.contentType = 'commit' + AND c.fieldName = 'differential-revision'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.revision.subscribers' + WHERE r.contentType = 'commit' + AND c.fieldName = 'differential-ccs'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.commit.revision.reviewers' + WHERE r.contentType = 'commit' + AND c.fieldName = 'differential-reviewers'; diff --git a/resources/sql/autopatches/20150707.herald.1.sql b/resources/sql/autopatches/20150707.herald.1.sql new file mode 100644 index 0000000000..e8e12129d4 --- /dev/null +++ b/resources/sql/autopatches/20150707.herald.1.sql @@ -0,0 +1,55 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.affected' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'diff-file'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.author' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'author'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.author.projects' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'authorprojects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.new' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'diff-added-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.content' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'diff-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.old' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'diff-removed-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.repository' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'repository'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.diff.repository.projects' + WHERE r.contentType = 'differential.diff' + AND c.fieldName = 'repository-projects'; diff --git a/resources/sql/autopatches/20150708.arcanistproject.sql b/resources/sql/autopatches/20150708.arcanistproject.sql new file mode 100644 index 0000000000..0dc4e5420f --- /dev/null +++ b/resources/sql/autopatches/20150708.arcanistproject.sql @@ -0,0 +1,10 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + DROP COLUMN arcanistProjectPHID; + +ALTER TABLE {$NAMESPACE}_differential.differential_revision + DROP COLUMN arcanistProjectPHID; + +ALTER TABLE {$NAMESPACE}_releeph.releeph_project + DROP COLUMN arcanistProjectID; + +DROP TABLE {$NAMESPACE}_repository.repository_arcanistproject; diff --git a/resources/sql/autopatches/20150708.herald.1.sql b/resources/sql/autopatches/20150708.herald.1.sql new file mode 100644 index 0000000000..678fad4690 --- /dev/null +++ b/resources/sql/autopatches/20150708.herald.1.sql @@ -0,0 +1,90 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.diff.affected' + WHERE r.contentType = 'differential' + AND c.fieldName = 'diff-file'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.author' + WHERE r.contentType = 'differential' + AND c.fieldName = 'author'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.author.projects' + WHERE r.contentType = 'differential' + AND c.fieldName = 'authorprojects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.diff.new' + WHERE r.contentType = 'differential' + AND c.fieldName = 'diff-added-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.diff.content' + WHERE r.contentType = 'differential' + AND c.fieldName = 'diff-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.diff.old' + WHERE r.contentType = 'differential' + AND c.fieldName = 'diff-removed-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.package' + WHERE r.contentType = 'differential' + AND c.fieldName = 'affected-package'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.repository' + WHERE r.contentType = 'differential' + AND c.fieldName = 'repository'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.repository.projects' + WHERE r.contentType = 'differential' + AND c.fieldName = 'repository-projects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.reviewers' + WHERE r.contentType = 'differential' + AND c.fieldName = 'reviewers'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.summary' + WHERE r.contentType = 'differential' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.title' + WHERE r.contentType = 'differential' + AND c.fieldName = 'title'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'differential.revision.package.owners' + WHERE r.contentType = 'differential' + AND c.fieldName = 'affected-package-owner'; diff --git a/resources/sql/autopatches/20150708.herald.2.sql b/resources/sql/autopatches/20150708.herald.2.sql new file mode 100644 index 0000000000..ad59936728 --- /dev/null +++ b/resources/sql/autopatches/20150708.herald.2.sql @@ -0,0 +1,48 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.type' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'ref-type'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.name' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'ref-name'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.change' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'ref-change'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.repository' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'repository'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.repository.projects' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'repository-projects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.pusher' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'pusher'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.ref.pusher.projects' + WHERE r.contentType = 'HeraldPreCommitRefAdapter' + AND c.fieldName = 'pusher-projects'; diff --git a/resources/sql/autopatches/20150708.herald.3.sql b/resources/sql/autopatches/20150708.herald.3.sql new file mode 100644 index 0000000000..2085941a7b --- /dev/null +++ b/resources/sql/autopatches/20150708.herald.3.sql @@ -0,0 +1,146 @@ +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.message' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'body'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.author' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'author'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.author.raw' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'author-raw'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.committer' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'committer'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.committer.raw' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'committer-raw'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.branches' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'branches'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.pusher' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'pusher'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.pusher.projects' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'pusher-projects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.repository' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'repository'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.repository.projects' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'repository-projects'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.pusher.is-committer' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'pusher-is-committer'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.revision' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'differential-revision'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.revision.accepted' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'differential-accepted'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.revision.reviewers' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'differential-reviewers'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.revision.subscribers' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'differential-ccs'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.diff.enormous' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'diff-enormous'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.affected' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'diff-file'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.diff.content' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'diff-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.diff.new' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'diff-added-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.commit.diff.old' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'diff-removed-content'; + +UPDATE {$NAMESPACE}_herald.herald_condition c + JOIN {$NAMESPACE}_herald.herald_rule r + ON c.ruleID = r.id + SET c.fieldName = 'diffusion.pre.content.merge' + WHERE r.contentType = 'HeraldPreCommitContentAdapter' + AND c.fieldName = 'is-merge-commit'; diff --git a/resources/sql/autopatches/20150712.badges.1.sql b/resources/sql/autopatches/20150712.badges.1.sql new file mode 100644 index 0000000000..f0b70049d9 --- /dev/null +++ b/resources/sql/autopatches/20150712.badges.1.sql @@ -0,0 +1,54 @@ +CREATE TABLE {$NAMESPACE}_badges.badges_badge ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + flavor VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + description LONGTEXT NOT NULL, + icon VARCHAR(255) NOT NULL, + quality VARCHAR(255) NOT NULL, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + creatorPHID varbinary(64) NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_creator` (creatorPHID, dateModified) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_badges.badges_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64), + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + oldValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + newValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + metadata LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_badges.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_badges.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150714.spaces.countdown.1.sql b/resources/sql/autopatches/20150714.spaces.countdown.1.sql new file mode 100644 index 0000000000..1b07587331 --- /dev/null +++ b/resources/sql/autopatches/20150714.spaces.countdown.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown +ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150717.herald.1.sql b/resources/sql/autopatches/20150717.herald.1.sql new file mode 100644 index 0000000000..aeb9f80301 --- /dev/null +++ b/resources/sql/autopatches/20150717.herald.1.sql @@ -0,0 +1,2 @@ +RENAME TABLE {$NAMESPACE}_herald.herald_action + TO {$NAMESPACE}_herald.herald_actionrecord; diff --git a/resources/sql/autopatches/20150719.countdown.1.sql b/resources/sql/autopatches/20150719.countdown.1.sql new file mode 100644 index 0000000000..72c039f4c2 --- /dev/null +++ b/resources/sql/autopatches/20150719.countdown.1.sql @@ -0,0 +1,36 @@ +CREATE TABLE {$NAMESPACE}_countdown.countdown_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64), + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + oldValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + newValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + metadata LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_countdown.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_countdown.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150719.countdown.2.sql b/resources/sql/autopatches/20150719.countdown.2.sql new file mode 100644 index 0000000000..fbf7dfe235 --- /dev/null +++ b/resources/sql/autopatches/20150719.countdown.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown +ADD editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20150719.countdown.3.sql b/resources/sql/autopatches/20150719.countdown.3.sql new file mode 100644 index 0000000000..29c54fe666 --- /dev/null +++ b/resources/sql/autopatches/20150719.countdown.3.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_countdown.countdown + SET editPolicy = authorPHID WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20150721.phurl.1.url.sql b/resources/sql/autopatches/20150721.phurl.1.url.sql new file mode 100644 index 0000000000..05dcce2d03 --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.1.url.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_phurl.phurl_url ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + longURL VARCHAR(2047) NOT NULL COLLATE {$COLLATE_TEXT}, + description VARCHAR(2047) NOT NULL COLLATE {$COLLATE_TEXT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + spacePHID varbinary(64) DEFAULT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150721.phurl.2.xaction.sql b/resources/sql/autopatches/20150721.phurl.2.xaction.sql new file mode 100644 index 0000000000..84a4a6f4e8 --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.2.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phurl.phurl_urltransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150721.phurl.3.xactioncomment.sql b/resources/sql/autopatches/20150721.phurl.3.xactioncomment.sql new file mode 100644 index 0000000000..f778c9596f --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.3.xactioncomment.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_phurl.phurl_urltransaction_comment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + transactionPHID VARBINARY(64) DEFAULT NULL, + authorPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + isDeleted TINYINT(1) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB COLLATE {$COLLATE_TEXT} diff --git a/resources/sql/autopatches/20150721.phurl.4.url.sql b/resources/sql/autopatches/20150721.phurl.4.url.sql new file mode 100644 index 0000000000..6c29fba51a --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.4.url.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_phurl.phurl_url + ADD dateCreated int unsigned NOT NULL, + ADD dateModified int unsigned NOT NULL; diff --git a/resources/sql/autopatches/20150721.phurl.5.edge.sql b/resources/sql/autopatches/20150721.phurl.5.edge.sql new file mode 100644 index 0000000000..a2636d6a47 --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.5.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_phurl.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_phurl.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150721.phurl.6.alias.sql b/resources/sql/autopatches/20150721.phurl.6.alias.sql new file mode 100644 index 0000000000..1ed7717b50 --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.6.alias.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phurl.phurl_url + ADD alias VARCHAR(64) COLLATE {$COLLATE_SORT}; diff --git a/resources/sql/autopatches/20150721.phurl.7.authorphid.sql b/resources/sql/autopatches/20150721.phurl.7.authorphid.sql new file mode 100644 index 0000000000..a335f9e398 --- /dev/null +++ b/resources/sql/autopatches/20150721.phurl.7.authorphid.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_phurl.phurl_url + ADD authorPHID VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phurl.phurl_url + CHANGE description description LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + CHANGE longURL longURL LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150722.dashboard.1.sql b/resources/sql/autopatches/20150722.dashboard.1.sql new file mode 100644 index 0000000000..1cd135e48c --- /dev/null +++ b/resources/sql/autopatches/20150722.dashboard.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150722.dashboard.2.sql b/resources/sql/autopatches/20150722.dashboard.2.sql new file mode 100644 index 0000000000..21a9a2ab88 --- /dev/null +++ b/resources/sql/autopatches/20150722.dashboard.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_dashboard.dashboard + SET status = 'open'; diff --git a/resources/sql/autopatches/20150723.countdown.1.sql b/resources/sql/autopatches/20150723.countdown.1.sql new file mode 100644 index 0000000000..d61f4d99d0 --- /dev/null +++ b/resources/sql/autopatches/20150723.countdown.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown + ADD description LONGTEXT NOT NULL; diff --git a/resources/sql/autopatches/20150724.badges.comments.1.sql b/resources/sql/autopatches/20150724.badges.comments.1.sql new file mode 100644 index 0000000000..1f1579c201 --- /dev/null +++ b/resources/sql/autopatches/20150724.badges.comments.1.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_badges.badges_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL, + transactionPHID VARCHAR(64), + authorPHID VARCHAR(64) NOT NULL, + viewPolicy VARCHAR(64) NOT NULL, + editPolicy VARCHAR(64) NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150724.countdown.comments.1.sql b/resources/sql/autopatches/20150724.countdown.comments.1.sql new file mode 100644 index 0000000000..fc385bd184 --- /dev/null +++ b/resources/sql/autopatches/20150724.countdown.comments.1.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_countdown.countdown_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL, + transactionPHID VARCHAR(64), + authorPHID VARCHAR(64) NOT NULL, + viewPolicy VARCHAR(64) NOT NULL, + editPolicy VARCHAR(64) NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150725.badges.mailkey.1.sql b/resources/sql/autopatches/20150725.badges.mailkey.1.sql new file mode 100644 index 0000000000..5219a759b3 --- /dev/null +++ b/resources/sql/autopatches/20150725.badges.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_badges.badges_badge + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150725.badges.mailkey.2.php b/resources/sql/autopatches/20150725.badges.mailkey.2.php new file mode 100644 index 0000000000..8231492478 --- /dev/null +++ b/resources/sql/autopatches/20150725.badges.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $badge) { + $id = $badge->getID(); + + echo pht('Adding mail key for badge %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150725.badges.viewpolicy.3.sql b/resources/sql/autopatches/20150725.badges.viewpolicy.3.sql new file mode 100644 index 0000000000..a5933f4ade --- /dev/null +++ b/resources/sql/autopatches/20150725.badges.viewpolicy.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_badges.badges_badge + DROP COLUMN viewPolicy; diff --git a/resources/sql/autopatches/20150725.countdown.mailkey.1.sql b/resources/sql/autopatches/20150725.countdown.mailkey.1.sql new file mode 100644 index 0000000000..c53441e1cb --- /dev/null +++ b/resources/sql/autopatches/20150725.countdown.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150725.countdown.mailkey.2.php b/resources/sql/autopatches/20150725.countdown.mailkey.2.php new file mode 100644 index 0000000000..c07a763942 --- /dev/null +++ b/resources/sql/autopatches/20150725.countdown.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $countdown) { + $id = $countdown->getID(); + + echo pht('Adding mail key for countdown %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150725.slowvote.mailkey.1.sql b/resources/sql/autopatches/20150725.slowvote.mailkey.1.sql new file mode 100644 index 0000000000..00591afa56 --- /dev/null +++ b/resources/sql/autopatches/20150725.slowvote.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150725.slowvote.mailkey.2.php b/resources/sql/autopatches/20150725.slowvote.mailkey.2.php new file mode 100644 index 0000000000..fa6b2035df --- /dev/null +++ b/resources/sql/autopatches/20150725.slowvote.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $slowvote) { + $id = $slowvote->getID(); + + echo pht('Adding mail key for Slowvote %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150727.heraldaction.1.sql b/resources/sql/autopatches/20150727.heraldaction.1.sql new file mode 100644 index 0000000000..f4cbf19504 --- /dev/null +++ b/resources/sql/autopatches/20150727.heraldaction.1.sql @@ -0,0 +1,2 @@ +RENAME TABLE {$NAMESPACE}_herald.herald_actionrecord + TO {$NAMESPACE}_herald.herald_action; diff --git a/resources/sql/autopatches/20150730.herald.1.sql b/resources/sql/autopatches/20150730.herald.1.sql new file mode 100644 index 0000000000..e6e097f82c --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.1.sql @@ -0,0 +1,27 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'subscribers.add' + WHERE r.ruleType != 'personal' + AND a.action = 'addcc'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'subscribers.self.add' + WHERE r.ruleType = 'personal' + AND a.action = 'addcc'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'subscribers.remove' + WHERE r.ruleType != 'personal' + AND a.action = 'remcc'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'subscribers.self.remove' + WHERE r.ruleType = 'personal' + AND a.action = 'remcc'; diff --git a/resources/sql/autopatches/20150730.herald.2.sql b/resources/sql/autopatches/20150730.herald.2.sql new file mode 100644 index 0000000000..3d0b5a0a05 --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.2.sql @@ -0,0 +1,13 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'email.other' + WHERE r.ruleType != 'personal' + AND a.action = 'email'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'email.self' + WHERE r.ruleType = 'personal' + AND a.action = 'email'; diff --git a/resources/sql/autopatches/20150730.herald.3.sql b/resources/sql/autopatches/20150730.herald.3.sql new file mode 100644 index 0000000000..e9fcbff59b --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.3.sql @@ -0,0 +1,11 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'projects.add' + WHERE a.action = 'addprojects'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'projects.remove' + WHERE a.action = 'removeprojects'; diff --git a/resources/sql/autopatches/20150730.herald.4.sql b/resources/sql/autopatches/20150730.herald.4.sql new file mode 100644 index 0000000000..1f5c35a851 --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.4.sql @@ -0,0 +1,13 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'maniphest.assign.other' + WHERE r.ruleType != 'personal' + AND a.action = 'assigntask'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'maniphest.assign.self' + WHERE r.ruleType = 'personal' + AND a.action = 'assigntask'; diff --git a/resources/sql/autopatches/20150730.herald.5.sql b/resources/sql/autopatches/20150730.herald.5.sql new file mode 100644 index 0000000000..84c9eea3c5 --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.5.sql @@ -0,0 +1,27 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.blocking' + WHERE r.ruleType != 'personal' + AND a.action = 'addreviewers'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.self.blocking' + WHERE r.ruleType = 'personal' + AND a.action = 'addreviewers'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.add' + WHERE r.ruleType != 'personal' + AND a.action = 'addblockingreviewers'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.self.add' + WHERE r.ruleType = 'personal' + AND a.action = 'addblockingreviewers'; diff --git a/resources/sql/autopatches/20150730.herald.6.sql b/resources/sql/autopatches/20150730.herald.6.sql new file mode 100644 index 0000000000..08188c6d4f --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.6.sql @@ -0,0 +1,6 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'legalpad.require' + WHERE r.ruleType != 'personal' + AND a.action = 'signature'; diff --git a/resources/sql/autopatches/20150730.herald.7.sql b/resources/sql/autopatches/20150730.herald.7.sql new file mode 100644 index 0000000000..403a90ac26 --- /dev/null +++ b/resources/sql/autopatches/20150730.herald.7.sql @@ -0,0 +1,6 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'harbormaster.build' + WHERE r.ruleType != 'personal' + AND a.action = 'applybuildplans'; diff --git a/resources/sql/autopatches/20150803.herald.1.sql b/resources/sql/autopatches/20150803.herald.1.sql new file mode 100644 index 0000000000..21f462b8c8 --- /dev/null +++ b/resources/sql/autopatches/20150803.herald.1.sql @@ -0,0 +1,13 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'diffusion.auditors.add' + WHERE r.ruleType != 'personal' + AND a.action = 'audit'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'diffusion.auditors.self.add' + WHERE r.ruleType = 'personal' + AND a.action = 'audit'; diff --git a/resources/sql/autopatches/20150803.herald.2.sql b/resources/sql/autopatches/20150803.herald.2.sql new file mode 100644 index 0000000000..4d48bc03b6 --- /dev/null +++ b/resources/sql/autopatches/20150803.herald.2.sql @@ -0,0 +1,13 @@ +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'diffusion.block' + WHERE r.contentType != 'differential.diff' + AND a.action = 'block'; + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.block' + WHERE r.contentType = 'differential.diff' + AND a.action = 'block'; diff --git a/resources/sql/autopatches/20150804.ponder.answer.mailkey.1.sql b/resources/sql/autopatches/20150804.ponder.answer.mailkey.1.sql new file mode 100644 index 0000000000..63ba3494f9 --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.answer.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_answer + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20150804.ponder.answer.mailkey.2.php b/resources/sql/autopatches/20150804.ponder.answer.mailkey.2.php new file mode 100644 index 0000000000..e643a5dab5 --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.answer.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $answer) { + $id = $answer->getID(); + + echo pht('Adding mail key for Answer %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20150804.ponder.question.1.sql b/resources/sql/autopatches/20150804.ponder.question.1.sql new file mode 100644 index 0000000000..8ea3b2c34c --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.question.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD editPolicy VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD viewPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20150804.ponder.question.2.sql b/resources/sql/autopatches/20150804.ponder.question.2.sql new file mode 100644 index 0000000000..ddca10f753 --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.question.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_question + SET editPolicy = authorPHID WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20150804.ponder.question.3.sql b/resources/sql/autopatches/20150804.ponder.question.3.sql new file mode 100644 index 0000000000..0a359453ea --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.question.3.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_question + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/autopatches/20150804.ponder.spaces.4.sql b/resources/sql/autopatches/20150804.ponder.spaces.4.sql new file mode 100644 index 0000000000..4282b8a509 --- /dev/null +++ b/resources/sql/autopatches/20150804.ponder.spaces.4.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD spacePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150805.paste.status.1.sql b/resources/sql/autopatches/20150805.paste.status.1.sql new file mode 100644 index 0000000000..c9b98bf58c --- /dev/null +++ b/resources/sql/autopatches/20150805.paste.status.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150805.paste.status.2.sql b/resources/sql/autopatches/20150805.paste.status.2.sql new file mode 100644 index 0000000000..be2fe2c485 --- /dev/null +++ b/resources/sql/autopatches/20150805.paste.status.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_pastebin.pastebin_paste + SET status = 'active' WHERE status = ''; diff --git a/resources/sql/autopatches/20150806.ponder.answer.1.sql b/resources/sql/autopatches/20150806.ponder.answer.1.sql new file mode 100644 index 0000000000..9c684b4446 --- /dev/null +++ b/resources/sql/autopatches/20150806.ponder.answer.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_answer + DROP COLUMN contentSource; diff --git a/resources/sql/autopatches/20150806.ponder.editpolicy.2.sql b/resources/sql/autopatches/20150806.ponder.editpolicy.2.sql new file mode 100644 index 0000000000..954f1b450e --- /dev/null +++ b/resources/sql/autopatches/20150806.ponder.editpolicy.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + DROP COLUMN editPolicy; diff --git a/resources/sql/autopatches/20150806.ponder.status.1.sql b/resources/sql/autopatches/20150806.ponder.status.1.sql new file mode 100644 index 0000000000..b0307ca2dc --- /dev/null +++ b/resources/sql/autopatches/20150806.ponder.status.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + MODIFY status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150806.ponder.status.2.sql b/resources/sql/autopatches/20150806.ponder.status.2.sql new file mode 100644 index 0000000000..0827c5b106 --- /dev/null +++ b/resources/sql/autopatches/20150806.ponder.status.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_question + SET status = 'open' WHERE status = '0'; diff --git a/resources/sql/autopatches/20150806.ponder.status.3.sql b/resources/sql/autopatches/20150806.ponder.status.3.sql new file mode 100644 index 0000000000..fdd71a5b20 --- /dev/null +++ b/resources/sql/autopatches/20150806.ponder.status.3.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_question + SET status = 'resolved' WHERE status = '1'; diff --git a/resources/sql/autopatches/20150808.ponder.vote.1.sql b/resources/sql/autopatches/20150808.ponder.vote.1.sql new file mode 100644 index 0000000000..31ac0f8e96 --- /dev/null +++ b/resources/sql/autopatches/20150808.ponder.vote.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + DROP COLUMN heat; diff --git a/resources/sql/autopatches/20150808.ponder.vote.2.sql b/resources/sql/autopatches/20150808.ponder.vote.2.sql new file mode 100644 index 0000000000..d31e72885d --- /dev/null +++ b/resources/sql/autopatches/20150808.ponder.vote.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + DROP COLUMN voteCount; diff --git a/resources/sql/autopatches/20150812.ponder.answer.1.sql b/resources/sql/autopatches/20150812.ponder.answer.1.sql new file mode 100644 index 0000000000..1cad5667b9 --- /dev/null +++ b/resources/sql/autopatches/20150812.ponder.answer.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_answer + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150812.ponder.answer.2.sql b/resources/sql/autopatches/20150812.ponder.answer.2.sql new file mode 100644 index 0000000000..ded0b765d5 --- /dev/null +++ b/resources/sql/autopatches/20150812.ponder.answer.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_answer + SET status = 'visible' WHERE status = ''; diff --git a/resources/sql/autopatches/20150814.harbormater.artifact.phid.sql b/resources/sql/autopatches/20150814.harbormater.artifact.phid.sql new file mode 100644 index 0000000000..1f03268ff0 --- /dev/null +++ b/resources/sql/autopatches/20150814.harbormater.artifact.phid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact + ADD phid VARBINARY(64) NOT NULL AFTER id; + +UPDATE {$NAMESPACE}_harbormaster.harbormaster_buildartifact + SET phid = CONCAT('PHID-HMBA-', id) WHERE phid = ''; diff --git a/resources/sql/autopatches/20150815.owners.status.1.sql b/resources/sql/autopatches/20150815.owners.status.1.sql new file mode 100644 index 0000000000..591e9efeef --- /dev/null +++ b/resources/sql/autopatches/20150815.owners.status.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150815.owners.status.2.sql b/resources/sql/autopatches/20150815.owners.status.2.sql new file mode 100644 index 0000000000..8f8c05af06 --- /dev/null +++ b/resources/sql/autopatches/20150815.owners.status.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET status = 'active' WHERE status = ''; diff --git a/resources/sql/autopatches/20150823.nuance.queue.1.sql b/resources/sql/autopatches/20150823.nuance.queue.1.sql new file mode 100644 index 0000000000..bb7dbba88b --- /dev/null +++ b/resources/sql/autopatches/20150823.nuance.queue.1.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_nuance.nuance_queueitem; diff --git a/resources/sql/autopatches/20150823.nuance.queue.2.sql b/resources/sql/autopatches/20150823.nuance.queue.2.sql new file mode 100644 index 0000000000..ed906d42fe --- /dev/null +++ b/resources/sql/autopatches/20150823.nuance.queue.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_item + ADD queuePHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20150823.nuance.queue.3.sql b/resources/sql/autopatches/20150823.nuance.queue.3.sql new file mode 100644 index 0000000000..deb343a031 --- /dev/null +++ b/resources/sql/autopatches/20150823.nuance.queue.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_source + ADD defaultQueuePHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20150823.nuance.queue.4.sql b/resources/sql/autopatches/20150823.nuance.queue.4.sql new file mode 100644 index 0000000000..d782b9de98 --- /dev/null +++ b/resources/sql/autopatches/20150823.nuance.queue.4.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_item + DROP dateNuanced; diff --git a/resources/sql/autopatches/20150828.ponder.wiki.1.sql b/resources/sql/autopatches/20150828.ponder.wiki.1.sql new file mode 100644 index 0000000000..dbb8334de4 --- /dev/null +++ b/resources/sql/autopatches/20150828.ponder.wiki.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD answerWiki LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20150829.ponder.dupe.1.sql b/resources/sql/autopatches/20150829.ponder.dupe.1.sql new file mode 100644 index 0000000000..b5ba7f6538 --- /dev/null +++ b/resources/sql/autopatches/20150829.ponder.dupe.1.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_ponder.ponder_question + SET status = 'invalid' WHERE status = 'duplicate'; diff --git a/resources/sql/autopatches/20150904.herald.1.sql b/resources/sql/autopatches/20150904.herald.1.sql new file mode 100644 index 0000000000..17f945cc30 --- /dev/null +++ b/resources/sql/autopatches/20150904.herald.1.sql @@ -0,0 +1,52 @@ +/* The "20150730.herald.5.sql" patch incorrectly swapped blocking and + non-blocking "Add Reviewer" rules. This swaps back any rules which + were last modified before the patch was applied. */ + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.blocking.tmp' + WHERE a.action = 'differential.reviewers.add' + AND r.dateModified <= + (SELECT applied FROM {$NAMESPACE}_meta_data.patch_status + WHERE patch = 'phabricator:20150730.herald.5.sql'); + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.add' + WHERE a.action = 'differential.reviewers.blocking' + AND r.dateModified <= + (SELECT applied FROM {$NAMESPACE}_meta_data.patch_status + WHERE patch = 'phabricator:20150730.herald.5.sql'); + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.blocking' + WHERE a.action = 'differential.reviewers.blocking.tmp'; + + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.self.blocking.tmp' + WHERE a.action = 'differential.reviewers.self.add' + AND r.dateModified <= + (SELECT applied FROM {$NAMESPACE}_meta_data.patch_status + WHERE patch = 'phabricator:20150730.herald.5.sql'); + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.self.add' + WHERE a.action = 'differential.reviewers.self.blocking' + AND r.dateModified <= + (SELECT applied FROM {$NAMESPACE}_meta_data.patch_status + WHERE patch = 'phabricator:20150730.herald.5.sql'); + +UPDATE {$NAMESPACE}_herald.herald_action a + JOIN {$NAMESPACE}_herald.herald_rule r + ON a.ruleID = r.id + SET a.action = 'differential.reviewers.self.blocking' + WHERE a.action = 'differential.reviewers.self.blocking.tmp'; diff --git a/resources/sql/autopatches/20150906.mailinglist.sql b/resources/sql/autopatches/20150906.mailinglist.sql new file mode 100644 index 0000000000..4f349eadd4 --- /dev/null +++ b/resources/sql/autopatches/20150906.mailinglist.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_metamta.metamta_mailinglist; diff --git a/resources/sql/autopatches/20150910.owners.custom.1.sql b/resources/sql/autopatches/20150910.owners.custom.1.sql new file mode 100644 index 0000000000..112802a0b8 --- /dev/null +++ b/resources/sql/autopatches/20150910.owners.custom.1.sql @@ -0,0 +1,25 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_customfieldstorage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + fieldIndex BINARY(12) NOT NULL, + fieldValue LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY (objectPHID, fieldIndex) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_owners.owners_customfieldstringindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + indexKey BINARY(12) NOT NULL, + indexValue LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + KEY `key_join` (objectPHID, indexKey, indexValue(64)), + KEY `key_find` (indexKey, indexValue(64)) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_owners.owners_customfieldnumericindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + indexKey BINARY(12) NOT NULL, + indexValue BIGINT NOT NULL, + KEY `key_join` (objectPHID, indexKey, indexValue), + KEY `key_find` (indexKey, indexValue) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150916.drydock.slotlocks.1.sql b/resources/sql/autopatches/20150916.drydock.slotlocks.1.sql new file mode 100644 index 0000000000..837566f1bf --- /dev/null +++ b/resources/sql/autopatches/20150916.drydock.slotlocks.1.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_drydock.drydock_slotlock ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ownerPHID VARBINARY(64) NOT NULL, + lockIndex BINARY(12) NOT NULL, + lockKey LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_lock` (lockIndex), + KEY `key_owner` (ownerPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150922.drydock.commands.1.sql b/resources/sql/autopatches/20150922.drydock.commands.1.sql new file mode 100644 index 0000000000..173fe861ac --- /dev/null +++ b/resources/sql/autopatches/20150922.drydock.commands.1.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_drydock.drydock_command ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + authorPHID VARBINARY(64) NOT NULL, + targetPHID VARBINARY(64) NOT NULL, + command VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + isConsumed BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_target` (targetPHID, isConsumed) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20150923.drydock.resourceid.1.sql b/resources/sql/autopatches/20150923.drydock.resourceid.1.sql new file mode 100644 index 0000000000..ad87d64669 --- /dev/null +++ b/resources/sql/autopatches/20150923.drydock.resourceid.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + ADD resourcePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20150923.drydock.resourceid.2.sql b/resources/sql/autopatches/20150923.drydock.resourceid.2.sql new file mode 100644 index 0000000000..22f6d32d47 --- /dev/null +++ b/resources/sql/autopatches/20150923.drydock.resourceid.2.sql @@ -0,0 +1,5 @@ +UPDATE + {$NAMESPACE}_drydock.drydock_lease l, + {$NAMESPACE}_drydock.drydock_resource r + SET l.resourcePHID = r.phid + WHERE l.resourceID = r.id; diff --git a/resources/sql/autopatches/20150923.drydock.resourceid.3.sql b/resources/sql/autopatches/20150923.drydock.resourceid.3.sql new file mode 100644 index 0000000000..f3520fa510 --- /dev/null +++ b/resources/sql/autopatches/20150923.drydock.resourceid.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + DROP resourceID; diff --git a/resources/sql/autopatches/20150923.drydock.taskid.1.sql b/resources/sql/autopatches/20150923.drydock.taskid.1.sql new file mode 100644 index 0000000000..cbd6a1dc02 --- /dev/null +++ b/resources/sql/autopatches/20150923.drydock.taskid.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + DROP taskID; diff --git a/resources/sql/autopatches/20150924.drydock.disable.1.sql b/resources/sql/autopatches/20150924.drydock.disable.1.sql new file mode 100644 index 0000000000..6e5dafe5ec --- /dev/null +++ b/resources/sql/autopatches/20150924.drydock.disable.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_blueprint + ADD isDisabled BOOL NOT NULL; diff --git a/resources/sql/autopatches/20150924.drydock.status.1.sql b/resources/sql/autopatches/20150924.drydock.status.1.sql new file mode 100644 index 0000000000..dc8ec2bd22 --- /dev/null +++ b/resources/sql/autopatches/20150924.drydock.status.1.sql @@ -0,0 +1,39 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + CHANGE status status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'pending' WHERE status = '0'; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'acquired' WHERE status = '5'; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'active' WHERE status = '1'; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'released' WHERE status = '2'; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'broken' WHERE status = '3'; + +UPDATE {$NAMESPACE}_drydock.drydock_lease + SET status = 'destroyed' WHERE status = '4'; + + +ALTER TABLE {$NAMESPACE}_drydock.drydock_resource + CHANGE status status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; + +UPDATE {$NAMESPACE}_drydock.drydock_resource + SET status = 'pending' WHERE status = '0'; + +UPDATE {$NAMESPACE}_drydock.drydock_resource + SET status = 'active' WHERE status = '1'; + +UPDATE {$NAMESPACE}_drydock.drydock_resource + SET status = 'released' WHERE status = '2'; + +UPDATE {$NAMESPACE}_drydock.drydock_resource + SET status = 'broken' WHERE status = '3'; + +UPDATE {$NAMESPACE}_drydock.drydock_resource + SET status = 'destroyed' WHERE status = '4'; diff --git a/resources/sql/autopatches/20150928.drydock.rexpire.1.sql b/resources/sql/autopatches/20150928.drydock.rexpire.1.sql new file mode 100644 index 0000000000..9321b9c0e1 --- /dev/null +++ b/resources/sql/autopatches/20150928.drydock.rexpire.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_resource + ADD until INT UNSIGNED; diff --git a/resources/sql/autopatches/20150930.drydock.log.1.sql b/resources/sql/autopatches/20150930.drydock.log.1.sql new file mode 100644 index 0000000000..e84859b718 --- /dev/null +++ b/resources/sql/autopatches/20150930.drydock.log.1.sql @@ -0,0 +1,25 @@ +TRUNCATE {$NAMESPACE}_drydock.drydock_log; + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + DROP resourceID; + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + DROP leaseID; + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + DROP message; + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD blueprintPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD resourcePHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD leasePHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD type VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; + +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151001.drydock.rname.1.sql b/resources/sql/autopatches/20151001.drydock.rname.1.sql new file mode 100644 index 0000000000..3dbd66c579 --- /dev/null +++ b/resources/sql/autopatches/20151001.drydock.rname.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_resource + DROP name; diff --git a/resources/sql/autopatches/20151002.dashboard.status.1.sql b/resources/sql/autopatches/20151002.dashboard.status.1.sql new file mode 100644 index 0000000000..09b19ef1d8 --- /dev/null +++ b/resources/sql/autopatches/20151002.dashboard.status.1.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_dashboard.dashboard + SET status = 'active' WHERE status = 'open'; diff --git a/resources/sql/autopatches/20151002.harbormaster.bparam.1.sql b/resources/sql/autopatches/20151002.harbormaster.bparam.1.sql new file mode 100644 index 0000000000..0deb71c503 --- /dev/null +++ b/resources/sql/autopatches/20151002.harbormaster.bparam.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build + ADD buildParameters LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL; + +UPDATE {$NAMESPACE}_harbormaster.harbormaster_build + SET buildParameters = '{}' WHERE buildParameters = ''; diff --git a/resources/sql/autopatches/20151009.drydock.auth.1.sql b/resources/sql/autopatches/20151009.drydock.auth.1.sql new file mode 100644 index 0000000000..8e68977492 --- /dev/null +++ b/resources/sql/autopatches/20151009.drydock.auth.1.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_drydock.drydock_authorization ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + blueprintPHID VARBINARY(64) NOT NULL, + blueprintAuthorizationState VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + objectPHID VARBINARY(64) NOT NULL, + objectAuthorizationState VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_unique` (objectPHID, blueprintPHID), + KEY `key_blueprint` (blueprintPHID, blueprintAuthorizationState), + KEY `key_object` (objectPHID, objectAuthorizationState) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151010.drydock.auth.2.sql b/resources/sql/autopatches/20151010.drydock.auth.2.sql new file mode 100644 index 0000000000..14c98b8b61 --- /dev/null +++ b/resources/sql/autopatches/20151010.drydock.auth.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + ADD authorizingPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20151013.drydock.op.1.sql b/resources/sql/autopatches/20151013.drydock.op.1.sql new file mode 100644 index 0000000000..e5fed58afd --- /dev/null +++ b/resources/sql/autopatches/20151013.drydock.op.1.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_drydock.drydock_repositoryoperation ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + repositoryPHID VARBINARY(64) NOT NULL, + repositoryTarget LONGBLOB NOT NULL, + operationType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + operationState VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID), + KEY `key_repository` (repositoryPHID, operationState) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151023.harborpolicy.1.sql b/resources/sql/autopatches/20151023.harborpolicy.1.sql new file mode 100644 index 0000000000..516cd1af00 --- /dev/null +++ b/resources/sql/autopatches/20151023.harborpolicy.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplan + ADD viewPolicy VARBINARY(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplan + ADD editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20151023.harborpolicy.2.php b/resources/sql/autopatches/20151023.harborpolicy.2.php new file mode 100644 index 0000000000..133bcb6ee7 --- /dev/null +++ b/resources/sql/autopatches/20151023.harborpolicy.2.php @@ -0,0 +1,21 @@ +establishConnection('w'); + +$view_policy = PhabricatorPolicies::getMostOpenPolicy(); +queryfx( + $conn_w, + 'UPDATE %T SET viewPolicy = %s WHERE viewPolicy = %s', + $table->getTableName(), + $view_policy, + ''); + +$edit_policy = id(new PhabricatorHarbormasterApplication()) + ->getPolicy(HarbormasterCreatePlansCapability::CAPABILITY); +queryfx( + $conn_w, + 'UPDATE %T SET editPolicy = %s WHERE editPolicy = %s', + $table->getTableName(), + $edit_policy, + ''); diff --git a/resources/sql/autopatches/20151023.patchduration.sql b/resources/sql/autopatches/20151023.patchduration.sql new file mode 100644 index 0000000000..3e0c363931 --- /dev/null +++ b/resources/sql/autopatches/20151023.patchduration.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_meta_data.patch_status + ADD duration BIGINT UNSIGNED; diff --git a/resources/sql/autopatches/20151030.harbormaster.initiator.sql b/resources/sql/autopatches/20151030.harbormaster.initiator.sql new file mode 100644 index 0000000000..f8ba3f6757 --- /dev/null +++ b/resources/sql/autopatches/20151030.harbormaster.initiator.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build + ADD COLUMN initiatorPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20151106.editengine.1.table.sql b/resources/sql/autopatches/20151106.editengine.1.table.sql new file mode 100644 index 0000000000..bda84d9443 --- /dev/null +++ b/resources/sql/autopatches/20151106.editengine.1.table.sql @@ -0,0 +1,17 @@ +CREATE TABLE {$NAMESPACE}_search.search_editengineconfiguration ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + engineKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + builtinKey VARCHAR(64) COLLATE {$COLLATE_TEXT}, + name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + isDisabled BOOL NOT NULL DEFAULT 0, + isDefault BOOL NOT NULL DEFAULT 0, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_engine` (engineKey, builtinKey), + KEY `key_default` (engineKey, isDefault, isDisabled) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151106.editengine.2.xactions.sql b/resources/sql/autopatches/20151106.editengine.2.xactions.sql new file mode 100644 index 0000000000..36a9d7a769 --- /dev/null +++ b/resources/sql/autopatches/20151106.editengine.2.xactions.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_search.search_editengineconfigurationtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151106.phame.post.mailkey.1.sql b/resources/sql/autopatches/20151106.phame.post.mailkey.1.sql new file mode 100644 index 0000000000..3e4846d909 --- /dev/null +++ b/resources/sql/autopatches/20151106.phame.post.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_post + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20151106.phame.post.mailkey.2.php b/resources/sql/autopatches/20151106.phame.post.mailkey.2.php new file mode 100644 index 0000000000..5c9942665d --- /dev/null +++ b/resources/sql/autopatches/20151106.phame.post.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $post) { + $id = $post->getID(); + + echo pht('Adding mail key for Post %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20151107.phame.blog.mailkey.1.sql b/resources/sql/autopatches/20151107.phame.blog.mailkey.1.sql new file mode 100644 index 0000000000..764f50766c --- /dev/null +++ b/resources/sql/autopatches/20151107.phame.blog.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20151107.phame.blog.mailkey.2.php b/resources/sql/autopatches/20151107.phame.blog.mailkey.2.php new file mode 100644 index 0000000000..c6f316aa47 --- /dev/null +++ b/resources/sql/autopatches/20151107.phame.blog.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $blog) { + $id = $blog->getID(); + + echo pht('Adding mail key for Blog %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20151108.phame.blog.joinpolicy.sql b/resources/sql/autopatches/20151108.phame.blog.joinpolicy.sql new file mode 100644 index 0000000000..54aea48bbf --- /dev/null +++ b/resources/sql/autopatches/20151108.phame.blog.joinpolicy.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + DROP joinPolicy; diff --git a/resources/sql/autopatches/20151108.xhpast.stderr.sql b/resources/sql/autopatches/20151108.xhpast.stderr.sql new file mode 100644 index 0000000000..1721505658 --- /dev/null +++ b/resources/sql/autopatches/20151108.xhpast.stderr.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree + ADD returnCode INT NOT NULL AFTER input; + +ALTER TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree + ADD stderr longtext NOT NULL AFTER stdout; diff --git a/resources/sql/autopatches/20151109.phame.post.comments.1.sql b/resources/sql/autopatches/20151109.phame.post.comments.1.sql new file mode 100644 index 0000000000..8a36a0d3a7 --- /dev/null +++ b/resources/sql/autopatches/20151109.phame.post.comments.1.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_posttransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL, + transactionPHID VARCHAR(64), + authorPHID VARCHAR(64) NOT NULL, + viewPolicy VARCHAR(64) NOT NULL, + editPolicy VARCHAR(64) NOT NULL, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + contentSource LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151109.repository.coverage.1.sql b/resources/sql/autopatches/20151109.repository.coverage.1.sql new file mode 100644 index 0000000000..cebea0177c --- /dev/null +++ b/resources/sql/autopatches/20151109.repository.coverage.1.sql @@ -0,0 +1,8 @@ +USE {$NAMESPACE}_repository; +DELETE x FROM repository_coverage x +LEFT JOIN repository_coverage y + ON x.branchID = y.branchID + AND x.commitID = y.commitID + AND x.pathID = y.pathID + AND y.id > x.id + WHERE y.id IS NOT NULL; diff --git a/resources/sql/autopatches/20151109.xhpast.db.1.sql b/resources/sql/autopatches/20151109.xhpast.db.1.sql new file mode 100644 index 0000000000..acf8b36297 --- /dev/null +++ b/resources/sql/autopatches/20151109.xhpast.db.1.sql @@ -0,0 +1,2 @@ +RENAME TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree + TO {$NAMESPACE}_xhpast.xhpast_parsetree; diff --git a/resources/sql/autopatches/20151109.xhpast.db.2.sql b/resources/sql/autopatches/20151109.xhpast.db.2.sql new file mode 100644 index 0000000000..a4a79bdced --- /dev/null +++ b/resources/sql/autopatches/20151109.xhpast.db.2.sql @@ -0,0 +1 @@ +DROP DATABASE {$NAMESPACE}_xhpastview; diff --git a/resources/sql/autopatches/20151110.daemonenvhash.sql b/resources/sql/autopatches/20151110.daemonenvhash.sql new file mode 100644 index 0000000000..bde4b21741 --- /dev/null +++ b/resources/sql/autopatches/20151110.daemonenvhash.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + DROP COLUMN envHash; + +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + DROP COLUMN envInfo; diff --git a/resources/sql/autopatches/20151111.phame.blog.archive.1.sql b/resources/sql/autopatches/20151111.phame.blog.archive.1.sql new file mode 100644 index 0000000000..c7e5898e66 --- /dev/null +++ b/resources/sql/autopatches/20151111.phame.blog.archive.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151111.phame.blog.archive.2.sql b/resources/sql/autopatches/20151111.phame.blog.archive.2.sql new file mode 100644 index 0000000000..ee9ad1e4c7 --- /dev/null +++ b/resources/sql/autopatches/20151111.phame.blog.archive.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_phame.phame_blog + SET status = 'active' WHERE status = ''; diff --git a/resources/sql/autopatches/20151112.herald.edge.sql b/resources/sql/autopatches/20151112.herald.edge.sql new file mode 100644 index 0000000000..db71dfbd79 --- /dev/null +++ b/resources/sql/autopatches/20151112.herald.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_herald.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_herald.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151116.owners.edge.sql b/resources/sql/autopatches/20151116.owners.edge.sql new file mode 100644 index 0000000000..6d100eacd1 --- /dev/null +++ b/resources/sql/autopatches/20151116.owners.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_owners.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_owners.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151128.phame.blog.picture.1.sql b/resources/sql/autopatches/20151128.phame.blog.picture.1.sql new file mode 100644 index 0000000000..1db4ca8393 --- /dev/null +++ b/resources/sql/autopatches/20151128.phame.blog.picture.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD profileImagePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20151130.phurl.mailkey.1.sql b/resources/sql/autopatches/20151130.phurl.mailkey.1.sql new file mode 100644 index 0000000000..67e9e25586 --- /dev/null +++ b/resources/sql/autopatches/20151130.phurl.mailkey.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phurl.phurl_url + ADD mailKey binary(20) NOT NULL; diff --git a/resources/sql/autopatches/20151130.phurl.mailkey.2.php b/resources/sql/autopatches/20151130.phurl.mailkey.2.php new file mode 100644 index 0000000000..93c7e7a4d2 --- /dev/null +++ b/resources/sql/autopatches/20151130.phurl.mailkey.2.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$iterator = new LiskMigrationIterator($table); +foreach ($iterator as $url) { + $id = $url->getID(); + + echo pht('Adding mail key for Phurl %d...', $id); + echo "\n"; + + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $table->getTableName(), + Filesystem::readRandomCharacters(20), + $id); +} diff --git a/resources/sql/autopatches/20151202.versioneddraft.1.sql b/resources/sql/autopatches/20151202.versioneddraft.1.sql new file mode 100644 index 0000000000..2ad4332732 --- /dev/null +++ b/resources/sql/autopatches/20151202.versioneddraft.1.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_draft.draft_versioneddraft ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + version INT UNSIGNED NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_object` (objectPHID, authorPHID, version) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151207.editengine.1.sql b/resources/sql/autopatches/20151207.editengine.1.sql new file mode 100644 index 0000000000..5111ec99ed --- /dev/null +++ b/resources/sql/autopatches/20151207.editengine.1.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_search.search_editengineconfiguration + DROP editPolicy; + +ALTER TABLE {$NAMESPACE}_search.search_editengineconfiguration + ADD isEdit BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_search.search_editengineconfiguration + ADD createOrder INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_search.search_editengineconfiguration + ADD editOrder INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20151210.land.1.refphid.sql b/resources/sql/autopatches/20151210.land.1.refphid.sql new file mode 100644 index 0000000000..5e29b9575e --- /dev/null +++ b/resources/sql/autopatches/20151210.land.1.refphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + ADD phid VARBINARY(64) NOT NULL AFTER id; diff --git a/resources/sql/autopatches/20151210.land.2.refphid.php b/resources/sql/autopatches/20151210.land.2.refphid.php new file mode 100644 index 0000000000..4d8a95a79b --- /dev/null +++ b/resources/sql/autopatches/20151210.land.2.refphid.php @@ -0,0 +1,17 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $cursor) { + if (strlen($cursor->getPHID())) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $cursor->getID()); +} diff --git a/resources/sql/autopatches/20151215.phame.1.autotitle.sql b/resources/sql/autopatches/20151215.phame.1.autotitle.sql new file mode 100644 index 0000000000..b7cc98a2a4 --- /dev/null +++ b/resources/sql/autopatches/20151215.phame.1.autotitle.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_post + DROP KEY phameTitle; + +ALTER TABLE {$NAMESPACE}_phame.phame_post + CHANGE phameTitle phameTitle VARCHAR(64) COLLATE {$COLLATE_SORT}; diff --git a/resources/sql/autopatches/20151218.key.1.keyphid.sql b/resources/sql/autopatches/20151218.key.1.keyphid.sql new file mode 100644 index 0000000000..568572c1ba --- /dev/null +++ b/resources/sql/autopatches/20151218.key.1.keyphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD phid VARBINARY(64) NOT NULL AFTER id; diff --git a/resources/sql/autopatches/20151218.key.2.keyphid.php b/resources/sql/autopatches/20151218.key.2.keyphid.php new file mode 100644 index 0000000000..eb732742ca --- /dev/null +++ b/resources/sql/autopatches/20151218.key.2.keyphid.php @@ -0,0 +1,17 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $cursor) { + if (strlen($cursor->getPHID())) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $cursor->getID()); +} diff --git a/resources/sql/autopatches/20151219.proj.01.prislug.sql b/resources/sql/autopatches/20151219.proj.01.prislug.sql new file mode 100644 index 0000000000..8001dd756c --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.01.prislug.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD COLUMN primarySlug VARCHAR(128) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151219.proj.02.prislugkey.sql b/resources/sql/autopatches/20151219.proj.02.prislugkey.sql new file mode 100644 index 0000000000..a1dbf6ff99 --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.02.prislugkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD UNIQUE KEY `key_primaryslug` (primarySlug); diff --git a/resources/sql/autopatches/20151219.proj.03.copyslug.sql b/resources/sql/autopatches/20151219.proj.03.copyslug.sql new file mode 100644 index 0000000000..2b954c6cdc --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.03.copyslug.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_project.project + SET primarySlug = TRIM(TRAILING "/" FROM phrictionSlug); diff --git a/resources/sql/autopatches/20151219.proj.04.dropslugkey.sql b/resources/sql/autopatches/20151219.proj.04.dropslugkey.sql new file mode 100644 index 0000000000..bfe1f2eb4b --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.04.dropslugkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + DROP KEY `phrictionSlug`; diff --git a/resources/sql/autopatches/20151219.proj.05.dropslug.sql b/resources/sql/autopatches/20151219.proj.05.dropslug.sql new file mode 100644 index 0000000000..924f31ff95 --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.05.dropslug.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + DROP COLUMN phrictionSlug; diff --git a/resources/sql/autopatches/20151219.proj.06.defaultpolicy.php b/resources/sql/autopatches/20151219.proj.06.defaultpolicy.php new file mode 100644 index 0000000000..e3548d026c --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.06.defaultpolicy.php @@ -0,0 +1,28 @@ +getPolicy(ProjectDefaultViewCapability::CAPABILITY); +$edit_policy = $app->getPolicy(ProjectDefaultEditCapability::CAPABILITY); +$join_policy = $app->getPolicy(ProjectDefaultJoinCapability::CAPABILITY); + +$table = new PhabricatorProject(); +$conn_w = $table->establishConnection('w'); + +queryfx( + $conn_w, + 'UPDATE %T SET viewPolicy = %s WHERE viewPolicy IS NULL', + $table->getTableName(), + $view_policy); + +queryfx( + $conn_w, + 'UPDATE %T SET editPolicy = %s WHERE editPolicy IS NULL', + $table->getTableName(), + $edit_policy); + +queryfx( + $conn_w, + 'UPDATE %T SET joinPolicy = %s WHERE joinPolicy IS NULL', + $table->getTableName(), + $join_policy); diff --git a/resources/sql/autopatches/20151219.proj.07.viewnull.sql b/resources/sql/autopatches/20151219.proj.07.viewnull.sql new file mode 100644 index 0000000000..0e5539fc21 --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.07.viewnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + CHANGE viewPolicy viewPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20151219.proj.08.editnull.sql b/resources/sql/autopatches/20151219.proj.08.editnull.sql new file mode 100644 index 0000000000..362e72bf4f --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.08.editnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + CHANGE editPolicy editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20151219.proj.09.joinnull.sql b/resources/sql/autopatches/20151219.proj.09.joinnull.sql new file mode 100644 index 0000000000..9517ed54f7 --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.09.joinnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + CHANGE joinPolicy joinPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20151219.proj.10.subcolumns.sql b/resources/sql/autopatches/20151219.proj.10.subcolumns.sql new file mode 100644 index 0000000000..ea6725a8ab --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.10.subcolumns.sql @@ -0,0 +1,17 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD parentProjectPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_project.project + ADD hasWorkboard BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_project.project + ADD hasMilestones BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_project.project + ADD hasSubprojects BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_project.project + ADD milestoneNumber INT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_project.project + ADD UNIQUE KEY `key_milestone` (parentProjectPHID, milestoneNumber); diff --git a/resources/sql/autopatches/20151219.proj.11.subprojectphids.sql b/resources/sql/autopatches/20151219.proj.11.subprojectphids.sql new file mode 100644 index 0000000000..4e51b1358d --- /dev/null +++ b/resources/sql/autopatches/20151219.proj.11.subprojectphids.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + DROP subprojectPHIDs; diff --git a/resources/sql/autopatches/20151221.search.1.version.sql b/resources/sql/autopatches/20151221.search.1.version.sql new file mode 100644 index 0000000000..dca993f1ce --- /dev/null +++ b/resources/sql/autopatches/20151221.search.1.version.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_search.search_indexversion ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + objectPHID VARBINARY(64) NOT NULL, + extensionKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + version VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_object` (objectPHID, extensionKey) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151221.search.2.ownersngrams.sql b/resources/sql/autopatches/20151221.search.2.ownersngrams.sql new file mode 100644 index 0000000000..028d9e22f1 --- /dev/null +++ b/resources/sql/autopatches/20151221.search.2.ownersngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_name_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20151221.search.3.reindex.php b/resources/sql/autopatches/20151221.search.3.reindex.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20151221.search.3.reindex.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $project) { + $path = $project->getProjectPath(); + $key = $project->getProjectPathKey(); + + if (strlen($path) && ($key !== "\0\0\0\0")) { + continue; + } + + $path_key = PhabricatorHash::digestForIndex($project->getPHID()); + $path_key = substr($path_key, 0, 4); + + queryfx( + $conn_w, + 'UPDATE %T SET projectPath = %s, projectPathKey = %s WHERE id = %d', + $project->getTableName(), + $path_key, + $path_key, + $project->getID()); +} diff --git a/resources/sql/autopatches/20151223.proj.06.uniq.sql b/resources/sql/autopatches/20151223.proj.06.uniq.sql new file mode 100644 index 0000000000..2e28c18dbe --- /dev/null +++ b/resources/sql/autopatches/20151223.proj.06.uniq.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD UNIQUE KEY `key_pathkey` (projectPathKey); diff --git a/resources/sql/autopatches/20151226.reop.1.sql b/resources/sql/autopatches/20151226.reop.1.sql new file mode 100644 index 0000000000..4daca60aeb --- /dev/null +++ b/resources/sql/autopatches/20151226.reop.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_repositoryoperation + ADD isDismissed BOOL NOT NULL; diff --git a/resources/sql/autopatches/20151227.proj.01.materialize.sql b/resources/sql/autopatches/20151227.proj.01.materialize.sql new file mode 100644 index 0000000000..ceac969e8f --- /dev/null +++ b/resources/sql/autopatches/20151227.proj.01.materialize.sql @@ -0,0 +1,6 @@ +/* PhabricatorProjectProjectHasMemberEdgeType::EDGECONST = 13 */ +/* PhabricatorProjectMaterializedMemberEdgeType::EDGECONST = 60 */ + +INSERT IGNORE INTO {$NAMESPACE}_project.edge (src, type, dst, dateCreated) + SELECT src, 60, dst, dateCreated FROM {$NAMESPACE}_project.edge + WHERE type = 13; diff --git a/resources/sql/autopatches/20151231.proj.01.icon.php b/resources/sql/autopatches/20151231.proj.01.icon.php new file mode 100644 index 0000000000..501614df3d --- /dev/null +++ b/resources/sql/autopatches/20151231.proj.01.icon.php @@ -0,0 +1,34 @@ + 'project', + 'fa-tags' => 'tag', + 'fa-lock' => 'policy', + 'fa-users' => 'group', + + 'fa-folder' => 'folder', + 'fa-calendar' => 'timeline', + 'fa-flag-checkered' => 'goal', + 'fa-truck' => 'release', + + 'fa-bug' => 'bugs', + 'fa-trash-o' => 'cleanup', + 'fa-umbrella' => 'umbrella', + 'fa-envelope' => 'communication', + + 'fa-building' => 'organization', + 'fa-cloud' => 'infrastructure', + 'fa-credit-card' => 'account', + 'fa-flask' => 'experimental', +); + +$table = new PhabricatorProject(); +$conn_w = $table->establishConnection('w'); +foreach ($icon_map as $old_icon => $new_key) { + queryfx( + $conn_w, + 'UPDATE %T SET icon = %s WHERE icon = %s', + $table->getTableName(), + $new_key, + $old_icon); +} diff --git a/resources/sql/autopatches/20160102.badges.award.sql b/resources/sql/autopatches/20160102.badges.award.sql new file mode 100644 index 0000000000..d637c93650 --- /dev/null +++ b/resources/sql/autopatches/20160102.badges.award.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_badges.badges_award ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + badgePHID VARBINARY(64) NOT NULL, + recipientPHID VARBINARY(64) NOT NULL, + awarderPHID varbinary(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_badge` (badgePHID, recipientPHID), + KEY `key_recipient` (recipientPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160110.repo.01.slug.sql b/resources/sql/autopatches/20160110.repo.01.slug.sql new file mode 100644 index 0000000000..af755ed78e --- /dev/null +++ b/resources/sql/autopatches/20160110.repo.01.slug.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD repositorySlug VARCHAR(64) COLLATE {$COLLATE_SORT}; + +ALTER TABLE {$NAMESPACE}_repository.repository + ADD UNIQUE KEY `key_slug` (repositorySlug); diff --git a/resources/sql/autopatches/20160110.repo.02.slug.php b/resources/sql/autopatches/20160110.repo.02.slug.php new file mode 100644 index 0000000000..8655311df9 --- /dev/null +++ b/resources/sql/autopatches/20160110.repo.02.slug.php @@ -0,0 +1,49 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $repository) { + $slug = $repository->getRepositorySlug(); + + if ($slug !== null) { + continue; + } + + $clone_name = $repository->getDetail('clone-name'); + + if (!strlen($clone_name)) { + continue; + } + + if (!PhabricatorRepository::isValidRepositorySlug($clone_name)) { + echo tsprintf( + "%s\n", + pht( + 'Repository "%s" has a "Clone/Checkout As" name which is no longer '. + 'valid ("%s"). You can edit the repository to give it a new, valid '. + 'short name.', + $repository->getDisplayName(), + $clone_name)); + continue; + } + + try { + queryfx( + $conn_w, + 'UPDATE %T SET repositorySlug = %s WHERE id = %d', + $table->getTableName(), + $clone_name, + $repository->getID()); + } catch (AphrontDuplicateKeyQueryException $ex) { + echo tsprintf( + "%s\n", + pht( + 'Repository "%s" has a duplicate "Clone/Checkout As" name ("%s"). '. + 'Each name must now be unique. You can edit the repository to give '. + 'it a new, unique short name.', + $repository->getDisplayName(), + $clone_name)); + } + +} diff --git a/resources/sql/autopatches/20160111.repo.01.slugx.sql b/resources/sql/autopatches/20160111.repo.01.slugx.sql new file mode 100644 index 0000000000..41be6517d0 --- /dev/null +++ b/resources/sql/autopatches/20160111.repo.01.slugx.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_repository.repository_transaction + SET transactionType = 'repo:slug' WHERE transactionType = 'repo:clone-name'; diff --git a/resources/sql/autopatches/20160112.repo.01.uri.sql b/resources/sql/autopatches/20160112.repo.01.uri.sql new file mode 100644 index 0000000000..0dc925b10a --- /dev/null +++ b/resources/sql/autopatches/20160112.repo.01.uri.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_uriindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryPHID VARBINARY(64) NOT NULL, + repositoryURI LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_repository` (repositoryPHID), + KEY `key_uri` (repositoryURI(128)) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160112.repo.02.uri.index.php b/resources/sql/autopatches/20160112.repo.02.uri.index.php new file mode 100644 index 0000000000..e9cd061361 --- /dev/null +++ b/resources/sql/autopatches/20160112.repo.02.uri.index.php @@ -0,0 +1,4 @@ +establishConnection('w'); + +$panel_table = id(new PhabricatorProfileMenuItemConfiguration()); +$panel_conn = $panel_table->establishConnection('w'); + +foreach (new LiskMigrationIterator($project_table) as $project) { + $columns = queryfx_all( + $conn_w, + 'SELECT * FROM %T WHERE projectPHID = %s', + id(new PhabricatorProjectColumn())->getTableName(), + $project->getPHID()); + + // This project has no columns, so we don't need to change anything. + if (!$columns) { + continue; + } + + // This project has columns, so set its workboard flag. + queryfx( + $conn_w, + 'UPDATE %T SET hasWorkboard = 1 WHERE id = %d', + $project->getTableName(), + $project->getID()); + + // Try to set the default menu item to "Workboard". + $config = queryfx_all( + $panel_conn, + 'SELECT * FROM %T WHERE profilePHID = %s', + $panel_table->getTableName(), + $project->getPHID()); + + // There are already some settings, so don't touch them. + if ($config) { + continue; + } + + queryfx( + $panel_conn, + 'INSERT INTO %T + (phid, profilePHID, panelKey, builtinKey, visibility, panelProperties, + panelOrder, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %s, %d, %d, %d)', + $panel_table->getTableName(), + $panel_table->generatePHID(), + $project->getPHID(), + PhabricatorProjectWorkboardProfileMenuItem::MENUITEMKEY, + PhabricatorProject::ITEM_WORKBOARD, + PhabricatorProfileMenuItemConfiguration::VISIBILITY_DEFAULT, + '{}', + 2, + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20160124.people.1.icon.sql b/resources/sql/autopatches/20160124.people.1.icon.sql new file mode 100644 index 0000000000..7cd96658d9 --- /dev/null +++ b/resources/sql/autopatches/20160124.people.1.icon.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_profile + ADD icon VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160124.people.2.icondefault.sql b/resources/sql/autopatches/20160124.people.2.icondefault.sql new file mode 100644 index 0000000000..bf7dd24886 --- /dev/null +++ b/resources/sql/autopatches/20160124.people.2.icondefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_user.user_profile + SET icon = 'person' WHERE icon = ''; diff --git a/resources/sql/autopatches/20160128.repo.1.pull.sql b/resources/sql/autopatches/20160128.repo.1.pull.sql new file mode 100644 index 0000000000..4a8ec89480 --- /dev/null +++ b/resources/sql/autopatches/20160128.repo.1.pull.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_pullevent ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + repositoryPHID VARBINARY(64), + epoch INT UNSIGNED NOT NULL, + pullerPHID VARBINARY(64), + remoteAddress INT UNSIGNED, + remoteProtocol VARCHAR(32) COLLATE {$COLLATE_TEXT}, + resultType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + resultCode INT UNSIGNED NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_repository` (repositoryPHID), + KEY `key_epoch` (epoch) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160201.revision.properties.1.sql b/resources/sql/autopatches/20160201.revision.properties.1.sql new file mode 100644 index 0000000000..2ab60b2ce9 --- /dev/null +++ b/resources/sql/autopatches/20160201.revision.properties.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_revision +ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160201.revision.properties.2.sql b/resources/sql/autopatches/20160201.revision.properties.2.sql new file mode 100644 index 0000000000..41d3234abe --- /dev/null +++ b/resources/sql/autopatches/20160201.revision.properties.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_differential.differential_revision +SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20160202.board.1.proxy.sql b/resources/sql/autopatches/20160202.board.1.proxy.sql new file mode 100644 index 0000000000..a3e5965f26 --- /dev/null +++ b/resources/sql/autopatches/20160202.board.1.proxy.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD proxyPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20160202.ipv6.1.sql b/resources/sql/autopatches/20160202.ipv6.1.sql new file mode 100644 index 0000000000..d6a3ee5ccc --- /dev/null +++ b/resources/sql/autopatches/20160202.ipv6.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pullevent + CHANGE remoteAddress remoteAddress VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + CHANGE remoteAddress remoteAddress VARBINARY(64); diff --git a/resources/sql/autopatches/20160202.ipv6.2.php b/resources/sql/autopatches/20160202.ipv6.2.php new file mode 100644 index 0000000000..50def09444 --- /dev/null +++ b/resources/sql/autopatches/20160202.ipv6.2.php @@ -0,0 +1,39 @@ +establishConnection('w'); + +$log_types = array($pull, $push); +foreach ($log_types as $log) { + foreach (new LiskMigrationIterator($log) as $row) { + $addr = $row->getRemoteAddress(); + + $addr = (string)$addr; + if (!strlen($addr)) { + continue; + } + + if (!ctype_digit($addr)) { + continue; + } + + if (!(int)$addr) { + continue; + } + + $ip = long2ip($addr); + if (!is_string($ip) || !strlen($ip)) { + continue; + } + + $id = $row->getID(); + queryfx( + $conn_w, + 'UPDATE %T SET remoteAddress = %s WHERE id = %d', + $log->getTableName(), + $ip, + $id); + } +} diff --git a/resources/sql/autopatches/20160206.cover.1.sql b/resources/sql/autopatches/20160206.cover.1.sql new file mode 100644 index 0000000000..1e8b473a5e --- /dev/null +++ b/resources/sql/autopatches/20160206.cover.1.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; + +UPDATE {$NAMESPACE}_maniphest.maniphest_task + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20160208.task.1.sql b/resources/sql/autopatches/20160208.task.1.sql new file mode 100644 index 0000000000..786107666c --- /dev/null +++ b/resources/sql/autopatches/20160208.task.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + DROP projectPHIDs; diff --git a/resources/sql/autopatches/20160208.task.2.sql b/resources/sql/autopatches/20160208.task.2.sql new file mode 100644 index 0000000000..d0889ca92d --- /dev/null +++ b/resources/sql/autopatches/20160208.task.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + DROP attached; diff --git a/resources/sql/autopatches/20160208.task.3.sql b/resources/sql/autopatches/20160208.task.3.sql new file mode 100644 index 0000000000..9fae66d8df --- /dev/null +++ b/resources/sql/autopatches/20160208.task.3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD points DOUBLE; diff --git a/resources/sql/autopatches/20160212.proj.1.sql b/resources/sql/autopatches/20160212.proj.1.sql new file mode 100644 index 0000000000..7d8c19b0b1 --- /dev/null +++ b/resources/sql/autopatches/20160212.proj.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160212.proj.2.sql b/resources/sql/autopatches/20160212.proj.2.sql new file mode 100644 index 0000000000..f6f793aec4 --- /dev/null +++ b/resources/sql/autopatches/20160212.proj.2.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_project.project + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20160215.owners.policy.1.sql b/resources/sql/autopatches/20160215.owners.policy.1.sql new file mode 100644 index 0000000000..ae63906781 --- /dev/null +++ b/resources/sql/autopatches/20160215.owners.policy.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD viewPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20160215.owners.policy.2.sql b/resources/sql/autopatches/20160215.owners.policy.2.sql new file mode 100644 index 0000000000..f55b61a9ff --- /dev/null +++ b/resources/sql/autopatches/20160215.owners.policy.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20160215.owners.policy.3.sql b/resources/sql/autopatches/20160215.owners.policy.3.sql new file mode 100644 index 0000000000..9d3ae9f112 --- /dev/null +++ b/resources/sql/autopatches/20160215.owners.policy.3.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/autopatches/20160215.owners.policy.4.sql b/resources/sql/autopatches/20160215.owners.policy.4.sql new file mode 100644 index 0000000000..e108a6da9c --- /dev/null +++ b/resources/sql/autopatches/20160215.owners.policy.4.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET editPolicy = 'users' WHERE editPolicy = ''; diff --git a/resources/sql/autopatches/20160218.callsigns.1.sql b/resources/sql/autopatches/20160218.callsigns.1.sql new file mode 100644 index 0000000000..09d1dd5a1b --- /dev/null +++ b/resources/sql/autopatches/20160218.callsigns.1.sql @@ -0,0 +1,4 @@ +/* Make callsigns nullable, and thus optional. */ + +ALTER TABLE {$NAMESPACE}_repository.repository + CHANGE callsign callsign VARCHAR(32) COLLATE {$COLLATE_SORT}; diff --git a/resources/sql/autopatches/20160221.almanac.1.devicen.sql b/resources/sql/autopatches/20160221.almanac.1.devicen.sql new file mode 100644 index 0000000000..c098173f25 --- /dev/null +++ b/resources/sql/autopatches/20160221.almanac.1.devicen.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_devicename_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160221.almanac.2.devicei.php b/resources/sql/autopatches/20160221.almanac.2.devicei.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20160221.almanac.2.devicei.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +// We're going to JSON-encode the value in each row: previously rows stored +// plain strings, but now they store JSON, so we need to update them. + +foreach (new LiskMigrationIterator($table) as $property) { + $key = $property->getFieldName(); + + $current_row = queryfx_one( + $conn_w, + 'SELECT fieldValue FROM %T WHERE id = %d', + $table->getTableName(), + $property->getID()); + + if (!$current_row) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET fieldValue = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($current_row['fieldValue']), + $property->getID()); +} diff --git a/resources/sql/autopatches/20160223.almanac.1.bound.sql b/resources/sql/autopatches/20160223.almanac.1.bound.sql new file mode 100644 index 0000000000..3e30fa458a --- /dev/null +++ b/resources/sql/autopatches/20160223.almanac.1.bound.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD isBoundToClusterService BOOL NOT NULL; diff --git a/resources/sql/autopatches/20160223.almanac.2.lockbind.sql b/resources/sql/autopatches/20160223.almanac.2.lockbind.sql new file mode 100644 index 0000000000..93f5e8b0b5 --- /dev/null +++ b/resources/sql/autopatches/20160223.almanac.2.lockbind.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_almanac.almanac_device + SET isBoundToClusterService = isLocked; diff --git a/resources/sql/autopatches/20160223.almanac.3.devicelock.sql b/resources/sql/autopatches/20160223.almanac.3.devicelock.sql new file mode 100644 index 0000000000..fdb879fe28 --- /dev/null +++ b/resources/sql/autopatches/20160223.almanac.3.devicelock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + DROP isLocked; diff --git a/resources/sql/autopatches/20160223.almanac.4.servicelock.sql b/resources/sql/autopatches/20160223.almanac.4.servicelock.sql new file mode 100644 index 0000000000..e716054c0c --- /dev/null +++ b/resources/sql/autopatches/20160223.almanac.4.servicelock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_service + DROP isLocked; diff --git a/resources/sql/autopatches/20160223.paste.fileedges.php b/resources/sql/autopatches/20160223.paste.fileedges.php new file mode 100644 index 0000000000..73254e1eb3 --- /dev/null +++ b/resources/sql/autopatches/20160223.paste.fileedges.php @@ -0,0 +1,11 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $service) { + + $new_type = null; + try { + $old_type = $service->getServiceType(); + $object = newv($old_type, array()); + $new_type = $object->getServiceTypeConstant(); + } catch (Exception $ex) { + continue; + } + + if (!$new_type) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET serviceType = %s WHERE id = %d', + $table->getTableName(), + $new_type, + $service->getID()); +} diff --git a/resources/sql/autopatches/20160227.harbormaster.1.plann.sql b/resources/sql/autopatches/20160227.harbormaster.1.plann.sql new file mode 100644 index 0000000000..4c0b4f48b3 --- /dev/null +++ b/resources/sql/autopatches/20160227.harbormaster.1.plann.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplanname_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160227.harbormaster.2.plani.php b/resources/sql/autopatches/20160227.harbormaster.2.plani.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20160227.harbormaster.2.plani.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $xaction) { + $type = $xaction->getTransactionType(); + $id = $xaction->getID(); + + // This is an old ManiphestTransaction::TYPE_COLUMN. It did not do anything + // on its own and was hidden from the UI, so we're just going to remove it. + if ($type == 'column') { + queryfx( + $conn_w, + 'DELETE FROM %T WHERE id = %d', + $table->getTableName(), + $id); + continue; + } + + // This is an old ManiphestTransaction::TYPE_PROJECT_COLUMN. It moved + // tasks between board columns; we're going to replace it with a modern + // PhabricatorTransactions::TYPE_COLUMNS transaction. + if ($type == 'projectcolumn') { + try { + $new = $xaction->getNewValue(); + if (!$new || !is_array($new)) { + continue; + } + + $column_phids = idx($new, 'columnPHIDs'); + if (!is_array($column_phids) || !$column_phids) { + continue; + } + + $column_phid = head($column_phids); + if (!$column_phid) { + continue; + } + + $board_phid = idx($new, 'projectPHID'); + if (!$board_phid) { + continue; + } + + $before_phid = idx($new, 'beforePHID'); + $after_phid = idx($new, 'afterPHID'); + + $old = $xaction->getOldValue(); + if ($old && is_array($old)) { + $from_phids = idx($old, 'columnPHIDs'); + $from_phids = array_values($from_phids); + } else { + $from_phids = array(); + } + + $replacement = array( + 'columnPHID' => $column_phid, + 'boardPHID' => $board_phid, + 'fromColumnPHIDs' => $from_phids, + ); + + if ($before_phid) { + $replacement['beforePHID'] = $before_phid; + } else if ($after_phid) { + $replacement['afterPHID'] = $after_phid; + } + + queryfx( + $conn_w, + 'UPDATE %T SET transactionType = %s, oldValue = %s, newValue = %s + WHERE id = %d', + $table->getTableName(), + PhabricatorTransactions::TYPE_COLUMNS, + 'null', + phutil_json_encode(array($replacement)), + $id); + } catch (Exception $ex) { + // If anything went awry, just move on. + } + } + + +} diff --git a/resources/sql/autopatches/20160411.repo.1.version.sql b/resources/sql/autopatches/20160411.repo.1.version.sql new file mode 100644 index 0000000000..bd0db5f5ce --- /dev/null +++ b/resources/sql/autopatches/20160411.repo.1.version.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_workingcopyversion ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryPHID VARBINARY(64) NOT NULL, + devicePHID VARBINARY(64) NOT NULL, + repositoryVersion INT UNSIGNED NOT NULL, + isWriting BOOL NOT NULL, + UNIQUE KEY `key_workingcopy` (repositoryPHID, devicePHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160418.repouri.1.sql b/resources/sql/autopatches/20160418.repouri.1.sql new file mode 100644 index 0000000000..89f48b4291 --- /dev/null +++ b/resources/sql/autopatches/20160418.repouri.1.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_uri ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + repositoryPHID VARBINARY(64) NOT NULL, + uri VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + builtinProtocol VARCHAR(32) COLLATE {$COLLATE_TEXT}, + builtinIdentifier VARCHAR(32) COLLATE {$COLLATE_TEXT}, + ioType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + displayType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + isDisabled BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_builtin` (repositoryPHID, builtinProtocol, builtinIdentifier) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160418.repouri.2.sql b/resources/sql/autopatches/20160418.repouri.2.sql new file mode 100644 index 0000000000..03884a3dfc --- /dev/null +++ b/resources/sql/autopatches/20160418.repouri.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_uri + ADD credentialPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20160418.repoversion.1.sql b/resources/sql/autopatches/20160418.repoversion.1.sql new file mode 100644 index 0000000000..e80e4322d0 --- /dev/null +++ b/resources/sql/autopatches/20160418.repoversion.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_workingcopyversion + ADD writeProperties LONGTEXT COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160419.pushlog.1.sql b/resources/sql/autopatches/20160419.pushlog.1.sql new file mode 100644 index 0000000000..3625f5860e --- /dev/null +++ b/resources/sql/autopatches/20160419.pushlog.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + ADD devicePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20160424.locks.1.sql b/resources/sql/autopatches/20160424.locks.1.sql new file mode 100644 index 0000000000..0edea13689 --- /dev/null +++ b/resources/sql/autopatches/20160424.locks.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_workingcopyversion + ADD lockOwner VARCHAR(255) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160426.searchedge.sql b/resources/sql/autopatches/20160426.searchedge.sql new file mode 100644 index 0000000000..630f9759ae --- /dev/null +++ b/resources/sql/autopatches/20160426.searchedge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_search.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_search.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160428.repo.1.urixaction.sql b/resources/sql/autopatches/20160428.repo.1.urixaction.sql new file mode 100644 index 0000000000..54d50dfeb7 --- /dev/null +++ b/resources/sql/autopatches/20160428.repo.1.urixaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_uritransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160503.repo.01.lpath.sql b/resources/sql/autopatches/20160503.repo.01.lpath.sql new file mode 100644 index 0000000000..437dfb1317 --- /dev/null +++ b/resources/sql/autopatches/20160503.repo.01.lpath.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD localPath VARCHAR(128) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160503.repo.02.lpathkey.sql b/resources/sql/autopatches/20160503.repo.02.lpathkey.sql new file mode 100644 index 0000000000..b630d87c26 --- /dev/null +++ b/resources/sql/autopatches/20160503.repo.02.lpathkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD UNIQUE KEY `key_local` (localPath); diff --git a/resources/sql/autopatches/20160503.repo.03.lpathmigrate.php b/resources/sql/autopatches/20160503.repo.03.lpathmigrate.php new file mode 100644 index 0000000000..d810b074c9 --- /dev/null +++ b/resources/sql/autopatches/20160503.repo.03.lpathmigrate.php @@ -0,0 +1,57 @@ +establishConnection('w'); + +$default_path = PhabricatorEnv::getEnvConfig('repository.default-local-path'); +$default_path = rtrim($default_path, '/'); + +foreach (new LiskMigrationIterator($table) as $repository) { + $local_path = $repository->getLocalPath(); + if (strlen($local_path)) { + // Repository already has a modern, unique local path. + continue; + } + + $local_path = $repository->getDetail('local-path'); + if (!strlen($local_path)) { + // Repository does not have a local path using the older format. + continue; + } + + $random = Filesystem::readRandomCharacters(8); + + // Try the configured path first, then a default path, then a path with some + // random noise. + $paths = array( + $local_path, + $default_path.'/'.$repository->getID().'/', + $default_path.'/'.$repository->getID().'-'.$random.'/', + ); + + foreach ($paths as $path) { + // Set, then get the path to normalize it. + $repository->setLocalPath($path); + $path = $repository->getLocalPath(); + + try { + queryfx( + $conn_w, + 'UPDATE %T SET localPath = %s WHERE id = %d', + $table->getTableName(), + $path, + $repository->getID()); + + echo tsprintf( + "%s\n", + pht( + 'Assigned repository "%s" to local path "%s".', + $repository->getDisplayName(), + $path)); + + break; + } catch (AphrontDuplicateKeyQueryException $ex) { + // Ignore, try the next one. + } + } +} diff --git a/resources/sql/autopatches/20160503.repo.04.mirrormigrate.php b/resources/sql/autopatches/20160503.repo.04.mirrormigrate.php new file mode 100644 index 0000000000..9613e43542 --- /dev/null +++ b/resources/sql/autopatches/20160503.repo.04.mirrormigrate.php @@ -0,0 +1,38 @@ +establishConnection('w'); + +$mirrors = queryfx_all( + $conn_w, + 'SELECT * FROM %T', + 'repository_mirror'); + +foreach ($mirrors as $mirror) { + $repository_phid = $mirror['repositoryPHID']; + $uri = $mirror['remoteURI']; + + $already_exists = id(new PhabricatorRepositoryURI())->loadOneWhere( + 'repositoryPHID = %s AND uri = %s', + $repository_phid, + $uri); + if ($already_exists) { + // Decline to migrate stuff that looks like it was already migrated. + continue; + } + + $new_uri = PhabricatorRepositoryURI::initializeNewURI() + ->setIOType(PhabricatorRepositoryURI::IO_MIRROR) + ->setRepositoryPHID($repository_phid) + ->setURI($uri) + ->setCredentialPHID($mirror['credentialPHID']) + ->setDateCreated($mirror['dateCreated']) + ->setDateModified($mirror['dateModified']) + ->save(); + + echo tsprintf( + "%s\n", + pht( + 'Migrated mirror "%s".', + $uri)); +} diff --git a/resources/sql/autopatches/20160503.repo.05.urimigrate.php b/resources/sql/autopatches/20160503.repo.05.urimigrate.php new file mode 100644 index 0000000000..d48afd4f66 --- /dev/null +++ b/resources/sql/autopatches/20160503.repo.05.urimigrate.php @@ -0,0 +1,82 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $repository) { + $uris = array(); + + $serve_http = $repository->getDetail('serve-over-http'); + $http_io = PhabricatorRepositoryURI::IO_DEFAULT; + $disable_http = false; + switch ($serve_http) { + case 'readwrite': + break; + case 'readonly': + $http_io = PhabricatorRepositoryURI::IO_READ; + break; + case 'off': + default: + $disable_http = true; + break; + } + + $serve_ssh = $repository->getDetail('serve-over-ssh'); + $ssh_io = PhabricatorRepositoryURI::IO_DEFAULT; + $disable_ssh = false; + switch ($serve_ssh) { + case 'readwrite': + break; + case 'readonly': + $ssh_io = PhabricatorRepositoryURI::IO_READ; + break; + case 'off': + default: + $disable_ssh = true; + break; + } + + $uris = $repository->newBuiltinURIs(); + + foreach ($uris as $uri) { + $builtin_protocol = $uri->getBuiltinProtocol(); + if ($builtin_protocol == PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH) { + $uri->setIsDisabled((int)$disable_ssh); + $uri->setIoType($ssh_io); + } else { + $uri->setIsDisabled((int)$disable_http); + $uri->setIoType($http_io); + } + } + + if (!$repository->isHosted()) { + $remote_uri = $repository->getDetail('remote-uri'); + if (strlen($remote_uri)) { + $uris[] = PhabricatorRepositoryURI::initializeNewURI() + ->setRepositoryPHID($repository->getPHID()) + ->attachRepository($repository) + ->setURI($remote_uri) + ->setCredentialPHID($repository->getCredentialPHID()) + ->setIOType(PhabricatorRepositoryURI::IO_OBSERVE); + } + } + + foreach ($uris as $uri) { + $already_exists = id(new PhabricatorRepositoryURI())->loadOneWhere( + 'repositoryPHID = %s AND uri = %s LIMIT 1', + $repository->getPHID(), + $uri->getURI()); + if ($already_exists) { + continue; + } + + $uri->save(); + + echo tsprintf( + "%s\n", + pht( + 'Migrated URI "%s" for repository "%s".', + $uri->getURI(), + $repository->getDisplayName())); + } +} diff --git a/resources/sql/autopatches/20160510.repo.01.uriindex.php b/resources/sql/autopatches/20160510.repo.01.uriindex.php new file mode 100644 index 0000000000..191985af47 --- /dev/null +++ b/resources/sql/autopatches/20160510.repo.01.uriindex.php @@ -0,0 +1,10 @@ +setViewer(PhabricatorUser::getOmnipotentUser()) + ->needURIs(true) + ->execute(); + +foreach ($repos as $repo) { + $repo->updateURIIndex(); +} diff --git a/resources/sql/autopatches/20160513.owners.01.autoreview.sql b/resources/sql/autopatches/20160513.owners.01.autoreview.sql new file mode 100644 index 0000000000..8b3d6e5819 --- /dev/null +++ b/resources/sql/autopatches/20160513.owners.01.autoreview.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD autoReview VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160513.owners.02.autoreviewnone.sql b/resources/sql/autopatches/20160513.owners.02.autoreviewnone.sql new file mode 100644 index 0000000000..d5c8a184e5 --- /dev/null +++ b/resources/sql/autopatches/20160513.owners.02.autoreviewnone.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET autoReview = 'none' WHERE autoReview = ''; diff --git a/resources/sql/autopatches/20160516.owners.01.dominion.sql b/resources/sql/autopatches/20160516.owners.01.dominion.sql new file mode 100644 index 0000000000..2fa4b0cae3 --- /dev/null +++ b/resources/sql/autopatches/20160516.owners.01.dominion.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD dominion VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160516.owners.02.dominionstrong.sql b/resources/sql/autopatches/20160516.owners.02.dominionstrong.sql new file mode 100644 index 0000000000..60177c554e --- /dev/null +++ b/resources/sql/autopatches/20160516.owners.02.dominionstrong.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET dominion = 'strong' WHERE dominion = ''; diff --git a/resources/sql/autopatches/20160517.oauth.01.edge.sql b/resources/sql/autopatches/20160517.oauth.01.edge.sql new file mode 100644 index 0000000000..7881d89251 --- /dev/null +++ b/resources/sql/autopatches/20160517.oauth.01.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_oauth_server.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_oauth_server.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160518.ssh.01.activecol.sql b/resources/sql/autopatches/20160518.ssh.01.activecol.sql new file mode 100644 index 0000000000..09c3e16df1 --- /dev/null +++ b/resources/sql/autopatches/20160518.ssh.01.activecol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD isActive BOOL; diff --git a/resources/sql/autopatches/20160518.ssh.02.activeval.sql b/resources/sql/autopatches/20160518.ssh.02.activeval.sql new file mode 100644 index 0000000000..c70f91492c --- /dev/null +++ b/resources/sql/autopatches/20160518.ssh.02.activeval.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_auth.auth_sshkey + SET isActive = 1; diff --git a/resources/sql/autopatches/20160518.ssh.03.activekey.sql b/resources/sql/autopatches/20160518.ssh.03.activekey.sql new file mode 100644 index 0000000000..a6775edf92 --- /dev/null +++ b/resources/sql/autopatches/20160518.ssh.03.activekey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_sshkey + ADD UNIQUE KEY `key_activeunique` (keyIndex, isActive); diff --git a/resources/sql/autopatches/20160519.ssh.01.xaction.sql b/resources/sql/autopatches/20160519.ssh.01.xaction.sql new file mode 100644 index 0000000000..8b6ddc62cd --- /dev/null +++ b/resources/sql/autopatches/20160519.ssh.01.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_sshkeytransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160531.pref.01.xaction.sql b/resources/sql/autopatches/20160531.pref.01.xaction.sql new file mode 100644 index 0000000000..0ff33f4b59 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.01.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_user.user_preferencestransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160531.pref.02.datecreatecol.sql b/resources/sql/autopatches/20160531.pref.02.datecreatecol.sql new file mode 100644 index 0000000000..5f583fc972 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.02.datecreatecol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + ADD dateCreated INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160531.pref.03.datemodcol.sql b/resources/sql/autopatches/20160531.pref.03.datemodcol.sql new file mode 100644 index 0000000000..bd9ebc96f7 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.03.datemodcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + ADD dateModified INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160531.pref.04.datecreateval.sql b/resources/sql/autopatches/20160531.pref.04.datecreateval.sql new file mode 100644 index 0000000000..fcaa8e0e0d --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.04.datecreateval.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_user.user_preferences + SET dateCreated = UNIX_TIMESTAMP() WHERE dateCreated = 0; diff --git a/resources/sql/autopatches/20160531.pref.05.datemodval.sql b/resources/sql/autopatches/20160531.pref.05.datemodval.sql new file mode 100644 index 0000000000..8571509782 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.05.datemodval.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_user.user_preferences + SET dateModified = UNIX_TIMESTAMP() WHERE dateModified = 0; diff --git a/resources/sql/autopatches/20160531.pref.06.phidcol.sql b/resources/sql/autopatches/20160531.pref.06.phidcol.sql new file mode 100644 index 0000000000..ff6ac80010 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.06.phidcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + ADD phid VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20160531.pref.07.phidval.php b/resources/sql/autopatches/20160531.pref.07.phidval.php new file mode 100644 index 0000000000..d5cb614c09 --- /dev/null +++ b/resources/sql/autopatches/20160531.pref.07.phidval.php @@ -0,0 +1,17 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $row) { + if ($row->getPHID() !== '') { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $row->getID()); +} diff --git a/resources/sql/autopatches/20160601.user.01.cache.sql b/resources/sql/autopatches/20160601.user.01.cache.sql new file mode 100644 index 0000000000..bb3386b02e --- /dev/null +++ b/resources/sql/autopatches/20160601.user.01.cache.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_user.user_cache ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + userPHID VARBINARY(64) NOT NULL, + cacheIndex BINARY(12) NOT NULL, + cacheKey VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + cacheData LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + cacheType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_usercache` (userPHID, cacheIndex), + KEY `key_cachekey` (cacheIndex), + KEY `key_cachetype` (cacheType) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160601.user.02.copyprefs.php b/resources/sql/autopatches/20160601.user.02.copyprefs.php new file mode 100644 index 0000000000..9edbc11794 --- /dev/null +++ b/resources/sql/autopatches/20160601.user.02.copyprefs.php @@ -0,0 +1,59 @@ +establishConnection('w'); +$table_name = $table->getTableName(); +$prefs_table = new PhabricatorUserPreferences(); + +foreach (new LiskRawMigrationIterator($conn_w, $table_name) as $row) { + $phid = $row['phid']; + + $pref_row = queryfx_one( + $conn_w, + 'SELECT preferences FROM %T WHERE userPHID = %s', + $prefs_table->getTableName(), + $phid); + + if ($pref_row) { + try { + $prefs = phutil_json_decode($pref_row['preferences']); + } catch (Exception $ex) { + $prefs = array(); + } + } else { + $prefs = array(); + } + + $zone = $row['timezoneIdentifier']; + if (strlen($zone)) { + $prefs[PhabricatorTimezoneSetting::SETTINGKEY] = $zone; + } + + $pronoun = $row['sex']; + if (strlen($pronoun)) { + $prefs[PhabricatorPronounSetting::SETTINGKEY] = $pronoun; + } + + $translation = $row['translation']; + if (strlen($translation)) { + $prefs[PhabricatorTranslationSetting::SETTINGKEY] = $translation; + } + + if ($prefs) { + queryfx( + $conn_w, + 'INSERT INTO %T (phid, userPHID, preferences, dateModified, dateCreated) + VALUES (%s, %s, %s, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()) + ON DUPLICATE KEY UPDATE preferences = VALUES(preferences)', + $prefs_table->getTableName(), + $prefs_table->generatePHID(), + $phid, + phutil_json_encode($prefs)); + } +} + +$prefs_key = PhabricatorUserPreferencesCacheType::KEY_PREFERENCES; +PhabricatorUserCache::clearCacheForAllUsers($prefs_key); diff --git a/resources/sql/autopatches/20160601.user.03.removetime.sql b/resources/sql/autopatches/20160601.user.03.removetime.sql new file mode 100644 index 0000000000..0ccaf77cd8 --- /dev/null +++ b/resources/sql/autopatches/20160601.user.03.removetime.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN timezoneIdentifier; diff --git a/resources/sql/autopatches/20160601.user.04.removetranslation.sql b/resources/sql/autopatches/20160601.user.04.removetranslation.sql new file mode 100644 index 0000000000..273223c317 --- /dev/null +++ b/resources/sql/autopatches/20160601.user.04.removetranslation.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN translation; diff --git a/resources/sql/autopatches/20160601.user.05.removesex.sql b/resources/sql/autopatches/20160601.user.05.removesex.sql new file mode 100644 index 0000000000..5b121f3864 --- /dev/null +++ b/resources/sql/autopatches/20160601.user.05.removesex.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN sex; diff --git a/resources/sql/autopatches/20160603.user.01.removedcenabled.sql b/resources/sql/autopatches/20160603.user.01.removedcenabled.sql new file mode 100644 index 0000000000..92d6c354e3 --- /dev/null +++ b/resources/sql/autopatches/20160603.user.01.removedcenabled.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN consoleEnabled; diff --git a/resources/sql/autopatches/20160603.user.02.removedctab.sql b/resources/sql/autopatches/20160603.user.02.removedctab.sql new file mode 100644 index 0000000000..fea865908b --- /dev/null +++ b/resources/sql/autopatches/20160603.user.02.removedctab.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN consoleTab; diff --git a/resources/sql/autopatches/20160603.user.03.removedcvisible.sql b/resources/sql/autopatches/20160603.user.03.removedcvisible.sql new file mode 100644 index 0000000000..6cf5149f42 --- /dev/null +++ b/resources/sql/autopatches/20160603.user.03.removedcvisible.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN consoleVisible; diff --git a/resources/sql/autopatches/20160604.user.01.stringmailprefs.php b/resources/sql/autopatches/20160604.user.01.stringmailprefs.php new file mode 100644 index 0000000000..791177d8a3 --- /dev/null +++ b/resources/sql/autopatches/20160604.user.01.stringmailprefs.php @@ -0,0 +1,47 @@ +establishConnection('w'); + +// Convert "Mail Format", "Re Prefix" and "Vary Subjects" mail settings to +// string constants to avoid weird stuff where we store "true" and "false" as +// strings in the database. + +// Each of these keys will be converted to the first value if present and +// truthy, or the second value if present and falsey. +$remap = array( + 'html-emails' => array('html', 'text'), + 're-prefix' => array('re', 'none'), + 'vary-subject' => array('vary', 'static'), +); + +foreach (new LiskMigrationIterator($table) as $row) { + $dict = $row->getPreferences(); + + $should_update = false; + foreach ($remap as $key => $value) { + if (isset($dict[$key])) { + if ($dict[$key]) { + $dict[$key] = $value[0]; + } else { + $dict[$key] = $value[1]; + } + $should_update = true; + } + } + + if (!$should_update) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET preferences = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($dict), + $row->getID()); +} + +$prefs_key = PhabricatorUserPreferencesCacheType::KEY_PREFERENCES; +PhabricatorUserCache::clearCacheForAllUsers($prefs_key); diff --git a/resources/sql/autopatches/20160604.user.02.removeimagecache.sql b/resources/sql/autopatches/20160604.user.02.removeimagecache.sql new file mode 100644 index 0000000000..92de984709 --- /dev/null +++ b/resources/sql/autopatches/20160604.user.02.removeimagecache.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP COLUMN profileImageCache; diff --git a/resources/sql/autopatches/20160605.user.01.prefnulluser.sql b/resources/sql/autopatches/20160605.user.01.prefnulluser.sql new file mode 100644 index 0000000000..e592c4c82f --- /dev/null +++ b/resources/sql/autopatches/20160605.user.01.prefnulluser.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + CHANGE userPHID userPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20160605.user.02.prefbuiltin.sql b/resources/sql/autopatches/20160605.user.02.prefbuiltin.sql new file mode 100644 index 0000000000..46b8db6580 --- /dev/null +++ b/resources/sql/autopatches/20160605.user.02.prefbuiltin.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + ADD builtinKey VARCHAR(32) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160605.user.03.builtinunique.sql b/resources/sql/autopatches/20160605.user.03.builtinunique.sql new file mode 100644 index 0000000000..ea13010fb8 --- /dev/null +++ b/resources/sql/autopatches/20160605.user.03.builtinunique.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_preferences + ADD UNIQUE KEY `key_builtin` (builtinKey); diff --git a/resources/sql/autopatches/20160616.phame.blog.header.1.sql b/resources/sql/autopatches/20160616.phame.blog.header.1.sql new file mode 100644 index 0000000000..d2764d964c --- /dev/null +++ b/resources/sql/autopatches/20160616.phame.blog.header.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD headerImagePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20160616.repo.01.oldref.sql b/resources/sql/autopatches/20160616.repo.01.oldref.sql new file mode 100644 index 0000000000..63bced8aab --- /dev/null +++ b/resources/sql/autopatches/20160616.repo.01.oldref.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_oldref ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryPHID VARBINARY(64) NOT NULL, + commitIdentifier VARCHAR(40) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_repository` (repositoryPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160617.harbormaster.01.arelease.sql b/resources/sql/autopatches/20160617.harbormaster.01.arelease.sql new file mode 100644 index 0000000000..6f067d1549 --- /dev/null +++ b/resources/sql/autopatches/20160617.harbormaster.01.arelease.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact + ADD isReleased BOOL NOT NULL; diff --git a/resources/sql/autopatches/20160618.phame.blog.subtitle.sql b/resources/sql/autopatches/20160618.phame.blog.subtitle.sql new file mode 100644 index 0000000000..1ea6572bb0 --- /dev/null +++ b/resources/sql/autopatches/20160618.phame.blog.subtitle.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD subtitle VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql b/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql new file mode 100644 index 0000000000..3ad4b0d040 --- /dev/null +++ b/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD parentDomain VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql b/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql new file mode 100644 index 0000000000..cfb4f157b1 --- /dev/null +++ b/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD parentSite VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql new file mode 100644 index 0000000000..96fc3b27ba --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD domainFullURI VARCHAR(128) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql new file mode 100644 index 0000000000..a323333c85 --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_phame.phame_blog + SET domainFullURI = CONCAT('http://', domain, '/') + WHERE domain IS NOT NULL; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql new file mode 100644 index 0000000000..05f6009de1 --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_phame.phame_blogtransaction + SET transactionType = 'phame.blog.full.domain' + WHERE transactionType = 'phame.blog.domain'; diff --git a/resources/sql/autopatches/20160706.phame.blog.parentdomain.2.sql b/resources/sql/autopatches/20160706.phame.blog.parentdomain.2.sql new file mode 100644 index 0000000000..0fa4f17197 --- /dev/null +++ b/resources/sql/autopatches/20160706.phame.blog.parentdomain.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + MODIFY parentDomain VARCHAR(128) NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160706.phame.blog.parentsite.1.sql b/resources/sql/autopatches/20160706.phame.blog.parentsite.1.sql new file mode 100644 index 0000000000..6c2f2e2483 --- /dev/null +++ b/resources/sql/autopatches/20160706.phame.blog.parentsite.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + MODIFY parentSite VARCHAR(128) NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160707.calendar.01.stub.sql b/resources/sql/autopatches/20160707.calendar.01.stub.sql new file mode 100644 index 0000000000..b872f17eeb --- /dev/null +++ b/resources/sql/autopatches/20160707.calendar.01.stub.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD isStub BOOL NOT NULL; diff --git a/resources/sql/autopatches/20160711.files.01.builtin.sql b/resources/sql/autopatches/20160711.files.01.builtin.sql new file mode 100644 index 0000000000..d8849ec053 --- /dev/null +++ b/resources/sql/autopatches/20160711.files.01.builtin.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD builtinKey VARCHAR(64) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160711.files.02.builtinkey.sql b/resources/sql/autopatches/20160711.files.02.builtinkey.sql new file mode 100644 index 0000000000..3551f6c3cd --- /dev/null +++ b/resources/sql/autopatches/20160711.files.02.builtinkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD UNIQUE KEY `key_builtin` (builtinKey); diff --git a/resources/sql/autopatches/20160713.event.01.host.sql b/resources/sql/autopatches/20160713.event.01.host.sql new file mode 100644 index 0000000000..d1a6dd643b --- /dev/null +++ b/resources/sql/autopatches/20160713.event.01.host.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + CHANGE userPHID hostPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20160715.event.01.alldayfrom.sql b/resources/sql/autopatches/20160715.event.01.alldayfrom.sql new file mode 100644 index 0000000000..269345b3d9 --- /dev/null +++ b/resources/sql/autopatches/20160715.event.01.alldayfrom.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD allDayDateFrom INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160715.event.02.alldayto.sql b/resources/sql/autopatches/20160715.event.02.alldayto.sql new file mode 100644 index 0000000000..7038274487 --- /dev/null +++ b/resources/sql/autopatches/20160715.event.02.alldayto.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + ADD allDayDateTo INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160715.event.03.allday.php b/resources/sql/autopatches/20160715.event.03.allday.php new file mode 100644 index 0000000000..4c2d73a368 --- /dev/null +++ b/resources/sql/autopatches/20160715.event.03.allday.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +echo pht( + "Restructuring calendar invite transactions...\n"); + +foreach (new LiskMigrationIterator($table) as $txn) { + $type = PhabricatorCalendarEventInviteTransaction::TRANSACTIONTYPE; + if ($txn->getTransactionType() != $type) { + continue; + } + + $old_value = array_keys($txn->getOldValue()); + + $orig_new = $txn->getNewValue(); + $status_uninvited = 'uninvited'; + foreach ($orig_new as $key => $status) { + if ($status == $status_uninvited) { + unset($orig_new[$key]); + } + } + $new_value = array_keys($orig_new); + + queryfx( + $conn_w, + 'UPDATE %T SET '. + 'oldValue = %s, newValue = %s'. + 'WHERE id = %d', + $table->getTableName(), + phutil_json_encode($old_value), + phutil_json_encode($new_value), + $txn->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/autopatches/20160721.pack.01.pub.sql b/resources/sql/autopatches/20160721.pack.01.pub.sql new file mode 100644 index 0000000000..b123740920 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.01.pub.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_publisher ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + publisherKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_SORT}, + editPolicy VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_publisher` (publisherKey) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.02.pubxaction.sql b/resources/sql/autopatches/20160721.pack.02.pubxaction.sql new file mode 100644 index 0000000000..f42f5ba742 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.02.pubxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_publishertransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.03.edge.sql b/resources/sql/autopatches/20160721.pack.03.edge.sql new file mode 100644 index 0000000000..d735df50a3 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.03.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_packages.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_packages.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.04.pkg.sql b/resources/sql/autopatches/20160721.pack.04.pkg.sql new file mode 100644 index 0000000000..c5f427f1c0 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.04.pkg.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_package ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + publisherPHID VARBINARY(64) NOT NULL, + packageKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_SORT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_package` (publisherPHID, packageKey) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.05.pkgxaction.sql b/resources/sql/autopatches/20160721.pack.05.pkgxaction.sql new file mode 100644 index 0000000000..7fd82569de --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.05.pkgxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_packagetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.06.version.sql b/resources/sql/autopatches/20160721.pack.06.version.sql new file mode 100644 index 0000000000..8ca2870f78 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.06.version.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_version ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(64) NOT NULL COLLATE {$COLLATE_SORT}, + packagePHID VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_package` (packagePHID, name) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160721.pack.07.versionxaction.sql b/resources/sql/autopatches/20160721.pack.07.versionxaction.sql new file mode 100644 index 0000000000..706460b025 --- /dev/null +++ b/resources/sql/autopatches/20160721.pack.07.versionxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_versiontransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160722.pack.01.pubngrams.sql b/resources/sql/autopatches/20160722.pack.01.pubngrams.sql new file mode 100644 index 0000000000..956ec58e8b --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.01.pubngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_publishername_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql b/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql new file mode 100644 index 0000000000..514482539a --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.02.pkgngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_packagename_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160722.pack.03.versionngrams.sql b/resources/sql/autopatches/20160722.pack.03.versionngrams.sql new file mode 100644 index 0000000000..a5f85f546b --- /dev/null +++ b/resources/sql/autopatches/20160722.pack.03.versionngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_packages.packages_versionname_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160810.commit.01.summarylength.sql b/resources/sql/autopatches/20160810.commit.01.summarylength.sql new file mode 100644 index 0000000000..366f0948cd --- /dev/null +++ b/resources/sql/autopatches/20160810.commit.01.summarylength.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + CHANGE summary summary VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160824.connectionlog.sql b/resources/sql/autopatches/20160824.connectionlog.sql new file mode 100644 index 0000000000..499fc71845 --- /dev/null +++ b/resources/sql/autopatches/20160824.connectionlog.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_conduit.conduit_connectionlog; diff --git a/resources/sql/autopatches/20160824.repohint.01.hint.sql b/resources/sql/autopatches/20160824.repohint.01.hint.sql new file mode 100644 index 0000000000..f29f2d1c5d --- /dev/null +++ b/resources/sql/autopatches/20160824.repohint.01.hint.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_commithint ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryPHID VARBINARY(64) NOT NULL, + oldCommitIdentifier VARCHAR(40) NOT NULL COLLATE {$COLLATE_TEXT}, + newCommitIdentifier VARCHAR(40) COLLATE {$COLLATE_TEXT}, + hintType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_old` (repositoryPHID, oldCommitIdentifier) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160824.repohint.02.movebad.php b/resources/sql/autopatches/20160824.repohint.02.movebad.php new file mode 100644 index 0000000000..4127892f73 --- /dev/null +++ b/resources/sql/autopatches/20160824.repohint.02.movebad.php @@ -0,0 +1,39 @@ +establishConnection('w'); + +$rows = queryfx_all( + $conn, + 'SELECT fullCommitName FROM repository_badcommit'); + +$viewer = PhabricatorUser::getOmnipotentUser(); + +foreach ($rows as $row) { + $identifier = $row['fullCommitName']; + + $commit = id(new DiffusionCommitQuery()) + ->setViewer($viewer) + ->withIdentifiers(array($identifier)) + ->executeOne(); + + if (!$commit) { + echo tsprintf( + "%s\n", + pht( + 'Skipped hint for "%s", this is not a valid commit.', + $identifier)); + } else { + PhabricatorRepositoryCommitHint::updateHint( + $commit->getRepository()->getPHID(), + $commit->getCommitIdentifier(), + null, + PhabricatorRepositoryCommitHint::HINT_UNREADABLE); + + echo tsprintf( + "%s\n", + pht( + 'Updated commit hint for "%s".', + $identifier)); + } +} diff --git a/resources/sql/autopatches/20160824.repohint.03.nukebad.sql b/resources/sql/autopatches/20160824.repohint.03.nukebad.sql new file mode 100644 index 0000000000..88364aeef3 --- /dev/null +++ b/resources/sql/autopatches/20160824.repohint.03.nukebad.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_repository.repository_badcommit; diff --git a/resources/sql/autopatches/20160825.ponder.sql b/resources/sql/autopatches/20160825.ponder.sql new file mode 100644 index 0000000000..73be3a781e --- /dev/null +++ b/resources/sql/autopatches/20160825.ponder.sql @@ -0,0 +1,7 @@ +/* Removes Ponder vote data. */ + +DELETE FROM {$NAMESPACE}_ponder.edge + WHERE type IN (17, 18, 19, 20); + +DELETE FROM {$NAMESPACE}_user.edge + WHERE type IN (17, 18, 19, 20); diff --git a/resources/sql/autopatches/20160829.pastebin.01.language.sql b/resources/sql/autopatches/20160829.pastebin.01.language.sql new file mode 100644 index 0000000000..b29a9d0bc5 --- /dev/null +++ b/resources/sql/autopatches/20160829.pastebin.01.language.sql @@ -0,0 +1,3 @@ +/* Allow this column to be nullable (null means we'll try to autodetect) */ +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste MODIFY language VARCHAR(64) + COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160829.pastebin.02.language.sql b/resources/sql/autopatches/20160829.pastebin.02.language.sql new file mode 100644 index 0000000000..b6876c6c69 --- /dev/null +++ b/resources/sql/autopatches/20160829.pastebin.02.language.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_pastebin.pastebin_paste SET language = NULL + WHERE language = ''; diff --git a/resources/sql/autopatches/20160913.conpherence.topic.1.sql b/resources/sql/autopatches/20160913.conpherence.topic.1.sql new file mode 100644 index 0000000000..186a5b5c58 --- /dev/null +++ b/resources/sql/autopatches/20160913.conpherence.topic.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD topic VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160919.repo.messagecount.sql b/resources/sql/autopatches/20160919.repo.messagecount.sql new file mode 100644 index 0000000000..a28bbb1e7e --- /dev/null +++ b/resources/sql/autopatches/20160919.repo.messagecount.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_statusmessage + ADD messageCount INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20160919.repo.messagedefault.sql b/resources/sql/autopatches/20160919.repo.messagedefault.sql new file mode 100644 index 0000000000..0c8b84d44a --- /dev/null +++ b/resources/sql/autopatches/20160919.repo.messagedefault.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_statusmessage + CHANGE messageCount messageCount INT UNSIGNED NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20160921.fileexternalrequest.sql b/resources/sql/autopatches/20160921.fileexternalrequest.sql new file mode 100644 index 0000000000..4c1beaab9e --- /dev/null +++ b/resources/sql/autopatches/20160921.fileexternalrequest.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_file.file_externalrequest ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + filePHID VARBINARY(64), + ttl INT UNSIGNED NOT NULL, + uri LONGTEXT NOT NULL, + uriIndex BINARY(12) NOT NULL, + isSuccessful BOOL NOT NULL, + responseMessage LONGTEXT, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_uriindex` (uriIndex), + KEY `key_ttl` (ttl), + KEY `key_file` (filePHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160927.phurl.ngrams.php b/resources/sql/autopatches/20160927.phurl.ngrams.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20160927.phurl.ngrams.php @@ -0,0 +1,3 @@ +establishConnection('w'); +$table_name = 'calendar_event'; + +// Long ago, "All Day" events were stored with a start and end date set to +// the earliest possible start and end seconds for the corresponding days. We +// then moved to store all day events with their "date" epochs as UTC, separate +// from individual event times. Both systems were later replaced with use of +// CalendarDateTime. +$zone_min = new DateTimeZone('Pacific/Midway'); +$zone_max = new DateTimeZone('Pacific/Kiritimati'); +$zone_utc = new DateTimeZone('UTC'); + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $row) { + $parameters = phutil_json_decode($row['parameters']); + if (isset($parameters['startDateTime'])) { + // This event has already been migrated. + continue; + } + + $is_all_day = $row['isAllDay']; + + if (empty($row['allDayDateFrom'])) { + // No "allDayDateFrom" means this is an old event which was never migrated + // by the earlier "20160715.event.03.allday.php" migration. The dateFrom + // and dateTo will be minimum and maximum earthly seconds for the event. We + // convert them to UTC if they were in extreme timezones. + $epoch_min = $row['dateFrom']; + $epoch_max = $row['dateTo']; + + if ($is_all_day) { + $date_min = new DateTime('@'.$epoch_min); + $date_max = new DateTime('@'.$epoch_max); + + $date_min->setTimeZone($zone_min); + $date_min->modify('+2 days'); + $date_max->setTimeZone($zone_max); + $date_max->modify('-2 days'); + + $string_min = $date_min->format('Y-m-d'); + $string_max = $date_max->format('Y-m-d 23:59:00'); + + $utc_min = id(new DateTime($string_min, $zone_utc))->format('U'); + $utc_max = id(new DateTime($string_max, $zone_utc))->format('U'); + } else { + $utc_min = $epoch_min; + $utc_max = $epoch_max; + } + } else { + // This is an event which was migrated already. We can pick the correct + // epoch timestamps based on the "isAllDay" flag. + if ($is_all_day) { + $utc_min = $row['allDayDateFrom']; + $utc_max = $row['allDayDateTo']; + } else { + $utc_min = $row['dateFrom']; + $utc_max = $row['dateTo']; + } + } + + $utc_until = $row['recurrenceEndDate']; + + $start_datetime = PhutilCalendarAbsoluteDateTime::newFromEpoch($utc_min); + if ($is_all_day) { + $start_datetime->setIsAllDay(true); + } + + $end_datetime = PhutilCalendarAbsoluteDateTime::newFromEpoch($utc_max); + if ($is_all_day) { + $end_datetime->setIsAllDay(true); + } + + if ($utc_until) { + $until_datetime = PhutilCalendarAbsoluteDateTime::newFromEpoch($utc_until); + } else { + $until_datetime = null; + } + + $parameters['startDateTime'] = $start_datetime->toDictionary(); + $parameters['endDateTime'] = $end_datetime->toDictionary(); + if ($until_datetime) { + $parameters['untilDateTime'] = $until_datetime->toDictionary(); + } + + queryfx( + $conn, + 'UPDATE %T SET parameters = %s WHERE id = %d', + $table_name, + phutil_json_encode($parameters), + $row['id']); +} + +// Generate UTC epochs for all events. We can't readily do this one at a +// time because instance UTC epochs rely on having the parent event. +$viewer = PhabricatorUser::getOmnipotentUser(); + +$all_events = id(new PhabricatorCalendarEventQuery()) + ->setViewer($viewer) + ->execute(); +foreach ($all_events as $event) { + if ($event->getUTCInitialEpoch()) { + // Already migrated. + continue; + } + + try { + $event->updateUTCEpochs(); + } catch (Exception $ex) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET + utcInitialEpoch = %d, + utcUntilEpoch = %nd, + utcInstanceEpoch = %nd WHERE id = %d', + $table_name, + $event->getUTCInitialEpoch(), + $event->getUTCUntilEpoch(), + $event->getUTCInstanceEpoch(), + $event->getID()); +} diff --git a/resources/sql/autopatches/20161005.cal.01.rrules.php b/resources/sql/autopatches/20161005.cal.01.rrules.php new file mode 100644 index 0000000000..e2e61ba30a --- /dev/null +++ b/resources/sql/autopatches/20161005.cal.01.rrules.php @@ -0,0 +1,44 @@ +establishConnection('w'); +$table_name = 'calendar_event'; + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $row) { + $parameters = phutil_json_decode($row['parameters']); + if (isset($parameters['recurrenceRule'])) { + // This event has already been migrated. + continue; + } + + if (!$row['isRecurring']) { + continue; + } + + $old_rule = $row['recurrenceFrequency']; + if (!$old_rule) { + continue; + } + + try { + $frequency = phutil_json_decode($old_rule); + if ($frequency) { + $frequency_rule = $frequency['rule']; + $frequency_rule = phutil_utf8_strtoupper($frequency_rule); + + $rrule = id(new PhutilCalendarRecurrenceRule()) + ->setFrequency($frequency_rule); + } + } catch (Exception $ex) { + continue; + } + + $parameters['recurrenceRule'] = $rrule->toDictionary(); + + queryfx( + $conn, + 'UPDATE %T SET parameters = %s WHERE id = %d', + $table_name, + phutil_json_encode($parameters), + $row['id']); +} diff --git a/resources/sql/autopatches/20161005.cal.02.export.sql b/resources/sql/autopatches/20161005.cal.02.export.sql new file mode 100644 index 0000000000..bd1c031165 --- /dev/null +++ b/resources/sql/autopatches/20161005.cal.02.export.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_export ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + authorPHID VARBINARY(64) NOT NULL, + policyMode VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + queryKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + secretKey BINARY(20) NOT NULL, + isDisabled BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_author` (authorPHID), + UNIQUE KEY `key_secret` (secretKey) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20161005.cal.03.exportxaction.sql b/resources/sql/autopatches/20161005.cal.03.exportxaction.sql new file mode 100644 index 0000000000..1161534015 --- /dev/null +++ b/resources/sql/autopatches/20161005.cal.03.exportxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_exporttransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20161005.conpherence.image.1.sql b/resources/sql/autopatches/20161005.conpherence.image.1.sql new file mode 100644 index 0000000000..17950986b8 --- /dev/null +++ b/resources/sql/autopatches/20161005.conpherence.image.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD profileImagePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20161005.conpherence.image.2.php b/resources/sql/autopatches/20161005.conpherence.image.2.php new file mode 100644 index 0000000000..8bad4b55e7 --- /dev/null +++ b/resources/sql/autopatches/20161005.conpherence.image.2.php @@ -0,0 +1,4 @@ +establishConnection('w'); + +$txn_table = new PhabricatorDashboardTransaction(); +$txn_conn = $table->establishConnection('r'); + +echo pht("Building Dashboard authorPHIDs...\n"); + +foreach (new LiskMigrationIterator($table) as $dashboard) { + + if ($dashboard->getAuthorPHID()) { + continue; + } + + $author_row = queryfx_one( + $txn_conn, + 'SELECT authorPHID FROM %T WHERE objectPHID = %s ORDER BY id ASC LIMIT 1', + $txn_table->getTableName(), + $dashboard->getPHID()); + + if (!$author_row) { + $author_phid = id(new PhabricatorDashboardApplication())->getPHID(); + } else { + $author_phid = $author_row['authorPHID']; + } + + queryfx( + $conn_w, + 'UPDATE %T SET authorPHID = %s WHERE id = %d', + $table->getTableName(), + $author_phid, + $dashboard->getID()); +} + +echo pht("Done\n"); diff --git a/resources/sql/autopatches/20161211.menu.01.itemkey.sql b/resources/sql/autopatches/20161211.menu.01.itemkey.sql new file mode 100644 index 0000000000..71bfe257f0 --- /dev/null +++ b/resources/sql/autopatches/20161211.menu.01.itemkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_search.search_profilepanelconfiguration + CHANGE panelKey menuItemKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20161211.menu.02.itemprops.sql b/resources/sql/autopatches/20161211.menu.02.itemprops.sql new file mode 100644 index 0000000000..cb9e296d42 --- /dev/null +++ b/resources/sql/autopatches/20161211.menu.02.itemprops.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_search.search_profilepanelconfiguration + CHANGE panelProperties menuItemProperties + LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20161211.menu.03.order.sql b/resources/sql/autopatches/20161211.menu.03.order.sql new file mode 100644 index 0000000000..01291ad4c6 --- /dev/null +++ b/resources/sql/autopatches/20161211.menu.03.order.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_search.search_profilepanelconfiguration + CHANGE panelOrder menuItemOrder INT UNSIGNED; diff --git a/resources/sql/autopatches/20161212.dashboardpanel.01.author.sql b/resources/sql/autopatches/20161212.dashboardpanel.01.author.sql new file mode 100644 index 0000000000..00c52d19cb --- /dev/null +++ b/resources/sql/autopatches/20161212.dashboardpanel.01.author.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard_panel + ADD authorPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20161212.dashboardpanel.02.author.php b/resources/sql/autopatches/20161212.dashboardpanel.02.author.php new file mode 100644 index 0000000000..bc87aef91c --- /dev/null +++ b/resources/sql/autopatches/20161212.dashboardpanel.02.author.php @@ -0,0 +1,39 @@ +establishConnection('w'); + +$txn_table = new PhabricatorDashboardPanelTransaction(); +$txn_conn = $table->establishConnection('r'); + +echo pht("Building Dashboard Panel authorPHIDs...\n"); + +foreach (new LiskMigrationIterator($table) as $panel) { + + if ($panel->getAuthorPHID()) { + continue; + } + + $panel_row = queryfx_one( + $txn_conn, + 'SELECT authorPHID FROM %T WHERE objectPHID = %s ORDER BY id ASC LIMIT 1', + $txn_table->getTableName(), + $panel->getPHID()); + + if (!$panel_row) { + $author_phid = id(new PhabricatorDashboardApplication())->getPHID(); + } else { + $author_phid = $panel_row['authorPHID']; + } + + queryfx( + $conn_w, + 'UPDATE %T SET authorPHID = %s WHERE id = %d', + $table->getTableName(), + $author_phid, + $panel->getID()); +} + +echo pht("Done\n"); diff --git a/resources/sql/autopatches/20161212.dashboards.01.icon.sql b/resources/sql/autopatches/20161212.dashboards.01.icon.sql new file mode 100644 index 0000000000..e2783ab5bc --- /dev/null +++ b/resources/sql/autopatches/20161212.dashboards.01.icon.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_dashboard.dashboard + ADD icon VARCHAR(32) NOT NULL; + +UPDATE {$NAMESPACE}_dashboard.dashboard + SET icon = 'fa-dashboard'; diff --git a/resources/sql/autopatches/20161213.diff.01.hunks.php b/resources/sql/autopatches/20161213.diff.01.hunks.php new file mode 100644 index 0000000000..a3863275f1 --- /dev/null +++ b/resources/sql/autopatches/20161213.diff.01.hunks.php @@ -0,0 +1,39 @@ +establishConnection('w'); +$src_table = 'differential_hunk'; +$dst_table = 'differential_hunk_modern'; + +echo tsprintf( + "%s\n", + pht('Migrating old hunks...')); + +foreach (new LiskRawMigrationIterator($conn, $src_table) as $row) { + queryfx( + $conn, + 'INSERT INTO %T + (changesetID, oldOffset, oldLen, newOffset, newLen, + dataType, dataEncoding, dataFormat, data, + dateCreated, dateModified) + VALUES + (%d, %d, %d, %d, %d, + %s, %s, %s, %s, + %d, %d)', + $dst_table, + $row['changesetID'], + $row['oldOffset'], + $row['oldLen'], + $row['newOffset'], + $row['newLen'], + DifferentialHunk::DATATYPE_TEXT, + 'utf8', + DifferentialHunk::DATAFORMAT_RAW, + // In rare cases, this could be NULL. See T12090. + (string)$row['changes'], + $row['dateCreated'], + $row['dateModified']); +} + +echo tsprintf( + "%s\n", + pht('Done.')); diff --git a/resources/sql/autopatches/20161216.dashboard.ngram.01.sql b/resources/sql/autopatches/20161216.dashboard.ngram.01.sql new file mode 100644 index 0000000000..8fd237fe82 --- /dev/null +++ b/resources/sql/autopatches/20161216.dashboard.ngram.01.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboard_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboardpanel_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20161216.dashboard.ngram.02.php b/resources/sql/autopatches/20161216.dashboard.ngram.02.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20161216.dashboard.ngram.02.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +queryfx( + $conn_w, + 'DELETE FROM %T WHERE menuItemKey = "motivator"', + $table->getTableName()); diff --git a/resources/sql/autopatches/20170131.dashboard.personal.01.php b/resources/sql/autopatches/20170131.dashboard.personal.01.php new file mode 100644 index 0000000000..af62c017e8 --- /dev/null +++ b/resources/sql/autopatches/20170131.dashboard.personal.01.php @@ -0,0 +1,45 @@ +establishConnection('r'); +$table_name = 'dashboard_install'; + +$search_table = new PhabricatorProfileMenuItemConfiguration(); +$search_conn = $search_table->establishConnection('w'); +$search_table_name = 'search_profilepanelconfiguration'; + +$viewer = PhabricatorUser::getOmnipotentUser(); +$profile_phid = id(new PhabricatorHomeApplication())->getPHID(); +$menu_item_key = PhabricatorDashboardProfileMenuItem::MENUITEMKEY; + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $install) { + + $dashboard_phid = $install['dashboardPHID']; + $new_phid = id(new PhabricatorProfileMenuItemConfiguration())->generatePHID(); + $menu_item_properties = json_encode( + array('dashboardPHID' => $dashboard_phid, 'name' => '')); + + $custom_phid = $install['objectPHID']; + if ($custom_phid == 'dashboard:default') { + $custom_phid = null; + } + + $menu_item_order = 0; + + queryfx( + $search_conn, + 'INSERT INTO %T (phid, profilePHID, menuItemKey, menuItemProperties, '. + 'visibility, dateCreated, dateModified, menuItemOrder, customPHID) VALUES '. + '(%s, %s, %s, %s, %s, %d, %d, %d, %ns)', + $search_table_name, + $new_phid, + $profile_phid, + $menu_item_key, + $menu_item_properties, + 'visible', + PhabricatorTime::getNow(), + PhabricatorTime::getNow(), + $menu_item_order, + $custom_phid); + +} diff --git a/resources/sql/autopatches/20170301.subtype.01.col.sql b/resources/sql/autopatches/20170301.subtype.01.col.sql new file mode 100644 index 0000000000..318021f9d0 --- /dev/null +++ b/resources/sql/autopatches/20170301.subtype.01.col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_search.search_editengineconfiguration + ADD subtype VARCHAR(64) COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20170301.subtype.02.default.sql b/resources/sql/autopatches/20170301.subtype.02.default.sql new file mode 100644 index 0000000000..e1baedc013 --- /dev/null +++ b/resources/sql/autopatches/20170301.subtype.02.default.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_search.search_editengineconfiguration + SET subtype = 'default' WHERE subtype = ''; diff --git a/resources/sql/autopatches/20170301.subtype.03.taskcol.sql b/resources/sql/autopatches/20170301.subtype.03.taskcol.sql new file mode 100644 index 0000000000..7c4f6c9412 --- /dev/null +++ b/resources/sql/autopatches/20170301.subtype.03.taskcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD subtype VARCHAR(64) COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20170301.subtype.04.taskdefault.sql b/resources/sql/autopatches/20170301.subtype.04.taskdefault.sql new file mode 100644 index 0000000000..7189bdb26e --- /dev/null +++ b/resources/sql/autopatches/20170301.subtype.04.taskdefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_maniphest.maniphest_task + SET subtype = 'default' WHERE subtype = ''; diff --git a/resources/sql/autopatches/20170303.people.01.avatar.sql b/resources/sql/autopatches/20170303.people.01.avatar.sql new file mode 100644 index 0000000000..7f447f208c --- /dev/null +++ b/resources/sql/autopatches/20170303.people.01.avatar.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD defaultProfileImagePHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_user.user + ADD defaultProfileImageVersion VARCHAR(64) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170313.reviewers.01.sql b/resources/sql/autopatches/20170313.reviewers.01.sql new file mode 100644 index 0000000000..4b243b6f6f --- /dev/null +++ b/resources/sql/autopatches/20170313.reviewers.01.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_reviewer ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + revisionPHID VARBINARY(64) NOT NULL, + reviewerPHID VARBINARY(64) NOT NULL, + reviewerStatus VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_revision` (revisionPHID, reviewerPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170316.rawfiles.01.php b/resources/sql/autopatches/20170316.rawfiles.01.php new file mode 100644 index 0000000000..df2fa93c9a --- /dev/null +++ b/resources/sql/autopatches/20170316.rawfiles.01.php @@ -0,0 +1,53 @@ +establishConnection('w'); +$viewer = PhabricatorUser::getOmnipotentUser(); + +$iterator = new LiskRawMigrationIterator( + $conn, + $table->getTableName()); + +echo tsprintf( + "%s\n", + pht('Purging old raw changeset file caches...')); + +$keys = array( + 'raw:new:phid', + 'raw:old:phid', +); + +foreach ($iterator as $changeset) { + try { + $metadata = phutil_json_decode($changeset['metadata']); + + $phids = array(); + foreach ($keys as $key) { + if (isset($metadata[$key])) { + $phids[] = $metadata[$key]; + } + } + + foreach ($phids as $phid) { + $file = id(new PhabricatorFileQuery()) + ->setViewer($viewer) + ->withPHIDs(array($phid)) + ->executeOne(); + if ($file) { + id(new PhabricatorDestructionEngine()) + ->destroyObject($file); + } + } + + // NOTE: We don't bother updating the changeset record itself: we already + // regenerate the cache properly if the stored value isn't valid. + + } catch (Exception $ex) { + // Just move on if we run into trouble. + } +} diff --git a/resources/sql/autopatches/20170320.reviewers.01.lastaction.sql b/resources/sql/autopatches/20170320.reviewers.01.lastaction.sql new file mode 100644 index 0000000000..41b8051275 --- /dev/null +++ b/resources/sql/autopatches/20170320.reviewers.01.lastaction.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_reviewer + ADD lastActionDiffPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170320.reviewers.02.lastcomment.sql b/resources/sql/autopatches/20170320.reviewers.02.lastcomment.sql new file mode 100644 index 0000000000..c430d86064 --- /dev/null +++ b/resources/sql/autopatches/20170320.reviewers.02.lastcomment.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_reviewer + ADD lastCommentDiffPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170320.reviewers.03.migrate.php b/resources/sql/autopatches/20170320.reviewers.03.migrate.php new file mode 100644 index 0000000000..04abb5c141 --- /dev/null +++ b/resources/sql/autopatches/20170320.reviewers.03.migrate.php @@ -0,0 +1,125 @@ +establishConnection('w'); + +// Previously "DifferentialRevisionHasReviewerEdgeType::EDGECONST". +$edge_type = 35; + +// NOTE: We can't use normal migration iterators for edges because they don't +// have an "id" column. For now, try just loading the whole result set: the +// actual size of the rows is small. If we run into issues, we could write an +// EdgeIterator. +$every_edge = queryfx_all( + $conn, + 'SELECT * FROM %T edge LEFT JOIN %T data ON edge.dataID = data.id + WHERE edge.type = %d', + $table_name, + $data_name, + $edge_type); + +foreach ($every_edge as $edge) { + if ($edge['type'] != $edge_type) { + // Ignore edges which aren't "reviewers", like subscribers. + continue; + } + + try { + $data = phutil_json_decode($edge['data']); + $data = idx($data, 'data'); + } catch (Exception $ex) { + // Just ignore any kind of issue with the edge data, we'll use a default + // below. + $data = null; + } + + if (!$data) { + $data = array( + 'status' => 'added', + ); + } + + $status = idx($data, 'status'); + + $diff_phid = null; + + // NOTE: At one point, the code to populate "diffID" worked correctly, but + // it seems to have later been broken. Salvage it if we can, and look up + // the corresponding diff PHID. + $diff_id = idx($data, 'diffID'); + if ($diff_id) { + $row = queryfx_one( + $conn, + 'SELECT phid FROM %T WHERE id = %d', + $diff_table->getTableName(), + $diff_id); + if ($row) { + $diff_phid = $row['phid']; + } + } + + if (!$diff_phid) { + // If the status is "accepted" or "rejected", look up the current diff + // PHID so we can distinguish between "accepted" and "accepted older". + switch ($status) { + case 'accepted': + case 'rejected': + case 'commented': + $row = queryfx_one( + $conn, + 'SELECT diff.phid FROM %T diff JOIN %T revision + ON diff.revisionID = revision.id + WHERE revision.phid = %s + ORDER BY diff.id DESC LIMIT 1', + $diff_table->getTableName(), + $table->getTableName(), + $edge['src']); + if ($row) { + $diff_phid = $row['phid']; + } + break; + } + } + + // We now represent some states (like "Commented" and "Accepted Older") as + // a primary state plus an extra flag, instead of making "Commented" a + // primary state. Map old states to new states and flags. + + if ($status == 'commented') { + $status = 'added'; + $comment_phid = $diff_phid; + $action_phid = null; + } else { + $comment_phid = null; + $action_phid = $diff_phid; + } + + if ($status == 'accepted-older') { + $status = 'accepted'; + } + + if ($status == 'rejected-older') { + $status = 'rejected'; + } + + queryfx( + $conn, + 'INSERT INTO %T (revisionPHID, reviewerPHID, reviewerStatus, + lastActionDiffPHID, lastCommentDiffPHID, dateCreated, dateModified) + VALUES (%s, %s, %s, %ns, %ns, %d, %d) + ON DUPLICATE KEY UPDATE dateCreated = VALUES(dateCreated)', + $reviewer_table->getTableName(), + $edge['src'], + $edge['dst'], + $status, + $action_phid, + $comment_phid, + $edge['dateCreated'], + $edge['dateCreated']); +} diff --git a/resources/sql/autopatches/20170322.reviewers.04.actor.sql b/resources/sql/autopatches/20170322.reviewers.04.actor.sql new file mode 100644 index 0000000000..27b46848a7 --- /dev/null +++ b/resources/sql/autopatches/20170322.reviewers.04.actor.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_reviewer + ADD lastActorPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170328.reviewers.01.void.sql b/resources/sql/autopatches/20170328.reviewers.01.void.sql new file mode 100644 index 0000000000..b46cb9351d --- /dev/null +++ b/resources/sql/autopatches/20170328.reviewers.01.void.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_reviewer + ADD voidedPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170404.files.retroactive-content-hash.sql b/resources/sql/autopatches/20170404.files.retroactive-content-hash.sql new file mode 100644 index 0000000000..7c4eb0f013 --- /dev/null +++ b/resources/sql/autopatches/20170404.files.retroactive-content-hash.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + CHANGE contentHash contentHash BINARY(64); diff --git a/resources/sql/autopatches/20170406.hmac.01.keystore.sql b/resources/sql/autopatches/20170406.hmac.01.keystore.sql new file mode 100644 index 0000000000..f7de1c9efa --- /dev/null +++ b/resources/sql/autopatches/20170406.hmac.01.keystore.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_hmackey ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + keyName VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + keyValue VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_name` (keyName) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170410.calendar.01.repair.php b/resources/sql/autopatches/20170410.calendar.01.repair.php new file mode 100644 index 0000000000..7d0000e581 --- /dev/null +++ b/resources/sql/autopatches/20170410.calendar.01.repair.php @@ -0,0 +1,42 @@ +establishConnection('w'); +$table_name = $table->getTableName(); + +$viewer = PhabricatorUser::getOmnipotentUser(); +$all_events = id(new PhabricatorCalendarEventQuery()) + ->setViewer($viewer) + ->execute(); +foreach ($all_events as $event) { + $id = $event->getID(); + + if (!$event->getInstanceOfEventPHID()) { + // Not a child event, so no instance epoch. + continue; + } + + if ($event->getUTCInstanceEpoch()) { + // Already has an instance epoch. + continue; + } + + try { + $event->updateUTCEpochs(); + } catch (Exception $ex) { + phlog($ex); + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET utcInstanceEpoch = %nd WHERE id = %d', + $table_name, + $event->getUTCInstanceEpoch(), + $id); +} diff --git a/resources/sql/autopatches/20170412.conpherence.01.picturecrop.sql b/resources/sql/autopatches/20170412.conpherence.01.picturecrop.sql new file mode 100644 index 0000000000..760a19f119 --- /dev/null +++ b/resources/sql/autopatches/20170412.conpherence.01.picturecrop.sql @@ -0,0 +1,2 @@ +DELETE FROM {$NAMESPACE}_conpherence.conpherence_transaction + WHERE transactionType = 'picture-crop'; diff --git a/resources/sql/autopatches/20170413.conpherence.01.recentparty.sql b/resources/sql/autopatches/20170413.conpherence.01.recentparty.sql new file mode 100644 index 0000000000..996a058c5b --- /dev/null +++ b/resources/sql/autopatches/20170413.conpherence.01.recentparty.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + DROP COLUMN recentParticipantPHIDs; diff --git a/resources/sql/autopatches/20170417.files.ngrams.sql b/resources/sql/autopatches/20170417.files.ngrams.sql new file mode 100644 index 0000000000..988b183323 --- /dev/null +++ b/resources/sql/autopatches/20170417.files.ngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_file.file_filename_ngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + KEY `key_object` (objectID), + KEY `key_ngram` (ngram, objectID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170418.1.application.01.xaction.sql b/resources/sql/autopatches/20170418.1.application.01.xaction.sql new file mode 100644 index 0000000000..70868ef2f4 --- /dev/null +++ b/resources/sql/autopatches/20170418.1.application.01.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_application.application_applicationtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170418.1.application.02.edge.sql b/resources/sql/autopatches/20170418.1.application.02.edge.sql new file mode 100644 index 0000000000..a8f3e1e332 --- /dev/null +++ b/resources/sql/autopatches/20170418.1.application.02.edge.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_application.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_application.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170418.files.isDeleted.sql b/resources/sql/autopatches/20170418.files.isDeleted.sql new file mode 100644 index 0000000000..1349e3cbc7 --- /dev/null +++ b/resources/sql/autopatches/20170418.files.isDeleted.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD isDeleted BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20170419.app.01.table.sql b/resources/sql/autopatches/20170419.app.01.table.sql new file mode 100644 index 0000000000..257e0b3eb8 --- /dev/null +++ b/resources/sql/autopatches/20170419.app.01.table.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_application.application_application ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170419.thread.01.behind.sql b/resources/sql/autopatches/20170419.thread.01.behind.sql new file mode 100644 index 0000000000..08d27337fd --- /dev/null +++ b/resources/sql/autopatches/20170419.thread.01.behind.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + DROP behindTransactionPHID; diff --git a/resources/sql/autopatches/20170419.thread.02.status.sql b/resources/sql/autopatches/20170419.thread.02.status.sql new file mode 100644 index 0000000000..5f854a4b96 --- /dev/null +++ b/resources/sql/autopatches/20170419.thread.02.status.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + DROP participationStatus; diff --git a/resources/sql/autopatches/20170419.thread.03.touched.sql b/resources/sql/autopatches/20170419.thread.03.touched.sql new file mode 100644 index 0000000000..f6fee00272 --- /dev/null +++ b/resources/sql/autopatches/20170419.thread.03.touched.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + DROP dateTouched; diff --git a/resources/sql/autopatches/20170424.user.01.verify.php b/resources/sql/autopatches/20170424.user.01.verify.php new file mode 100644 index 0000000000..d2bbacd3e0 --- /dev/null +++ b/resources/sql/autopatches/20170424.user.01.verify.php @@ -0,0 +1,34 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $user) { + // Ignore users who are verified. + if ($user->getIsEmailVerified()) { + continue; + } + + // Ignore unverified users with missing (rare) or unverified (common) + // primary emails: it's correct that their accounts are not verified. + $primary = $user->loadPrimaryEmail(); + if (!$primary) { + continue; + } + + if (!$primary->getIsVerified()) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET isEmailVerified = 1 WHERE id = %d', + $table->getTableName(), + $user->getID()); + + echo tsprintf( + "%s\n", + pht( + 'Corrected account verification state for user "%s".', + $user->getUsername())); +} diff --git a/resources/sql/autopatches/20170427.owners.01.long.sql b/resources/sql/autopatches/20170427.owners.01.long.sql new file mode 100644 index 0000000000..01a463f52a --- /dev/null +++ b/resources/sql/autopatches/20170427.owners.01.long.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + DROP originalName; diff --git a/resources/sql/autopatches/20170504.1.slowvote.shuffle.sql b/resources/sql/autopatches/20170504.1.slowvote.shuffle.sql new file mode 100644 index 0000000000..5797f3fd5c --- /dev/null +++ b/resources/sql/autopatches/20170504.1.slowvote.shuffle.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + MODIFY shuffle BOOL NOT NULL DEFAULT 0; diff --git a/resources/sql/autopatches/20170522.nuance.01.itemkey.sql b/resources/sql/autopatches/20170522.nuance.01.itemkey.sql new file mode 100644 index 0000000000..75118205ce --- /dev/null +++ b/resources/sql/autopatches/20170522.nuance.01.itemkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_item + MODIFY itemKey VARCHAR(64) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170524.nuance.01.command.sql b/resources/sql/autopatches/20170524.nuance.01.command.sql new file mode 100644 index 0000000000..529756e748 --- /dev/null +++ b/resources/sql/autopatches/20170524.nuance.01.command.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_itemcommand + ADD dateCreated INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_nuance.nuance_itemcommand + ADD dateModified INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_nuance.nuance_itemcommand + ADD queuePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170524.nuance.02.commandstatus.sql b/resources/sql/autopatches/20170524.nuance.02.commandstatus.sql new file mode 100644 index 0000000000..14f57af053 --- /dev/null +++ b/resources/sql/autopatches/20170524.nuance.02.commandstatus.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_itemcommand + ADD status VARCHAR(64) NOT NULL; + +UPDATE {$NAMESPACE}_nuance.nuance_itemcommand + SET status = 'done' WHERE status = ''; diff --git a/resources/sql/autopatches/20170526.dropdifferentialdrafts.sql b/resources/sql/autopatches/20170526.dropdifferentialdrafts.sql new file mode 100644 index 0000000000..057bcb0d90 --- /dev/null +++ b/resources/sql/autopatches/20170526.dropdifferentialdrafts.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_draft; diff --git a/resources/sql/autopatches/20170526.milestones.php b/resources/sql/autopatches/20170526.milestones.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20170526.milestones.php @@ -0,0 +1,3 @@ +getTransactionType(); + + if ($txn_type == 'mergedinto') { + // dupe handling as implemented in D10427, which creates a specific txn + $add_edges[] = array( + 'src' => $txn->getObjectPHID(), + 'dst' => $txn->getNewValue(), + ); + } else if ($txn_type == 'status' && $txn->getNewValue() == 'duplicate') { + // dupe handling as originally implemented, which just changes the status + // and adds a comment + $src_phid = $txn->getObjectPHID(); + + // get all the comment transactions associated with this task + $viewer = PhabricatorUser::getOmnipotentUser(); + $comment_txns = id(new ManiphestTransactionQuery()) + ->setViewer($viewer) + ->withObjectPHIDs(array($src_phid)) + ->needComments(true) + ->execute(); + + // check each comment, looking for the "Merged Into" message + foreach ($comment_txns as $comment_txn) { + if ($comment_txn->hasComment()) { + $comment = $comment_txn->getComment()->getContent(); + $pattern = '/^\xE2\x9C\x98 Merged into T(\d+)\.$/'; + $matches = array(); + + if (preg_match($pattern, $comment, $matches)) { + $dst_task = id(new ManiphestTaskQuery()) + ->setViewer($viewer) + ->withIDs(array($matches[1])) + ->executeOne(); + + if ($dst_task) { + $dst_phid = $dst_task->getPHID(); + $add_edges[] = array( + 'src' => $src_phid, + 'dst' => $dst_phid, + ); + } + } + } + } + } +} + +if ($add_edges) { + foreach ($add_edges as $edge) { + $src_phid = $edge['src']; + $dst_phid = $edge['dst']; + + $type = ManiphestTaskIsDuplicateOfTaskEdgeType::EDGECONST; + try { + $editor = id(new PhabricatorEdgeEditor()) + ->addEdge($src_phid, $type, $dst_phid) + ->save(); + } catch (PhabricatorEdgeCycleException $ex) { + // Some earlier or later merge made this invalid, just skip it. + } + } +} diff --git a/resources/sql/autopatches/20170612.repository.image.01.sql b/resources/sql/autopatches/20170612.repository.image.01.sql new file mode 100644 index 0000000000..662c398855 --- /dev/null +++ b/resources/sql/autopatches/20170612.repository.image.01.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD profileImagePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20170614.taskstatus.sql b/resources/sql/autopatches/20170614.taskstatus.sql new file mode 100644 index 0000000000..2543632093 --- /dev/null +++ b/resources/sql/autopatches/20170614.taskstatus.sql @@ -0,0 +1,4 @@ +/* Extend from 12 characters to 64. */ + +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + CHANGE status status VARCHAR(64) COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20170725.legalpad.date.01.sql b/resources/sql/autopatches/20170725.legalpad.date.01.sql new file mode 100644 index 0000000000..a091220894 --- /dev/null +++ b/resources/sql/autopatches/20170725.legalpad.date.01.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_legalpad.legalpad_documentbody + SET dateCreated = dateModified; diff --git a/resources/sql/autopatches/20170811.differential.01.status.php b/resources/sql/autopatches/20170811.differential.01.status.php new file mode 100644 index 0000000000..9d57d033af --- /dev/null +++ b/resources/sql/autopatches/20170811.differential.01.status.php @@ -0,0 +1,48 @@ +" +// control with hard-coded status groups for status selection to using a +// tokenizer with status functions. + +$table = new PhabricatorSavedQuery(); +$conn = $table->establishConnection('w'); + +$status_map = array( + 'status-open' => array('open()'), + 'status-closed' => array('closed()'), + + 'status-accepted' => array('accepted'), + 'status-needs-review' => array('needs-review'), + 'status-needs-revision' => array('needs-revision'), + 'status-abandoned' => array('abandoned'), +); + +foreach (new LiskMigrationIterator($table) as $query) { + if ($query->getEngineClassName() !== 'DifferentialRevisionSearchEngine') { + // This isn't a revision query. + continue; + } + + $parameters = $query->getParameters(); + $status = idx($parameters, 'status'); + + if (!$status) { + // This query didn't specify a "status" value. + continue; + } + + if (!isset($status_map[$status])) { + // The "status" value is unknown, or does not correspond to a + // modern "status" constraint. + continue; + } + + $parameters['statuses'] = $status_map[$status]; + + queryfx( + $conn, + 'UPDATE %T SET parameters = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($parameters), + $query->getID()); +} diff --git a/resources/sql/autopatches/20170811.differential.02.modernstatus.sql b/resources/sql/autopatches/20170811.differential.02.modernstatus.sql new file mode 100644 index 0000000000..a305206411 --- /dev/null +++ b/resources/sql/autopatches/20170811.differential.02.modernstatus.sql @@ -0,0 +1,17 @@ +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "needs-review" WHERE status = "0"; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "needs-revision" WHERE status = "1"; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "accepted" WHERE status = "2"; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "published" WHERE status = "3"; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "abandoned" WHERE status = "4"; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET status = "changes-planned" WHERE status = "5"; diff --git a/resources/sql/autopatches/20170811.differential.03.modernxaction.php b/resources/sql/autopatches/20170811.differential.03.modernxaction.php new file mode 100644 index 0000000000..e84e3ce95b --- /dev/null +++ b/resources/sql/autopatches/20170811.differential.03.modernxaction.php @@ -0,0 +1,38 @@ + 'needs-review', + '1' => 'needs-revision', + '2' => 'accepted', + '3' => 'published', + '4' => 'abandoned', + '5' => 'changes-planned', +); + +$table = new DifferentialTransaction(); +$conn = $table->establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $xaction) { + $type = $xaction->getTransactionType(); + + if (($type != 'differential:status') && + ($type != 'differential.revision.status')) { + continue; + } + + $old = $xaction->getOldValue(); + $new = $xaction->getNewValue(); + + $old = idx($map, $old, $old); + $new = idx($map, $new, $new); + + queryfx( + $conn, + 'UPDATE %T SET transactionType = %s, oldValue = %s, newValue = %s + WHERE id = %d', + $table->getTableName(), + 'differential.revision.status', + json_encode($old), + json_encode($new), + $xaction->getID()); +} diff --git a/resources/sql/autopatches/20170814.search.01.qconfig.sql b/resources/sql/autopatches/20170814.search.01.qconfig.sql new file mode 100644 index 0000000000..7914336dc4 --- /dev/null +++ b/resources/sql/autopatches/20170814.search.01.qconfig.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_search.search_namedqueryconfig ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + engineClassName VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + scopePHID VARBINARY(64) NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_scope` (engineClassName, scopePHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170820.phame.01.post.views.sql b/resources/sql/autopatches/20170820.phame.01.post.views.sql new file mode 100644 index 0000000000..f5f72294f6 --- /dev/null +++ b/resources/sql/autopatches/20170820.phame.01.post.views.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_post + ADD views INTEGER NOT NULL; diff --git a/resources/sql/autopatches/20170820.phame.02.post.views.sql b/resources/sql/autopatches/20170820.phame.02.post.views.sql new file mode 100644 index 0000000000..00b9b29203 --- /dev/null +++ b/resources/sql/autopatches/20170820.phame.02.post.views.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_phame.phame_post + SET views = 0; diff --git a/resources/sql/autopatches/20170824.search.01.saved.php b/resources/sql/autopatches/20170824.search.01.saved.php new file mode 100644 index 0000000000..ab1485ebd5 --- /dev/null +++ b/resources/sql/autopatches/20170824.search.01.saved.php @@ -0,0 +1,46 @@ +establishConnection('w'); + +$config_table = new PhabricatorNamedQueryConfig(); + +foreach (new LiskMigrationIterator($table) as $named_query) { + + // If this isn't a builtin query, it isn't changing. Leave it alone. + if (!$named_query->getIsBuiltin()) { + continue; + } + + // If the user reordered things but left a builtin query at the top, pin + // the query before we remove the row. + if ($named_query->getSequence() == 1) { + queryfx( + $conn, + 'INSERT IGNORE INTO %T + (engineClassName, scopePHID, properties, dateCreated, dateModified) + VALUES + (%s, %s, %s, %d, %d)', + $config_table->getTableName(), + $named_query->getEngineClassName(), + $named_query->getUserPHID(), + phutil_json_encode( + array( + PhabricatorNamedQueryConfig::PROPERTY_PINNED => + $named_query->getQueryKey(), + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); + } + + $named_query->delete(); +} diff --git a/resources/sql/autopatches/20170825.phame.01.post.views.sql b/resources/sql/autopatches/20170825.phame.01.post.views.sql new file mode 100644 index 0000000000..5cb5c9c7b6 --- /dev/null +++ b/resources/sql/autopatches/20170825.phame.01.post.views.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_post + DROP COLUMN views; diff --git a/resources/sql/autopatches/20170828.ferret.01.taskdoc.sql b/resources/sql/autopatches/20170828.ferret.01.taskdoc.sql new file mode 100644 index 0000000000..8cb6835602 --- /dev/null +++ b/resources/sql/autopatches/20170828.ferret.01.taskdoc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_task_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170828.ferret.02.taskfield.sql b/resources/sql/autopatches/20170828.ferret.02.taskfield.sql new file mode 100644 index 0000000000..5528feec8f --- /dev/null +++ b/resources/sql/autopatches/20170828.ferret.02.taskfield.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_task_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170828.ferret.03.taskngrams.sql b/resources/sql/autopatches/20170828.ferret.03.taskngrams.sql new file mode 100644 index 0000000000..a7b5180642 --- /dev/null +++ b/resources/sql/autopatches/20170828.ferret.03.taskngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_task_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170830.ferret.01.unique.sql b/resources/sql/autopatches/20170830.ferret.01.unique.sql new file mode 100644 index 0000000000..f76c5050e8 --- /dev/null +++ b/resources/sql/autopatches/20170830.ferret.01.unique.sql @@ -0,0 +1,4 @@ +TRUNCATE TABLE {$NAMESPACE}_maniphest.maniphest_task_ffield; + +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task_ffield + ADD UNIQUE KEY `key_documentfield` (documentID, fieldKey); diff --git a/resources/sql/autopatches/20170830.ferret.02.term.sql b/resources/sql/autopatches/20170830.ferret.02.term.sql new file mode 100644 index 0000000000..81a619d85d --- /dev/null +++ b/resources/sql/autopatches/20170830.ferret.02.term.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task_ffield + ADD termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}; diff --git a/resources/sql/autopatches/20170905.ferret.01.diff.doc.sql b/resources/sql/autopatches/20170905.ferret.01.diff.doc.sql new file mode 100644 index 0000000000..9fdadbf11c --- /dev/null +++ b/resources/sql/autopatches/20170905.ferret.01.diff.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_revision_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170905.ferret.02.diff.field.sql b/resources/sql/autopatches/20170905.ferret.02.diff.field.sql new file mode 100644 index 0000000000..ff5f065a39 --- /dev/null +++ b/resources/sql/autopatches/20170905.ferret.02.diff.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_revision_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170905.ferret.03.diff.ngrams.sql b/resources/sql/autopatches/20170905.ferret.03.diff.ngrams.sql new file mode 100644 index 0000000000..ec12354e38 --- /dev/null +++ b/resources/sql/autopatches/20170905.ferret.03.diff.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_revision_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.01.user.doc.sql b/resources/sql/autopatches/20170907.ferret.01.user.doc.sql new file mode 100644 index 0000000000..39496a0de0 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.01.user.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_user.user_user_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.02.user.field.sql b/resources/sql/autopatches/20170907.ferret.02.user.field.sql new file mode 100644 index 0000000000..3179e58e5b --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.02.user.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_user.user_user_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.03.user.ngrams.sql b/resources/sql/autopatches/20170907.ferret.03.user.ngrams.sql new file mode 100644 index 0000000000..2105a7b7af --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.03.user.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_user.user_user_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql b/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql new file mode 100644 index 0000000000..a7f8324594 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.04.fund.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.05.fund.field.sql b/resources/sql/autopatches/20170907.ferret.05.fund.field.sql new file mode 100644 index 0000000000..b8c544c2a7 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.05.fund.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiative_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql b/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql new file mode 100644 index 0000000000..a509087bae --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.06.fund.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.07.passphrase.doc.sql b/resources/sql/autopatches/20170907.ferret.07.passphrase.doc.sql new file mode 100644 index 0000000000..6787528d0e --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.07.passphrase.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.08.passphrase.field.sql b/resources/sql/autopatches/20170907.ferret.08.passphrase.field.sql new file mode 100644 index 0000000000..6dc62d477e --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.08.passphrase.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.09.passphrase.ngrams.sql b/resources/sql/autopatches/20170907.ferret.09.passphrase.ngrams.sql new file mode 100644 index 0000000000..2b64beb7ed --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.09.passphrase.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.10.owners.doc.sql b/resources/sql/autopatches/20170907.ferret.10.owners.doc.sql new file mode 100644 index 0000000000..aaaa36623b --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.10.owners.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_package_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.11.owners.field.sql b/resources/sql/autopatches/20170907.ferret.11.owners.field.sql new file mode 100644 index 0000000000..ebd72806f4 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.11.owners.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_package_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.12.owners.ngrams.sql b/resources/sql/autopatches/20170907.ferret.12.owners.ngrams.sql new file mode 100644 index 0000000000..0f8c6865bf --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.12.owners.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_package_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.13.blog.doc.sql b/resources/sql/autopatches/20170907.ferret.13.blog.doc.sql new file mode 100644 index 0000000000..d75232fae1 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.13.blog.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blog_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.14.blog.field.sql b/resources/sql/autopatches/20170907.ferret.14.blog.field.sql new file mode 100644 index 0000000000..9982914229 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.14.blog.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blog_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.15.blog.ngrams.sql b/resources/sql/autopatches/20170907.ferret.15.blog.ngrams.sql new file mode 100644 index 0000000000..b20bb8fcbb --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.15.blog.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blog_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.16.post.doc.sql b/resources/sql/autopatches/20170907.ferret.16.post.doc.sql new file mode 100644 index 0000000000..9f9155aa49 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.16.post.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_post_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.17.post.field.sql b/resources/sql/autopatches/20170907.ferret.17.post.field.sql new file mode 100644 index 0000000000..26d729d05d --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.17.post.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_post_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.18.post.ngrams.sql b/resources/sql/autopatches/20170907.ferret.18.post.ngrams.sql new file mode 100644 index 0000000000..18e534e948 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.18.post.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_post_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.19.project.doc.sql b/resources/sql/autopatches/20170907.ferret.19.project.doc.sql new file mode 100644 index 0000000000..26272439cf --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.19.project.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_project.project_project_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.20.project.field.sql b/resources/sql/autopatches/20170907.ferret.20.project.field.sql new file mode 100644 index 0000000000..36514eb55d --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.20.project.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_project.project_project_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.21.project.ngrams.sql b/resources/sql/autopatches/20170907.ferret.21.project.ngrams.sql new file mode 100644 index 0000000000..dec12b0e56 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.21.project.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_project.project_project_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.22.phriction.doc.sql b/resources/sql/autopatches/20170907.ferret.22.phriction.doc.sql new file mode 100644 index 0000000000..9de7124255 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.22.phriction.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_document_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.23.phriction.field.sql b/resources/sql/autopatches/20170907.ferret.23.phriction.field.sql new file mode 100644 index 0000000000..0fc5b959d1 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.23.phriction.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_document_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.24.phriction.ngrams.sql b/resources/sql/autopatches/20170907.ferret.24.phriction.ngrams.sql new file mode 100644 index 0000000000..abbb90a1e4 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.24.phriction.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_document_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.25.event.doc.sql b/resources/sql/autopatches/20170907.ferret.25.event.doc.sql new file mode 100644 index 0000000000..d7298fad31 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.25.event.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_event_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.26.event.field.sql b/resources/sql/autopatches/20170907.ferret.26.event.field.sql new file mode 100644 index 0000000000..2ec76c3511 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.26.event.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_event_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.27.event.ngrams.sql b/resources/sql/autopatches/20170907.ferret.27.event.ngrams.sql new file mode 100644 index 0000000000..e802e2d97e --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.27.event.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_event_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.28.mock.doc.sql b/resources/sql/autopatches/20170907.ferret.28.mock.doc.sql new file mode 100644 index 0000000000..eb80ef3937 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.28.mock.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.29.mock.field.sql b/resources/sql/autopatches/20170907.ferret.29.mock.field.sql new file mode 100644 index 0000000000..0cb0e97d05 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.29.mock.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.30.mock.ngrams.sql b/resources/sql/autopatches/20170907.ferret.30.mock.ngrams.sql new file mode 100644 index 0000000000..e343ccf83b --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.30.mock.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.31.repo.doc.sql b/resources/sql/autopatches/20170907.ferret.31.repo.doc.sql new file mode 100644 index 0000000000..4f37de60be --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.31.repo.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_repository_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.32.repo.field.sql b/resources/sql/autopatches/20170907.ferret.32.repo.field.sql new file mode 100644 index 0000000000..c7d75eb29d --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.32.repo.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_repository_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.33.repo.ngrams.sql b/resources/sql/autopatches/20170907.ferret.33.repo.ngrams.sql new file mode 100644 index 0000000000..db7ad4f3a0 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.33.repo.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_repository_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.34.commit.doc.sql b/resources/sql/autopatches/20170907.ferret.34.commit.doc.sql new file mode 100644 index 0000000000..9c275b09b7 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.34.commit.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_commit_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.35.commit.field.sql b/resources/sql/autopatches/20170907.ferret.35.commit.field.sql new file mode 100644 index 0000000000..c2520b693b --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.35.commit.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_commit_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170907.ferret.36.commit.ngrams.sql b/resources/sql/autopatches/20170907.ferret.36.commit.ngrams.sql new file mode 100644 index 0000000000..32ed2275c3 --- /dev/null +++ b/resources/sql/autopatches/20170907.ferret.36.commit.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_commit_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170912.ferret.01.activity.php b/resources/sql/autopatches/20170912.ferret.01.activity.php new file mode 100644 index 0000000000..cafd60c928 --- /dev/null +++ b/resources/sql/autopatches/20170912.ferret.01.activity.php @@ -0,0 +1,19 @@ +loadAllWhere('1 = 1 LIMIT 1'); +if (!$users) { + return; +} + +try { + id(new PhabricatorConfigManualActivity()) + ->setActivityType(PhabricatorConfigManualActivity::TYPE_REINDEX) + ->save(); +} catch (AphrontDuplicateKeyQueryException $ex) { + // If we've already noted that this activity is required, just move on. +} diff --git a/resources/sql/autopatches/20170914.ref.01.position.sql b/resources/sql/autopatches/20170914.ref.01.position.sql new file mode 100644 index 0000000000..2d0a505d17 --- /dev/null +++ b/resources/sql/autopatches/20170914.ref.01.position.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_refposition ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + cursorID INT UNSIGNED NOT NULL, + commitIdentifier VARCHAR(40) NOT NULL COLLATE {$COLLATE_TEXT}, + isClosed BOOL NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20170915.ref.01.migrate.php b/resources/sql/autopatches/20170915.ref.01.migrate.php new file mode 100644 index 0000000000..21102fa4ab --- /dev/null +++ b/resources/sql/autopatches/20170915.ref.01.migrate.php @@ -0,0 +1,71 @@ +establishConnection('w'); + +$map = array(); +foreach (new LiskMigrationIterator($table) as $ref) { + $repository_phid = $ref->getRepositoryPHID(); + $ref_type = $ref->getRefType(); + $ref_hash = $ref->getRefNameHash(); + + $ref_key = "{$repository_phid}/{$ref_type}/{$ref_hash}"; + + if (!isset($map[$ref_key])) { + $map[$ref_key] = array( + 'id' => $ref->getID(), + 'type' => $ref_type, + 'hash' => $ref_hash, + 'repositoryPHID' => $repository_phid, + 'positions' => array(), + ); + } + + // NOTE: When this migration runs, the table will have "commitIdentifier" and + // "isClosed" fields. Later, it won't. Since they'll be removed, we can't + // rely on being able to access them via the object. Instead, run a separate + // raw query to read them. + + $row = queryfx_one( + $conn, + 'SELECT commitIdentifier, isClosed FROM %T WHERE id = %d', + $ref->getTableName(), + $ref->getID()); + + $map[$ref_key]['positions'][] = array( + 'identifier' => $row['commitIdentifier'], + 'isClosed' => (int)$row['isClosed'], + ); +} + +// Now, write all the position rows. +$position_table = new PhabricatorRepositoryRefPosition(); +foreach ($map as $ref_key => $spec) { + $id = $spec['id']; + foreach ($spec['positions'] as $position) { + queryfx( + $conn, + 'INSERT IGNORE INTO %T (cursorID, commitIdentifier, isClosed) + VALUES (%d, %s, %d)', + $position_table->getTableName(), + $id, + $position['identifier'], + $position['isClosed']); + } +} + +// Finally, delete all the redundant RefCursor rows (rows with the same name) +// so we can add proper unique keys in the next migration. +foreach ($map as $ref_key => $spec) { + queryfx( + $conn, + 'DELETE FROM %T WHERE refType = %s + AND refNameHash = %s + AND repositoryPHID = %s + AND id != %d', + $table->getTableName(), + $spec['type'], + $spec['hash'], + $spec['repositoryPHID'], + $spec['id']); +} diff --git a/resources/sql/autopatches/20170915.ref.02.drop.id.sql b/resources/sql/autopatches/20170915.ref.02.drop.id.sql new file mode 100644 index 0000000000..177fde3b6a --- /dev/null +++ b/resources/sql/autopatches/20170915.ref.02.drop.id.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + DROP COLUMN commitIdentifier; diff --git a/resources/sql/autopatches/20170915.ref.03.drop.closed.sql b/resources/sql/autopatches/20170915.ref.03.drop.closed.sql new file mode 100644 index 0000000000..927ee04b65 --- /dev/null +++ b/resources/sql/autopatches/20170915.ref.03.drop.closed.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + DROP COLUMN isClosed; diff --git a/resources/sql/autopatches/20170915.ref.04.uniq.sql b/resources/sql/autopatches/20170915.ref.04.uniq.sql new file mode 100644 index 0000000000..0bef69fc4a --- /dev/null +++ b/resources/sql/autopatches/20170915.ref.04.uniq.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_refcursor + ADD UNIQUE KEY `key_ref` (repositoryPHID, refType, refNameHash); diff --git a/resources/sql/autopatches/20170918.ref.01.position.php b/resources/sql/autopatches/20170918.ref.01.position.php new file mode 100644 index 0000000000..f95eb8d406 --- /dev/null +++ b/resources/sql/autopatches/20170918.ref.01.position.php @@ -0,0 +1,52 @@ +establishConnection('w'); +$key_name = 'key_position'; + +try { + queryfx( + $conn, + 'ALTER TABLE %T DROP KEY %T', + $table->getTableName(), + $key_name); +} catch (AphrontQueryException $ex) { + // This key may or may not exist, depending on exactly when the install + // ran previous migrations and adjustments. We're just dropping it if it + // does exist. + + // We're doing this first (outside of the lock) because the MySQL + // documentation says "if you ALTER TABLE a locked table, it may become + // unlocked". +} + +queryfx( + $conn, + 'LOCK TABLES %T WRITE', + $table->getTableName()); + +$seen = array(); +foreach (new LiskMigrationIterator($table) as $position) { + $cursor_id = $position->getCursorID(); + $hash = $position->getCommitIdentifier(); + + // If this is the first copy of this row we've seen, mark it as seen and + // move on. + if (empty($seen[$cursor_id][$hash])) { + $seen[$cursor_id][$hash] = true; + continue; + } + + // Otherwise, get rid of this row as it duplicates a row we saw previously. + $position->delete(); +} + +queryfx( + $conn, + 'ALTER TABLE %T ADD UNIQUE KEY %T (cursorID, commitIdentifier)', + $table->getTableName(), + $key_name); + +queryfx( + $conn, + 'UNLOCK TABLES'); diff --git a/resources/sql/autopatches/20171002.cngram.01.maniphest.sql b/resources/sql/autopatches/20171002.cngram.01.maniphest.sql new file mode 100644 index 0000000000..9b275f5b45 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.01.maniphest.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_task_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.02.event.sql b/resources/sql/autopatches/20171002.cngram.02.event.sql new file mode 100644 index 0000000000..a071fdcd19 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.02.event.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_calendar.calendar_event_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.03.revision.sql b/resources/sql/autopatches/20171002.cngram.03.revision.sql new file mode 100644 index 0000000000..40c2450598 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.03.revision.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_revision_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.04.fund.sql b/resources/sql/autopatches/20171002.cngram.04.fund.sql new file mode 100644 index 0000000000..34975ce4fb --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.04.fund.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_fund.fund_initiative_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.05.owners.sql b/resources/sql/autopatches/20171002.cngram.05.owners.sql new file mode 100644 index 0000000000..e98d29f87c --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.05.owners.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_owners.owners_package_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.06.passphrase.sql b/resources/sql/autopatches/20171002.cngram.06.passphrase.sql new file mode 100644 index 0000000000..f9afa9ad87 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.06.passphrase.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.07.blog.sql b/resources/sql/autopatches/20171002.cngram.07.blog.sql new file mode 100644 index 0000000000..34001c3608 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.07.blog.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blog_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.08.post.sql b/resources/sql/autopatches/20171002.cngram.08.post.sql new file mode 100644 index 0000000000..9a9c70867e --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.08.post.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_post_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.09.pholio.sql b/resources/sql/autopatches/20171002.cngram.09.pholio.sql new file mode 100644 index 0000000000..6e8b8f8dcc --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.09.pholio.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_pholio.pholio_mock_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.10.phriction.sql b/resources/sql/autopatches/20171002.cngram.10.phriction.sql new file mode 100644 index 0000000000..ed31dc30ba --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.10.phriction.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_phriction.phriction_document_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.11.project.sql b/resources/sql/autopatches/20171002.cngram.11.project.sql new file mode 100644 index 0000000000..9c11235ba7 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.11.project.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_project.project_project_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.12.user.sql b/resources/sql/autopatches/20171002.cngram.12.user.sql new file mode 100644 index 0000000000..3e8499aaa6 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.12.user.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_user.user_user_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.13.repository.sql b/resources/sql/autopatches/20171002.cngram.13.repository.sql new file mode 100644 index 0000000000..e406c44edf --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.13.repository.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_repository_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171002.cngram.14.commit.sql b/resources/sql/autopatches/20171002.cngram.14.commit.sql new file mode 100644 index 0000000000..48c1a02594 --- /dev/null +++ b/resources/sql/autopatches/20171002.cngram.14.commit.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_commit_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171026.ferret.01.ponder.doc.sql b/resources/sql/autopatches/20171026.ferret.01.ponder.doc.sql new file mode 100644 index 0000000000..38c86a4134 --- /dev/null +++ b/resources/sql/autopatches/20171026.ferret.01.ponder.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_ponder.ponder_question_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171026.ferret.02.ponder.field.sql b/resources/sql/autopatches/20171026.ferret.02.ponder.field.sql new file mode 100644 index 0000000000..871f0d8f5b --- /dev/null +++ b/resources/sql/autopatches/20171026.ferret.02.ponder.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_ponder.ponder_question_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171026.ferret.03.ponder.ngrams.sql b/resources/sql/autopatches/20171026.ferret.03.ponder.ngrams.sql new file mode 100644 index 0000000000..3d2a3024b8 --- /dev/null +++ b/resources/sql/autopatches/20171026.ferret.03.ponder.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_ponder.ponder_question_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171026.ferret.04.ponder.cngrams.sql b/resources/sql/autopatches/20171026.ferret.04.ponder.cngrams.sql new file mode 100644 index 0000000000..49b66e0d39 --- /dev/null +++ b/resources/sql/autopatches/20171026.ferret.04.ponder.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_ponder.ponder_question_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20171026.ferret.05.ponder.index.php b/resources/sql/autopatches/20171026.ferret.05.ponder.index.php new file mode 100644 index 0000000000..623ba7bf6a --- /dev/null +++ b/resources/sql/autopatches/20171026.ferret.05.ponder.index.php @@ -0,0 +1,3 @@ +establishConnection('w'); +$diff_table = new DifferentialDiff(); + +foreach (new LiskMigrationIterator($table) as $revision) { + $revision_id = $revision->getID(); + + $diff_row = queryfx_one( + $conn, + 'SELECT phid FROM %T WHERE revisionID = %d ORDER BY id DESC LIMIT 1', + $diff_table->getTableName(), + $revision_id); + + if ($diff_row) { + queryfx( + $conn, + 'UPDATE %T SET activeDiffPHID = %s WHERE id = %d', + $table->getTableName(), + $diff_row['phid'], + $revision_id); + } +} diff --git a/resources/sql/autopatches/20180119.bulk.01.silent.sql b/resources/sql/autopatches/20180119.bulk.01.silent.sql new file mode 100644 index 0000000000..b426de953d --- /dev/null +++ b/resources/sql/autopatches/20180119.bulk.01.silent.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_bulkjob + ADD isSilent BOOL NOT NULL; diff --git a/resources/sql/autopatches/20180120.auth.01.password.sql b/resources/sql/autopatches/20180120.auth.01.password.sql new file mode 100644 index 0000000000..679d50c5b1 --- /dev/null +++ b/resources/sql/autopatches/20180120.auth.01.password.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_password ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + passwordType VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + passwordHash VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + isRevoked BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180120.auth.02.passwordxaction.sql b/resources/sql/autopatches/20180120.auth.02.passwordxaction.sql new file mode 100644 index 0000000000..1d4f075b87 --- /dev/null +++ b/resources/sql/autopatches/20180120.auth.02.passwordxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_passwordtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180120.auth.03.vcsdata.sql b/resources/sql/autopatches/20180120.auth.03.vcsdata.sql new file mode 100644 index 0000000000..0cf73f84d9 --- /dev/null +++ b/resources/sql/autopatches/20180120.auth.03.vcsdata.sql @@ -0,0 +1,6 @@ +INSERT INTO {$NAMESPACE}_auth.auth_password + (objectPHID, phid, passwordType, passwordHash, isRevoked, + dateCreated, dateModified) + SELECT userPHID, CONCAT('XVCS', id), 'vcs', passwordHash, 0, + dateCreated, dateModified + FROM {$NAMESPACE}_repository.repository_vcspassword; diff --git a/resources/sql/autopatches/20180120.auth.04.vcsphid.php b/resources/sql/autopatches/20180120.auth.04.vcsphid.php new file mode 100644 index 0000000000..0a5dd0f067 --- /dev/null +++ b/resources/sql/autopatches/20180120.auth.04.vcsphid.php @@ -0,0 +1,24 @@ +establishConnection('w'); + +$password_type = PhabricatorAuthPasswordPHIDType::TYPECONST; + +foreach (new LiskMigrationIterator($table) as $row) { + if (phid_get_type($row->getPHID()) == $password_type) { + continue; + } + + $new_phid = $row->generatePHID(); + + queryfx( + $conn, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $new_phid, + $row->getID()); +} diff --git a/resources/sql/autopatches/20180121.auth.01.vcsnuke.sql b/resources/sql/autopatches/20180121.auth.01.vcsnuke.sql new file mode 100644 index 0000000000..b106a2ddd7 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.01.vcsnuke.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_repository.repository_vcspassword; diff --git a/resources/sql/autopatches/20180121.auth.02.passsalt.sql b/resources/sql/autopatches/20180121.auth.02.passsalt.sql new file mode 100644 index 0000000000..78ee953ea4 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.02.passsalt.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_password + ADD passwordSalt VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180121.auth.03.accountdata.sql b/resources/sql/autopatches/20180121.auth.03.accountdata.sql new file mode 100644 index 0000000000..cbb4dc2a50 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.03.accountdata.sql @@ -0,0 +1,7 @@ +INSERT INTO {$NAMESPACE}_auth.auth_password + (objectPHID, phid, passwordType, passwordHash, passwordSalt, isRevoked, + dateCreated, dateModified) + SELECT phid, CONCAT('XACCOUNT', id), 'account', passwordHash, passwordSalt, 0, + dateCreated, dateModified + FROM {$NAMESPACE}_user.user + WHERE passwordHash != ''; diff --git a/resources/sql/autopatches/20180121.auth.04.accountphid.php b/resources/sql/autopatches/20180121.auth.04.accountphid.php new file mode 100644 index 0000000000..e0ebc04f4b --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.04.accountphid.php @@ -0,0 +1,24 @@ +establishConnection('w'); + +$password_type = PhabricatorAuthPasswordPHIDType::TYPECONST; + +foreach (new LiskMigrationIterator($table) as $row) { + if (phid_get_type($row->getPHID()) == $password_type) { + continue; + } + + $new_phid = $row->generatePHID(); + + queryfx( + $conn, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $new_phid, + $row->getID()); +} diff --git a/resources/sql/autopatches/20180121.auth.05.accountnuke.sql b/resources/sql/autopatches/20180121.auth.05.accountnuke.sql new file mode 100644 index 0000000000..c8dc50bcf2 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.05.accountnuke.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_user.user + DROP passwordSalt; + +ALTER TABLE {$NAMESPACE}_user.user + DROP passwordHash; diff --git a/resources/sql/autopatches/20180121.auth.06.legacydigest.sql b/resources/sql/autopatches/20180121.auth.06.legacydigest.sql new file mode 100644 index 0000000000..af9c7990d0 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.06.legacydigest.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_password + ADD legacyDigestFormat VARCHAR(32) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180121.auth.07.marklegacy.sql b/resources/sql/autopatches/20180121.auth.07.marklegacy.sql new file mode 100644 index 0000000000..798757d348 --- /dev/null +++ b/resources/sql/autopatches/20180121.auth.07.marklegacy.sql @@ -0,0 +1,4 @@ +UPDATE {$NAMESPACE}_auth.auth_password + SET legacyDigestFormat = 'v1' + WHERE passwordType IN ('vcs', 'account') + AND legacyDigestFormat IS NULL; diff --git a/resources/sql/autopatches/20180124.herald.01.repetition.sql b/resources/sql/autopatches/20180124.herald.01.repetition.sql new file mode 100644 index 0000000000..31f1477e01 --- /dev/null +++ b/resources/sql/autopatches/20180124.herald.01.repetition.sql @@ -0,0 +1,26 @@ +/* This column was previously "uint32?" with these values: + + 1: run every time + 0: run only the first time + +*/ + +UPDATE {$NAMESPACE}_herald.herald_rule + SET repetitionPolicy = '1' + WHERE repetitionPolicy IS NULL; + +ALTER TABLE {$NAMESPACE}_herald.herald_rule + CHANGE repetitionPolicy + repetitionPolicy VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; + +/* If the old value was "0", the new value is "first". */ + +UPDATE {$NAMESPACE}_herald.herald_rule + SET repetitionPolicy = 'first' + WHERE repetitionPolicy = '0'; + +/* If the old value was anything else, the new value is "every". */ + +UPDATE {$NAMESPACE}_herald.herald_rule + SET repetitionPolicy = 'every' + WHERE repetitionPolicy NOT IN ('first', '0'); diff --git a/resources/sql/autopatches/20180207.mail.01.task.sql b/resources/sql/autopatches/20180207.mail.01.task.sql new file mode 100644 index 0000000000..f04b90c809 --- /dev/null +++ b/resources/sql/autopatches/20180207.mail.01.task.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + DROP originalTitle; diff --git a/resources/sql/autopatches/20180207.mail.02.revision.sql b/resources/sql/autopatches/20180207.mail.02.revision.sql new file mode 100644 index 0000000000..881efbcc94 --- /dev/null +++ b/resources/sql/autopatches/20180207.mail.02.revision.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_revision + DROP originalTitle; diff --git a/resources/sql/autopatches/20180207.mail.03.mock.sql b/resources/sql/autopatches/20180207.mail.03.mock.sql new file mode 100644 index 0000000000..360d7cf9a7 --- /dev/null +++ b/resources/sql/autopatches/20180207.mail.03.mock.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + DROP originalName; diff --git a/resources/sql/autopatches/20180208.maniphest.01.close.sql b/resources/sql/autopatches/20180208.maniphest.01.close.sql new file mode 100644 index 0000000000..856300e9ba --- /dev/null +++ b/resources/sql/autopatches/20180208.maniphest.01.close.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD closedEpoch INT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD closerPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20180208.maniphest.02.populate.php b/resources/sql/autopatches/20180208.maniphest.02.populate.php new file mode 100644 index 0000000000..4b4e549574 --- /dev/null +++ b/resources/sql/autopatches/20180208.maniphest.02.populate.php @@ -0,0 +1,66 @@ +establishConnection('w'); +$viewer = PhabricatorUser::getOmnipotentUser(); + +foreach (new LiskMigrationIterator($table) as $task) { + if ($task->getClosedEpoch()) { + // Task already has a closed date. + continue; + } + + $status = $task->getStatus(); + if (!ManiphestTaskStatus::isClosedStatus($status)) { + // Task isn't closed. + continue; + } + + // Look through the transactions from newest to oldest until we find one + // where the task was closed. A merge also counts as a close, even though + // it doesn't currently produce a separate transaction. + + $type_status = ManiphestTaskStatusTransaction::TRANSACTIONTYPE; + $type_merge = ManiphestTaskMergedIntoTransaction::TRANSACTIONTYPE; + + $xactions = id(new ManiphestTransactionQuery()) + ->setViewer($viewer) + ->withObjectPHIDs(array($task->getPHID())) + ->needHandles(false) + ->withTransactionTypes( + array( + $type_merge, + $type_status, + )) + ->execute(); + foreach ($xactions as $xaction) { + $old = $xaction->getOldValue(); + $new = $xaction->getNewValue(); + + $type = $xaction->getTransactionType(); + + // If this is a status change, but is not a close, don't use it. + // (We always use merges, even though it's possible to merge a task which + // was previously closed: we can't tell when this happens very easily.) + if ($type === $type_status) { + if (!ManiphestTaskStatus::isClosedStatus($new)) { + continue; + } + + if ($old && ManiphestTaskStatus::isClosedStatus($old)) { + continue; + } + } + + queryfx( + $conn, + 'UPDATE %T SET closedEpoch = %d, closerPHID = %ns + WHERE id = %d', + $table->getTableName(), + $xaction->getDateCreated(), + $xaction->getAuthorPHID(), + $task->getID()); + + break; + } +} diff --git a/resources/sql/autopatches/20180209.hook.01.hook.sql b/resources/sql/autopatches/20180209.hook.01.hook.sql new file mode 100644 index 0000000000..58b79227a1 --- /dev/null +++ b/resources/sql/autopatches/20180209.hook.01.hook.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_herald.herald_webhook ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}, + webhookURI VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + hmacKey VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180209.hook.02.hookxaction.sql b/resources/sql/autopatches/20180209.hook.02.hookxaction.sql new file mode 100644 index 0000000000..8da594f6bd --- /dev/null +++ b/resources/sql/autopatches/20180209.hook.02.hookxaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_herald.herald_webhooktransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180209.hook.03.hookrequest.sql b/resources/sql/autopatches/20180209.hook.03.hookrequest.sql new file mode 100644 index 0000000000..f20b3a549d --- /dev/null +++ b/resources/sql/autopatches/20180209.hook.03.hookrequest.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_herald.herald_webhookrequest ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + webhookPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + lastRequestResult VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + lastRequestEpoch INT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180210.hunk.01.droplegacy.sql b/resources/sql/autopatches/20180210.hunk.01.droplegacy.sql new file mode 100644 index 0000000000..129d3927d8 --- /dev/null +++ b/resources/sql/autopatches/20180210.hunk.01.droplegacy.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_hunk; diff --git a/resources/sql/autopatches/20180210.hunk.02.renamemodern.sql b/resources/sql/autopatches/20180210.hunk.02.renamemodern.sql new file mode 100644 index 0000000000..d341fbedf2 --- /dev/null +++ b/resources/sql/autopatches/20180210.hunk.02.renamemodern.sql @@ -0,0 +1,2 @@ +RENAME TABLE {$NAMESPACE}_differential.differential_hunk_modern + TO {$NAMESPACE}_differential.differential_hunk; diff --git a/resources/sql/autopatches/20180212.harbor.01.receiver.sql b/resources/sql/autopatches/20180212.harbor.01.receiver.sql new file mode 100644 index 0000000000..84e9611db2 --- /dev/null +++ b/resources/sql/autopatches/20180212.harbor.01.receiver.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildmessage + CHANGE buildTargetPHID receiverPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20180214.harbor.01.aborted.php b/resources/sql/autopatches/20180214.harbor.01.aborted.php new file mode 100644 index 0000000000..365f375dc6 --- /dev/null +++ b/resources/sql/autopatches/20180214.harbor.01.aborted.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $buildable) { + if ($buildable->getBuildableStatus() !== 'building') { + continue; + } + + $aborted = queryfx_one( + $conn, + 'SELECT * FROM %T WHERE buildablePHID = %s AND buildStatus = %s + LIMIT 1', + id(new HarbormasterBuild())->getTableName(), + $buildable->getPHID(), + 'aborted'); + if (!$aborted) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET buildableStatus = %s WHERE id = %d', + $table->getTableName(), + 'failed', + $buildable->getID()); +} diff --git a/resources/sql/autopatches/20180215.phriction.01.phidcol.sql b/resources/sql/autopatches/20180215.phriction.01.phidcol.sql new file mode 100644 index 0000000000..658b05d9e1 --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.01.phidcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_content + ADD phid VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20180215.phriction.02.phidvalues.php b/resources/sql/autopatches/20180215.phriction.02.phidvalues.php new file mode 100644 index 0000000000..c0a55cac85 --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.02.phidvalues.php @@ -0,0 +1,17 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $row) { + if (strlen($row->getPHID())) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $table->generatePHID(), + $row->getID()); +} diff --git a/resources/sql/autopatches/20180215.phriction.03.descempty.sql b/resources/sql/autopatches/20180215.phriction.03.descempty.sql new file mode 100644 index 0000000000..c41df5285a --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.03.descempty.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_phriction.phriction_content + SET description = '' WHERE description IS NULL; diff --git a/resources/sql/autopatches/20180215.phriction.04.descnull.sql b/resources/sql/autopatches/20180215.phriction.04.descnull.sql new file mode 100644 index 0000000000..3ff017cd64 --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.04.descnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_content + CHANGE description description LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180215.phriction.05.statustext.sql b/resources/sql/autopatches/20180215.phriction.05.statustext.sql new file mode 100644 index 0000000000..756f7ac968 --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.05.statustext.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + CHANGE status status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180215.phriction.06.statusvalue.sql b/resources/sql/autopatches/20180215.phriction.06.statusvalue.sql new file mode 100644 index 0000000000..381de77643 --- /dev/null +++ b/resources/sql/autopatches/20180215.phriction.06.statusvalue.sql @@ -0,0 +1,11 @@ +UPDATE {$NAMESPACE}_phriction.phriction_document + SET status = 'active' WHERE status = '0'; + +UPDATE {$NAMESPACE}_phriction.phriction_document + SET status = 'deleted' WHERE status = '1'; + +UPDATE {$NAMESPACE}_phriction.phriction_document + SET status = 'moved' WHERE status = '2'; + +UPDATE {$NAMESPACE}_phriction.phriction_document + SET status = 'stub' WHERE status = '3'; diff --git a/resources/sql/autopatches/20180218.fact.01.dim.key.sql b/resources/sql/autopatches/20180218.fact.01.dim.key.sql new file mode 100644 index 0000000000..3a81915026 --- /dev/null +++ b/resources/sql/autopatches/20180218.fact.01.dim.key.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_fact.fact_keydimension ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + factKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_factkey` (factKey) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180218.fact.02.dim.obj.sql b/resources/sql/autopatches/20180218.fact.02.dim.obj.sql new file mode 100644 index 0000000000..6b38062b29 --- /dev/null +++ b/resources/sql/autopatches/20180218.fact.02.dim.obj.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_fact.fact_objectdimension ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + UNIQUE KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180218.fact.03.data.int.sql b/resources/sql/autopatches/20180218.fact.03.data.int.sql new file mode 100644 index 0000000000..d93d546733 --- /dev/null +++ b/resources/sql/autopatches/20180218.fact.03.data.int.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_fact.fact_intdatapoint ( + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + keyID INT UNSIGNED NOT NULL, + objectID INT UNSIGNED NOT NULL, + dimensionID INT UNSIGNED, + value BIGINT SIGNED NOT NULL, + epoch INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180222.log.01.filephid.sql b/resources/sql/autopatches/20180222.log.01.filephid.sql new file mode 100644 index 0000000000..a7ef2f2b3e --- /dev/null +++ b/resources/sql/autopatches/20180222.log.01.filephid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog + ADD filePHID VARBINARY(64); diff --git a/resources/sql/autopatches/20180223.log.01.bytelength.sql b/resources/sql/autopatches/20180223.log.01.bytelength.sql new file mode 100644 index 0000000000..a4c3505628 --- /dev/null +++ b/resources/sql/autopatches/20180223.log.01.bytelength.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog + ADD byteLength BIGINT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20180223.log.02.chunkformat.sql b/resources/sql/autopatches/20180223.log.02.chunkformat.sql new file mode 100644 index 0000000000..a15676a952 --- /dev/null +++ b/resources/sql/autopatches/20180223.log.02.chunkformat.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog + ADD chunkFormat VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180223.log.03.chunkdefault.sql b/resources/sql/autopatches/20180223.log.03.chunkdefault.sql new file mode 100644 index 0000000000..2a1f2c812b --- /dev/null +++ b/resources/sql/autopatches/20180223.log.03.chunkdefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_harbormaster.harbormaster_buildlog + SET chunkFormat = 'text' WHERE chunkFormat = ''; diff --git a/resources/sql/autopatches/20180223.log.04.linemap.sql b/resources/sql/autopatches/20180223.log.04.linemap.sql new file mode 100644 index 0000000000..75ed27cf7c --- /dev/null +++ b/resources/sql/autopatches/20180223.log.04.linemap.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog + ADD lineMap LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180223.log.05.linemapdefault.sql b/resources/sql/autopatches/20180223.log.05.linemapdefault.sql new file mode 100644 index 0000000000..59b4dc9a62 --- /dev/null +++ b/resources/sql/autopatches/20180223.log.05.linemapdefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_harbormaster.harbormaster_buildlog + SET lineMap = '[]' WHERE lineMap = ''; diff --git a/resources/sql/autopatches/20180228.log.01.offset.sql b/resources/sql/autopatches/20180228.log.01.offset.sql new file mode 100644 index 0000000000..db20fc292e --- /dev/null +++ b/resources/sql/autopatches/20180228.log.01.offset.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlogchunk + ADD headOffset BIGINT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlogchunk + ADD tailOffset BIGINT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20180305.lock.01.locklog.sql b/resources/sql/autopatches/20180305.lock.01.locklog.sql new file mode 100644 index 0000000000..fa10c21c07 --- /dev/null +++ b/resources/sql/autopatches/20180305.lock.01.locklog.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_daemon.daemon_locklog ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + lockName VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + lockReleased INT UNSIGNED, + lockParameters LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + lockContext LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180306.opath.01.digest.sql b/resources/sql/autopatches/20180306.opath.01.digest.sql new file mode 100644 index 0000000000..2418366fc5 --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.01.digest.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_path + ADD pathIndex BINARY(12) NOT NULL; diff --git a/resources/sql/autopatches/20180306.opath.02.digestpopulate.php b/resources/sql/autopatches/20180306.opath.02.digestpopulate.php new file mode 100644 index 0000000000..a6b817fc46 --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.02.digestpopulate.php @@ -0,0 +1,19 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $path) { + $index = PhabricatorHash::digestForIndex($path->getPath()); + + if ($index === $path->getPathIndex()) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET pathIndex = %s WHERE id = %d', + $table->getTableName(), + $index, + $path->getID()); +} diff --git a/resources/sql/autopatches/20180306.opath.03.purge.php b/resources/sql/autopatches/20180306.opath.03.purge.php new file mode 100644 index 0000000000..91a15e2a58 --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.03.purge.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +$seen = array(); +foreach (new LiskMigrationIterator($table) as $path) { + $package_id = $path->getPackageID(); + $repository_phid = $path->getRepositoryPHID(); + $path_index = $path->getPathIndex(); + + if (!isset($seen[$package_id][$repository_phid][$path_index])) { + $seen[$package_id][$repository_phid][$path_index] = true; + continue; + } + + queryfx( + $conn, + 'DELETE FROM %T WHERE id = %d', + $table->getTableName(), + $path->getID()); +} diff --git a/resources/sql/autopatches/20180306.opath.04.unique.sql b/resources/sql/autopatches/20180306.opath.04.unique.sql new file mode 100644 index 0000000000..2349533b1f --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.04.unique.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_path + ADD UNIQUE KEY `key_path` (packageID, repositoryPHID, pathIndex); diff --git a/resources/sql/autopatches/20180306.opath.05.longpath.sql b/resources/sql/autopatches/20180306.opath.05.longpath.sql new file mode 100644 index 0000000000..79ff2f7a7f --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.05.longpath.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_path + CHANGE path path LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180306.opath.06.pathdisplay.sql b/resources/sql/autopatches/20180306.opath.06.pathdisplay.sql new file mode 100644 index 0000000000..b9b336ecd7 --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.06.pathdisplay.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_path + ADD pathDisplay LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180306.opath.07.copypaths.sql b/resources/sql/autopatches/20180306.opath.07.copypaths.sql new file mode 100644 index 0000000000..74ebecfa9a --- /dev/null +++ b/resources/sql/autopatches/20180306.opath.07.copypaths.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_path + SET pathDisplay = path WHERE pathDisplay = ''; diff --git a/resources/sql/autopatches/20180309.owners.01.primaryowner.sql b/resources/sql/autopatches/20180309.owners.01.primaryowner.sql new file mode 100644 index 0000000000..a5eb4368f2 --- /dev/null +++ b/resources/sql/autopatches/20180309.owners.01.primaryowner.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + DROP primaryOwnerPHID; diff --git a/resources/sql/autopatches/20180312.reviewers.01.options.sql b/resources/sql/autopatches/20180312.reviewers.01.options.sql new file mode 100644 index 0000000000..159426614d --- /dev/null +++ b/resources/sql/autopatches/20180312.reviewers.01.options.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_reviewer + ADD options LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180312.reviewers.02.optionsdefault.sql b/resources/sql/autopatches/20180312.reviewers.02.optionsdefault.sql new file mode 100644 index 0000000000..d509011f73 --- /dev/null +++ b/resources/sql/autopatches/20180312.reviewers.02.optionsdefault.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_differential.differential_reviewer + SET options = '{}' WHERE options = ''; diff --git a/resources/sql/autopatches/20180322.lock.01.identifier.sql b/resources/sql/autopatches/20180322.lock.01.identifier.sql new file mode 100644 index 0000000000..b115a691fa --- /dev/null +++ b/resources/sql/autopatches/20180322.lock.01.identifier.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD requestIdentifier VARBINARY(12); + +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD UNIQUE KEY `key_request` (requestIdentifier); diff --git a/resources/sql/autopatches/20180322.lock.02.wait.sql b/resources/sql/autopatches/20180322.lock.02.wait.sql new file mode 100644 index 0000000000..cba7cc64d0 --- /dev/null +++ b/resources/sql/autopatches/20180322.lock.02.wait.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD writeWait BIGINT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD readWait BIGINT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD hostWait BIGINT UNSIGNED; diff --git a/resources/sql/autopatches/20180326.lock.03.nonunique.sql b/resources/sql/autopatches/20180326.lock.03.nonunique.sql new file mode 100644 index 0000000000..9e12d7e864 --- /dev/null +++ b/resources/sql/autopatches/20180326.lock.03.nonunique.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + DROP KEY `key_request`; diff --git a/resources/sql/autopatches/20180403.draft.01.broadcast.php b/resources/sql/autopatches/20180403.draft.01.broadcast.php new file mode 100644 index 0000000000..b237894c90 --- /dev/null +++ b/resources/sql/autopatches/20180403.draft.01.broadcast.php @@ -0,0 +1,20 @@ +establishConnection('w'); + +$drafts = $table->loadAllWhere( + 'status = %s', + DifferentialRevisionStatus::DRAFT); +foreach ($drafts as $draft) { + $properties = $draft->getProperties(); + + $properties[DifferentialRevision::PROPERTY_SHOULD_BROADCAST] = false; + + queryfx( + $conn, + 'UPDATE %T SET properties = %s WHERE id = %d', + id(new DifferentialRevision())->getTableName(), + phutil_json_encode($properties), + $draft->getID()); +} diff --git a/resources/sql/autopatches/20180410.almanac.01.iface.xaction.sql b/resources/sql/autopatches/20180410.almanac.01.iface.xaction.sql new file mode 100644 index 0000000000..5f0dec18aa --- /dev/null +++ b/resources/sql/autopatches/20180410.almanac.01.iface.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_almanac.almanac_interfacetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) COLLATE {$COLLATE_TEXT} NOT NULL, + oldValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + newValue LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + contentSource LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + metadata LONGTEXT COLLATE {$COLLATE_TEXT} NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180418.alamanc.interface.unique.php b/resources/sql/autopatches/20180418.alamanc.interface.unique.php new file mode 100644 index 0000000000..0ad4fbea12 --- /dev/null +++ b/resources/sql/autopatches/20180418.alamanc.interface.unique.php @@ -0,0 +1,85 @@ +establishConnection('w'); + +queryfx( + $interface_conn, + 'LOCK TABLES %T WRITE, %T WRITE', + $interface_table->getTableName(), + $binding_table->getTableName()); + +$seen = array(); +foreach (new LiskMigrationIterator($interface_table) as $interface) { + $device = $interface->getDevicePHID(); + $network = $interface->getNetworkPHID(); + $address = $interface->getAddress(); + $port = $interface->getPort(); + $key = "{$device}/{$network}/{$address}/{$port}"; + + // If this is the first copy of this row we've seen, mark it as seen and + // move on. + if (empty($seen[$key])) { + $seen[$key] = $interface->getID(); + continue; + } + + $survivor = queryfx_one( + $interface_conn, + 'SELECT * FROM %T WHERE id = %d', + $interface_table->getTableName(), + $seen[$key]); + + $bindings = queryfx_all( + $interface_conn, + 'SELECT * FROM %T WHERE interfacePHID = %s', + $binding_table->getTableName(), + $interface->getPHID()); + + // Repoint bindings to the survivor. + foreach ($bindings as $binding) { + // Check if there's already a binding to the survivor. + $existing = queryfx_one( + $interface_conn, + 'SELECT * FROM %T WHERE interfacePHID = %s and devicePHID = %s and '. + 'servicePHID = %s', + $binding_table->getTableName(), + $survivor['phid'], + $binding['devicePHID'], + $binding['servicePHID']); + + if (!$existing) { + // Reattach this binding to the survivor. + queryfx( + $interface_conn, + 'UPDATE %T SET interfacePHID = %s WHERE id = %d', + $binding_table->getTableName(), + $survivor['phid'], + $binding['id']); + } else { + // Binding to survivor already exists. Remove this now-redundant binding. + queryfx( + $interface_conn, + 'DELETE FROM %T WHERE id = %d', + $binding_table->getTableName(), + $binding['id']); + } + } + + queryfx( + $interface_conn, + 'DELETE FROM %T WHERE id = %d', + $interface_table->getTableName(), + $interface->getID()); +} + +queryfx( + $interface_conn, + 'ALTER TABLE %T ADD UNIQUE KEY `key_unique` '. + '(devicePHID, networkPHID, address, port)', + $interface_table->getTableName()); + +queryfx( + $interface_conn, + 'UNLOCK TABLES'); diff --git a/resources/sql/autopatches/20180418.almanac.network.unique.php b/resources/sql/autopatches/20180418.almanac.network.unique.php new file mode 100644 index 0000000000..c81c59823e --- /dev/null +++ b/resources/sql/autopatches/20180418.almanac.network.unique.php @@ -0,0 +1,46 @@ +establishConnection('w'); + +queryfx( + $conn, + 'LOCK TABLES %T WRITE', + $table->getTableName()); + +$seen = array(); +foreach (new LiskMigrationIterator($table) as $network) { + $name = $network->getName(); + + // If this is the first copy of this row we've seen, mark it as seen and + // move on. + if (empty($seen[$name])) { + $seen[$name] = 1; + continue; + } + + // Otherwise, rename this row. + while (true) { + $new_name = $name.'-'.$seen[$name]; + if (empty($seen[$new_name])) { + $network->setName($new_name); + try { + $network->save(); + break; + } catch (AphrontDuplicateKeyQueryException $ex) { + // New name is a dupe of a network we haven't seen yet. + } + } + $seen[$name]++; + } + $seen[$new_name] = 1; +} + +queryfx( + $conn, + 'ALTER TABLE %T ADD UNIQUE KEY `key_name` (name)', + $table->getTableName()); + +queryfx( + $conn, + 'UNLOCK TABLES'); diff --git a/resources/sql/autopatches/20180419.phlux.edges.sql b/resources/sql/autopatches/20180419.phlux.edges.sql new file mode 100644 index 0000000000..1a63aa4d1f --- /dev/null +++ b/resources/sql/autopatches/20180419.phlux.edges.sql @@ -0,0 +1,16 @@ +CREATE TABLE {$NAMESPACE}_phlux.edge ( + src VARBINARY(64) NOT NULL, + type INT UNSIGNED NOT NULL, + dst VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY `src` (src, type, dateCreated, seq), + UNIQUE KEY `key_dst` (dst, type, src) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; + +CREATE TABLE {$NAMESPACE}_phlux.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180423.mail.01.properties.sql b/resources/sql/autopatches/20180423.mail.01.properties.sql new file mode 100644 index 0000000000..d4fc008023 --- /dev/null +++ b/resources/sql/autopatches/20180423.mail.01.properties.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_metamta.metamta_mailproperties ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + mailProperties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180430.repo_identity.sql b/resources/sql/autopatches/20180430.repo_identity.sql new file mode 100644 index 0000000000..1d81d5c970 --- /dev/null +++ b/resources/sql/autopatches/20180430.repo_identity.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_identity ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + automaticGuessedUserPHID VARBINARY(64) DEFAULT NULL, + manuallySetUserPHID VARBINARY(64) DEFAULT NULL, + currentEffectiveUserPHID VARBINARY(64) DEFAULT NULL, + identityNameHash BINARY(12) NOT NULL, + identityNameRaw LONGBLOB NOT NULL, + identityNameEncoding VARCHAR(16) DEFAULT NULL COLLATE {$COLLATE_TEXT}, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_identity` (identityNameHash) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180504.owners.01.mailkey.php b/resources/sql/autopatches/20180504.owners.01.mailkey.php new file mode 100644 index 0000000000..c1b5550f9f --- /dev/null +++ b/resources/sql/autopatches/20180504.owners.01.mailkey.php @@ -0,0 +1,26 @@ +establishConnection('w'); +$packages_name = $packages_table->getTableName(); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator($packages_conn, $packages_name); +foreach ($iterator as $package) { + queryfx( + $conn, + 'INSERT IGNORE INTO %T + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table->getTableName(), + $package['phid'], + phutil_json_encode( + array( + 'mailKey' => $package['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20180504.owners.02.rmkey.sql b/resources/sql/autopatches/20180504.owners.02.rmkey.sql new file mode 100644 index 0000000000..5b8f240307 --- /dev/null +++ b/resources/sql/autopatches/20180504.owners.02.rmkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + DROP mailKey; diff --git a/resources/sql/autopatches/20180504.owners.03.properties.sql b/resources/sql/autopatches/20180504.owners.03.properties.sql new file mode 100644 index 0000000000..d7a90ed1c5 --- /dev/null +++ b/resources/sql/autopatches/20180504.owners.03.properties.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180504.owners.04.default.sql b/resources/sql/autopatches/20180504.owners.04.default.sql new file mode 100644 index 0000000000..c4c7ff044d --- /dev/null +++ b/resources/sql/autopatches/20180504.owners.04.default.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20180504.repo_identity.author.sql b/resources/sql/autopatches/20180504.repo_identity.author.sql new file mode 100644 index 0000000000..95859a6203 --- /dev/null +++ b/resources/sql/autopatches/20180504.repo_identity.author.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_identity + ADD COLUMN authorPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20180504.repo_identity.xaction.sql b/resources/sql/autopatches/20180504.repo_identity.xaction.sql new file mode 100644 index 0000000000..4b4e1f2a23 --- /dev/null +++ b/resources/sql/autopatches/20180504.repo_identity.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_identitytransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180509.repo_identity.commits.sql b/resources/sql/autopatches/20180509.repo_identity.commits.sql new file mode 100644 index 0000000000..cc3ed299b6 --- /dev/null +++ b/resources/sql/autopatches/20180509.repo_identity.commits.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + ADD COLUMN authorIdentityPHID VARBINARY(64) DEFAULT NULL, + ADD COLUMN committerIdentityPHID VARBINARY(64) DEFAULT NULL; diff --git a/resources/sql/autopatches/20180730.phriction.01.spaces.sql b/resources/sql/autopatches/20180730.phriction.01.spaces.sql new file mode 100644 index 0000000000..6d3e007258 --- /dev/null +++ b/resources/sql/autopatches/20180730.phriction.01.spaces.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + ADD spacePHID VARBINARY(64) DEFAULT NULL; diff --git a/resources/sql/autopatches/20180730.project.01.spaces.sql b/resources/sql/autopatches/20180730.project.01.spaces.sql new file mode 100644 index 0000000000..927ff3b677 --- /dev/null +++ b/resources/sql/autopatches/20180730.project.01.spaces.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD COLUMN spacePHID VARBINARY(64) DEFAULT NULL; diff --git a/resources/sql/autopatches/20180809.repo_identities.activity.php b/resources/sql/autopatches/20180809.repo_identities.activity.php new file mode 100644 index 0000000000..e1077d4ddb --- /dev/null +++ b/resources/sql/autopatches/20180809.repo_identities.activity.php @@ -0,0 +1,20 @@ +loadAllWhere('authorIdentityPHID IS NULL LIMIT 1'); + +if (!$commits) { + return; +} + +try { + id(new PhabricatorConfigManualActivity()) + ->setActivityType(PhabricatorConfigManualActivity::TYPE_IDENTITIES) + ->save(); +} catch (AphrontDuplicateKeyQueryException $ex) { + // If we've already noted that this activity is required, just move on. +} diff --git a/resources/sql/autopatches/20180827.drydock.01.acquired.sql b/resources/sql/autopatches/20180827.drydock.01.acquired.sql new file mode 100644 index 0000000000..55948391c9 --- /dev/null +++ b/resources/sql/autopatches/20180827.drydock.01.acquired.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + ADD acquiredEpoch INT UNSIGNED; diff --git a/resources/sql/autopatches/20180827.drydock.02.activated.sql b/resources/sql/autopatches/20180827.drydock.02.activated.sql new file mode 100644 index 0000000000..552f7b6b24 --- /dev/null +++ b/resources/sql/autopatches/20180827.drydock.02.activated.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + ADD activatedEpoch INT UNSIGNED; diff --git a/resources/sql/autopatches/20180828.phriction.01.contentphid.sql b/resources/sql/autopatches/20180828.phriction.01.contentphid.sql new file mode 100644 index 0000000000..cf3d78ebdf --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.01.contentphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + ADD contentPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20180828.phriction.02.documentphid.sql b/resources/sql/autopatches/20180828.phriction.02.documentphid.sql new file mode 100644 index 0000000000..c15b4b17b8 --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.02.documentphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_content + ADD documentPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20180828.phriction.03.editedepoch.sql b/resources/sql/autopatches/20180828.phriction.03.editedepoch.sql new file mode 100644 index 0000000000..eae31fc0ba --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.03.editedepoch.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + ADD editedEpoch INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20180828.phriction.04.migrate.php b/resources/sql/autopatches/20180828.phriction.04.migrate.php new file mode 100644 index 0000000000..461eae2dad --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.04.migrate.php @@ -0,0 +1,57 @@ +establishConnection('w'); + +$document_iterator = new LiskRawMigrationIterator( + $conn, + $document_table->getTableName()); +foreach ($document_iterator as $row) { + $content_id = $row['contentID']; + + $content_row = queryfx_one( + $conn, + 'SELECT phid, dateCreated FROM %T WHERE id = %d', + $content_table->getTableName(), + $content_id); + + if (!$content_row) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET contentPHID = %s, editedEpoch = %d WHERE id = %d', + $document_table->getTableName(), + $content_row['phid'], + $content_row['dateCreated'], + $row['id']); +} + +$content_iterator = new LiskRawMigrationIterator( + $conn, + $content_table->getTableName()); +foreach ($content_iterator as $row) { + $document_id = $row['documentID']; + + $document_row = queryfx_one( + $conn, + 'SELECT phid FROM %T WHERE id = %d', + $document_table->getTableName(), + $document_id); + if (!$document_row) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET documentPHID = %s WHERE id = %d', + $content_table->getTableName(), + $document_row['phid'], + $row['id']); +} diff --git a/resources/sql/autopatches/20180828.phriction.05.contentid.sql b/resources/sql/autopatches/20180828.phriction.05.contentid.sql new file mode 100644 index 0000000000..d6cba741a3 --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.05.contentid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + DROP contentID; diff --git a/resources/sql/autopatches/20180828.phriction.06.c.documentid.php b/resources/sql/autopatches/20180828.phriction.06.c.documentid.php new file mode 100644 index 0000000000..474643d620 --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.06.c.documentid.php @@ -0,0 +1,20 @@ +establishConnection('w'); + +try { + queryfx( + $conn, + 'ALTER TABLE %T DROP KEY documentID', + $table->getTableName()); +} catch (AphrontQueryException $ex) { + // Ignore. +} diff --git a/resources/sql/autopatches/20180828.phriction.06.documentid.sql b/resources/sql/autopatches/20180828.phriction.06.documentid.sql new file mode 100644 index 0000000000..2323154b3e --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.06.documentid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_content + DROP documentID; diff --git a/resources/sql/autopatches/20180828.phriction.07.c.documentuniq.sql b/resources/sql/autopatches/20180828.phriction.07.c.documentuniq.sql new file mode 100644 index 0000000000..d086cc6141 --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.07.c.documentuniq.sql @@ -0,0 +1 @@ +DELETE FROM {$NAMESPACE}_phriction.phriction_content WHERE documentPHID = ''; diff --git a/resources/sql/autopatches/20180828.phriction.07.documentkey.sql b/resources/sql/autopatches/20180828.phriction.07.documentkey.sql new file mode 100644 index 0000000000..aea3c97130 --- /dev/null +++ b/resources/sql/autopatches/20180828.phriction.07.documentkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_content + ADD UNIQUE KEY `key_version` (documentPHID, version); diff --git a/resources/sql/autopatches/20180829.phriction.01.mailkey.php b/resources/sql/autopatches/20180829.phriction.01.mailkey.php new file mode 100644 index 0000000000..cb85a3c5ef --- /dev/null +++ b/resources/sql/autopatches/20180829.phriction.01.mailkey.php @@ -0,0 +1,26 @@ +establishConnection('w'); +$document_name = $document_table->getTableName(); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator($document_conn, $document_name); +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %T + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table->getTableName(), + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20180829.phriction.02.rmkey.sql b/resources/sql/autopatches/20180829.phriction.02.rmkey.sql new file mode 100644 index 0000000000..8199287db7 --- /dev/null +++ b/resources/sql/autopatches/20180829.phriction.02.rmkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + DROP mailKey; diff --git a/resources/sql/autopatches/20180830.phriction.01.maxversion.sql b/resources/sql/autopatches/20180830.phriction.01.maxversion.sql new file mode 100644 index 0000000000..f6f24e8333 --- /dev/null +++ b/resources/sql/autopatches/20180830.phriction.01.maxversion.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phriction.phriction_document + ADD maxVersion INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20180830.phriction.02.maxes.php b/resources/sql/autopatches/20180830.phriction.02.maxes.php new file mode 100644 index 0000000000..97abf010db --- /dev/null +++ b/resources/sql/autopatches/20180830.phriction.02.maxes.php @@ -0,0 +1,30 @@ +establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $conn, + $document_table->getTableName()); +foreach ($iterator as $row) { + $content = queryfx_one( + $conn, + 'SELECT MAX(version) max FROM %T WHERE documentPHID = %s', + $content_table->getTableName(), + $row['phid']); + if (!$content) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET maxVersion = %d WHERE id = %d', + $document_table->getTableName(), + $content['max'], + $row['id']); +} diff --git a/resources/sql/autopatches/20180910.audit.01.searches.php b/resources/sql/autopatches/20180910.audit.01.searches.php new file mode 100644 index 0000000000..f68e76fe45 --- /dev/null +++ b/resources/sql/autopatches/20180910.audit.01.searches.php @@ -0,0 +1,54 @@ +establishConnection('w'); + +$status_map = array( + 0 => 'none', + 1 => 'needs-audit', + 2 => 'concern-raised', + 3 => 'partially-audited', + 4 => 'audited', + 5 => 'needs-verification', +); + +foreach (new LiskMigrationIterator($table) as $query) { + if ($query->getEngineClassName() !== 'PhabricatorCommitSearchEngine') { + continue; + } + + $parameters = $query->getParameters(); + $status = idx($parameters, 'statuses'); + + if (!$status) { + // No saved "status" constraint. + continue; + } + + if (!is_array($status)) { + // Saved constraint isn't a list. + continue; + } + + // Migrate old integer values to new string values. + $old_status = $status; + foreach ($status as $key => $value) { + if (is_numeric($value)) { + $status[$key] = $status_map[$value]; + } + } + + if ($status === $old_status) { + // Nothing changed. + continue; + } + + $parameters['statuses'] = $status; + + queryfx( + $conn, + 'UPDATE %T SET parameters = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($parameters), + $query->getID()); +} diff --git a/resources/sql/autopatches/20180910.audit.02.string.sql b/resources/sql/autopatches/20180910.audit.02.string.sql new file mode 100644 index 0000000000..4caa4a1724 --- /dev/null +++ b/resources/sql/autopatches/20180910.audit.02.string.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + CHANGE auditStatus auditStatus VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20180910.audit.03.status.php b/resources/sql/autopatches/20180910.audit.03.status.php new file mode 100644 index 0000000000..ab42d196f0 --- /dev/null +++ b/resources/sql/autopatches/20180910.audit.03.status.php @@ -0,0 +1,22 @@ +establishConnection('w'); + +$status_map = array( + 0 => 'none', + 1 => 'needs-audit', + 2 => 'concern-raised', + 3 => 'partially-audited', + 4 => 'audited', + 5 => 'needs-verification', +); + +foreach ($status_map as $old_status => $new_status) { + queryfx( + $conn, + 'UPDATE %R SET auditStatus = %s WHERE auditStatus = %s', + $table, + $new_status, + $old_status); +} diff --git a/resources/sql/autopatches/20180910.audit.04.xactions.php b/resources/sql/autopatches/20180910.audit.04.xactions.php new file mode 100644 index 0000000000..1ecf9ef320 --- /dev/null +++ b/resources/sql/autopatches/20180910.audit.04.xactions.php @@ -0,0 +1,48 @@ +establishConnection('w'); + +$status_map = array( + 0 => 'none', + 1 => 'needs-audit', + 2 => 'concern-raised', + 3 => 'partially-audited', + 4 => 'audited', + 5 => 'needs-verification', +); + +$state_type = DiffusionCommitStateTransaction::TRANSACTIONTYPE; + +foreach (new LiskMigrationIterator($table) as $xaction) { + if ($xaction->getTransactionType() !== $state_type) { + continue; + } + + $old_value = $xaction->getOldValue(); + $new_value = $xaction->getNewValue(); + + $any_change = false; + + if (isset($status_map[$old_value])) { + $old_value = $status_map[$old_value]; + $any_change = true; + } + + if (isset($status_map[$new_value])) { + $new_value = $status_map[$new_value]; + $any_change = true; + } + + if (!$any_change) { + continue; + } + + queryfx( + $conn, + 'UPDATE %T SET oldValue = %s, newValue = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($old_value), + phutil_json_encode($new_value), + $xaction->getID()); +} diff --git a/resources/sql/autopatches/20180914.audit.01.mailkey.php b/resources/sql/autopatches/20180914.audit.01.mailkey.php new file mode 100644 index 0000000000..60926857ee --- /dev/null +++ b/resources/sql/autopatches/20180914.audit.01.mailkey.php @@ -0,0 +1,34 @@ +establishConnection('w'); +$commit_name = $commit_table->getTableName(); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator($commit_conn, $commit_name); +$chunks = new PhutilChunkedIterator($iterator, 100); +foreach ($chunks as $chunk) { + $sql = array(); + foreach ($chunk as $commit) { + $sql[] = qsprintf( + $conn, + '(%s, %s, %d, %d)', + $commit['phid'], + phutil_json_encode( + array( + 'mailKey' => $commit['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); + } + + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES %LQ', + $properties_table, + $sql); +} diff --git a/resources/sql/autopatches/20180914.audit.02.rmkey.sql b/resources/sql/autopatches/20180914.audit.02.rmkey.sql new file mode 100644 index 0000000000..3187da4258 --- /dev/null +++ b/resources/sql/autopatches/20180914.audit.02.rmkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + DROP mailKey; diff --git a/resources/sql/autopatches/20180914.drydock.01.operationphid.sql b/resources/sql/autopatches/20180914.drydock.01.operationphid.sql new file mode 100644 index 0000000000..bdfe02b0df --- /dev/null +++ b/resources/sql/autopatches/20180914.drydock.01.operationphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_log + ADD operationPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20181024.drydock.01.commandprops.sql b/resources/sql/autopatches/20181024.drydock.01.commandprops.sql new file mode 100644 index 0000000000..e808146b02 --- /dev/null +++ b/resources/sql/autopatches/20181024.drydock.01.commandprops.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_command + ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql b/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql new file mode 100644 index 0000000000..2c336dc40e --- /dev/null +++ b/resources/sql/autopatches/20181024.drydock.02.commanddefaults.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_drydock.drydock_command + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20181031.board.01.queryreset.php b/resources/sql/autopatches/20181031.board.01.queryreset.php new file mode 100644 index 0000000000..781cf456ce --- /dev/null +++ b/resources/sql/autopatches/20181031.board.01.queryreset.php @@ -0,0 +1,50 @@ +establishConnection('w'); + +$iterator = new LiskMigrationIterator($table); +$search_engine = id(new ManiphestTaskSearchEngine()) + ->setViewer($viewer); + +foreach ($iterator as $project) { + $default_filter = $project->getDefaultWorkboardFilter(); + if (!strlen($default_filter)) { + continue; + } + + if ($search_engine->isBuiltinQuery($default_filter)) { + continue; + } + + $saved = id(new PhabricatorSavedQueryQuery()) + ->setViewer($viewer) + ->withQueryKeys(array($default_filter)) + ->executeOne(); + if ($saved) { + continue; + } + + $properties = $project->getProperties(); + unset($properties['workboard.filter.default']); + + queryfx( + $conn, + 'UPDATE %T SET properties = %s WHERE id = %d', + $table->getTableName(), + phutil_json_encode($properties), + $project->getID()); + + echo tsprintf( + "%s\n", + pht( + 'Project ("%s") had an invalid query saved as a default workboard '. + 'query. The query has been reset. See T13208.', + $project->getDisplayName())); +} diff --git a/resources/sql/autopatches/20181106.repo.01.sync.sql b/resources/sql/autopatches/20181106.repo.01.sync.sql new file mode 100644 index 0000000000..3302ad8ff1 --- /dev/null +++ b/resources/sql/autopatches/20181106.repo.01.sync.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_syncevent ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + repositoryPHID VARBINARY(64) NOT NULL, + epoch INT UNSIGNED NOT NULL, + devicePHID VARBINARY(64) NOT NULL, + fromDevicePHID VARBINARY(64) NOT NULL, + deviceVersion INT UNSIGNED, + fromDeviceVersion INT UNSIGNED, + resultType VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + resultCode INT UNSIGNED NOT NULL, + syncWait BIGINT UNSIGNED NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181106.repo.02.hook.sql b/resources/sql/autopatches/20181106.repo.02.hook.sql new file mode 100644 index 0000000000..be06923044 --- /dev/null +++ b/resources/sql/autopatches/20181106.repo.02.hook.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushevent + ADD hookWait BIGINT UNSIGNED; diff --git a/resources/sql/autopatches/20181213.auth.01.sessionphid.sql b/resources/sql/autopatches/20181213.auth.01.sessionphid.sql new file mode 100644 index 0000000000..34b5aa5bf6 --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.01.sessionphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD phid VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20181213.auth.02.populatephid.php b/resources/sql/autopatches/20181213.auth.02.populatephid.php new file mode 100644 index 0000000000..314eaf87a3 --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.02.populatephid.php @@ -0,0 +1,18 @@ +establishConnection('w'); + +foreach ($iterator as $session) { + if (strlen($session->getPHID())) { + continue; + } + + queryfx( + $conn, + 'UPDATE %R SET phid = %s WHERE id = %d', + $table, + $session->generatePHID(), + $session->getID()); +} diff --git a/resources/sql/autopatches/20181213.auth.03.phidkey.sql b/resources/sql/autopatches/20181213.auth.03.phidkey.sql new file mode 100644 index 0000000000..6bc11b3e55 --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.03.phidkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/autopatches/20181213.auth.04.longerhashes.sql b/resources/sql/autopatches/20181213.auth.04.longerhashes.sql new file mode 100644 index 0000000000..2bffb4c4a8 --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.04.longerhashes.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.phabricator_session + CHANGE sessionKey sessionKey VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20181213.auth.05.longerloghashes.sql b/resources/sql/autopatches/20181213.auth.05.longerloghashes.sql new file mode 100644 index 0000000000..dc8638d91c --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.05.longerloghashes.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_log + CHANGE session session VARBINARY(64); diff --git a/resources/sql/autopatches/20181213.auth.06.challenge.sql b/resources/sql/autopatches/20181213.auth.06.challenge.sql new file mode 100644 index 0000000000..0e5eeb35f0 --- /dev/null +++ b/resources/sql/autopatches/20181213.auth.06.challenge.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_challenge ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + userPHID VARBINARY(64) NOT NULL, + factorPHID VARBINARY(64) NOT NULL, + sessionPHID VARBINARY(64) NOT NULL, + challengeKey VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + challengeTTL INT UNSIGNED NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181214.auth.01.workflowkey.sql b/resources/sql/autopatches/20181214.auth.01.workflowkey.sql new file mode 100644 index 0000000000..538778e218 --- /dev/null +++ b/resources/sql/autopatches/20181214.auth.01.workflowkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_challenge + ADD workflowKey VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181217.auth.01.digest.sql b/resources/sql/autopatches/20181217.auth.01.digest.sql new file mode 100644 index 0000000000..8e30143e8f --- /dev/null +++ b/resources/sql/autopatches/20181217.auth.01.digest.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_challenge + ADD responseDigest VARCHAR(255) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181217.auth.02.ttl.sql b/resources/sql/autopatches/20181217.auth.02.ttl.sql new file mode 100644 index 0000000000..c8e883dbea --- /dev/null +++ b/resources/sql/autopatches/20181217.auth.02.ttl.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_challenge + ADD responseTTL INT UNSIGNED; diff --git a/resources/sql/autopatches/20181217.auth.03.completed.sql b/resources/sql/autopatches/20181217.auth.03.completed.sql new file mode 100644 index 0000000000..22ca6e21ff --- /dev/null +++ b/resources/sql/autopatches/20181217.auth.03.completed.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_challenge + ADD isCompleted BOOL NOT NULL; diff --git a/resources/sql/autopatches/20181218.pholio.01.imageauthor.sql b/resources/sql/autopatches/20181218.pholio.01.imageauthor.sql new file mode 100644 index 0000000000..4ff0a16258 --- /dev/null +++ b/resources/sql/autopatches/20181218.pholio.01.imageauthor.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD authorPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20181219.pholio.01.imagephid.sql b/resources/sql/autopatches/20181219.pholio.01.imagephid.sql new file mode 100644 index 0000000000..870cddd950 --- /dev/null +++ b/resources/sql/autopatches/20181219.pholio.01.imagephid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD mockPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20181219.pholio.02.imagemigrate.php b/resources/sql/autopatches/20181219.pholio.02.imagemigrate.php new file mode 100644 index 0000000000..f1fc1b3c37 --- /dev/null +++ b/resources/sql/autopatches/20181219.pholio.02.imagemigrate.php @@ -0,0 +1,35 @@ +establishConnection('w'); +$iterator = new LiskRawMigrationIterator($conn, $image->getTableName()); + +foreach ($iterator as $image_row) { + if ($image_row['mockPHID']) { + continue; + } + + $mock_id = $image_row['mockID']; + + $mock_row = queryfx_one( + $conn, + 'SELECT phid FROM %R WHERE id = %d', + $mock, + $mock_id); + + if (!$mock_row) { + continue; + } + + queryfx( + $conn, + 'UPDATE %R SET mockPHID = %s WHERE id = %d', + $image, + $mock_row['phid'], + $image_row['id']); +} diff --git a/resources/sql/autopatches/20181219.pholio.03.imageid.sql b/resources/sql/autopatches/20181219.pholio.03.imageid.sql new file mode 100644 index 0000000000..3a3cb029ac --- /dev/null +++ b/resources/sql/autopatches/20181219.pholio.03.imageid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + DROP mockID; diff --git a/resources/sql/autopatches/20181220.pholio.01.mailkey.php b/resources/sql/autopatches/20181220.pholio.01.mailkey.php new file mode 100644 index 0000000000..37dcfd1434 --- /dev/null +++ b/resources/sql/autopatches/20181220.pholio.01.mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $mock_conn, + $mock_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %T + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table->getTableName(), + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20181220.pholio.02.dropmailkey.sql b/resources/sql/autopatches/20181220.pholio.02.dropmailkey.sql new file mode 100644 index 0000000000..a71bc5dc69 --- /dev/null +++ b/resources/sql/autopatches/20181220.pholio.02.dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_mock + DROP mailKey; diff --git a/resources/sql/autopatches/20181228.auth.01.provider.sql b/resources/sql/autopatches/20181228.auth.01.provider.sql new file mode 100644 index 0000000000..4ffd23c846 --- /dev/null +++ b/resources/sql/autopatches/20181228.auth.01.provider.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_factorprovider ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + providerFactorKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181228.auth.02.xaction.sql b/resources/sql/autopatches/20181228.auth.02.xaction.sql new file mode 100644 index 0000000000..c595cdd8fc --- /dev/null +++ b/resources/sql/autopatches/20181228.auth.02.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_factorprovidertransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20181228.auth.03.name.sql b/resources/sql/autopatches/20181228.auth.03.name.sql new file mode 100644 index 0000000000..856c10287d --- /dev/null +++ b/resources/sql/autopatches/20181228.auth.03.name.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_factorprovider + ADD name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190101.sms.01.drop.sql b/resources/sql/autopatches/20190101.sms.01.drop.sql new file mode 100644 index 0000000000..b233f7ab78 --- /dev/null +++ b/resources/sql/autopatches/20190101.sms.01.drop.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_metamta.sms; diff --git a/resources/sql/autopatches/20190115.mfa.01.provider.sql b/resources/sql/autopatches/20190115.mfa.01.provider.sql new file mode 100644 index 0000000000..52e818f8d8 --- /dev/null +++ b/resources/sql/autopatches/20190115.mfa.01.provider.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_factorconfig + ADD factorProviderPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20190115.mfa.02.migrate.php b/resources/sql/autopatches/20190115.mfa.02.migrate.php new file mode 100644 index 0000000000..95a60789c3 --- /dev/null +++ b/resources/sql/autopatches/20190115.mfa.02.migrate.php @@ -0,0 +1,72 @@ +establishConnection('w'); + +$provider_table = new PhabricatorAuthFactorProvider(); +$provider_phid = null; +$iterator = new LiskRawMigrationIterator($conn, $table->getTableName()); +$totp_key = 'totp'; +foreach ($iterator as $row) { + + // This wasn't a TOTP factor, so skip it. + if ($row['factorKey'] !== $totp_key) { + continue; + } + + // This factor already has an associated provider. + if (strlen($row['factorProviderPHID'])) { + continue; + } + + // Find (or create) a suitable TOTP provider. Note that we can't "save()" + // an object or this migration will break if the object ever gets new + // columns; just INSERT the raw fields instead. + + if ($provider_phid === null) { + $provider_row = queryfx_one( + $conn, + 'SELECT phid FROM %R WHERE providerFactorKey = %s LIMIT 1', + $provider_table, + $totp_key); + + if ($provider_row) { + $provider_phid = $provider_row['phid']; + } else { + $provider_phid = $provider_table->generatePHID(); + queryfx( + $conn, + 'INSERT INTO %R + (phid, providerFactorKey, name, status, properties, + dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %d, %d)', + $provider_table, + $provider_phid, + $totp_key, + '', + 'active', + '{}', + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); + } + } + + queryfx( + $conn, + 'UPDATE %R SET factorProviderPHID = %s WHERE id = %d', + $table, + $provider_phid, + $row['id']); +} diff --git a/resources/sql/autopatches/20190115.mfa.03.factorkey.sql b/resources/sql/autopatches/20190115.mfa.03.factorkey.sql new file mode 100644 index 0000000000..619787a838 --- /dev/null +++ b/resources/sql/autopatches/20190115.mfa.03.factorkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_factorconfig + DROP factorKey; diff --git a/resources/sql/autopatches/20190116.contact.01.number.sql b/resources/sql/autopatches/20190116.contact.01.number.sql new file mode 100644 index 0000000000..14e2b78d1d --- /dev/null +++ b/resources/sql/autopatches/20190116.contact.01.number.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_contactnumber ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + contactNumber VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + uniqueKey BINARY(12), + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190116.contact.02.xaction.sql b/resources/sql/autopatches/20190116.contact.02.xaction.sql new file mode 100644 index 0000000000..bd0d361bc5 --- /dev/null +++ b/resources/sql/autopatches/20190116.contact.02.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_contactnumbertransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190116.phortune.01.billing.sql b/resources/sql/autopatches/20190116.phortune.01.billing.sql new file mode 100644 index 0000000000..77d00e220e --- /dev/null +++ b/resources/sql/autopatches/20190116.phortune.01.billing.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_account + ADD billingName VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + ADD billingAddress LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190117.authmessage.01.message.sql b/resources/sql/autopatches/20190117.authmessage.01.message.sql new file mode 100644 index 0000000000..9f4afa2646 --- /dev/null +++ b/resources/sql/autopatches/20190117.authmessage.01.message.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_message ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + messageKey VARCHAR(64) NOT NULL COLLATE {$COLLATE_TEXT}, + messageText LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190117.authmessage.02.xaction.sql b/resources/sql/autopatches/20190117.authmessage.02.xaction.sql new file mode 100644 index 0000000000..944de129a0 --- /dev/null +++ b/resources/sql/autopatches/20190117.authmessage.02.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_messagetransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190121.contact.01.primary.sql b/resources/sql/autopatches/20190121.contact.01.primary.sql new file mode 100644 index 0000000000..84a7570679 --- /dev/null +++ b/resources/sql/autopatches/20190121.contact.01.primary.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_auth.auth_contactnumber + ADD isPrimary BOOL NOT NULL; diff --git a/resources/sql/autopatches/20190127.project.01.subtype.sql b/resources/sql/autopatches/20190127.project.01.subtype.sql new file mode 100644 index 0000000000..107f9202d4 --- /dev/null +++ b/resources/sql/autopatches/20190127.project.01.subtype.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project + ADD subtype VARCHAR(64) COLLATE {$COLLATE_TEXT} NOT NULL; diff --git a/resources/sql/autopatches/20190127.project.02.default.sql b/resources/sql/autopatches/20190127.project.02.default.sql new file mode 100644 index 0000000000..1a74506cf7 --- /dev/null +++ b/resources/sql/autopatches/20190127.project.02.default.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_project.project + SET subtype = 'default' WHERE subtype = ''; diff --git a/resources/sql/autopatches/20190129.project.01.spaces.php b/resources/sql/autopatches/20190129.project.01.spaces.php new file mode 100644 index 0000000000..845b4ff25d --- /dev/null +++ b/resources/sql/autopatches/20190129.project.01.spaces.php @@ -0,0 +1,18 @@ +establishConnection('w'); +$table_name = $table->getTableName(); + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $project_row) { + queryfx( + $conn, + 'UPDATE %R SET spacePHID = %ns + WHERE parentProjectPHID = %s AND milestoneNumber IS NOT NULL', + $table, + $project_row['spacePHID'], + $project_row['phid']); +} diff --git a/resources/sql/autopatches/20190206.external.01.legalpad.sql b/resources/sql/autopatches/20190206.external.01.legalpad.sql new file mode 100644 index 0000000000..8afa9dd9ff --- /dev/null +++ b/resources/sql/autopatches/20190206.external.01.legalpad.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_legalpad.legalpad_documentsignature + SET signerPHID = NULL WHERE signerPHID LIKE 'PHID-XUSR-%'; diff --git a/resources/sql/autopatches/20190206.external.02.email.sql b/resources/sql/autopatches/20190206.external.02.email.sql new file mode 100644 index 0000000000..14f5f4791f --- /dev/null +++ b/resources/sql/autopatches/20190206.external.02.email.sql @@ -0,0 +1,2 @@ +DELETE FROM {$NAMESPACE}_user.user_externalaccount + WHERE accountType = 'email'; diff --git a/resources/sql/autopatches/20190206.external.03.providerphid.sql b/resources/sql/autopatches/20190206.external.03.providerphid.sql new file mode 100644 index 0000000000..0b2f498e02 --- /dev/null +++ b/resources/sql/autopatches/20190206.external.03.providerphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_externalaccount + ADD providerConfigPHID VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20190206.external.04.providerlink.php b/resources/sql/autopatches/20190206.external.04.providerlink.php new file mode 100644 index 0000000000..e4a2e2d4bf --- /dev/null +++ b/resources/sql/autopatches/20190206.external.04.providerlink.php @@ -0,0 +1,36 @@ +establishConnection('w'); +$table_name = $account_table->getTableName(); + +$config_table = new PhabricatorAuthProviderConfig(); +$config_conn = $config_table->establishConnection('w'); + +foreach (new LiskRawMigrationIterator($account_conn, $table_name) as $row) { + if (strlen($row['providerConfigPHID'])) { + continue; + } + + $config_row = queryfx_one( + $config_conn, + 'SELECT phid + FROM %R + WHERE providerType = %s AND providerDomain = %s + LIMIT 1', + $config_table, + $row['accountType'], + $row['accountDomain']); + if (!$config_row) { + continue; + } + + queryfx( + $account_conn, + 'UPDATE %R + SET providerConfigPHID = %s + WHERE id = %d', + $account_table, + $config_row['phid'], + $row['id']); +} diff --git a/resources/sql/autopatches/20190207.packages.01.state.sql b/resources/sql/autopatches/20190207.packages.01.state.sql new file mode 100644 index 0000000000..0e74f269ba --- /dev/null +++ b/resources/sql/autopatches/20190207.packages.01.state.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD auditingState VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190207.packages.02.migrate.sql b/resources/sql/autopatches/20190207.packages.02.migrate.sql new file mode 100644 index 0000000000..60bf364ac1 --- /dev/null +++ b/resources/sql/autopatches/20190207.packages.02.migrate.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET auditingState = IF(auditingEnabled = 0, 'none', 'audit'); diff --git a/resources/sql/autopatches/20190207.packages.03.drop.sql b/resources/sql/autopatches/20190207.packages.03.drop.sql new file mode 100644 index 0000000000..24d0ce1a4f --- /dev/null +++ b/resources/sql/autopatches/20190207.packages.03.drop.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + DROP auditingEnabled; diff --git a/resources/sql/autopatches/20190207.packages.04.xactions.php b/resources/sql/autopatches/20190207.packages.04.xactions.php new file mode 100644 index 0000000000..5a8609166e --- /dev/null +++ b/resources/sql/autopatches/20190207.packages.04.xactions.php @@ -0,0 +1,41 @@ +establishConnection('w'); +$iterator = new LiskRawMigrationIterator($conn, $table->getTableName()); + +// Migrate "Auditing State" transactions for Owners Packages from old values +// (which were "0" or "1", as JSON integer literals, without quotes) to new +// values (which are JSON strings, with quotes). + +foreach ($iterator as $row) { + if ($row['transactionType'] !== 'owners.auditing') { + continue; + } + + $old_value = (int)$row['oldValue']; + $new_value = (int)$row['newValue']; + + if (!$old_value) { + $old_value = 'none'; + } else { + $old_value = 'audit'; + } + + if (!$new_value) { + $new_value = 'none'; + } else { + $new_value = 'audit'; + } + + $old_value = phutil_json_encode($old_value); + $new_value = phutil_json_encode($new_value); + + queryfx( + $conn, + 'UPDATE %R SET oldValue = %s, newValue = %s WHERE id = %d', + $table, + $old_value, + $new_value, + $row['id']); +} diff --git a/resources/sql/autopatches/20190215.daemons.01.dropdataid.php b/resources/sql/autopatches/20190215.daemons.01.dropdataid.php new file mode 100644 index 0000000000..05cc4adfee --- /dev/null +++ b/resources/sql/autopatches/20190215.daemons.01.dropdataid.php @@ -0,0 +1,21 @@ +establishConnection('w'); + +try { + queryfx( + $conn, + 'ALTER TABLE %R DROP KEY %T', + $table, + 'dataID'); +} catch (AphrontQueryException $ex) { + // Ignore. +} diff --git a/resources/sql/autopatches/20190215.daemons.02.nulldataid.sql b/resources/sql/autopatches/20190215.daemons.02.nulldataid.sql new file mode 100644 index 0000000000..19be602efe --- /dev/null +++ b/resources/sql/autopatches/20190215.daemons.02.nulldataid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + CHANGE dataID dataID INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20190215.harbor.01.stringindex.sql b/resources/sql/autopatches/20190215.harbor.01.stringindex.sql new file mode 100644 index 0000000000..e94b240bab --- /dev/null +++ b/resources/sql/autopatches/20190215.harbor.01.stringindex.sql @@ -0,0 +1,6 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_string ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + stringIndex BINARY(12) NOT NULL, + stringValue LONGTEXT NOT NULL, + UNIQUE KEY `key_string` (stringIndex) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190215.harbor.02.stringcol.sql b/resources/sql/autopatches/20190215.harbor.02.stringcol.sql new file mode 100644 index 0000000000..acfdb0f869 --- /dev/null +++ b/resources/sql/autopatches/20190215.harbor.02.stringcol.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildunitmessage + ADD nameIndex BINARY(12) NOT NULL; diff --git a/resources/sql/autopatches/20190220.daemon_worker.completed.01.sql b/resources/sql/autopatches/20190220.daemon_worker.completed.01.sql new file mode 100644 index 0000000000..37f5a89bba --- /dev/null +++ b/resources/sql/autopatches/20190220.daemon_worker.completed.01.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD archivedEpoch INT UNSIGNED NULL; diff --git a/resources/sql/autopatches/20190220.daemon_worker.completed.02.sql b/resources/sql/autopatches/20190220.daemon_worker.completed.02.sql new file mode 100644 index 0000000000..f0040576a9 --- /dev/null +++ b/resources/sql/autopatches/20190220.daemon_worker.completed.02.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD dateCreated int unsigned NOT NULL, + ADD dateModified int unsigned NOT NULL; diff --git a/resources/sql/autopatches/20190226.harbor.01.planprops.sql b/resources/sql/autopatches/20190226.harbor.01.planprops.sql new file mode 100644 index 0000000000..324139669e --- /dev/null +++ b/resources/sql/autopatches/20190226.harbor.01.planprops.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplan + ADD properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190226.harbor.02.planvalue.sql b/resources/sql/autopatches/20190226.harbor.02.planvalue.sql new file mode 100644 index 0000000000..b1929abf59 --- /dev/null +++ b/resources/sql/autopatches/20190226.harbor.02.planvalue.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_harbormaster.harbormaster_buildplan + SET properties = '{}' WHERE properties = ''; diff --git a/resources/sql/autopatches/20190307.herald.01.comments.sql b/resources/sql/autopatches/20190307.herald.01.comments.sql new file mode 100644 index 0000000000..ff9cb9af88 --- /dev/null +++ b/resources/sql/autopatches/20190307.herald.01.comments.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_herald.herald_ruletransaction_comment; diff --git a/resources/sql/autopatches/20190312.triggers.01.trigger.sql b/resources/sql/autopatches/20190312.triggers.01.trigger.sql new file mode 100644 index 0000000000..301a3a62cd --- /dev/null +++ b/resources/sql/autopatches/20190312.triggers.01.trigger.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_project.project_trigger ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + editPolicy VARBINARY(64) NOT NULL, + ruleset LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190312.triggers.02.xaction.sql b/resources/sql/autopatches/20190312.triggers.02.xaction.sql new file mode 100644 index 0000000000..1a6034c4b1 --- /dev/null +++ b/resources/sql/autopatches/20190312.triggers.02.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_project.project_triggertransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190312.triggers.03.triggerphid.sql b/resources/sql/autopatches/20190312.triggers.03.triggerphid.sql new file mode 100644 index 0000000000..271d679cfa --- /dev/null +++ b/resources/sql/autopatches/20190312.triggers.03.triggerphid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_project.project_column + ADD triggerPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20190322.triggers.01.usage.sql b/resources/sql/autopatches/20190322.triggers.01.usage.sql new file mode 100644 index 0000000000..643ebbbfff --- /dev/null +++ b/resources/sql/autopatches/20190322.triggers.01.usage.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_project.project_triggerusage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + triggerPHID VARBINARY(64) NOT NULL, + examplePHID VARBINARY(64), + columnCount INT UNSIGNED NOT NULL, + activeColumnCount INT UNSIGNED NOT NULL, + UNIQUE KEY `key_trigger` (triggerPHID) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190329.portals.01.create.sql b/resources/sql/autopatches/20190329.portals.01.create.sql new file mode 100644 index 0000000000..d7d1e6138f --- /dev/null +++ b/resources/sql/autopatches/20190329.portals.01.create.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portal ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + name VARCHAR(255) NOT NULL COLLATE {$COLLATE_TEXT}, + status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + properties LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190329.portals.02.xaction.sql b/resources/sql/autopatches/20190329.portals.02.xaction.sql new file mode 100644 index 0000000000..057df69e2d --- /dev/null +++ b/resources/sql/autopatches/20190329.portals.02.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portaltransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190410.portals.01.ferret.doc.sql b/resources/sql/autopatches/20190410.portals.01.ferret.doc.sql new file mode 100644 index 0000000000..984f3196f9 --- /dev/null +++ b/resources/sql/autopatches/20190410.portals.01.ferret.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portal_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190410.portals.02.ferret.field.sql b/resources/sql/autopatches/20190410.portals.02.ferret.field.sql new file mode 100644 index 0000000000..af02b8f0d6 --- /dev/null +++ b/resources/sql/autopatches/20190410.portals.02.ferret.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portal_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190410.portals.03.ferret.ngrams.sql b/resources/sql/autopatches/20190410.portals.03.ferret.ngrams.sql new file mode 100644 index 0000000000..37a5fc80ab --- /dev/null +++ b/resources/sql/autopatches/20190410.portals.03.ferret.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portal_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190410.portals.04.ferret.cngrams.sql b/resources/sql/autopatches/20190410.portals.04.ferret.cngrams.sql new file mode 100644 index 0000000000..678af664bf --- /dev/null +++ b/resources/sql/autopatches/20190410.portals.04.ferret.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_portal_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.01.panels.php b/resources/sql/autopatches/20190412.dashboard.01.panels.php new file mode 100644 index 0000000000..dad132356b --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.01.panels.php @@ -0,0 +1,81 @@ +establishConnection('r'); +$table_name = $dashboard_table->getTableName(); + +$rows = new LiskRawMigrationIterator($conn, $table_name); +foreach ($rows as $row) { + $config = $row['layoutConfig']; + + try { + $config = phutil_json_decode($config); + } catch (Exception $ex) { + $config = array(); + } + + if (!is_array($config)) { + $config = array(); + } + + $panels = idx($config, 'panelLocations'); + if (!is_array($panels)) { + $panels = array(); + } + + if (idx($config, 'layoutMode') === 'layout-mode-full') { + $column_map = array( + 0 => 'main', + ); + } else { + $column_map = array( + 0 => 'left', + 1 => 'right', + ); + } + + $panel_list = array(); + foreach ($panels as $column_idx => $panel_phids) { + $column_key = idx($column_map, $column_idx, 'unknown'); + foreach ($panel_phids as $panel_phid) { + $panel_list[] = array( + 'panelKey' => Filesystem::readRandomCharacters(8), + 'columnKey' => $column_key, + 'panelPHID' => $panel_phid, + ); + } + } + unset($config['panelLocations']); + $config['panels'] = $panel_list; + + queryfx( + $conn, + 'UPDATE %R SET layoutConfig = %s WHERE id = %d', + $dashboard_table, + phutil_json_encode($config), + $row['id']); +} diff --git a/resources/sql/autopatches/20190412.dashboard.02.install.sql b/resources/sql/autopatches/20190412.dashboard.02.install.sql new file mode 100644 index 0000000000..be3363d5c3 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.02.install.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_dashboard.dashboard_install; diff --git a/resources/sql/autopatches/20190412.dashboard.03.dashngrams.sql b/resources/sql/autopatches/20190412.dashboard.03.dashngrams.sql new file mode 100644 index 0000000000..2f1b572a8b --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.03.dashngrams.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_dashboard.dashboard_dashboard_ngrams; diff --git a/resources/sql/autopatches/20190412.dashboard.04.panelngrams.sql b/resources/sql/autopatches/20190412.dashboard.04.panelngrams.sql new file mode 100644 index 0000000000..e06d817c6e --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.04.panelngrams.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_dashboard.dashboard_dashboardpanel_ngrams; diff --git a/resources/sql/autopatches/20190412.dashboard.05.dferret.doc.sql b/resources/sql/autopatches/20190412.dashboard.05.dferret.doc.sql new file mode 100644 index 0000000000..2073a5b578 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.05.dferret.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboard_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.06.dferret.field.sql b/resources/sql/autopatches/20190412.dashboard.06.dferret.field.sql new file mode 100644 index 0000000000..b8845f5686 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.06.dferret.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboard_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.07.dferret.ngrams.sql b/resources/sql/autopatches/20190412.dashboard.07.dferret.ngrams.sql new file mode 100644 index 0000000000..3279e7dc27 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.07.dferret.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboard_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.08.dferret.cngrams.sql b/resources/sql/autopatches/20190412.dashboard.08.dferret.cngrams.sql new file mode 100644 index 0000000000..0ee815d175 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.08.dferret.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_dashboard_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.09.pferret.doc.sql b/resources/sql/autopatches/20190412.dashboard.09.pferret.doc.sql new file mode 100644 index 0000000000..827a4245ed --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.09.pferret.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_panel_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.10.pferret.field.sql b/resources/sql/autopatches/20190412.dashboard.10.pferret.field.sql new file mode 100644 index 0000000000..f63521d87b --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.10.pferret.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_panel_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.11.pferret.ngrams.sql b/resources/sql/autopatches/20190412.dashboard.11.pferret.ngrams.sql new file mode 100644 index 0000000000..a197ec0272 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.11.pferret.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_panel_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.12.pferret.cngrams.sql b/resources/sql/autopatches/20190412.dashboard.12.pferret.cngrams.sql new file mode 100644 index 0000000000..95426fcf1d --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.12.pferret.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_dashboard.dashboard_panel_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190412.dashboard.13.rebuild.php b/resources/sql/autopatches/20190412.dashboard.13.rebuild.php new file mode 100644 index 0000000000..04b8d0e275 --- /dev/null +++ b/resources/sql/autopatches/20190412.dashboard.13.rebuild.php @@ -0,0 +1,9 @@ +addEdge($cart->getAccountPHID(), $edge_type, $cart->getMerchantPHID()) + ->save(); +} diff --git a/resources/sql/autopatches/20190815.account.02.subscriptions.php b/resources/sql/autopatches/20190815.account.02.subscriptions.php new file mode 100644 index 0000000000..38db05b0ef --- /dev/null +++ b/resources/sql/autopatches/20190815.account.02.subscriptions.php @@ -0,0 +1,10 @@ +addEdge($sub->getAccountPHID(), $edge_type, $sub->getMerchantPHID()) + ->save(); +} diff --git a/resources/sql/autopatches/20190816.payment.01.xaction.sql b/resources/sql/autopatches/20190816.payment.01.xaction.sql new file mode 100644 index 0000000000..22d7baae7e --- /dev/null +++ b/resources/sql/autopatches/20190816.payment.01.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethodtransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190816.subscription.01.xaction.sql b/resources/sql/autopatches/20190816.subscription.01.xaction.sql new file mode 100644 index 0000000000..8866ce3a57 --- /dev/null +++ b/resources/sql/autopatches/20190816.subscription.01.xaction.sql @@ -0,0 +1,19 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_subscriptiontransaction ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + authorPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewPolicy VARBINARY(64) NOT NULL, + editPolicy VARBINARY(64) NOT NULL, + commentPHID VARBINARY(64) DEFAULT NULL, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL, + oldValue LONGTEXT NOT NULL, + newValue LONGTEXT NOT NULL, + contentSource LONGTEXT NOT NULL, + metadata LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20190822.merchant.01.view.sql b/resources/sql/autopatches/20190822.merchant.01.view.sql new file mode 100644 index 0000000000..cb609f054e --- /dev/null +++ b/resources/sql/autopatches/20190822.merchant.01.view.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phortune.phortune_merchant + DROP viewPolicy; diff --git a/resources/sql/autopatches/20190909.herald.01.rebuild.php b/resources/sql/autopatches/20190909.herald.01.rebuild.php new file mode 100644 index 0000000000..76126b9337 --- /dev/null +++ b/resources/sql/autopatches/20190909.herald.01.rebuild.php @@ -0,0 +1,5 @@ +establishConnection('w'); + +$iterator = new LiskRawMigrationIterator($conn, $table->getTableName()); +foreach ($iterator as $row) { + $name = $row['identityNameRaw']; + $name = phutil_utf8ize($name); + + $email = new PhutilEmailAddress($name); + $address = $email->getAddress(); + + try { + queryfx( + $conn, + 'UPDATE %R SET emailAddress = %ns WHERE id = %d', + $table, + $address, + $row['id']); + } catch (Exception $ex) { + // We may occasionally run into issues with binary or very long addresses. + // Just skip over them. + continue; + } +} diff --git a/resources/sql/autopatches/20191113.identity.03.unassigned.sql b/resources/sql/autopatches/20191113.identity.03.unassigned.sql new file mode 100644 index 0000000000..768ca1d909 --- /dev/null +++ b/resources/sql/autopatches/20191113.identity.03.unassigned.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_repository.repository_identity + SET currentEffectiveUserPHID = NULL + WHERE currentEffectiveUserPHID = 'unassigned()'; diff --git a/resources/sql/autopatches/20191114.email.01.phid.sql b/resources/sql/autopatches/20191114.email.01.phid.sql new file mode 100644 index 0000000000..3851d6e0ec --- /dev/null +++ b/resources/sql/autopatches/20191114.email.01.phid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_email + ADD phid VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20191114.email.02.populate.php b/resources/sql/autopatches/20191114.email.02.populate.php new file mode 100644 index 0000000000..96ef13ea58 --- /dev/null +++ b/resources/sql/autopatches/20191114.email.02.populate.php @@ -0,0 +1,18 @@ +establishConnection('w'); + +$iterator = new LiskRawMigrationIterator($conn, $table->getTableName()); +foreach ($iterator as $row) { + $phid = $row['phid']; + + if (!strlen($phid)) { + queryfx( + $conn, + 'UPDATE %R SET phid = %s WHERE id = %d', + $table, + $table->generatePHID(), + $row['id']); + } +} diff --git a/resources/sql/autopatches/20200220.xaccount.01.sql b/resources/sql/autopatches/20200220.xaccount.01.sql new file mode 100644 index 0000000000..dc3a4ec330 --- /dev/null +++ b/resources/sql/autopatches/20200220.xaccount.01.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_user.user_externalaccountidentifier ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARBINARY(64) NOT NULL, + externalAccountPHID VARBINARY(64) NOT NULL, + providerConfigPHID VARBINARY(64) NOT NULL, + identifierHash BINARY(12) NOT NULL, + identifierRaw LONGTEXT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200222.xident.01.migrate.php b/resources/sql/autopatches/20200222.xident.01.migrate.php new file mode 100644 index 0000000000..dacf6a7fe0 --- /dev/null +++ b/resources/sql/autopatches/20200222.xident.01.migrate.php @@ -0,0 +1,40 @@ +establishConnection('w'); +$table_name = $account_table->getTableName(); + +$iterator = new LiskRawMigrationIterator($conn, $table_name); +foreach ($iterator as $account_row) { + // We don't need to migrate "accountID" values for "password" accounts, + // since these were dummy values in the first place and are no longer + // read or written after D21014. (There would be no harm in writing these + // rows, but it's easy to skip them.) + + if ($account_row['accountType'] === 'password') { + continue; + } + + $account_id = $account_row['accountID']; + if (!strlen($account_id)) { + continue; + } + + queryfx( + $conn, + 'INSERT IGNORE INTO %R ( + phid, externalAccountPHID, providerConfigPHID, + identifierHash, identifierRaw, + dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %d, %d)', + $identifier_table, + $identifier_table->generatePHID(), + $account_row['phid'], + $account_row['providerConfigPHID'], + PhabricatorHash::digestForIndex($account_id), + $account_id, + $account_row['dateCreated'], + $account_row['dateModified']); +} diff --git a/resources/sql/autopatches/20200222.xident.02.dropkey.php b/resources/sql/autopatches/20200222.xident.02.dropkey.php new file mode 100644 index 0000000000..5aaea1ed4d --- /dev/null +++ b/resources/sql/autopatches/20200222.xident.02.dropkey.php @@ -0,0 +1,21 @@ +", which is obsolete. The application now violates +// this key, so make sure it gets dropped. + +// There's no "IF EXISTS" modifier for "ALTER TABLE" so run this as a PHP patch +// instead of an SQL patch. + +$table = new PhabricatorExternalAccount(); +$conn = $table->establishConnection('w'); + +try { + queryfx( + $conn, + 'ALTER TABLE %R DROP KEY %T', + $table, + 'account_details'); +} catch (AphrontQueryException $ex) { + // Ignore. +} diff --git a/resources/sql/autopatches/20200416.paste.01.ferret.doc.sql b/resources/sql/autopatches/20200416.paste.01.ferret.doc.sql new file mode 100644 index 0000000000..65b687f176 --- /dev/null +++ b/resources/sql/autopatches/20200416.paste.01.ferret.doc.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_paste.paste_paste_fdocument ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + isClosed BOOL NOT NULL, + authorPHID VARBINARY(64), + ownerPHID VARBINARY(64), + epochCreated INT UNSIGNED NOT NULL, + epochModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200416.paste.02.ferret.field.sql b/resources/sql/autopatches/20200416.paste.02.ferret.field.sql new file mode 100644 index 0000000000..98a92ad9f0 --- /dev/null +++ b/resources/sql/autopatches/20200416.paste.02.ferret.field.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_paste.paste_paste_ffield ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + fieldKey VARCHAR(4) NOT NULL COLLATE {$COLLATE_TEXT}, + rawCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + termCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT}, + normalCorpus LONGTEXT NOT NULL COLLATE {$COLLATE_SORT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200416.paste.03.ferret.ngrams.sql b/resources/sql/autopatches/20200416.paste.03.ferret.ngrams.sql new file mode 100644 index 0000000000..be4c93b2a6 --- /dev/null +++ b/resources/sql/autopatches/20200416.paste.03.ferret.ngrams.sql @@ -0,0 +1,5 @@ +CREATE TABLE {$NAMESPACE}_paste.paste_paste_fngrams ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + documentID INT UNSIGNED NOT NULL, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT} +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200416.paste.04.ferret.cngrams.sql b/resources/sql/autopatches/20200416.paste.04.ferret.cngrams.sql new file mode 100644 index 0000000000..51b3c05027 --- /dev/null +++ b/resources/sql/autopatches/20200416.paste.04.ferret.cngrams.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_paste.paste_paste_fngrams_common ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + ngram CHAR(3) NOT NULL COLLATE {$COLLATE_TEXT}, + needsCollection BOOL NOT NULL, + UNIQUE KEY `key_ngram` (ngram), + KEY `key_collect` (needsCollection) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200417.viewstate.01.storage.sql b/resources/sql/autopatches/20200417.viewstate.01.storage.sql new file mode 100644 index 0000000000..4fc5e3fa80 --- /dev/null +++ b/resources/sql/autopatches/20200417.viewstate.01.storage.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_viewstate ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + viewerPHID VARBINARY(64) NOT NULL, + objectPHID VARBINARY(64) NOT NULL, + viewState LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_viewer` (viewerPHID, objectPHID) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200428.inline.01.differential.column.sql b/resources/sql/autopatches/20200428.inline.01.differential.column.sql new file mode 100644 index 0000000000..d825565000 --- /dev/null +++ b/resources/sql/autopatches/20200428.inline.01.differential.column.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + ADD attributes LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200428.inline.02.diffusion.column.sql b/resources/sql/autopatches/20200428.inline.02.diffusion.column.sql new file mode 100644 index 0000000000..ac567b9a8e --- /dev/null +++ b/resources/sql/autopatches/20200428.inline.02.diffusion.column.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_audit.audit_transaction_comment + ADD attributes LONGTEXT NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200428.inline.03.differential.value.sql b/resources/sql/autopatches/20200428.inline.03.differential.value.sql new file mode 100644 index 0000000000..dfa420a8ac --- /dev/null +++ b/resources/sql/autopatches/20200428.inline.03.differential.value.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_differential.differential_transaction_comment + SET attributes = '{}' WHERE attributes = ''; diff --git a/resources/sql/autopatches/20200428.inline.04.diffusion.value.sql b/resources/sql/autopatches/20200428.inline.04.diffusion.value.sql new file mode 100644 index 0000000000..3fb10d7f2b --- /dev/null +++ b/resources/sql/autopatches/20200428.inline.04.diffusion.value.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_audit.audit_transaction_comment + SET attributes = '{}' WHERE attributes = ''; diff --git a/resources/sql/autopatches/20200520.inline.01.remcache.sql b/resources/sql/autopatches/20200520.inline.01.remcache.sql new file mode 100644 index 0000000000..356bf5a5a5 --- /dev/null +++ b/resources/sql/autopatches/20200520.inline.01.remcache.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache; diff --git a/resources/sql/autopatches/20200520.inline.02.addcache.sql b/resources/sql/autopatches/20200520.inline.02.addcache.sql new file mode 100644 index 0000000000..7b9ed64aac --- /dev/null +++ b/resources/sql/autopatches/20200520.inline.02.addcache.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + cacheIndex BINARY(12) NOT NULL, + cache LONGBLOB NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + UNIQUE KEY `key_cacheIndex` (cacheIndex) +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20200520.inline.03.dropcommit.sql b/resources/sql/autopatches/20200520.inline.03.dropcommit.sql new file mode 100644 index 0000000000..a757a8a0a7 --- /dev/null +++ b/resources/sql/autopatches/20200520.inline.03.dropcommit.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_differential.differential_commit; diff --git a/resources/sql/autopatches/20210122.queuecontainer.01.sql b/resources/sql/autopatches/20210122.queuecontainer.01.sql new file mode 100644 index 0000000000..29d761f075 --- /dev/null +++ b/resources/sql/autopatches/20210122.queuecontainer.01.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD containerPHID VARBINARY(64); + +ALTER TABLE {$NAMESPACE}_worker.worker_archivetask + ADD containerPHID VARBINARY(64); diff --git a/resources/sql/autopatches/20210215.changeset.01.phid.sql b/resources/sql/autopatches/20210215.changeset.01.phid.sql new file mode 100644 index 0000000000..25cab7805a --- /dev/null +++ b/resources/sql/autopatches/20210215.changeset.01.phid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_changeset + ADD phid VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20210215.changeset.02.phid-populate.php b/resources/sql/autopatches/20210215.changeset.02.phid-populate.php new file mode 100644 index 0000000000..93f886c7b0 --- /dev/null +++ b/resources/sql/autopatches/20210215.changeset.02.phid-populate.php @@ -0,0 +1,79 @@ +establishConnection('w'); +$table_name = $changeset_table->getTableName(); + +$chunk_size = 4096; + +$temporary_table = 'tmp_20210215_changeset_id_map'; + +try { + queryfx( + $conn, + 'CREATE TEMPORARY TABLE %T ( + changeset_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + changeset_phid VARBINARY(64) NOT NULL)', + $temporary_table); +} catch (AphrontAccessDeniedQueryException $ex) { + throw new PhutilProxyException( + pht( + 'Failed to "CREATE TEMPORARY TABLE". You may need to "GRANT" the '. + 'current MySQL user this permission.'), + $ex); +} + +$table_iterator = id(new LiskRawMigrationIterator($conn, $table_name)) + ->setPageSize($chunk_size); + +$chunk_iterator = new PhutilChunkedIterator($table_iterator, $chunk_size); +foreach ($chunk_iterator as $chunk) { + + $map = array(); + foreach ($chunk as $changeset_row) { + $phid = $changeset_row['phid']; + + if (strlen($phid)) { + continue; + } + + $phid = PhabricatorPHID::generateNewPHID($phid_type); + $id = $changeset_row['id']; + + $map[(int)$id] = $phid; + } + + if (!$map) { + continue; + } + + $sql = array(); + foreach ($map as $changeset_id => $changeset_phid) { + $sql[] = qsprintf( + $conn, + '(%d, %s)', + $changeset_id, + $changeset_phid); + } + + queryfx( + $conn, + 'TRUNCATE TABLE %T', + $temporary_table); + + queryfx( + $conn, + 'INSERT INTO %T (changeset_id, changeset_phid) VALUES %LQ', + $temporary_table, + $sql); + + queryfx( + $conn, + 'UPDATE %T c JOIN %T x ON c.id = x.changeset_id + SET c.phid = x.changeset_phid', + $table_name, + $temporary_table); +} diff --git a/resources/sql/autopatches/20210216.index.01.version.sql b/resources/sql/autopatches/20210216.index.01.version.sql new file mode 100644 index 0000000000..d24162891a --- /dev/null +++ b/resources/sql/autopatches/20210216.index.01.version.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_search.search_indexversion + ADD indexVersion BINARY(12) NOT NULL; diff --git a/resources/sql/autopatches/20210216.index.02.epoch.sql b/resources/sql/autopatches/20210216.index.02.epoch.sql new file mode 100644 index 0000000000..4e96ded075 --- /dev/null +++ b/resources/sql/autopatches/20210216.index.02.epoch.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_search.search_indexversion + ADD indexEpoch INT UNSIGNED NOT NULL; diff --git a/resources/sql/autopatches/20210309.auditors.01.status.sql b/resources/sql/autopatches/20210309.auditors.01.status.sql new file mode 100644 index 0000000000..731ce3ca44 --- /dev/null +++ b/resources/sql/autopatches/20210309.auditors.01.status.sql @@ -0,0 +1,5 @@ +UPDATE {$NAMESPACE}_repository.repository_auditrequest + SET auditStatus = 'accepted' WHERE auditStatus = 'closed'; + +DELETE FROM {$NAMESPACE}_repository.repository_auditrequest + WHERE auditStatus IN ('', 'cc', 'audit-not-required'); diff --git a/resources/sql/autopatches/20210315.affectedpath.01.epoch.sql b/resources/sql/autopatches/20210315.affectedpath.01.epoch.sql new file mode 100644 index 0000000000..80c337fd94 --- /dev/null +++ b/resources/sql/autopatches/20210315.affectedpath.01.epoch.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_affectedpath + DROP epoch; diff --git a/resources/sql/autopatches/20210315.affectedpath.02.repositoryid.sql b/resources/sql/autopatches/20210315.affectedpath.02.repositoryid.sql new file mode 100644 index 0000000000..1975b7c071 --- /dev/null +++ b/resources/sql/autopatches/20210315.affectedpath.02.repositoryid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_affectedpath + CHANGE repositoryID repositoryID INT UNSIGNED; diff --git a/resources/sql/autopatches/20210316.almanac.01.device-mailkey.php b/resources/sql/autopatches/20210316.almanac.01.device-mailkey.php new file mode 100644 index 0000000000..7c10d1ae76 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.01.device-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $device_conn, + $device_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.02.device-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.02.device-dropmailkey.sql new file mode 100644 index 0000000000..47079ef296 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.02.device-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.03.device-status.sql b/resources/sql/autopatches/20210316.almanac.03.device-status.sql new file mode 100644 index 0000000000..08618acb8f --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.03.device-status.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_device + ADD status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20210316.almanac.04.device-status-value.sql b/resources/sql/autopatches/20210316.almanac.04.device-status-value.sql new file mode 100644 index 0000000000..659bc7850f --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.04.device-status-value.sql @@ -0,0 +1,2 @@ +UPDATE {$NAMESPACE}_almanac.almanac_device + SET status = 'active' WHERE status = ''; diff --git a/resources/sql/autopatches/20210316.almanac.05.service-mailkey.php b/resources/sql/autopatches/20210316.almanac.05.service-mailkey.php new file mode 100644 index 0000000000..33318eb663 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.05.service-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $service_conn, + $service_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.06.service-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.06.service-dropmailkey.sql new file mode 100644 index 0000000000..b9966eddf9 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.06.service-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_service + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.07.binding-mailkey.php b/resources/sql/autopatches/20210316.almanac.07.binding-mailkey.php new file mode 100644 index 0000000000..84c1725876 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.07.binding-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $binding_conn, + $binding_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.08.binding-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.08.binding-dropmailkey.sql new file mode 100644 index 0000000000..ebcf31254d --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.08.binding-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_binding + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.09.namespace-mailkey.php b/resources/sql/autopatches/20210316.almanac.09.namespace-mailkey.php new file mode 100644 index 0000000000..261181324e --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.09.namespace-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $namespace_conn, + $namespace_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.10.namespace-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.10.namespace-dropmailkey.sql new file mode 100644 index 0000000000..867c42fbc2 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.10.namespace-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_namespace + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.11.network-mailkey.php b/resources/sql/autopatches/20210316.almanac.11.network-mailkey.php new file mode 100644 index 0000000000..1ece4e2353 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.11.network-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $network_conn, + $network_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.12.network-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.12.network-dropmailkey.sql new file mode 100644 index 0000000000..266f1250f0 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.12.network-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_almanac.almanac_network + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.13.event-mailkey.php b/resources/sql/autopatches/20210316.almanac.13.event-mailkey.php new file mode 100644 index 0000000000..7436ce3591 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.13.event-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $event_conn, + $event_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.14.event-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.14.event-dropmailkey.sql new file mode 100644 index 0000000000..8a7e2de519 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.14.event-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_calendar.calendar_event + DROP mailKey; diff --git a/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php b/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php new file mode 100644 index 0000000000..03215ef78f --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.15.intiative-mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $initiative_conn, + $initiative_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql b/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql new file mode 100644 index 0000000000..9de5e9c224 --- /dev/null +++ b/resources/sql/autopatches/20210316.almanac.16.initiative-dropmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_fund.fund_initiative + DROP mailKey; diff --git a/resources/sql/autopatches/20210625.owners.01.authority.sql b/resources/sql/autopatches/20210625.owners.01.authority.sql new file mode 100644 index 0000000000..96c36e7701 --- /dev/null +++ b/resources/sql/autopatches/20210625.owners.01.authority.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_package + ADD authorityMode VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20210625.owners.02.authority-default.sql b/resources/sql/autopatches/20210625.owners.02.authority-default.sql new file mode 100644 index 0000000000..98cd939777 --- /dev/null +++ b/resources/sql/autopatches/20210625.owners.02.authority-default.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_owners.owners_package + SET authorityMode = 'strong' + WHERE authorityMode = ''; diff --git a/resources/sql/autopatches/20210713.harborcommand.01.migrate.sql b/resources/sql/autopatches/20210713.harborcommand.01.migrate.sql new file mode 100644 index 0000000000..7acf3b33c8 --- /dev/null +++ b/resources/sql/autopatches/20210713.harborcommand.01.migrate.sql @@ -0,0 +1,4 @@ +INSERT IGNORE INTO {$NAMESPACE}_harbormaster.harbormaster_buildmessage + (authorPHID, receiverPHID, type, isConsumed, dateCreated, dateModified) + SELECT authorPHID, targetPHID, command, 0, dateCreated, dateModified + FROM {$NAMESPACE}_harbormaster.harbormaster_buildcommand; diff --git a/resources/sql/autopatches/20210713.harborcommand.02.drop.sql b/resources/sql/autopatches/20210713.harborcommand.02.drop.sql new file mode 100644 index 0000000000..0d04376c13 --- /dev/null +++ b/resources/sql/autopatches/20210713.harborcommand.02.drop.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_harbormaster.harbormaster_buildcommand; diff --git a/resources/sql/autopatches/20210715.harborcommand.01.xactions.php b/resources/sql/autopatches/20210715.harborcommand.01.xactions.php new file mode 100644 index 0000000000..05cd6d4744 --- /dev/null +++ b/resources/sql/autopatches/20210715.harborcommand.01.xactions.php @@ -0,0 +1,34 @@ +establishConnection('w'); +$row_iterator = new LiskRawMigrationIterator( + $xactions_conn, + $xactions_table->getTableName()); + +$map = array( + '"pause"' => 'message/pause', + '"abort"' => 'message/abort', + '"resume"' => 'message/resume', + '"restart"' => 'message/restart', +); + +foreach ($row_iterator as $row) { + if ($row['transactionType'] !== 'harbormaster:build:command') { + continue; + } + + $raw_value = $row['newValue']; + + if (isset($map[$raw_value])) { + queryfx( + $xactions_conn, + 'UPDATE %R SET transactionType = %s WHERE id = %d', + $xactions_table, + $map[$raw_value], + $row['id']); + } +} diff --git a/resources/sql/autopatches/20220401.phameinteract.01.sql b/resources/sql/autopatches/20220401.phameinteract.01.sql new file mode 100644 index 0000000000..cb8121887f --- /dev/null +++ b/resources/sql/autopatches/20220401.phameinteract.01.sql @@ -0,0 +1,5 @@ +UPDATE {$NAMESPACE}_phame.phame_blog + SET editPolicy = 'admin' WHERE editPolicy IS NULL; + +ALTER TABLE {$NAMESPACE}_phame.phame_blog + CHANGE editPolicy editPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20220401.phameinteract.02.sql b/resources/sql/autopatches/20220401.phameinteract.02.sql new file mode 100644 index 0000000000..057c02d30e --- /dev/null +++ b/resources/sql/autopatches/20220401.phameinteract.02.sql @@ -0,0 +1,5 @@ +UPDATE {$NAMESPACE}_phame.phame_blog + SET viewPolicy = 'admin' WHERE viewPolicy IS NULL; + +ALTER TABLE {$NAMESPACE}_phame.phame_blog + CHANGE viewPolicy viewPolicy VARBINARY(64) NOT NULL; diff --git a/resources/sql/autopatches/20220401.phameinteract.03.sql b/resources/sql/autopatches/20220401.phameinteract.03.sql new file mode 100644 index 0000000000..d5ac27b2ef --- /dev/null +++ b/resources/sql/autopatches/20220401.phameinteract.03.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD interactPolicy VARBINARY(64) NOT NULL; + +UPDATE {$NAMESPACE}_phame.phame_blog + SET interactPolicy = 'users' + WHERE interactPolicy = ''; diff --git a/resources/sql/autopatches/20220401.phameinteract.04.postinteract.sql b/resources/sql/autopatches/20220401.phameinteract.04.postinteract.sql new file mode 100644 index 0000000000..723a1ff69c --- /dev/null +++ b/resources/sql/autopatches/20220401.phameinteract.04.postinteract.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_post + ADD interactPolicy VARBINARY(64) NOT NULL; + +UPDATE {$NAMESPACE}_phame.phame_post + SET interactPolicy = 'obj.phame.blog' + WHERE interactPolicy = ''; diff --git a/resources/sql/autopatches/20220510.file.01.attach.sql b/resources/sql/autopatches/20220510.file.01.attach.sql new file mode 100644 index 0000000000..3ca8bacac4 --- /dev/null +++ b/resources/sql/autopatches/20220510.file.01.attach.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_file.file_attachment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARBINARY(64) NOT NULL, + filePHID VARBINARY(64) NOT NULL, + attacherPHID VARBINARY(64), + attachmentMode VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20220519.file.02.migrate.sql b/resources/sql/autopatches/20220519.file.02.migrate.sql new file mode 100644 index 0000000000..89d2d30a82 --- /dev/null +++ b/resources/sql/autopatches/20220519.file.02.migrate.sql @@ -0,0 +1,7 @@ +INSERT IGNORE INTO {$NAMESPACE}_file.file_attachment + (objectPHID, filePHID, attachmentMode, attacherPHID, + dateCreated, dateModified) + SELECT dst, src, 'attach', null, dateCreated, dateCreated + FROM {$NAMESPACE}_file.edge + WHERE type = 26 + ORDER BY dateCreated ASC; diff --git a/resources/sql/autopatches/20220525.slowvote.01.mailkey.php b/resources/sql/autopatches/20220525.slowvote.01.mailkey.php new file mode 100644 index 0000000000..ed0355e105 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.01.mailkey.php @@ -0,0 +1,28 @@ +establishConnection('w'); + +$properties_table = new PhabricatorMetaMTAMailProperties(); +$conn = $properties_table->establishConnection('w'); + +$iterator = new LiskRawMigrationIterator( + $poll_conn, + $poll_table->getTableName()); + +foreach ($iterator as $row) { + queryfx( + $conn, + 'INSERT IGNORE INTO %R + (objectPHID, mailProperties, dateCreated, dateModified) + VALUES + (%s, %s, %d, %d)', + $properties_table, + $row['phid'], + phutil_json_encode( + array( + 'mailKey' => $row['mailKey'], + )), + PhabricatorTime::getNow(), + PhabricatorTime::getNow()); +} diff --git a/resources/sql/autopatches/20220525.slowvote.02.mailkey-drop.sql b/resources/sql/autopatches/20220525.slowvote.02.mailkey-drop.sql new file mode 100644 index 0000000000..54e65fd14c --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.02.mailkey-drop.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + DROP mailKey; diff --git a/resources/sql/autopatches/20220525.slowvote.03.response-type.sql b/resources/sql/autopatches/20220525.slowvote.03.response-type.sql new file mode 100644 index 0000000000..8cefc4d578 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.03.response-type.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + CHANGE responseVisibility + responseVisibility VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20220525.slowvote.04.response-value.sql b/resources/sql/autopatches/20220525.slowvote.04.response-value.sql new file mode 100644 index 0000000000..b76bcdb784 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.04.response-value.sql @@ -0,0 +1,8 @@ +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET responseVisibility = 'visible' WHERE responseVisibility = '0'; + +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET responseVisibility = 'voters' WHERE responseVisibility = '1'; + +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET responseVisibility = 'owner' WHERE responseVisibility = '2'; diff --git a/resources/sql/autopatches/20220525.slowvote.05.response-xactions.sql b/resources/sql/autopatches/20220525.slowvote.05.response-xactions.sql new file mode 100644 index 0000000000..7e819d5893 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.05.response-xactions.sql @@ -0,0 +1,23 @@ +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET oldValue = '"visible"' WHERE + transactionType = 'vote:responses' AND oldValue IN ('0', '"0"'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET newValue = '"visible"' WHERE + transactionType = 'vote:responses' AND newValue IN ('0', '"0"'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET oldValue = '"voters"' WHERE + transactionType = 'vote:responses' AND oldValue IN ('1', '"1"'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET newValue = '"voters"' WHERE + transactionType = 'vote:responses' AND newValue IN ('1', '"1"'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET oldValue = '"owner"' WHERE + transactionType = 'vote:responses' AND oldValue IN ('2', '"2"'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET newValue = '"owner"' WHERE + transactionType = 'vote:responses' AND newValue IN ('2', '"2"'); diff --git a/resources/sql/autopatches/20220525.slowvote.06.method-type.sql b/resources/sql/autopatches/20220525.slowvote.06.method-type.sql new file mode 100644 index 0000000000..e2af0643bc --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.06.method-type.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + CHANGE method method VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20220525.slowvote.07.method-value.sql b/resources/sql/autopatches/20220525.slowvote.07.method-value.sql new file mode 100644 index 0000000000..04d0f6f430 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.07.method-value.sql @@ -0,0 +1,5 @@ +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET method = 'plurality' WHERE method = '0'; + +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET method = 'approval' WHERE method = '1'; diff --git a/resources/sql/autopatches/20220525.slowvote.08.status-type.sql b/resources/sql/autopatches/20220525.slowvote.08.status-type.sql new file mode 100644 index 0000000000..e8575fc50a --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.08.status-type.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + CHANGE isClosed status VARCHAR(32) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20220525.slowvote.09.status-value.sql b/resources/sql/autopatches/20220525.slowvote.09.status-value.sql new file mode 100644 index 0000000000..686e663af7 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.09.status-value.sql @@ -0,0 +1,5 @@ +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET status = 'open' WHERE status = '0'; + +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET status = 'closed' WHERE status = '1'; diff --git a/resources/sql/autopatches/20220525.slowvote.10.status-xactions.sql b/resources/sql/autopatches/20220525.slowvote.10.status-xactions.sql new file mode 100644 index 0000000000..fd06f9ebb2 --- /dev/null +++ b/resources/sql/autopatches/20220525.slowvote.10.status-xactions.sql @@ -0,0 +1,19 @@ +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET transactionType = 'vote:status' + WHERE transactionType = 'vote:close'; + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET oldValue = '"open"' WHERE + transactionType = 'vote:status' AND oldValue IN ('0', '"0"', 'false'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET newValue = '"open"' WHERE + transactionType = 'vote:status' AND newValue IN ('0', '"0"', 'false'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET oldValue = '"closed"' WHERE + transactionType = 'vote:status' AND oldValue IN ('1', '"1"', 'true'); + +UPDATE {$NAMESPACE}_slowvote.slowvote_transaction + SET newValue = '"closed"' WHERE + transactionType = 'vote:status' AND newValue IN ('1', '"1"', 'true'); diff --git a/resources/sql/patches/000.project.sql b/resources/sql/patches/000.project.sql index 6013c6c30d..794eb2737f 100644 --- a/resources/sql/patches/000.project.sql +++ b/resources/sql/patches/000.project.sql @@ -1,7 +1,6 @@ - create table {$NAMESPACE}_project.project ( id int unsigned not null auto_increment primary key, - name varchar(255) not null, + name varchar(255) COLLATE `binary` not null, unique key (name), phid varchar(64) binary not null, authorPHID varchar(64) binary not null, @@ -28,4 +27,3 @@ create table {$NAMESPACE}_project.project_affiliation ( dateCreated int unsigned not null, dateModified int unsigned not null ); - diff --git a/resources/sql/patches/0000.legacy.sql b/resources/sql/patches/0000.legacy.sql index f1c179d3f1..fc02040ee3 100644 --- a/resources/sql/patches/0000.legacy.sql +++ b/resources/sql/patches/0000.legacy.sql @@ -1,9 +1,3 @@ - - - - - - /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; diff --git a/resources/sql/patches/002.oauth.sql b/resources/sql/patches/002.oauth.sql index bacd1872a6..24cce576a0 100644 --- a/resources/sql/patches/002.oauth.sql +++ b/resources/sql/patches/002.oauth.sql @@ -1,8 +1,8 @@ create table {$NAMESPACE}_user.user_oauthinfo ( id int unsigned not null auto_increment primary key, userID int unsigned not null, - oauthProvider varchar(255) not null, - oauthUID varchar(255) not null, + oauthProvider varchar(255) COLLATE `binary` not null, + oauthUID varchar(255) COLLATE `binary` not null, unique key (userID, oauthProvider), unique key (oauthProvider, oauthUID), dateCreated int unsigned not null, @@ -15,4 +15,4 @@ insert into {$NAMESPACE}_user.user_oauthinfo FROM {$NAMESPACE}_user.user WHERE facebookUID is not null; -alter table {$NAMESPACE}_user.user drop facebookUID; \ No newline at end of file +alter table {$NAMESPACE}_user.user drop facebookUID; diff --git a/resources/sql/patches/004.daemonrepos.sql b/resources/sql/patches/004.daemonrepos.sql index f3e472bc4b..9e46210ca3 100644 --- a/resources/sql/patches/004.daemonrepos.sql +++ b/resources/sql/patches/004.daemonrepos.sql @@ -23,6 +23,6 @@ create table {$NAMESPACE}_timeline.timeline_eventdata ( ); create table {$NAMESPACE}_timeline.timeline_cursor ( - name varchar(255) not null primary key, + name varchar(255) COLLATE `binary` not null primary key, position int unsigned not null -); \ No newline at end of file +); diff --git a/resources/sql/patches/005.workers.sql b/resources/sql/patches/005.workers.sql index 29d402f20f..08b116dc85 100644 --- a/resources/sql/patches/005.workers.sql +++ b/resources/sql/patches/005.workers.sql @@ -1,5 +1,3 @@ - - create table {$NAMESPACE}_worker.worker_task ( id int unsigned not null auto_increment primary key, taskClass varchar(255) not null, @@ -7,8 +5,8 @@ create table {$NAMESPACE}_worker.worker_task ( leaseExpires int unsigned, priority bigint unsigned not null, failureCount int unsigned not null, - key(taskClass), - key(leaseOwner), + key(taskClass(128)), + key(leaseOwner(128)), key(leaseExpires) ); diff --git a/resources/sql/patches/006.repository.sql b/resources/sql/patches/006.repository.sql index b391925d11..7f79867b50 100644 --- a/resources/sql/patches/006.repository.sql +++ b/resources/sql/patches/006.repository.sql @@ -4,7 +4,7 @@ create table {$NAMESPACE}_repository.repository_commitdata ( authorName varchar(255) not null, commitMessage longblob not null, unique key (commitID), - key (authorName) + key (authorName(128)) ); ALTER TABLE {$NAMESPACE}_worker.worker_task drop priority; diff --git a/resources/sql/patches/007.daemonlog.sql b/resources/sql/patches/007.daemonlog.sql index 15529ee848..ce1daee490 100644 --- a/resources/sql/patches/007.daemonlog.sql +++ b/resources/sql/patches/007.daemonlog.sql @@ -1,5 +1,3 @@ - - create table {$NAMESPACE}_daemon.daemon_log ( id int unsigned not null auto_increment primary key, daemon varchar(255) not null, diff --git a/resources/sql/patches/009.repo_summary.sql b/resources/sql/patches/009.repo_summary.sql index c5ab4e3021..0509b68d80 100644 --- a/resources/sql/patches/009.repo_summary.sql +++ b/resources/sql/patches/009.repo_summary.sql @@ -4,4 +4,4 @@ CREATE TABLE {$NAMESPACE}_repository.`repository_summary` ( `lastCommitID` int(10) unsigned NOT NULL, `epoch` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`repositoryID`) -); \ No newline at end of file +); diff --git a/resources/sql/patches/010.herald.sql b/resources/sql/patches/010.herald.sql index 59deb29485..1a28ce262e 100644 --- a/resources/sql/patches/010.herald.sql +++ b/resources/sql/patches/010.herald.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_herald.herald_action ( id int unsigned not null auto_increment primary key, ruleID int unsigned not null, @@ -9,7 +7,7 @@ CREATE TABLE {$NAMESPACE}_herald.herald_action ( CREATE TABLE {$NAMESPACE}_herald.herald_rule ( id int unsigned not null auto_increment primary key, - name varchar(255) not null, + name varchar(255) COLLATE `binary` not null, authorPHID varchar(64) binary not null, contentType varchar(255) not null, mustMatchAll bool not null, diff --git a/resources/sql/patches/011.badcommit.sql b/resources/sql/patches/011.badcommit.sql index 76a8255417..a9c0853126 100644 --- a/resources/sql/patches/011.badcommit.sql +++ b/resources/sql/patches/011.badcommit.sql @@ -1,4 +1,4 @@ CREATE TABLE {$NAMESPACE}_repository.repository_badcommit ( - fullCommitName varchar(255) binary not null primary key, + fullCommitName varchar(255) COLLATE `binary` not null primary key, description longblob not null -); \ No newline at end of file +); diff --git a/resources/sql/patches/012.dropphidtype.sql b/resources/sql/patches/012.dropphidtype.sql index 340a64fccb..53e0e1e937 100644 --- a/resources/sql/patches/012.dropphidtype.sql +++ b/resources/sql/patches/012.dropphidtype.sql @@ -1 +1 @@ -/* This database was later removed entirely. */ \ No newline at end of file +/* This database was later removed entirely. */ diff --git a/resources/sql/patches/016.userrealnameindex.sql b/resources/sql/patches/016.userrealnameindex.sql index 616f062869..58f1235b9c 100644 --- a/resources/sql/patches/016.userrealnameindex.sql +++ b/resources/sql/patches/016.userrealnameindex.sql @@ -1 +1 @@ -ALTER TABLE {$NAMESPACE}_user.user ADD key (realName); \ No newline at end of file +ALTER TABLE {$NAMESPACE}_user.user ADD key (realName); diff --git a/resources/sql/patches/018.owners.sql b/resources/sql/patches/018.owners.sql index c5fe3b9251..de7dde64d0 100644 --- a/resources/sql/patches/018.owners.sql +++ b/resources/sql/patches/018.owners.sql @@ -1,10 +1,8 @@ - - CREATE TABLE {$NAMESPACE}_owners.owners_package ( id int unsigned not null auto_increment primary key, phid varchar(64) binary not null, unique key(phid), - name varchar(255) not null, + name varchar(255) COLLATE `binary` not null, unique key(name), description text not null, primaryOwnerPHID varchar(64) binary diff --git a/resources/sql/patches/019.arcprojects.sql b/resources/sql/patches/019.arcprojects.sql index e6e0405268..ac3ab8828a 100644 --- a/resources/sql/patches/019.arcprojects.sql +++ b/resources/sql/patches/019.arcprojects.sql @@ -2,7 +2,7 @@ CREATE TABLE {$NAMESPACE}_repository.repository_arcanistproject ( id int unsigned not null auto_increment primary key, phid varchar(64) binary not null, unique key(phid), - name varchar(255) not null, + name varchar(255) COLLATE `binary` not null, unique key (name), repositoryID int unsigned ); diff --git a/resources/sql/patches/020.pathcapital.sql b/resources/sql/patches/020.pathcapital.sql index 7c825ca5fb..fd4ffd6672 100644 --- a/resources/sql/patches/020.pathcapital.sql +++ b/resources/sql/patches/020.pathcapital.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_differential.differential_diff - CHANGE sourceControlpath sourceControlPath varchar(255); \ No newline at end of file + CHANGE sourceControlpath sourceControlPath varchar(255); diff --git a/resources/sql/patches/021.xhpastview.sql b/resources/sql/patches/021.xhpastview.sql index bb517ed949..875fe0636d 100644 --- a/resources/sql/patches/021.xhpastview.sql +++ b/resources/sql/patches/021.xhpastview.sql @@ -1,4 +1,3 @@ - CREATE TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree ( id int unsigned not null auto_increment primary key, authorPHID varchar(64) binary, diff --git a/resources/sql/patches/024.mlistkeys.sql b/resources/sql/patches/024.mlistkeys.sql index 4ccf515d35..1063584dd5 100644 --- a/resources/sql/patches/024.mlistkeys.sql +++ b/resources/sql/patches/024.mlistkeys.sql @@ -3,4 +3,3 @@ ALTER TABLE {$NAMESPACE}_metamta.metamta_mailinglist ALTER TABLE {$NAMESPACE}_metamta.metamta_mailinglist ADD UNIQUE KEY (name); - diff --git a/resources/sql/patches/025.commentopt.sql b/resources/sql/patches/025.commentopt.sql index 2c0ee9cd76..0892515aa3 100644 --- a/resources/sql/patches/025.commentopt.sql +++ b/resources/sql/patches/025.commentopt.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_differential.differential_inlinecomment - ADD KEY (revisionID, authorPHID); \ No newline at end of file + ADD KEY (revisionID, authorPHID); diff --git a/resources/sql/patches/026.diffpropkey.sql b/resources/sql/patches/026.diffpropkey.sql index c4d3fb7ce5..40bb69aa94 100644 --- a/resources/sql/patches/026.diffpropkey.sql +++ b/resources/sql/patches/026.diffpropkey.sql @@ -1,3 +1,2 @@ ALTER TABLE {$NAMESPACE}_differential.differential_diffproperty ADD UNIQUE KEY (diffID, name); - diff --git a/resources/sql/patches/028.systemagent.sql b/resources/sql/patches/028.systemagent.sql index bce57aa443..e8e23618cc 100644 --- a/resources/sql/patches/028.systemagent.sql +++ b/resources/sql/patches/028.systemagent.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_user.user - ADD isSystemAgent bool not null default 0; \ No newline at end of file + ADD isSystemAgent bool not null default 0; diff --git a/resources/sql/patches/034.savedheader.sql b/resources/sql/patches/034.savedheader.sql index d7425a5c3d..cb626f20f2 100644 --- a/resources/sql/patches/034.savedheader.sql +++ b/resources/sql/patches/034.savedheader.sql @@ -1,4 +1,4 @@ CREATE TABLE {$NAMESPACE}_herald.herald_savedheader ( phid varchar(64) binary not null primary key, header varchar(255) not null -) ENGINE=InnoDB; \ No newline at end of file +) ENGINE=InnoDB; diff --git a/resources/sql/patches/035.proxyimage.sql b/resources/sql/patches/035.proxyimage.sql index 78564aa43d..425506bcf4 100644 --- a/resources/sql/patches/035.proxyimage.sql +++ b/resources/sql/patches/035.proxyimage.sql @@ -1,6 +1,6 @@ CREATE TABLE {$NAMESPACE}_file.file_proxyimage ( id int unsigned not null primary key auto_increment, - uri varchar(255) binary not null, + uri varchar(255) COLLATE `binary` not null, unique key(uri), filePHID varchar(64) binary not null ) ENGINE=InnoDB; diff --git a/resources/sql/patches/036.mailkey.sql b/resources/sql/patches/036.mailkey.sql index 6edf512a71..06e05ec64a 100644 --- a/resources/sql/patches/036.mailkey.sql +++ b/resources/sql/patches/036.mailkey.sql @@ -16,4 +16,4 @@ CREATE TABLE {$NAMESPACE}_metamta.metamta_receivedmail ( message longblob, dateCreated int unsigned not null, dateModified int unsigned not null -) engine=innodb; \ No newline at end of file +) engine=innodb; diff --git a/resources/sql/patches/040.transform.sql b/resources/sql/patches/040.transform.sql index 0f35801d43..bb47b810a1 100644 --- a/resources/sql/patches/040.transform.sql +++ b/resources/sql/patches/040.transform.sql @@ -1,7 +1,7 @@ CREATE TABLE {$NAMESPACE}_file.file_transformedfile ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - originalPHID varchar(64) BINARY NOT NULL, - transform varchar(255) BINARY NOT NULL, + originalPHID varchar(64) COLLATE `binary` NOT NULL, + transform varchar(255) COLLATE `binary` NOT NULL, unique key (originalPHID, transform), transformedPHID varchar(64) BINARY NOT NULL, key (transformedPHID), diff --git a/resources/sql/patches/043.pastebin.sql b/resources/sql/patches/043.pastebin.sql index 5e62159474..7d4de868cb 100644 --- a/resources/sql/patches/043.pastebin.sql +++ b/resources/sql/patches/043.pastebin.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_pastebin.pastebin_paste ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, diff --git a/resources/sql/patches/044.countdown.sql b/resources/sql/patches/044.countdown.sql index 540ab236d0..e25bb876b2 100644 --- a/resources/sql/patches/044.countdown.sql +++ b/resources/sql/patches/044.countdown.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_countdown.countdown_timer ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, title VARCHAR(255) NOT NULL, diff --git a/resources/sql/patches/047.projectstatus.sql b/resources/sql/patches/047.projectstatus.sql index 56a19a4a98..b0e563cf77 100644 --- a/resources/sql/patches/047.projectstatus.sql +++ b/resources/sql/patches/047.projectstatus.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_project.project - ADD status varchar(32) not null; \ No newline at end of file + ADD status varchar(32) not null; diff --git a/resources/sql/patches/049.projectowner.sql b/resources/sql/patches/049.projectowner.sql index 98bf55bf57..894166b13a 100644 --- a/resources/sql/patches/049.projectowner.sql +++ b/resources/sql/patches/049.projectowner.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_project.project_affiliation - ADD isOwner bool NOT NULL; \ No newline at end of file + ADD isOwner bool NOT NULL; diff --git a/resources/sql/patches/052.pastelanguage.sql b/resources/sql/patches/052.pastelanguage.sql index 1bfdac0b1f..b517f2dd80 100644 --- a/resources/sql/patches/052.pastelanguage.sql +++ b/resources/sql/patches/052.pastelanguage.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste - ADD COLUMN language VARCHAR(64) NOT NULL; \ No newline at end of file + ADD COLUMN language VARCHAR(64) NOT NULL; diff --git a/resources/sql/patches/053.feed.sql b/resources/sql/patches/053.feed.sql index 96ae6ed0f7..46ad0b4042 100644 --- a/resources/sql/patches/053.feed.sql +++ b/resources/sql/patches/053.feed.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_feed.feed_storydata ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, phid VARCHAR(64) BINARY NOT NULL, diff --git a/resources/sql/patches/055.add_author_to_files.sql b/resources/sql/patches/055.add_author_to_files.sql index b43a1c01d9..5c0f541c57 100644 --- a/resources/sql/patches/055.add_author_to_files.sql +++ b/resources/sql/patches/055.add_author_to_files.sql @@ -1,3 +1,3 @@ ALTER TABLE {$NAMESPACE}_file.file ADD COLUMN authorPHID VARCHAR(64) BINARY, - ADD KEY (authorPHID); \ No newline at end of file + ADD KEY (authorPHID); diff --git a/resources/sql/patches/056.slowvote.sql b/resources/sql/patches/056.slowvote.sql index 8a2912bd47..1d9064118d 100644 --- a/resources/sql/patches/056.slowvote.sql +++ b/resources/sql/patches/056.slowvote.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_slowvote.slowvote_poll ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, question VARCHAR(255) NOT NULL, @@ -41,4 +39,4 @@ CREATE TABLE {$NAMESPACE}_slowvote.slowvote_choice ( KEY (authorPHID), dateCreated INT UNSIGNED NOT NULL, dateModified INT UNSIGNED NOT NULL -); \ No newline at end of file +); diff --git a/resources/sql/patches/057.parsecache.sql b/resources/sql/patches/057.parsecache.sql index 796fa4592d..5254e3e6e1 100644 --- a/resources/sql/patches/057.parsecache.sql +++ b/resources/sql/patches/057.parsecache.sql @@ -4,4 +4,4 @@ ALTER TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache ADD dateCreated INT UNSIGNED NOT NULL; ALTER TABLE {$NAMESPACE}_differential.differential_changeset_parse_cache - ADD KEY (dateCreated); \ No newline at end of file + ADD KEY (dateCreated); diff --git a/resources/sql/patches/058.missingkeys.sql b/resources/sql/patches/058.missingkeys.sql index 51d2e10aa2..dbb7f8404d 100644 --- a/resources/sql/patches/058.missingkeys.sql +++ b/resources/sql/patches/058.missingkeys.sql @@ -8,4 +8,4 @@ ALTER TABLE {$NAMESPACE}_herald.herald_condition ADD KEY (ruleID); ALTER TABLE {$NAMESPACE}_herald.herald_action - ADD KEY (ruleID); \ No newline at end of file + ADD KEY (ruleID); diff --git a/resources/sql/patches/059.engines.php b/resources/sql/patches/059.engines.php index abcf2e170b..96e28b7a31 100644 --- a/resources/sql/patches/059.engines.php +++ b/resources/sql/patches/059.engines.php @@ -1,21 +1,5 @@ openTransaction(); +$table->beginReadLocking(); -echo "Indexing username tokens for typeaheads...\n"; - -$users = id(new PhabricatorUser())->loadAll(); -echo count($users)." users to index"; +$users = $table->loadAll(); +echo pht('%d users to index', count($users)); foreach ($users as $user) { $user->updateNameTokens(); - echo "."; + echo '.'; } -echo "\nDone.\n"; +$table->endReadLocking(); +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/080.filekeys.sql b/resources/sql/patches/080.filekeys.sql index 2d8a35a02f..31e559012a 100644 --- a/resources/sql/patches/080.filekeys.sql +++ b/resources/sql/patches/080.filekeys.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_file.file - ADD secretKey VARCHAR(20) BINARY; \ No newline at end of file + ADD secretKey VARCHAR(20) BINARY; diff --git a/resources/sql/patches/081.filekeys.php b/resources/sql/patches/081.filekeys.php index 5feb300d3c..c129e80918 100644 --- a/resources/sql/patches/081.filekeys.php +++ b/resources/sql/patches/081.filekeys.php @@ -1,31 +1,22 @@ openTransaction(); +$table->beginReadLocking(); -echo "Generating file keys...\n"; -$files = id(new PhabricatorFile())->loadAllWhere('secretKey IS NULL'); -echo count($files).' files to generate keys for'; +$files = $table->loadAllWhere('secretKey IS NULL'); +echo pht('%d files to generate keys for', count($files)); foreach ($files as $file) { queryfx( - $file->establishConnection('r'), + $file->establishConnection('w'), 'UPDATE %T SET secretKey = %s WHERE id = %d', $file->getTableName(), $file->generateSecretKey(), $file->getID()); echo '.'; } -echo "\nDone.\n"; + +$table->endReadLocking(); +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/086.formeraffil.sql b/resources/sql/patches/086.formeraffil.sql index 2394a10aa9..b2f44a5b65 100644 --- a/resources/sql/patches/086.formeraffil.sql +++ b/resources/sql/patches/086.formeraffil.sql @@ -1 +1 @@ -ALTER TABLE {$NAMESPACE}_project.project_affiliation DROP status; \ No newline at end of file +ALTER TABLE {$NAMESPACE}_project.project_affiliation DROP status; diff --git a/resources/sql/patches/087.phrictiondelete.sql b/resources/sql/patches/087.phrictiondelete.sql index b07c5358ff..384960bc87 100644 --- a/resources/sql/patches/087.phrictiondelete.sql +++ b/resources/sql/patches/087.phrictiondelete.sql @@ -5,4 +5,4 @@ ALTER TABLE {$NAMESPACE}_phriction.phriction_content ADD changeType INT UNSIGNED NOT NULL DEFAULT 0; ALTER TABLE {$NAMESPACE}_phriction.phriction_content - ADD changeRef INT UNSIGNED DEFAULT NULL; \ No newline at end of file + ADD changeRef INT UNSIGNED DEFAULT NULL; diff --git a/resources/sql/patches/088.audit.sql b/resources/sql/patches/088.audit.sql index ea93e1c928..63ace7f88c 100644 --- a/resources/sql/patches/088.audit.sql +++ b/resources/sql/patches/088.audit.sql @@ -1,5 +1,3 @@ - - ALTER TABLE {$NAMESPACE}_owners.owners_packagecommitrelationship ADD COLUMN `auditStatus` varchar(64) NOT NULL, ADD COLUMN `auditReasons` longtext NOT NULL, diff --git a/resources/sql/patches/090.forceuniqueprojectnames.php b/resources/sql/patches/090.forceuniqueprojectnames.php index ba62c65d76..486856c1c3 100644 --- a/resources/sql/patches/090.forceuniqueprojectnames.php +++ b/resources/sql/patches/090.forceuniqueprojectnames.php @@ -1,34 +1,23 @@ openTransaction(); +$table->beginReadLocking(); -echo "Ensuring project names are unique enough...\n"; -$projects = id(new PhabricatorProject())->loadAll(); +$projects = $table->loadAll(); $slug_map = array(); foreach ($projects as $project) { - $project->setPhrictionSlug($project->getName()); - $slug = $project->getPhrictionSlug(); - if ($slug == '/') { + $slug = PhabricatorSlug::normalizeProjectSlug($project->getName()); + + if (!strlen($slug)) { $project_id = $project->getID(); - echo "Project #{$project_id} doesn't have a meaningful name...\n"; - $project->setName(trim('Unnamed Project '.$project->getName())); + echo pht("Project #%d doesn't have a meaningful name...", $project_id)."\n"; + $project->setName(trim(pht('Unnamed Project %s', $project->getName()))); } + $slug_map[$slug][] = $project->getID(); } @@ -37,15 +26,18 @@ if (count($similar) <= 1) { continue; } - echo "Too many projects are similar to '{$slug}'...\n"; + echo pht("Too many projects are similar to '%s'...", $slug)."\n"; foreach (array_slice($similar, 1, null, true) as $key => $project_id) { $project = $projects[$project_id]; $old_name = $project->getName(); $new_name = rename_project($project, $projects); - echo "Renaming project #{$project_id} ". - "from '{$old_name}' to '{$new_name}'.\n"; + echo pht( + "Renaming project #%d from '%s' to '%s'.\n", + $project_id, + $old_name, + $new_name); $project->setName($new_name); } } @@ -56,10 +48,10 @@ foreach ($update as $key => $project) { $id = $project->getID(); $name = $project->getName(); - $project->setPhrictionSlug($name); - $slug = $project->getPhrictionSlug(); - echo "Updating project #{$id} '{$name}' ({$slug})..."; + $slug = PhabricatorSlug::normalizeProjectSlug($name).'/'; + + echo pht("Updating project #%d '%s' (%s)... ", $id, $name, $slug); try { queryfx( $project->establishConnection('w'), @@ -69,20 +61,23 @@ $slug, $project->getID()); unset($update[$key]); - echo "okay.\n"; - } catch (AphrontQueryDuplicateKeyException $ex) { - echo "failed, will retry.\n"; + echo pht('OKAY')."\n"; + } catch (AphrontDuplicateKeyQueryException $ex) { + echo pht('Failed, will retry.')."\n"; } } if (count($update) == $size) { throw new Exception( - "Failed to make any progress while updating projects. Schema upgrade ". - "has failed. Go manually fix your project names to be unique (they are ". - "probably ridiculous?) and then try again."); + pht( + 'Failed to make any progress while updating projects. Schema upgrade '. + 'has failed. Go manually fix your project names to be unique '. + '(they are probably ridiculous?) and then try again.')); } } -echo "Done.\n"; +$table->endReadLocking(); +$table->saveTransaction(); +echo pht('Done.')."\n"; /** @@ -93,15 +88,17 @@ function rename_project($project, $projects) { $suffix = 2; while (true) { $new_name = $project->getName().' ('.$suffix.')'; - $project->setPhrictionSlug($new_name); - $new_slug = $project->getPhrictionSlug(); + + $new_slug = PhabricatorSlug::normalizeProjectSlug($new_name).'/'; $okay = true; foreach ($projects as $other) { if ($other->getID() == $project->getID()) { continue; } - if ($other->getPhrictionSlug() == $new_slug) { + + $other_slug = PhabricatorSlug::normalizeProjectSlug($other->getName()); + if ($other_slug == $new_slug) { $okay = false; break; } diff --git a/resources/sql/patches/092.dropgithubnotification.sql b/resources/sql/patches/092.dropgithubnotification.sql index 9fcfa76629..95a24fa6b8 100644 --- a/resources/sql/patches/092.dropgithubnotification.sql +++ b/resources/sql/patches/092.dropgithubnotification.sql @@ -1 +1 @@ -DROP TABLE {$NAMESPACE}_repository.repository_githubnotification; \ No newline at end of file +DROP TABLE {$NAMESPACE}_repository.repository_githubnotification; diff --git a/resources/sql/patches/093.gitremotes.php b/resources/sql/patches/093.gitremotes.php index d483cdc972..5817919e24 100644 --- a/resources/sql/patches/093.gitremotes.php +++ b/resources/sql/patches/093.gitremotes.php @@ -1,29 +1,14 @@ openTransaction(); $conn_w = $table->establishConnection('w'); $repos = queryfx_all( $conn_w, - 'SELECT id, name, details FROM %T WHERE versionControlSystem = %s', + 'SELECT id, name, details FROM %T WHERE versionControlSystem = %s FOR UPDATE', $table->getTableName(), 'git'); @@ -45,8 +30,13 @@ $id = $repo['id']; $name = $repo['name']; - echo "Updating default branch for repository #{$id} '{$name}' from ". - "'{$old}' to '{$new}' to remove the explicit remote.\n"; + echo pht( + "Updating default branch for repository #%d '%s' from ". + "'%s' to '%s' to remove the explicit remote.\n", + $id, + $name, + $old, + $new); queryfx( $conn_w, 'UPDATE %T SET details = %s WHERE id = %d', @@ -55,4 +45,5 @@ $id); } -echo "Done.\n"; +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/095.directory.sql b/resources/sql/patches/095.directory.sql index 4623688e52..9db23c5475 100644 --- a/resources/sql/patches/095.directory.sql +++ b/resources/sql/patches/095.directory.sql @@ -1 +1 @@ -/* This used to be a "directory" update. */; \ No newline at end of file +/* This used to be a "directory" update. */; diff --git a/resources/sql/patches/097.heraldruletypes.sql b/resources/sql/patches/097.heraldruletypes.sql index b975403737..a38fb99423 100644 --- a/resources/sql/patches/097.heraldruletypes.sql +++ b/resources/sql/patches/097.heraldruletypes.sql @@ -1,2 +1,2 @@ ALTER TABLE {$NAMESPACE}_herald.herald_rule ADD ruleType varchar(255) not null DEFAULT 'global'; -CREATE INDEX IDX_RULE_TYPE on {$NAMESPACE}_herald.herald_rule (ruleType); \ No newline at end of file +CREATE INDEX IDX_RULE_TYPE on {$NAMESPACE}_herald.herald_rule (ruleType(128)); diff --git a/resources/sql/patches/098.heraldruletypemigration.php b/resources/sql/patches/098.heraldruletypemigration.php index 1ce2bc1cb4..896f2353f3 100644 --- a/resources/sql/patches/098.heraldruletypemigration.php +++ b/resources/sql/patches/098.heraldruletypemigration.php @@ -1,24 +1,11 @@ openTransaction(); +$table->beginReadLocking(); -echo "Checking for rules that can be converted to 'personal'. "; - -$rules = id(new HeraldRule())->loadAll(); +$rules = $table->loadAll(); foreach ($rules as $rule) { if ($rule->getRuleType() !== HeraldRuleTypeConfig::RULE_TYPE_PERSONAL) { @@ -54,9 +41,11 @@ $rule->getRuleType(), $rule->getID()); - echo "Setting rule '" . $rule->getName() . "' to personal. "; + echo pht("Setting rule '%s' to personal.", $rule->getName())."\n"; } } } -echo "Done. "; +$table->endReadLocking(); +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/099.drydock.sql b/resources/sql/patches/099.drydock.sql index 87187f8bf7..74ae726a25 100644 --- a/resources/sql/patches/099.drydock.sql +++ b/resources/sql/patches/099.drydock.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_drydock.drydock_resource ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, phid VARCHAR(64) BINARY NOT NULL, diff --git a/resources/sql/patches/102.heraldcleanup.php b/resources/sql/patches/102.heraldcleanup.php index 64b57a3e14..f7f58131ea 100644 --- a/resources/sql/patches/102.heraldcleanup.php +++ b/resources/sql/patches/102.heraldcleanup.php @@ -1,51 +1,8 @@ loadAll(); -foreach ($rules as $key => $rule) { - $first_policy = HeraldRepetitionPolicyConfig::toInt( - HeraldRepetitionPolicyConfig::FIRST); - if ($rule->getRepetitionPolicy() != $first_policy) { - unset($rules[$key]); - } -} - -$conn_w = id(new HeraldRule())->establishConnection('w'); - -$clause = ''; -if ($rules) { - $clause = qsprintf( - $conn_w, - 'WHERE ruleID NOT IN (%Ld)', - mpull($rules, 'getID')); -} - -echo "This may take a moment"; -do { - queryfx( - $conn_w, - 'DELETE FROM %T %Q LIMIT 1000', - HeraldRule::TABLE_RULE_APPLIED, - $clause); - echo "."; -} while ($conn_w->getAffectedRows()); - -echo "\n"; -echo "Done.\n"; +// The migration was removed in January 2018 to make maintenance on rule +// repetition policies easier. diff --git a/resources/sql/patches/106.chatlog.sql b/resources/sql/patches/106.chatlog.sql index 419420f410..bbb9be945e 100644 --- a/resources/sql/patches/106.chatlog.sql +++ b/resources/sql/patches/106.chatlog.sql @@ -1,4 +1,3 @@ - CREATE TABLE {$NAMESPACE}_chatlog.chatlog_event ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, channel VARCHAR(64) BINARY NOT NULL, diff --git a/resources/sql/patches/107.oauthserver.sql b/resources/sql/patches/107.oauthserver.sql index c2f1ae92cc..2865535af1 100644 --- a/resources/sql/patches/107.oauthserver.sql +++ b/resources/sql/patches/107.oauthserver.sql @@ -1,5 +1,3 @@ - - CREATE TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthserverclient` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varchar(64) BINARY NOT NULL, @@ -48,4 +46,3 @@ CREATE TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthserveraccesstoken` ( PRIMARY KEY (`id`), UNIQUE KEY `token` (`token`) ) ENGINE=InnoDB; - diff --git a/resources/sql/patches/108.oauthscope.sql b/resources/sql/patches/108.oauthscope.sql index f17a296956..e7d8155572 100644 --- a/resources/sql/patches/108.oauthscope.sql +++ b/resources/sql/patches/108.oauthscope.sql @@ -3,4 +3,3 @@ ALTER TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthclientauthorization` ALTER TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthserveraccesstoken` DROP `dateExpires`; - diff --git a/resources/sql/patches/109.oauthclientphidkey.sql b/resources/sql/patches/109.oauthclientphidkey.sql index 5570043612..90ea7f4288 100644 --- a/resources/sql/patches/109.oauthclientphidkey.sql +++ b/resources/sql/patches/109.oauthclientphidkey.sql @@ -1,3 +1,2 @@ ALTER TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthserverclient` ADD KEY `creatorPHID` (`creatorPHID`) - diff --git a/resources/sql/patches/110.commitaudit.sql b/resources/sql/patches/110.commitaudit.sql index 4fffa055a8..9c051ee1ca 100644 --- a/resources/sql/patches/110.commitaudit.sql +++ b/resources/sql/patches/110.commitaudit.sql @@ -8,4 +8,4 @@ ALTER TABLE {$NAMESPACE}_repository.repository_commit ADD auditStatus INT UNSIGNED NOT NULL; ALTER TABLE {$NAMESPACE}_repository.repository_commit - ADD KEY (authorPHID, auditStatus, epoch); \ No newline at end of file + ADD KEY (authorPHID, auditStatus, epoch); diff --git a/resources/sql/patches/111.commitauditmigration.php b/resources/sql/patches/111.commitauditmigration.php index c89702f808..935317b577 100644 --- a/resources/sql/patches/111.commitauditmigration.php +++ b/resources/sql/patches/111.commitauditmigration.php @@ -1,31 +1,17 @@ openTransaction(); + $conn = $table->establishConnection('w'); $data = new PhabricatorRepositoryCommitData(); $commits = queryfx_all( $conn, 'SELECT c.id id, c.authorPHID authorPHID, d.commitDetails details FROM %T c JOIN %T d ON d.commitID = c.id - WHERE c.authorPHID IS NULL', + WHERE c.authorPHID IS NULL + FOR UPDATE', $table->getTableName(), $data->getTableName()); @@ -44,16 +30,16 @@ } } -echo "Done.\n"; +$table->saveTransaction(); +echo pht('Done.')."\n"; -echo "Updating old commit mailKeys...\n"; +echo pht('Updating old commit %s...', 'mailKeys')."\n"; +$table->openTransaction(); -$table = new PhabricatorRepositoryCommit(); -$conn = $table->establishConnection('w'); $commits = queryfx_all( $conn, - 'SELECT id FROM %T WHERE mailKey = %s', + 'SELECT id FROM %T WHERE mailKey = %s FOR UPDATE', $table->getTableName(), ''); @@ -68,4 +54,5 @@ echo "#{$id}\n"; } -echo "Done.\n"; +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/112.oauthaccesscoderedirecturi.sql b/resources/sql/patches/112.oauthaccesscoderedirecturi.sql index 6131d63aca..56f258453e 100644 --- a/resources/sql/patches/112.oauthaccesscoderedirecturi.sql +++ b/resources/sql/patches/112.oauthaccesscoderedirecturi.sql @@ -1,3 +1,2 @@ ALTER TABLE `{$NAMESPACE}_oauth_server`.`oauth_server_oauthserverauthorizationcode` ADD `redirectURI` varchar(255) NOT NULL - diff --git a/resources/sql/patches/116.utf8-backup-first-expect-wait.sql b/resources/sql/patches/116.utf8-backup-first-expect-wait.sql index 7d463b6dc4..eda5573641 100644 --- a/resources/sql/patches/116.utf8-backup-first-expect-wait.sql +++ b/resources/sql/patches/116.utf8-backup-first-expect-wait.sql @@ -1123,6 +1123,3 @@ ALTER TABLE `{$NAMESPACE}_xhpastview`.`xhpastview_parsetree` MODIFY `authorPHID` varchar(64) COLLATE utf8_bin, MODIFY `input` longtext COLLATE utf8_bin NOT NULL, MODIFY `stdout` longtext COLLATE utf8_bin NOT NULL; - - - diff --git a/resources/sql/patches/117.repositorydescription.php b/resources/sql/patches/117.repositorydescription.php index 285eb0c0c2..692a783358 100644 --- a/resources/sql/patches/117.repositorydescription.php +++ b/resources/sql/patches/117.repositorydescription.php @@ -1,22 +1,6 @@ establishConnection('w'); if (queryfx_one($conn, "SHOW COLUMNS FROM `repository` LIKE 'description'")) { - queryfx($conn, "ALTER TABLE `repository` DROP `description`"); + queryfx($conn, 'ALTER TABLE `repository` DROP `description`'); } diff --git a/resources/sql/patches/120.noop.sql b/resources/sql/patches/120.noop.sql index b730eaa0d3..a8ab6db8fd 100644 --- a/resources/sql/patches/120.noop.sql +++ b/resources/sql/patches/120.noop.sql @@ -1,2 +1,2 @@ /* Do nothing, patch 121 got committed before there was a patch 120. */ -SELECT 1; \ No newline at end of file +SELECT 1; diff --git a/resources/sql/patches/122.flag.sql b/resources/sql/patches/122.flag.sql index 6b666a6855..7f66669930 100644 --- a/resources/sql/patches/122.flag.sql +++ b/resources/sql/patches/122.flag.sql @@ -1,5 +1,3 @@ - - CREATE TABLE {$NAMESPACE}_flag.flag ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ownerPHID varchar(64) COLLATE utf8_bin NOT NULL, @@ -13,4 +11,4 @@ CREATE TABLE {$NAMESPACE}_flag.flag ( UNIQUE KEY (ownerPHID, type, objectPHID), KEY (objectPHID) -) ENGINE=InnoDB; \ No newline at end of file +) ENGINE=InnoDB; diff --git a/resources/sql/patches/124.subpriority.sql b/resources/sql/patches/124.subpriority.sql index 2133b6e574..cd826a1efc 100644 --- a/resources/sql/patches/124.subpriority.sql +++ b/resources/sql/patches/124.subpriority.sql @@ -7,5 +7,3 @@ ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task /* Seed the subpriority column with reasonable values that keep order stable. */ UPDATE {$NAMESPACE}_maniphest.maniphest_task SET subpriority = (UNIX_TIMESTAMP() - dateModified); - - diff --git a/resources/sql/patches/128.phabricatorcom.sql b/resources/sql/patches/128.phabricatorcom.sql index 4623688e52..9db23c5475 100644 --- a/resources/sql/patches/128.phabricatorcom.sql +++ b/resources/sql/patches/128.phabricatorcom.sql @@ -1 +1 @@ -/* This used to be a "directory" update. */; \ No newline at end of file +/* This used to be a "directory" update. */; diff --git a/resources/sql/patches/131.migraterevisionquery.php b/resources/sql/patches/131.migraterevisionquery.php index 2876047552..c3f97a04a5 100644 --- a/resources/sql/patches/131.migraterevisionquery.php +++ b/resources/sql/patches/131.migraterevisionquery.php @@ -1,47 +1,3 @@ establishConnection('w'); - -echo "Migrating revisions"; -do { - $revisions = id(new DifferentialRevision()) - ->loadAllWhere('branchName IS NULL LIMIT 1000'); - - foreach ($revisions as $revision) { - echo "."; - - $diff = $revision->loadActiveDiff(); - if (!$diff) { - continue; - } - - $branch_name = $diff->getBranch(); - $arc_project_phid = $diff->getArcanistProjectPHID(); - - queryfx( - $conn_w, - 'UPDATE %T SET branchName = %s, arcanistProjectPHID = %s WHERE id = %d', - $table->getTableName(), - $branch_name, - $arc_project_phid, - $revision->getID()); - } -} while (count($revisions) == 1000); -echo "\nDone.\n"; +// This migration has been dropped, see T7604 for details. diff --git a/resources/sql/patches/132.phame.sql b/resources/sql/patches/132.phame.sql index e56de6fe91..be513ea050 100644 --- a/resources/sql/patches/132.phame.sql +++ b/resources/sql/patches/132.phame.sql @@ -1,5 +1,3 @@ - - CREATE TABLE `{$NAMESPACE}_phame`.`phame_post` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `phid` VARCHAR(64) BINARY NOT NULL COLLATE utf8_bin, diff --git a/resources/sql/patches/133.imagemacro.sql b/resources/sql/patches/133.imagemacro.sql index 01852c6b48..1477fd879f 100644 --- a/resources/sql/patches/133.imagemacro.sql +++ b/resources/sql/patches/133.imagemacro.sql @@ -1,2 +1,2 @@ -ALTER IGNORE TABLE `{$NAMESPACE}_file`.`file_imagemacro` - ADD UNIQUE `name` (`name`); +ALTER TABLE `{$NAMESPACE}_file`.`file_imagemacro` + ADD UNIQUE KEY `name` (`name`); diff --git a/resources/sql/patches/20121209.pholioxactions.sql b/resources/sql/patches/20121209.pholioxactions.sql new file mode 100644 index 0000000000..ab302801ba --- /dev/null +++ b/resources/sql/patches/20121209.pholioxactions.sql @@ -0,0 +1,50 @@ +DROP TABLE {$NAMESPACE}_pholio.pholio_transaction; +DROP TABLE {$NAMESPACE}_pholio.pholio_pixelcomment; + +CREATE TABLE {$NAMESPACE}_pholio.pholio_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.pholio_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + mockID INT UNSIGNED, + imageID INT UNSIGNED, + x INT UNSIGNED, + y INT UNSIGNED, + width INT UNSIGNED, + height INT UNSIGNED, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + UNIQUE KEY `key_draft` (authorPHID, mockID, transactionPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20121209.xmacroadd.sql b/resources/sql/patches/20121209.xmacroadd.sql new file mode 100644 index 0000000000..98237f1703 --- /dev/null +++ b/resources/sql/patches/20121209.xmacroadd.sql @@ -0,0 +1,54 @@ +CREATE TABLE {$NAMESPACE}_file.macro_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_file.macro_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD dateCreated INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD dateModified INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD phid VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER id; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD isDisabled BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD KEY `key_disabled` (isDisabled); diff --git a/resources/sql/patches/20121209.xmacromigrate.php b/resources/sql/patches/20121209.xmacromigrate.php new file mode 100644 index 0000000000..bdd9fc1276 --- /dev/null +++ b/resources/sql/patches/20121209.xmacromigrate.php @@ -0,0 +1,23 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $macro) { + if ($macro->getPHID()) { + continue; + } + + echo '.'; + + queryfx( + $macro->establishConnection('w'), + 'UPDATE %T SET phid = %s WHERE id = %d', + $macro->getTableName(), + $macro->generatePHID(), + $macro->getID()); +} + +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20121209.xmacromigratekey.sql b/resources/sql/patches/20121209.xmacromigratekey.sql new file mode 100644 index 0000000000..3285c77f09 --- /dev/null +++ b/resources/sql/patches/20121209.xmacromigratekey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/patches/20121220.generalcache.sql b/resources/sql/patches/20121220.generalcache.sql new file mode 100644 index 0000000000..acfa1cf57a --- /dev/null +++ b/resources/sql/patches/20121220.generalcache.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_cache.cache_general ( + id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + cacheKeyHash CHAR(12) BINARY NOT NULL, + cacheKey VARCHAR(128) NOT NULL COLLATE utf8_bin, + cacheFormat VARCHAR(16) NOT NULL COLLATE utf8_bin, + cacheData LONGBLOB NOT NULL, + cacheCreated INT UNSIGNED NOT NULL, + cacheExpires INT UNSIGNED, + KEY `key_cacheCreated` (cacheCreated), + UNIQUE KEY `key_cacheKeyHash` (cacheKeyHash) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20121226.config.sql b/resources/sql/patches/20121226.config.sql new file mode 100644 index 0000000000..fcd6870df9 --- /dev/null +++ b/resources/sql/patches/20121226.config.sql @@ -0,0 +1,12 @@ +CREATE TABLE {$NAMESPACE}_config.config_entry ( + `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + `phid` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `namespace` VARCHAR(64) BINARY NOT NULL COLLATE utf8_bin, + `configKey` VARCHAR(64) BINARY NOT NULL COLLATE utf8_bin, + `value` LONGTEXT NOT NULL, + `isDeleted` BOOL NOT NULL, + `dateCreated` INT UNSIGNED NOT NULL, + `dateModified` INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_name` (`namespace`, `configKey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130101.confxaction.sql b/resources/sql/patches/20130101.confxaction.sql new file mode 100644 index 0000000000..81105d961b --- /dev/null +++ b/resources/sql/patches/20130101.confxaction.sql @@ -0,0 +1,20 @@ +CREATE TABLE {$NAMESPACE}_config.config_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130102.metamtareceivedmailmessageidhash.sql b/resources/sql/patches/20130102.metamtareceivedmailmessageidhash.sql new file mode 100644 index 0000000000..3a1198370d --- /dev/null +++ b/resources/sql/patches/20130102.metamtareceivedmailmessageidhash.sql @@ -0,0 +1,3 @@ +ALTER TABLE `{$NAMESPACE}_metamta`.`metamta_receivedmail` + ADD `messageIDHash` CHAR(12) BINARY NOT NULL, + ADD KEY `key_messageIDHash` (`messageIDHash`); diff --git a/resources/sql/patches/20130103.filemetadata.sql b/resources/sql/patches/20130103.filemetadata.sql new file mode 100644 index 0000000000..80cc85d690 --- /dev/null +++ b/resources/sql/patches/20130103.filemetadata.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD metadata LONGTEXT COLLATE utf8_bin NOT NULL; + +UPDATE {$NAMESPACE}_file.file + SET metadata = '{}' WHERE metadata = ''; diff --git a/resources/sql/patches/20130111.conpherence.sql b/resources/sql/patches/20130111.conpherence.sql new file mode 100644 index 0000000000..519271771b --- /dev/null +++ b/resources/sql/patches/20130111.conpherence.sql @@ -0,0 +1,81 @@ +CREATE TABLE {$NAMESPACE}_conpherence.conpherence_thread ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + title VARCHAR(255), + imagePHID VARCHAR(64) COLLATE utf8_bin, + mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY(phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_conpherence.conpherence_participant ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + participantPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + conpherencePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + participationStatus INT UNSIGNED NOT NULL DEFAULT 0, + dateTouched INT UNSIGNED NOT NULL, + behindTransactionPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY(conpherencePHID, participantPHID), + KEY(participantPHID, participationStatus, dateTouched) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_conpherence.edge ( + src varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + type varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + dst varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + dateCreated int(10) unsigned NOT NULL, + seq int(10) unsigned NOT NULL, + dataID int(10) unsigned DEFAULT NULL, + PRIMARY KEY (src, type, dst), + KEY src (src, type, dateCreated, seq) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_conpherence.edgedata ( + id int(10) unsigned NOT NULL AUTO_INCREMENT, + data longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_conpherence.conpherence_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_conpherence.conpherence_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + conpherencePHID VARCHAR(64) COLLATE utf8_bin, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + UNIQUE KEY `key_draft` (authorPHID, conpherencePHID, transactionPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130127.altheraldtranscript.sql b/resources/sql/patches/20130127.altheraldtranscript.sql new file mode 100644 index 0000000000..2f3f916df0 --- /dev/null +++ b/resources/sql/patches/20130127.altheraldtranscript.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_herald`.`herald_transcript` + DROP `psth`; diff --git a/resources/sql/patches/20130131.conpherencepics.sql b/resources/sql/patches/20130131.conpherencepics.sql new file mode 100644 index 0000000000..0b22a89967 --- /dev/null +++ b/resources/sql/patches/20130131.conpherencepics.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + DROP imagePHID, + ADD imagePHIDs LONGTEXT COLLATE utf8_bin NOT NULL AFTER title; + +UPDATE {$NAMESPACE}_conpherence.conpherence_thread + SET imagePHIDs = '{}' WHERE imagePHIDs = ''; diff --git a/resources/sql/patches/20130201.revisionunsubscribed.php b/resources/sql/patches/20130201.revisionunsubscribed.php new file mode 100644 index 0000000000..904fe1cc86 --- /dev/null +++ b/resources/sql/patches/20130201.revisionunsubscribed.php @@ -0,0 +1,32 @@ +openTransaction(); + +// We couldn't use new LiskMigrationIterator($table) because the $unsubscribed +// property gets deleted. +$revs = queryfx_all( + $table->establishConnection('w'), + 'SELECT id, phid, unsubscribed FROM differential_revision'); + +foreach ($revs as $rev) { + echo '.'; + + $unsubscribed = json_decode($rev['unsubscribed']); + if (!$unsubscribed) { + continue; + } + + $editor = new PhabricatorEdgeEditor(); + foreach ($unsubscribed as $user_phid => $_) { + $editor->addEdge( + $rev['phid'], + PhabricatorObjectHasUnsubscriberEdgeType::EDGECONST , + $user_phid); + } + $editor->save(); +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130201.revisionunsubscribed.sql b/resources/sql/patches/20130201.revisionunsubscribed.sql new file mode 100644 index 0000000000..51f09cc104 --- /dev/null +++ b/resources/sql/patches/20130201.revisionunsubscribed.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_revision + DROP unsubscribed; diff --git a/resources/sql/patches/20130214.chatlogchannel.sql b/resources/sql/patches/20130214.chatlogchannel.sql new file mode 100644 index 0000000000..6bb0a777ac --- /dev/null +++ b/resources/sql/patches/20130214.chatlogchannel.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_chatlog.chatlog_channel ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + serviceName VARCHAR(64) COLLATE utf8_bin NOT NULL, + serviceType VARCHAR(32) COLLATE utf8_bin NOT NULL, + channelName VARCHAR(64) COLLATE utf8_bin NOT NULL, + viewPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + editPolicy VARCHAR(64) COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_channel` (channelName, serviceType, serviceName) +)ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130214.chatlogchannelid.sql b/resources/sql/patches/20130214.chatlogchannelid.sql new file mode 100644 index 0000000000..bc522e205c --- /dev/null +++ b/resources/sql/patches/20130214.chatlogchannelid.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_chatlog`.`chatlog_event` + ADD `channelID` INT UNSIGNED NOT NULL; diff --git a/resources/sql/patches/20130214.token.sql b/resources/sql/patches/20130214.token.sql new file mode 100644 index 0000000000..c0e313ac2b --- /dev/null +++ b/resources/sql/patches/20130214.token.sql @@ -0,0 +1,18 @@ +CREATE TABLE {$NAMESPACE}_token.token_given ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + tokenPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_all` (objectPHID, authorPHID), + KEY `key_author` (authorPHID), + KEY `key_token` (tokenPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_token.token_count ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + tokenCount INT NOT NULL, + UNIQUE KEY `key_objectPHID` (objectPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130215.phabricatorfileaddttl.sql b/resources/sql/patches/20130215.phabricatorfileaddttl.sql new file mode 100644 index 0000000000..eece5414e8 --- /dev/null +++ b/resources/sql/patches/20130215.phabricatorfileaddttl.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD ttl INT(10) UNSIGNED DEFAULT NULL, + ADD KEY key_ttl (ttl); diff --git a/resources/sql/patches/20130217.cachettl.sql b/resources/sql/patches/20130217.cachettl.sql new file mode 100644 index 0000000000..2bb3beb11b --- /dev/null +++ b/resources/sql/patches/20130217.cachettl.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_cache.cache_general + ADD KEY `key_ttl` (cacheExpires); diff --git a/resources/sql/patches/20130218.longdaemon.sql b/resources/sql/patches/20130218.longdaemon.sql new file mode 100644 index 0000000000..9fffd578d7 --- /dev/null +++ b/resources/sql/patches/20130218.longdaemon.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + CHANGE argv argv LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/20130218.updatechannelid.php b/resources/sql/patches/20130218.updatechannelid.php new file mode 100644 index 0000000000..cf60544a3b --- /dev/null +++ b/resources/sql/patches/20130218.updatechannelid.php @@ -0,0 +1,64 @@ +openTransaction(); +$channel_table->openTransaction(); + +$event_table->beginReadLocking(); +$channel_table->beginReadLocking(); + +$events = new LiskMigrationIterator($event_table); +$conn_w = $channel_table->establishConnection('w'); + +foreach ($events as $event) { + if ($event->getChannelID()) { + continue; + } + + $event_row = queryfx_one( + $conn_w, + 'SELECT channel FROM %T WHERE id = %d', + $event->getTableName(), + $event->getID()); + $event_channel = $event_row['channel']; + + $matched = queryfx_one( + $conn_w, + 'SELECT * FROM %T WHERE + channelName = %s AND serviceName = %s AND serviceType = %s', + $channel_table->getTableName(), + $event_channel, + '', + ''); + + if (!$matched) { + $matched = id(new PhabricatorChatLogChannel()) + ->setChannelName($event_channel) + ->setServiceType('') + ->setServiceName('') + ->setViewPolicy(PhabricatorPolicies::POLICY_USER) + ->setEditPolicy(PhabricatorPolicies::POLICY_USER) + ->save(); + $matched_id = $matched->getID(); + } else { + $matched_id = $matched['id']; + } + + queryfx( + $event->establishConnection('w'), + 'UPDATE %T SET channelID = %d WHERE id = %d', + $event->getTableName(), + $matched_id, + $event->getID()); +} + +$event_table->endReadLocking(); +$channel_table->endReadLocking(); + +$event_table->saveTransaction(); +$channel_table->saveTransaction(); + +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130219.commitsummary.sql b/resources/sql/patches/20130219.commitsummary.sql new file mode 100644 index 0000000000..e20f35cb7f --- /dev/null +++ b/resources/sql/patches/20130219.commitsummary.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + ADD summary VARCHAR(80) NOT NULL; diff --git a/resources/sql/patches/20130219.commitsummarymig.php b/resources/sql/patches/20130219.commitsummarymig.php new file mode 100644 index 0000000000..f47016804d --- /dev/null +++ b/resources/sql/patches/20130219.commitsummarymig.php @@ -0,0 +1,31 @@ +establishConnection('w'); +$commits = new LiskMigrationIterator($table); +foreach ($commits as $commit) { + echo pht('Filling Commit #%d', $commit->getID())."\n"; + + if (strlen($commit->getSummary())) { + continue; + } + + $data = id(new PhabricatorRepositoryCommitData())->loadOneWhere( + 'commitID = %d', + $commit->getID()); + + if (!$data) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET summary = %s WHERE id = %d', + $commit->getTableName(), + $data->getSummary(), + $commit->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130222.dropchannel.sql b/resources/sql/patches/20130222.dropchannel.sql new file mode 100644 index 0000000000..00e6a13f18 --- /dev/null +++ b/resources/sql/patches/20130222.dropchannel.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_chatlog`.`chatlog_event` + DROP channel; diff --git a/resources/sql/patches/20130226.commitkey.sql b/resources/sql/patches/20130226.commitkey.sql new file mode 100644 index 0000000000..795dc39ae4 --- /dev/null +++ b/resources/sql/patches/20130226.commitkey.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + DROP KEY `repositoryID`; + +ALTER TABLE {$NAMESPACE}_repository.repository_commit + ADD UNIQUE KEY `key_commit_identity` (commitIdentifier, repositoryID); diff --git a/resources/sql/patches/20130304.lintauthor.sql b/resources/sql/patches/20130304.lintauthor.sql new file mode 100644 index 0000000000..ffcb484c26 --- /dev/null +++ b/resources/sql/patches/20130304.lintauthor.sql @@ -0,0 +1,3 @@ +ALTER TABLE `{$NAMESPACE}_repository`.`repository_lintmessage` + ADD authorPHID varchar(64) COLLATE utf8_bin AFTER line, + ADD INDEX key_author (authorPHID); diff --git a/resources/sql/patches/20130310.xactionmeta.sql b/resources/sql/patches/20130310.xactionmeta.sql new file mode 100644 index 0000000000..e1e1d13fa9 --- /dev/null +++ b/resources/sql/patches/20130310.xactionmeta.sql @@ -0,0 +1,24 @@ +ALTER TABLE `{$NAMESPACE}_file`.`macro_transaction` + ADD metadata LONGTEXT NOT NULL COLLATE utf8_bin; +UPDATE `{$NAMESPACE}_file`.macro_transaction SET metadata = '{}' + WHERE metadata = ''; + +ALTER TABLE `{$NAMESPACE}_pholio`.`pholio_transaction` + ADD metadata LONGTEXT NOT NULL COLLATE utf8_bin; +UPDATE `{$NAMESPACE}_pholio`.pholio_transaction SET metadata = '{}' + WHERE metadata = ''; + +ALTER TABLE `{$NAMESPACE}_config`.`config_transaction` + ADD metadata LONGTEXT NOT NULL COLLATE utf8_bin; +UPDATE `{$NAMESPACE}_config`.config_transaction SET metadata = '{}' + WHERE metadata = ''; + +ALTER TABLE `{$NAMESPACE}_conpherence`.`conpherence_transaction` + ADD metadata LONGTEXT NOT NULL COLLATE utf8_bin; +UPDATE `{$NAMESPACE}_conpherence`.conpherence_transaction SET metadata = '{}' + WHERE metadata = ''; + +ALTER TABLE `{$NAMESPACE}_phlux`.`phlux_transaction` + ADD metadata LONGTEXT NOT NULL COLLATE utf8_bin; +UPDATE `{$NAMESPACE}_phlux`.phlux_transaction SET metadata = '{}' + WHERE metadata = ''; diff --git a/resources/sql/patches/20130317.phrictionedge.sql b/resources/sql/patches/20130317.phrictionedge.sql new file mode 100644 index 0000000000..802d259bcb --- /dev/null +++ b/resources/sql/patches/20130317.phrictionedge.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_phriction.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type INT UNSIGNED NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phriction.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130319.conpherence.sql b/resources/sql/patches/20130319.conpherence.sql new file mode 100644 index 0000000000..e18590e6bd --- /dev/null +++ b/resources/sql/patches/20130319.conpherence.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + ADD settings LONGTEXT NOT NULL COLLATE utf8_bin AFTER behindTransactionPHID; diff --git a/resources/sql/patches/20130319.phabricatorfileexplicitupload.sql b/resources/sql/patches/20130319.phabricatorfileexplicitupload.sql new file mode 100644 index 0000000000..8c956e1212 --- /dev/null +++ b/resources/sql/patches/20130319.phabricatorfileexplicitupload.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD isExplicitUpload BOOLEAN DEFAULT TRUE; diff --git a/resources/sql/patches/20130320.phlux.sql b/resources/sql/patches/20130320.phlux.sql new file mode 100644 index 0000000000..07e6fd9949 --- /dev/null +++ b/resources/sql/patches/20130320.phlux.sql @@ -0,0 +1,31 @@ +CREATE TABLE {$NAMESPACE}_phlux.phlux_variable ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + variableKey VARCHAR(64) NOT NULL COLLATE utf8_bin, + variableValue LONGTEXT NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_key` (variableKey) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_phlux.phlux_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130321.token.sql b/resources/sql/patches/20130321.token.sql new file mode 100644 index 0000000000..3c2f55e25e --- /dev/null +++ b/resources/sql/patches/20130321.token.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_token.token_count + ADD KEY `key_count` (tokenCount); diff --git a/resources/sql/patches/20130322.phortune.sql b/resources/sql/patches/20130322.phortune.sql new file mode 100644 index 0000000000..5a9447aab0 --- /dev/null +++ b/resources/sql/patches/20130322.phortune.sql @@ -0,0 +1,45 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_account ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + balanceInCents BIGINT NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_phortune.phortune_accounttransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_phortune.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type INT UNSIGNED NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_phortune.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130323.phortunepayment.sql b/resources/sql/patches/20130323.phortunepayment.sql new file mode 100644 index 0000000000..fcdca6fa62 --- /dev/null +++ b/resources/sql/patches/20130323.phortunepayment.sql @@ -0,0 +1,14 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + status VARCHAR(64) NOT NULL COLLATE utf8_bin, + accountPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + expiresEpoch INT UNSIGNED, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_account` (accountPHID, status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130324.phortuneproduct.sql b/resources/sql/patches/20130324.phortuneproduct.sql new file mode 100644 index 0000000000..0f8460c14c --- /dev/null +++ b/resources/sql/patches/20130324.phortuneproduct.sql @@ -0,0 +1,35 @@ +CREATE TABLE {$NAMESPACE}_phortune.phortune_product ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + productName VARCHAR(255) NOT NULL, + productType VARCHAR(64) NOT NULL COLLATE utf8_bin, + status VARCHAR(64) NOT NULL COLLATE utf8_bin, + priceInCents BIGINT NOT NULL, + billingIntervalInMonths INT UNSIGNED, + trialPeriodInDays INT UNSIGNED, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_status` (status) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_phortune.phortune_producttransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130330.phrequent.sql b/resources/sql/patches/20130330.phrequent.sql new file mode 100644 index 0000000000..ddbd43b6e4 --- /dev/null +++ b/resources/sql/patches/20130330.phrequent.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_phrequent.phrequent_usertime ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + userPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NULL COLLATE utf8_bin, + note LONGTEXT NULL COLLATE utf8_bin, + dateStarted INT UNSIGNED NOT NULL, + dateEnded INT UNSIGNED NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130403.conpherencecache.sql b/resources/sql/patches/20130403.conpherencecache.sql new file mode 100644 index 0000000000..830e294fc5 --- /dev/null +++ b/resources/sql/patches/20130403.conpherencecache.sql @@ -0,0 +1,6 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_thread + ADD recentParticipantPHIDs LONGTEXT NOT NULL COLLATE utf8_bin AFTER title, + ADD messageCount BIGINT UNSIGNED NOT NULL AFTER title; + +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + ADD seenMessageCount BIGINT UNSIGNED NOT NULL AFTER behindTransactionPHID; diff --git a/resources/sql/patches/20130403.conpherencecachemig.php b/resources/sql/patches/20130403.conpherencecachemig.php new file mode 100644 index 0000000000..cad9fc626d --- /dev/null +++ b/resources/sql/patches/20130403.conpherencecachemig.php @@ -0,0 +1,65 @@ +openTransaction(); +$conn_w = $table->establishConnection('w'); + +$participant_table = new ConpherenceParticipant(); + +$conpherences = new LiskMigrationIterator($table); +foreach ($conpherences as $conpherence) { + echo pht('Migrating conpherence #%d', $conpherence->getID())."\n"; + + $participants = id(new ConpherenceParticipant()) + ->loadAllWhere('conpherencePHID = %s', $conpherence->getPHID()); + + $transactions = id(new ConpherenceTransaction()) + ->loadAllWhere('objectPHID = %s', $conpherence->getPHID()); + + $participation_hash = mgroup($participants, 'getBehindTransactionPHID'); + + $message_count = 0; + $participants_to_cache = array(); + foreach ($transactions as $transaction) { + $participants_to_cache[] = $transaction->getAuthorPHID(); + if ($transaction->getTransactionType() == + PhabricatorTransactions::TYPE_COMMENT) { + $message_count++; + } + $participants_to_update = idx( + $participation_hash, + $transaction->getPHID(), + array()); + if ($participants_to_update) { + queryfx( + $conn_w, + 'UPDATE %T SET seenMessageCount = %d '. + 'WHERE conpherencePHID = %s AND participantPHID IN (%Ls)', + $participant_table->getTableName(), + $message_count, + $conpherence->getPHID(), + mpull($participants_to_update, 'getParticipantPHID')); + } + } + + $participants_to_cache = array_slice( + array_unique(array_reverse($participants_to_cache)), + 0, + 10); + queryfx( + $conn_w, + 'UPDATE %T '. + 'SET recentParticipantPHIDs = %s, '. + 'messageCount = %d '. + 'WHERE phid = %s', + $table->getTableName(), + json_encode($participants_to_cache), + $message_count, + $conpherence->getPHID()); +} + +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130409.commitdrev.php b/resources/sql/patches/20130409.commitdrev.php new file mode 100644 index 0000000000..a264e8edeb --- /dev/null +++ b/resources/sql/patches/20130409.commitdrev.php @@ -0,0 +1,35 @@ +establishConnection('w'); +$edges = 0; + +foreach (new LiskMigrationIterator($commit_table) as $commit) { + $data = $data_table->loadOneWhere( + 'commitID = %d', + $commit->getID()); + if (!$data) { + continue; + } + + $revision_phid = $data->getCommitDetail('differential.revisionPHID'); + if (!$revision_phid) { + continue; + } + + $commit_drev = DiffusionCommitHasRevisionEdgeType::EDGECONST; + $editor->addEdge($commit->getPHID(), $commit_drev, $revision_phid); + $edges++; + if ($edges % 256 == 0) { + echo '.'; + $editor->save(); + $editor = new PhabricatorEdgeEditor(); + } +} + +echo '.'; +$editor->save(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130417.externalaccount.sql b/resources/sql/patches/20130417.externalaccount.sql new file mode 100644 index 0000000000..806117709a --- /dev/null +++ b/resources/sql/patches/20130417.externalaccount.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_user.externalaccount ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) COLLATE utf8_bin NOT NULL UNIQUE KEY, + userPHID VARCHAR(64) COLLATE utf8_bin, + accountType VARCHAR(16) COLLATE utf8_bin NOT NULL, + accountDomain VARCHAR(64) COLLATE utf8_bin, + accountSecret LONGTEXT COLLATE utf8_bin, + accountID VARCHAR(160) COLLATE utf8_bin NOT NULL, + displayName VARCHAR(256) COLLATE utf8_bin NOT NULL, + UNIQUE KEY `account_details` (accountType, accountDomain, accountID) +)ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/20130423.conpherenceindices.sql b/resources/sql/patches/20130423.conpherenceindices.sql new file mode 100644 index 0000000000..605f64ff38 --- /dev/null +++ b/resources/sql/patches/20130423.conpherenceindices.sql @@ -0,0 +1,4 @@ +ALTER TABLE {$NAMESPACE}_conpherence.conpherence_participant + DROP KEY participantPHID, + ADD KEY unreadCount (participantPHID, participationStatus), + ADD KEY participationIndex (participantPHID, dateTouched, id); diff --git a/resources/sql/patches/20130423.phortunepaymentrevised.sql b/resources/sql/patches/20130423.phortunepaymentrevised.sql new file mode 100644 index 0000000000..e497b01535 --- /dev/null +++ b/resources/sql/patches/20130423.phortunepaymentrevised.sql @@ -0,0 +1,19 @@ +TRUNCATE TABLE {$NAMESPACE}_phortune.phortune_paymentmethod; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD brand VARCHAR(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD expires VARCHAR(16) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD providerType VARCHAR(16) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD providerDomain VARCHAR(64) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + ADD lastFourDigits VARCHAR(16) NOT NULL; + +ALTER TABLE {$NAMESPACE}_phortune.phortune_paymentmethod + DROP expiresEpoch; diff --git a/resources/sql/patches/20130423.updateexternalaccount.sql b/resources/sql/patches/20130423.updateexternalaccount.sql new file mode 100644 index 0000000000..8b9eeb5f6a --- /dev/null +++ b/resources/sql/patches/20130423.updateexternalaccount.sql @@ -0,0 +1,6 @@ +RENAME TABLE `{$NAMESPACE}_user`.`externalaccount` + TO `{$NAMESPACE}_user`.`user_externalaccount`; + +ALTER TABLE `{$NAMESPACE}_user`.`user_externalaccount` + ADD `dateCreated` INT UNSIGNED NOT NULL, + ADD `dateModified` INT UNSIGNED NOT NULL; diff --git a/resources/sql/patches/20130426.search_savedquery.sql b/resources/sql/patches/20130426.search_savedquery.sql new file mode 100644 index 0000000000..7b03dde976 --- /dev/null +++ b/resources/sql/patches/20130426.search_savedquery.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_search.search_savedquery ( + id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, + engineClassName VARCHAR(255) NOT NULL COLLATE utf8_bin, + parameters LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT(10) UNSIGNED NOT NULL, + dateModified INT(10) UNSIGNED NOT NULL, + queryKey VARCHAR(12) NOT NULL COLLATE utf8_bin, + PRIMARY KEY(id), + UNIQUE KEY key_queryKey (queryKey) +) +ENGINE=InnoDB, COLLATE utf8_general_ci diff --git a/resources/sql/patches/20130502.countdownrevamp1.sql b/resources/sql/patches/20130502.countdownrevamp1.sql new file mode 100644 index 0000000000..acc3a38f3d --- /dev/null +++ b/resources/sql/patches/20130502.countdownrevamp1.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown_timer + RENAME TO {$NAMESPACE}_countdown.countdown; + +ALTER TABLE {$NAMESPACE}_countdown.countdown + change datepoint epoch INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_countdown.countdown + ADD COLUMN phid VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER id; diff --git a/resources/sql/patches/20130502.countdownrevamp2.php b/resources/sql/patches/20130502.countdownrevamp2.php new file mode 100644 index 0000000000..04d998dab9 --- /dev/null +++ b/resources/sql/patches/20130502.countdownrevamp2.php @@ -0,0 +1,23 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $countdown) { + if ($countdown->getPHID()) { + continue; + } + + echo '.'; + + queryfx( + $countdown->establishConnection('w'), + 'UPDATE %T SET phid = %s WHERE id = %d', + $countdown->getTableName(), + $countdown->generatePHID(), + $countdown->getID()); +} + +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130502.countdownrevamp3.sql b/resources/sql/patches/20130502.countdownrevamp3.sql new file mode 100644 index 0000000000..8660025a46 --- /dev/null +++ b/resources/sql/patches/20130502.countdownrevamp3.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/patches/20130507.releephrqmailkey.sql b/resources/sql/patches/20130507.releephrqmailkey.sql new file mode 100644 index 0000000000..154a2cb22a --- /dev/null +++ b/resources/sql/patches/20130507.releephrqmailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_request + ADD COLUMN `mailKey` varchar(20) NOT NULL; diff --git a/resources/sql/patches/20130507.releephrqmailkeypop.php b/resources/sql/patches/20130507.releephrqmailkeypop.php new file mode 100644 index 0000000000..016381dc58 --- /dev/null +++ b/resources/sql/patches/20130507.releephrqmailkeypop.php @@ -0,0 +1,27 @@ +openTransaction(); + +// From ponder-mailkey-populate.php... +foreach (new LiskMigrationIterator($table) as $rq) { + $id = $rq->getID(); + + echo "RQ{$id}: "; + if (!$rq->getMailKey()) { + queryfx( + $rq->establishConnection('w'), + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $rq->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + echo pht('Generated Key')."\n"; + } else { + echo "-\n"; + } +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130507.releephrqsimplifycols.sql b/resources/sql/patches/20130507.releephrqsimplifycols.sql new file mode 100644 index 0000000000..ef8c8b5888 --- /dev/null +++ b/resources/sql/patches/20130507.releephrqsimplifycols.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_request + DROP COLUMN requestCommitIdentifier, + DROP COLUMN requestCommitOrdinal, + DROP COLUMN status, + DROP COLUMN committedByUserPHID, + DROP KEY `requestIdentifierBranch`, + ADD CONSTRAINT + UNIQUE KEY `requestIdentifierBranch` (`requestCommitPHID`, `branchID`); diff --git a/resources/sql/patches/20130508.releephtransactions.sql b/resources/sql/patches/20130508.releephtransactions.sql new file mode 100644 index 0000000000..0da0bc8a7d --- /dev/null +++ b/resources/sql/patches/20130508.releephtransactions.sql @@ -0,0 +1,38 @@ +CREATE TABLE {$NAMESPACE}_releeph.releeph_requesttransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_releeph.releeph_requesttransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130508.releephtransactionsmig.php b/resources/sql/patches/20130508.releephtransactionsmig.php new file mode 100644 index 0000000000..c5203cf9b6 --- /dev/null +++ b/resources/sql/patches/20130508.releephtransactionsmig.php @@ -0,0 +1,8 @@ +getID())."\n"; + + if ($macro->getAuthorPHID()) { + // Already have an author; skip it. + continue; + } + + if (!$macro->getFilePHID()) { + // No valid file; skip it. + continue; + } + + $file = id(new PhabricatorFile())->loadOneWhere( + 'phid = %s', + $macro->getFilePHID()); + + if (!$file) { + // Couldn't load the file; skip it. + continue; + } + + if (!$file->getAuthorPHID()) { + // File has no author; skip it. + continue; + } + + queryfx( + $macro->establishConnection('w'), + 'UPDATE %T SET authorPHID = %s WHERE id = %d', + $macro->getTableName(), + $file->getAuthorPHID(), + $macro->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130530.macrodatekey.sql b/resources/sql/patches/20130530.macrodatekey.sql new file mode 100644 index 0000000000..f061ec34c1 --- /dev/null +++ b/resources/sql/patches/20130530.macrodatekey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD KEY `key_dateCreated` (dateCreated); diff --git a/resources/sql/patches/20130530.pastekeys.sql b/resources/sql/patches/20130530.pastekeys.sql new file mode 100644 index 0000000000..4767aa18f8 --- /dev/null +++ b/resources/sql/patches/20130530.pastekeys.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste + ADD KEY `key_dateCreated` (dateCreated); + +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste + ADD KEY `key_language` (language); diff --git a/resources/sql/patches/20130530.sessionhash.php b/resources/sql/patches/20130530.sessionhash.php new file mode 100644 index 0000000000..1e09ee32fd --- /dev/null +++ b/resources/sql/patches/20130530.sessionhash.php @@ -0,0 +1,7 @@ +establishConnection('w'); +$table_name = 'user_oauthinfo'; + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $row) { + throw new Exception( + pht( + 'This database has ancient OAuth account data and is too old to '. + 'upgrade directly to a modern software version. Upgrade to a version '. + 'released between June 2013 and February 2019 first, then upgrade to '. + 'a modern version.')); +} diff --git a/resources/sql/patches/20130611.nukeldap.php b/resources/sql/patches/20130611.nukeldap.php new file mode 100644 index 0000000000..70a3a3fec4 --- /dev/null +++ b/resources/sql/patches/20130611.nukeldap.php @@ -0,0 +1,14 @@ +establishConnection('w'); +$table_name = 'user_ldapinfo'; + +foreach (new LiskRawMigrationIterator($conn, $table_name) as $row) { + throw new Exception( + pht( + 'This database has ancient LDAP account data and is too old to upgrade '. + 'directly to a modern version of the software. Upgrade to a version '. + 'released between June 2013 and February 2019 first, then upgrade to a '. + 'modern version.')); +} diff --git a/resources/sql/patches/20130613.authdb.sql b/resources/sql/patches/20130613.authdb.sql new file mode 100644 index 0000000000..f1e8eb7600 --- /dev/null +++ b/resources/sql/patches/20130613.authdb.sql @@ -0,0 +1,40 @@ +CREATE TABLE {$NAMESPACE}_auth.auth_providerconfig ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + providerClass VARCHAR(128) NOT NULL COLLATE utf8_bin, + providerType VARCHAR(64) NOT NULL COLLATE utf8_bin, + providerDomain VARCHAR(128) NOT NULL COLLATE utf8_bin, + isEnabled BOOL NOT NULL, + shouldAllowLogin BOOL NOT NULL, + shouldAllowRegistration BOOL NOT NULL, + shouldAllowLink BOOL NOT NULL, + shouldAllowUnlink BOOL NOT NULL, + properties LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_class` (providerClass), + UNIQUE KEY `key_provider` (providerType, providerDomain) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_auth.auth_providerconfigtransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130619.authconf.php b/resources/sql/patches/20130619.authconf.php new file mode 100644 index 0000000000..ab0378ee64 --- /dev/null +++ b/resources/sql/patches/20130619.authconf.php @@ -0,0 +1,164 @@ + array( + 'enabled' => 'ldap.auth-enabled', + 'registration' => true, + 'type' => 'ldap', + 'domain' => 'self', + ), + 'PhabricatorAuthProviderOAuthDisqus' => array( + 'enabled' => 'disqus.auth-enabled', + 'registration' => 'disqus.registration-enabled', + 'permanent' => 'disqus.auth-permanent', + 'oauth.id' => 'disqus.application-id', + 'oauth.secret' => 'disqus.application-secret', + 'type' => 'disqus', + 'domain' => 'disqus.com', + ), + 'PhabricatorFacebookAuthProvider' => array( + 'enabled' => 'facebook.auth-enabled', + 'registration' => 'facebook.registration-enabled', + 'permanent' => 'facebook.auth-permanent', + 'oauth.id' => 'facebook.application-id', + 'oauth.secret' => 'facebook.application-secret', + 'type' => 'facebook', + 'domain' => 'facebook.com', + ), + 'PhabricatorAuthProviderOAuthGitHub' => array( + 'enabled' => 'github.auth-enabled', + 'registration' => 'github.registration-enabled', + 'permanent' => 'github.auth-permanent', + 'oauth.id' => 'github.application-id', + 'oauth.secret' => 'github.application-secret', + 'type' => 'github', + 'domain' => 'github.com', + ), + 'PhabricatorAuthProviderOAuthGoogle' => array( + 'enabled' => 'google.auth-enabled', + 'registration' => 'google.registration-enabled', + 'permanent' => 'google.auth-permanent', + 'oauth.id' => 'google.application-id', + 'oauth.secret' => 'google.application-secret', + 'type' => 'google', + 'domain' => 'google.com', + ), + 'PhabricatorPasswordAuthProvider' => array( + 'enabled' => 'auth.password-auth-enabled', + 'enabled-default' => false, + 'registration' => false, + 'type' => 'password', + 'domain' => 'self', + ), +); + +foreach ($config_map as $provider_class => $spec) { + $enabled_key = idx($spec, 'enabled'); + $enabled_default = idx($spec, 'enabled-default', false); + $enabled = PhabricatorEnv::getEnvConfigIfExists( + $enabled_key, + $enabled_default); + + if (!$enabled) { + echo pht('Skipping %s (not enabled).', $provider_class)."\n"; + // This provider was not previously enabled, so we can skip migrating it. + continue; + } else { + echo pht('Migrating %s...', $provider_class)."\n"; + } + + $registration_key = idx($spec, 'registration'); + if ($registration_key === true) { + $registration = 1; + } else if ($registration_key === false) { + $registration = 0; + } else { + $registration = (int)PhabricatorEnv::getEnvConfigIfExists( + $registration_key, + true); + } + + $unlink_key = idx($spec, 'permanent'); + if (!$unlink_key) { + $unlink = 1; + } else { + $unlink = (int)(!PhabricatorEnv::getEnvConfigIfExists($unlink_key)); + } + + $config = id(new PhabricatorAuthProviderConfig()) + ->setIsEnabled(1) + ->setShouldAllowLogin(1) + ->setShouldAllowRegistration($registration) + ->setShouldAllowLink(1) + ->setShouldAllowUnlink($unlink) + ->setProviderType(idx($spec, 'type')) + ->setProviderDomain(idx($spec, 'domain')) + ->setProviderClass($provider_class); + + if (isset($spec['oauth.id'])) { + $config->setProperty( + PhabricatorAuthProviderOAuth::PROPERTY_APP_ID, + PhabricatorEnv::getEnvConfigIfExists(idx($spec, 'oauth.id'))); + $config->setProperty( + PhabricatorAuthProviderOAuth::PROPERTY_APP_SECRET, + PhabricatorEnv::getEnvConfigIfExists(idx($spec, 'oauth.secret'))); + } + + switch ($provider_class) { + case 'PhabricatorFacebookAuthProvider': + $config->setProperty( + PhabricatorFacebookAuthProvider::KEY_REQUIRE_SECURE, + (int)PhabricatorEnv::getEnvConfigIfExists( + 'facebook.require-https-auth')); + break; + case 'PhabricatorLDAPAuthProvider': + + $ldap_map = array( + PhabricatorLDAPAuthProvider::KEY_HOSTNAME + => 'ldap.hostname', + PhabricatorLDAPAuthProvider::KEY_PORT + => 'ldap.port', + PhabricatorLDAPAuthProvider::KEY_DISTINGUISHED_NAME + => 'ldap.base_dn', + PhabricatorLDAPAuthProvider::KEY_SEARCH_ATTRIBUTES + => 'ldap.search_attribute', + PhabricatorLDAPAuthProvider::KEY_USERNAME_ATTRIBUTE + => 'ldap.username-attribute', + PhabricatorLDAPAuthProvider::KEY_REALNAME_ATTRIBUTES + => 'ldap.real_name_attributes', + PhabricatorLDAPAuthProvider::KEY_VERSION + => 'ldap.version', + PhabricatorLDAPAuthProvider::KEY_REFERRALS + => 'ldap.referrals', + PhabricatorLDAPAuthProvider::KEY_START_TLS + => 'ldap.start-tls', + PhabricatorLDAPAuthProvider::KEY_ANONYMOUS_USERNAME + => 'ldap.anonymous-user-name', + PhabricatorLDAPAuthProvider::KEY_ANONYMOUS_PASSWORD + => 'ldap.anonymous-user-password', + // Update the old "search first" setting to the newer but similar + // "always search" setting. + PhabricatorLDAPAuthProvider::KEY_ALWAYS_SEARCH + => 'ldap.search-first', + PhabricatorLDAPAuthProvider::KEY_ACTIVEDIRECTORY_DOMAIN + => 'ldap.activedirectory_domain', + ); + + $defaults = array( + 'ldap.version' => 3, + 'ldap.port' => 389, + ); + + foreach ($ldap_map as $pkey => $ckey) { + $default = idx($defaults, $ckey); + $config->setProperty( + $pkey, + PhabricatorEnv::getEnvConfigIfExists($ckey, $default)); + } + break; + } + + $config->save(); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130620.diffxactions.sql b/resources/sql/patches/20130620.diffxactions.sql new file mode 100644 index 0000000000..bd88123b35 --- /dev/null +++ b/resources/sql/patches/20130620.diffxactions.sql @@ -0,0 +1,50 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_differential.differential_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + revisionPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + changesetID INT UNSIGNED, + isNewFile BOOL NOT NULL, + lineNumber INT UNSIGNED NOT NULL, + lineLength INT UNSIGNED NOT NULL, + fixedState VARCHAR(12) COLLATE utf8_bin, + hasReplies BOOL NOT NULL, + replyToCommentPHID VARCHAR(64), + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + UNIQUE KEY `key_draft` (authorPHID, revisionPHID, transactionPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130621.diffcommentphid.sql b/resources/sql/patches/20130621.diffcommentphid.sql new file mode 100644 index 0000000000..5cacc68c55 --- /dev/null +++ b/resources/sql/patches/20130621.diffcommentphid.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_comment + ADD phid VARCHAR(64) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_differential.differential_comment + ADD KEY `key_phid` (phid); diff --git a/resources/sql/patches/20130621.diffcommentphidmig.php b/resources/sql/patches/20130621.diffcommentphidmig.php new file mode 100644 index 0000000000..6a6baf280f --- /dev/null +++ b/resources/sql/patches/20130621.diffcommentphidmig.php @@ -0,0 +1,3 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $document) { + $updated = false; + $id = $document->getID(); + + echo pht('Document %d: ', $id); + if (!$document->getTitle()) { + $document_body = id(new LegalpadDocumentBody()) + ->loadOneWhere('phid = %s', $document->getDocumentBodyPHID()); + $title = $document_body->getTitle(); + $document->setTitle($title); + $updated = true; + echo pht('Added title: %s', $title)."\n"; + } else { + echo "-\n"; + } + + if (!$document->getContributorCount() || + !$document->getRecentContributorPHIDs()) { + $updated = true; + $type = PhabricatorObjectHasContributorEdgeType::EDGECONST; + $contributors = PhabricatorEdgeQuery::loadDestinationPHIDs( + $document->getPHID(), + $type); + $document->setRecentContributorPHIDs(array_slice($contributors, 0, 3)); + echo pht('Added recent contributor PHIDs.')."\n"; + $document->setContributorCount(count($contributors)); + echo pht('Added contributor count.')."\n"; + } + + if (!$updated) { + echo "-\n"; + continue; + } + + $document->save(); +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130703.legalpaddocdenorm.sql b/resources/sql/patches/20130703.legalpaddocdenorm.sql new file mode 100644 index 0000000000..de21bca934 --- /dev/null +++ b/resources/sql/patches/20130703.legalpaddocdenorm.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + ADD recentContributorPHIDs LONGTEXT NOT NULL COLLATE utf8_bin AFTER phid, + ADD contributorCount INT UNSIGNED NOT NULL DEFAULT 0 AFTER phid, + ADD title VARCHAR(255) NOT NULL COLLATE utf8_general_ci AFTER phid; + +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_document + DROP KEY key_creator, + ADD KEY key_creator (creatorPHID, dateModified); diff --git a/resources/sql/patches/20130709.droptimeline.sql b/resources/sql/patches/20130709.droptimeline.sql new file mode 100644 index 0000000000..33c6bb4ad4 --- /dev/null +++ b/resources/sql/patches/20130709.droptimeline.sql @@ -0,0 +1 @@ +DROP DATABASE {$NAMESPACE}_timeline; diff --git a/resources/sql/patches/20130709.legalpadsignature.sql b/resources/sql/patches/20130709.legalpadsignature.sql new file mode 100644 index 0000000000..5f6380e4d8 --- /dev/null +++ b/resources/sql/patches/20130709.legalpadsignature.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_legalpad.legalpad_documentsignature + ADD signatureData LONGTEXT NOT NULL COLLATE utf8_bin AFTER signerPHID; diff --git a/resources/sql/patches/20130711.pholioimageobsolete.php b/resources/sql/patches/20130711.pholioimageobsolete.php new file mode 100644 index 0000000000..a0f805c69b --- /dev/null +++ b/resources/sql/patches/20130711.pholioimageobsolete.php @@ -0,0 +1,23 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $image) { + if ($image->getPHID()) { + continue; + } + + echo '.'; + + queryfx( + $image->establishConnection('w'), + 'UPDATE %T SET phid = %s WHERE id = %d', + $image->getTableName(), + $image->generatePHID(), + $image->getID()); +} + +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130711.pholioimageobsolete.sql b/resources/sql/patches/20130711.pholioimageobsolete.sql new file mode 100644 index 0000000000..4e7b69c633 --- /dev/null +++ b/resources/sql/patches/20130711.pholioimageobsolete.sql @@ -0,0 +1,14 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD `isObsolete` TINYINT(1) NOT NULL DEFAULT '0'; + +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + DROP KEY `mockID`; + +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD KEY `mockID` (`mockID`, `isObsolete`, `sequence`); + +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD `phid` VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER `id`; + +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + CHANGE `mockID` `mockID` INT(10) UNSIGNED; diff --git a/resources/sql/patches/20130711.pholioimageobsolete2.sql b/resources/sql/patches/20130711.pholioimageobsolete2.sql new file mode 100644 index 0000000000..bb551143e9 --- /dev/null +++ b/resources/sql/patches/20130711.pholioimageobsolete2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD UNIQUE KEY `keyPHID` (`phid`); diff --git a/resources/sql/patches/20130711.trimrealnames.php b/resources/sql/patches/20130711.trimrealnames.php new file mode 100644 index 0000000000..a5d2ef2c40 --- /dev/null +++ b/resources/sql/patches/20130711.trimrealnames.php @@ -0,0 +1,26 @@ +establishConnection('w'); + +echo pht('Trimming trailing whitespace from user real names...')."\n"; +foreach (new LiskMigrationIterator($table) as $user) { + $id = $user->getID(); + $real = $user->getRealName(); + $trim = rtrim($real); + + if ($trim == $real) { + echo pht('User %d is already trim.', $id)."\n"; + continue; + } + + echo pht("Trimming user %d from '%s' to '%s'.", $id, $real, $trim)."\n"; + qsprintf( + $conn_w, + 'UPDATE %T SET realName = %s WHERE id = %d', + $table->getTableName(), + $real, + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130714.votexactions.sql b/resources/sql/patches/20130714.votexactions.sql new file mode 100644 index 0000000000..41f6a75ceb --- /dev/null +++ b/resources/sql/patches/20130714.votexactions.sql @@ -0,0 +1,49 @@ +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_slowvote.slowvote_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + ADD description LONGTEXT NOT NULL COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_slowvote.slowvote_poll + ADD viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_slowvote.slowvote_poll + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/patches/20130715.votecomments.php b/resources/sql/patches/20130715.votecomments.php new file mode 100644 index 0000000000..1066126318 --- /dev/null +++ b/resources/sql/patches/20130715.votecomments.php @@ -0,0 +1,100 @@ +establishConnection('w'); + +$comments = new LiskRawMigrationIterator($conn_w, 'slowvote_comment'); + +$conn_w->openTransaction(); + +foreach ($comments as $comment) { + $id = $comment['id']; + $poll_id = $comment['pollID']; + $author_phid = $comment['authorPHID']; + $text = $comment['commentText']; + $date_created = $comment['dateCreated']; + $date_modified = $comment['dateModified']; + + echo pht('Migrating comment %d.', $id)."\n"; + + $poll = id(new PhabricatorSlowvoteQuery()) + ->setViewer($viewer) + ->withIDs(array($poll_id)) + ->executeOne(); + if (!$poll) { + echo pht('No poll.')."\n"; + continue; + } + + $user = id(new PhabricatorPeopleQuery()) + ->setViewer($viewer) + ->withPHIDs(array($author_phid)) + ->executeOne(); + if (!$user) { + echo pht('No user.')."\n"; + continue; + } + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT); + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + PhabricatorSlowvotePollPHIDType::TYPECONST); + + $content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, + %d, %s, %s, %d, + %d, %d)', + $table_comment->getTableName(), + $comment_phid, + $xaction_phid, + $user->getPHID(), + PhabricatorPolicies::POLICY_PUBLIC, + $user->getPHID(), + 1, + $text, + $source, + 0, + $date_created, + $date_modified); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, + %s, %d, %s, %s, %s, + %s, %s, %d, %d)', + $table_xaction->getTableName(), + $xaction_phid, + $user->getPHID(), + $poll->getPHID(), + PhabricatorPolicies::POLICY_PUBLIC, + $user->getPHID(), + $comment_phid, + 1, + PhabricatorTransactions::TYPE_COMMENT, + null, + null, + $source, + '{}', + $date_created, + $date_modified); +} + +$conn_w->saveTransaction(); + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130715.voteedges.sql b/resources/sql/patches/20130715.voteedges.sql new file mode 100644 index 0000000000..58d6e64f2c --- /dev/null +++ b/resources/sql/patches/20130715.voteedges.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_slowvote.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_slowvote.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130716.archivememberlessprojects.php b/resources/sql/patches/20130716.archivememberlessprojects.php new file mode 100644 index 0000000000..bd5671cba3 --- /dev/null +++ b/resources/sql/patches/20130716.archivememberlessprojects.php @@ -0,0 +1,38 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $project) { + $members = PhabricatorEdgeQuery::loadDestinationPHIDs( + $project->getPHID(), + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST); + + if (count($members)) { + echo pht( + 'Project "%s" has %d members; skipping.', + $project->getName(), + count($members)), "\n"; + continue; + } + + if ($project->getStatus() == PhabricatorProjectStatus::STATUS_ARCHIVED) { + echo pht( + 'Project "%s" already archived; skipping.', + $project->getName()), "\n"; + continue; + } + + echo pht('Archiving project "%s"...', $project->getName())."\n"; + queryfx( + $table->establishConnection('w'), + 'UPDATE %T SET status = %s WHERE id = %d', + $table->getTableName(), + PhabricatorProjectStatus::STATUS_ARCHIVED, + $project->getID()); +} + +$table->saveTransaction(); +echo "\n".pht('Done.')."\n"; diff --git a/resources/sql/patches/20130722.pholioreplace.sql b/resources/sql/patches/20130722.pholioreplace.sql new file mode 100644 index 0000000000..132537ea05 --- /dev/null +++ b/resources/sql/patches/20130722.pholioreplace.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pholio.pholio_image + ADD COLUMN replacesImagePHID VARCHAR(64) NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/20130723.taskstarttime.sql b/resources/sql/patches/20130723.taskstarttime.sql new file mode 100644 index 0000000000..2ca759db1e --- /dev/null +++ b/resources/sql/patches/20130723.taskstarttime.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD failureTime INT UNSIGNED; + +ALTER TABLE {$NAMESPACE}_worker.worker_activetask + ADD KEY `key_failuretime` (`failureTime`); diff --git a/resources/sql/patches/20130726.ponderxactions.sql b/resources/sql/patches/20130726.ponderxactions.sql new file mode 100644 index 0000000000..107eae2c16 --- /dev/null +++ b/resources/sql/patches/20130726.ponderxactions.sql @@ -0,0 +1,81 @@ +CREATE TABLE {$NAMESPACE}_ponder.ponder_questiontransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_ponder.ponder_questiontransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_ponder.ponder_answertransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_ponder.ponder_answertransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130727.ponderquestionstatus.sql b/resources/sql/patches/20130727.ponderquestionstatus.sql new file mode 100644 index 0000000000..4f8d19957d --- /dev/null +++ b/resources/sql/patches/20130727.ponderquestionstatus.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD COLUMN `status` INT(10) UNSIGNED NOT NULL AFTER `authorPHID`; + +ALTER TABLE {$NAMESPACE}_ponder.ponder_question + ADD INDEX `status` (`status`); diff --git a/resources/sql/patches/20130728.ponderunique.php b/resources/sql/patches/20130728.ponderunique.php new file mode 100644 index 0000000000..2facd4e3f0 --- /dev/null +++ b/resources/sql/patches/20130728.ponderunique.php @@ -0,0 +1,58 @@ +establishConnection('w'); +$conn_w->openTransaction(); + +$answers = new LiskMigrationIterator(new PonderAnswer()); +foreach ($answers as $answer) { + $aid = $answer->getID(); + $qid = $answer->getQuestionID(); + $author_phid = $answer->getAuthorPHID(); + + echo pht('Processing answer ID #%d...', $aid)."\n"; + + if (empty($map[$qid][$author_phid])) { + echo pht('Answer is unique.')."\n"; + $map[$qid][$author_phid] = $answer; + continue; + } else { + echo pht('Merging answer.')."\n"; + $target = $map[$qid][$author_phid]; + queryfx( + $conn_w, + 'UPDATE %T SET content = %s WHERE id = %d', + $target->getTableName(), + + $target->getContent(). + "\n\n". + "---". + "\n\n". + "> (This content was automatically merged from another answer by the ". + "same author.)". + "\n\n". + $answer->getContent(), + + $target->getID()); + + queryfx( + $conn_w, + 'DELETE FROM %T WHERE id = %d', + $target->getTableName(), + $answer->getID()); + + queryfx( + $conn_w, + 'UPDATE %T SET targetPHID = %s WHERE targetPHID = %s', + 'ponder_comment', + $target->getPHID(), + $answer->getPHID()); + } +} + +$conn_w->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130728.ponderuniquekey.sql b/resources/sql/patches/20130728.ponderuniquekey.sql new file mode 100644 index 0000000000..721be2ff6d --- /dev/null +++ b/resources/sql/patches/20130728.ponderuniquekey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_ponder.ponder_answer + ADD UNIQUE KEY `key_oneanswerperquestion` (questionID, authorPHID); diff --git a/resources/sql/patches/20130728.ponderxcomment.php b/resources/sql/patches/20130728.ponderxcomment.php new file mode 100644 index 0000000000..9a7413e351 --- /dev/null +++ b/resources/sql/patches/20130728.ponderxcomment.php @@ -0,0 +1,84 @@ +establishConnection('w'); +$conn_w->openTransaction(); + +echo pht('Migrating Ponder comments to %s...', 'ApplicationTransactions')."\n"; + +$rows = new LiskRawMigrationIterator($conn_w, 'ponder_comment'); +foreach ($rows as $row) { + + $id = $row['id']; + echo pht('Migrating %d...', $id)."\n"; + + $type = phid_get_type($row['targetPHID']); + switch ($type) { + case PonderQuestionPHIDType::TYPECONST: + $table_obj = $qtable; + $comment_obj = new PonderQuestionTransactionComment(); + break; + case PonderAnswerPHIDType::TYPECONST: + $table_obj = $atable; + $comment_obj = new PonderAnswerTransactionComment(); + break; + } + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + $type); + + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + $type); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, dateCreated, + dateModified) + VALUES (%s, %s, %s, %s, %s, %d, %s, %s, %d, %d, %d)', + $comment_obj->getTableName(), + $comment_phid, + $xaction_phid, + $row['authorPHID'], + 'public', + $row['authorPHID'], + 1, + $row['content'], + PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(), + 0, + $row['dateCreated'], + $row['dateModified']); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %s, %d, %s, %ns, %ns, %s, %s, %d, %d)', + $table_obj->getTableName(), + $xaction_phid, + $row['authorPHID'], + $row['targetPHID'], + 'public', + $row['authorPHID'], + $comment_phid, + 1, + PhabricatorTransactions::TYPE_COMMENT, + 'null', + 'null', + PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(), + '[]', + $row['dateCreated'], + $row['dateModified']); + +} + +$conn_w->saveTransaction(); + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130731.releephcutpointidentifier.sql b/resources/sql/patches/20130731.releephcutpointidentifier.sql new file mode 100644 index 0000000000..a7eb4ff38d --- /dev/null +++ b/resources/sql/patches/20130731.releephcutpointidentifier.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_branch + DROP cutPointCommitIdentifier; diff --git a/resources/sql/patches/20130731.releephproject.sql b/resources/sql/patches/20130731.releephproject.sql new file mode 100644 index 0000000000..a208df452d --- /dev/null +++ b/resources/sql/patches/20130731.releephproject.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_project + DROP projectID; diff --git a/resources/sql/patches/20130731.releephrepoid.sql b/resources/sql/patches/20130731.releephrepoid.sql new file mode 100644 index 0000000000..d4220892ec --- /dev/null +++ b/resources/sql/patches/20130731.releephrepoid.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_releeph.releeph_project + DROP repositoryID; diff --git a/resources/sql/patches/20130801.pastexactions.php b/resources/sql/patches/20130801.pastexactions.php new file mode 100644 index 0000000000..9d3d2c2853 --- /dev/null +++ b/resources/sql/patches/20130801.pastexactions.php @@ -0,0 +1,5 @@ +establishConnection('w'); + +echo pht('Assigning PHIDs to Herald Rules...')."\n"; + +foreach (new LiskMigrationIterator(new HeraldRule()) as $rule) { + $id = $rule->getID(); + echo pht('Rule %d.', $id)."\n"; + + if ($rule->getPHID()) { + continue; + } + + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + PhabricatorPHID::generateNewPHID(HeraldRulePHIDType::TYPECONST), + $rule->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130802.heraldphidukey.sql b/resources/sql/patches/20130802.heraldphidukey.sql new file mode 100644 index 0000000000..7b6f20a641 --- /dev/null +++ b/resources/sql/patches/20130802.heraldphidukey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_herald.herald_rule + ADD UNIQUE KEY (phid); diff --git a/resources/sql/patches/20130802.heraldxactions.sql b/resources/sql/patches/20130802.heraldxactions.sql new file mode 100644 index 0000000000..8bfd947a55 --- /dev/null +++ b/resources/sql/patches/20130802.heraldxactions.sql @@ -0,0 +1,40 @@ +CREATE TABLE {$NAMESPACE}_herald.herald_ruletransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_herald.herald_ruletransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130805.pasteedges.sql b/resources/sql/patches/20130805.pasteedges.sql new file mode 100644 index 0000000000..6a55d8c2bd --- /dev/null +++ b/resources/sql/patches/20130805.pasteedges.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_pastebin.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pastebin.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130805.pastemailkey.sql b/resources/sql/patches/20130805.pastemailkey.sql new file mode 100644 index 0000000000..ef1b6523b9 --- /dev/null +++ b/resources/sql/patches/20130805.pastemailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_pastebin.pastebin_paste + ADD COLUMN `mailKey` varchar(20) NOT NULL; diff --git a/resources/sql/patches/20130805.pastemailkeypop.php b/resources/sql/patches/20130805.pastemailkeypop.php new file mode 100644 index 0000000000..bb2d51ded5 --- /dev/null +++ b/resources/sql/patches/20130805.pastemailkeypop.php @@ -0,0 +1,27 @@ +openTransaction(); +$conn_w = $table->establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $paste) { + $id = $paste->getID(); + + echo "P{$id}: "; + if (!$paste->getMailKey()) { + queryfx( + $conn_w, + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $paste->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + echo pht('Generated Key')."\n"; + } else { + echo "-\n"; + } +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130814.usercustom.sql b/resources/sql/patches/20130814.usercustom.sql new file mode 100644 index 0000000000..d967dd5203 --- /dev/null +++ b/resources/sql/patches/20130814.usercustom.sql @@ -0,0 +1,7 @@ +CREATE TABLE {$NAMESPACE}_user.user_configuredcustomfieldstorage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + fieldIndex CHAR(12) NOT NULL COLLATE utf8_bin, + fieldValue LONGTEXT NOT NULL, + UNIQUE KEY (objectPHID, fieldIndex) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130820.file-mailkey-populate.php b/resources/sql/patches/20130820.file-mailkey-populate.php new file mode 100644 index 0000000000..2cf6371c4d --- /dev/null +++ b/resources/sql/patches/20130820.file-mailkey-populate.php @@ -0,0 +1,38 @@ +getTableName(); + +$conn_w = $table->establishConnection('w'); +$conn_w->openTransaction(); + +$sql = array(); +foreach (new LiskRawMigrationIterator($conn_w, 'file') as $row) { + // NOTE: MySQL requires that the INSERT specify all columns which don't + // have default values when configured in strict mode. This query will + // never actually insert rows, but we need to hand it values anyway. + + $sql[] = qsprintf( + $conn_w, + '(%d, %s, 0, 0, 0, 0, 0, 0, 0, 0)', + $row['id'], + Filesystem::readRandomCharacters(20)); +} + +if ($sql) { + foreach (PhabricatorLiskDAO::chunkSQL($sql) as $chunk) { + queryfx( + $conn_w, + 'INSERT INTO %T + (id, mailKey, phid, byteSize, storageEngine, storageFormat, + storageHandle, dateCreated, dateModified, metadata) VALUES %LQ '. + 'ON DUPLICATE KEY UPDATE mailKey = VALUES(mailKey)', + $table_name, + $chunk); + } +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130820.filemailkey.sql b/resources/sql/patches/20130820.filemailkey.sql new file mode 100644 index 0000000000..7daa46a609 --- /dev/null +++ b/resources/sql/patches/20130820.filemailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD `mailKey` varchar(20) NOT NULL; diff --git a/resources/sql/patches/20130820.filexactions.sql b/resources/sql/patches/20130820.filexactions.sql new file mode 100644 index 0000000000..5febdc2710 --- /dev/null +++ b/resources/sql/patches/20130820.filexactions.sql @@ -0,0 +1,41 @@ +CREATE TABLE {$NAMESPACE}_file.file_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_file.file_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + UNIQUE KEY `key_draft` (authorPHID, transactionPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130820.releephxactions.sql b/resources/sql/patches/20130820.releephxactions.sql new file mode 100644 index 0000000000..c90057ef6f --- /dev/null +++ b/resources/sql/patches/20130820.releephxactions.sql @@ -0,0 +1,43 @@ +CREATE TABLE {$NAMESPACE}_releeph.releeph_projecttransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_releeph.releeph_branchtransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130826.divinernode.sql b/resources/sql/patches/20130826.divinernode.sql new file mode 100644 index 0000000000..265a7769b5 --- /dev/null +++ b/resources/sql/patches/20130826.divinernode.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_diviner.diviner_livesymbol + ADD nodeHash VARCHAR(64) COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_diviner.diviner_livesymbol + ADD UNIQUE KEY (nodeHash); diff --git a/resources/sql/patches/20130912.maniphest.1.touch.sql b/resources/sql/patches/20130912.maniphest.1.touch.sql new file mode 100644 index 0000000000..a44802246c --- /dev/null +++ b/resources/sql/patches/20130912.maniphest.1.touch.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_maniphest.maniphest_touch; diff --git a/resources/sql/patches/20130912.maniphest.2.created.sql b/resources/sql/patches/20130912.maniphest.2.created.sql new file mode 100644 index 0000000000..dbd259d903 --- /dev/null +++ b/resources/sql/patches/20130912.maniphest.2.created.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD KEY `key_dateCreated` (dateCreated); diff --git a/resources/sql/patches/20130912.maniphest.3.nameindex.sql b/resources/sql/patches/20130912.maniphest.3.nameindex.sql new file mode 100644 index 0000000000..a02764ec38 --- /dev/null +++ b/resources/sql/patches/20130912.maniphest.3.nameindex.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_nameindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + indexedObjectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + indexedObjectName VARCHAR(128) NOT NULL, + + UNIQUE KEY `key_phid` (indexedObjectPHID), + KEY `key_name` (indexedObjectName) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130912.maniphest.4.fillindex.php b/resources/sql/patches/20130912.maniphest.4.fillindex.php new file mode 100644 index 0000000000..4dfaff8eb4 --- /dev/null +++ b/resources/sql/patches/20130912.maniphest.4.fillindex.php @@ -0,0 +1,5 @@ +establishConnection('w'); +$table_name = id(new ManiphestCustomFieldStorage())->getTableName(); + +$rows = new LiskRawMigrationIterator($conn_w, 'maniphest_taskauxiliarystorage'); + +echo pht('Migrating custom storage for Maniphest fields...')."\n"; +foreach ($rows as $row) { + $phid = $row['taskPHID']; + $name = $row['name']; + + echo pht('Migrating %s / %s...', $phid, $name)."\n"; + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T (objectPHID, fieldIndex, fieldValue) + VALUES (%s, %s, %s)', + $table_name, + $phid, + PhabricatorHash::digestForIndex('std:maniphest:'.$name), + $row['value']); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130915.maniphestqdrop.sql b/resources/sql/patches/20130915.maniphestqdrop.sql new file mode 100644 index 0000000000..a9f54884d2 --- /dev/null +++ b/resources/sql/patches/20130915.maniphestqdrop.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS {$NAMESPACE}_maniphest.maniphest_savedquery; diff --git a/resources/sql/patches/20130919.mfieldconf.php b/resources/sql/patches/20130919.mfieldconf.php new file mode 100644 index 0000000000..c79521acbc --- /dev/null +++ b/resources/sql/patches/20130919.mfieldconf.php @@ -0,0 +1,66 @@ + $spec) { + $new_spec = array(); + + foreach ($spec as $key => $value) { + switch ($key) { + case 'label': + $new_spec['name'] = $value; + break; + case 'required': + case 'default': + case 'caption': + case 'options': + $new_spec[$key] = $value; + break; + case 'checkbox-label': + $new_spec['strings']['edit.checkbox'] = $value; + break; + case 'checkbox-value': + $new_spec['strings']['view.yes'] = $value; + break; + case 'type': + switch ($value) { + case 'string': + $value = 'text'; + break; + case 'user': + $value = 'users'; + $new_spec['limit'] = 1; + break; + } + $new_spec['type'] = $value; + break; + case 'copy': + $new_spec['copy'] = $value; + break; + } + } + + $new[$field_key] = $new_spec; +} + +PhabricatorConfigEntry::loadConfigEntry($new_key) + ->setIsDeleted(0) + ->setValue($new) + ->save(); + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130920.repokeyspolicy.sql b/resources/sql/patches/20130920.repokeyspolicy.sql new file mode 100644 index 0000000000..6614d2594d --- /dev/null +++ b/resources/sql/patches/20130920.repokeyspolicy.sql @@ -0,0 +1,20 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_summary + ADD KEY `key_epoch` (epoch); + +ALTER TABLE {$NAMESPACE}_repository.repository + ADD KEY `key_name` (name); + +ALTER TABLE {$NAMESPACE}_repository.repository + ADD KEY `key_vcs` (versionControlSystem); + +ALTER TABLE {$NAMESPACE}_repository.repository + ADD viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_repository.repository + ADD editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_repository.repository + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +UPDATE {$NAMESPACE}_repository.repository + SET editPolicy = 'admin' WHERE editPolicy = ''; diff --git a/resources/sql/patches/20130921.mtransactions.sql b/resources/sql/patches/20130921.mtransactions.sql new file mode 100644 index 0000000000..312f44513c --- /dev/null +++ b/resources/sql/patches/20130921.mtransactions.sql @@ -0,0 +1,41 @@ +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_transactionpro ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_maniphest.maniphest_transaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion), + UNIQUE KEY `key_draft` (authorPHID, transactionPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130921.xmigratemaniphest.php b/resources/sql/patches/20130921.xmigratemaniphest.php new file mode 100644 index 0000000000..2f7f5952ce --- /dev/null +++ b/resources/sql/patches/20130921.xmigratemaniphest.php @@ -0,0 +1,148 @@ +establishConnection('w'); + +$rows = new LiskRawMigrationIterator($conn_w, 'maniphest_transaction'); +$conn_w->openTransaction(); + +// NOTE: These were the correct table names at the time of this patch. +$xaction_table_name = 'maniphest_transactionpro'; +$comment_table_name = 'maniphest_transaction_comment'; + +foreach ($rows as $row) { + $row_id = $row['id']; + $task_id = $row['taskID']; + + echo pht('Migrating row %d (%s)...', $row_id, "T{$task_id}")."\n"; + + $task_row = queryfx_one( + $conn_w, + 'SELECT phid FROM %T WHERE id = %d', + $task_table->getTableName(), + $task_id); + if (!$task_row) { + echo pht('Skipping, no such task.')."\n"; + continue; + } + + $task_phid = $task_row['phid']; + + $has_comment = strlen(trim($row['comments'])); + + $xaction_type = $row['transactionType']; + $xaction_old = $row['oldValue']; + $xaction_new = $row['newValue']; + $xaction_source = idx($row, 'contentSource', ''); + $xaction_meta = $row['metadata']; + + // Convert "aux" (auxiliary field) transactions to proper CustomField + // transactions. The formats are very similar, except that the type constant + // is different and the auxiliary key should be prefixed. + if ($xaction_type == 'aux') { + $xaction_meta = @json_decode($xaction_meta, true); + $xaction_meta = nonempty($xaction_meta, array()); + + $xaction_type = PhabricatorTransactions::TYPE_CUSTOMFIELD; + + $aux_key = idx($xaction_meta, 'aux:key'); + if (!preg_match('/^std:maniphest:/', $aux_key)) { + $aux_key = 'std:maniphest:'.$aux_key; + } + + $xaction_meta = array( + 'customfield:key' => $aux_key, + ); + + $xaction_meta = json_encode($xaction_meta); + } + + // If this transaction did something other than just leaving a comment, + // insert a new transaction for that action. If there was a comment (or + // a comment in addition to an action) we'll insert that below. + if ($row['transactionType'] != 'comment') { + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + ManiphestTaskPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %s, %d, %s, %ns, %ns, %s, %s, %d, %d)', + $xaction_table_name, + $xaction_phid, + $row['authorPHID'], + $task_phid, + 'public', + $row['authorPHID'], + null, + 0, + $xaction_type, + $xaction_old, + $xaction_new, + $xaction_source, + $xaction_meta, + $row['dateCreated'], + $row['dateModified']); + } + + // Now, if the old transaction has a comment, we insert an explicit new + // transaction for it. + if ($has_comment) { + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT, + ManiphestTaskPHIDType::TYPECONST); + $comment_version = 1; + + $comment_xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + ManiphestTaskPHIDType::TYPECONST); + + // Insert the comment data. + queryfx( + $conn_w, + 'INSERT INTO %T (phid, transactionPHID, authorPHID, viewPolicy, + editPolicy, commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %d, %s, %s, %d, %d, %d)', + $comment_table_name, + $comment_phid, + $comment_xaction_phid, + $row['authorPHID'], + 'public', + $row['authorPHID'], + $comment_version, + $row['comments'], + $xaction_source, + 0, + $row['dateCreated'], + $row['dateModified']); + + queryfx( + $conn_w, + 'INSERT INTO %T (phid, authorPHID, objectPHID, viewPolicy, editPolicy, + commentPHID, commentVersion, transactionType, oldValue, newValue, + contentSource, metadata, dateCreated, dateModified) + VALUES (%s, %s, %s, %s, %s, %s, %d, %s, %ns, %ns, %s, %s, %d, %d)', + $xaction_table_name, + $comment_xaction_phid, + $row['authorPHID'], + $task_phid, + 'public', + $row['authorPHID'], + $comment_phid, + $comment_version, + PhabricatorTransactions::TYPE_COMMENT, + $xaction_old, + $xaction_new, + $xaction_source, + $xaction_meta, + $row['dateCreated'], + $row['dateModified']); + } +} + +$conn_w->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130923.mrename.sql b/resources/sql/patches/20130923.mrename.sql new file mode 100644 index 0000000000..bbf53a90a6 --- /dev/null +++ b/resources/sql/patches/20130923.mrename.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_transaction + RENAME {$NAMESPACE}_maniphest.maniphest_transaction_legacy; + +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_transactionpro + RENAME {$NAMESPACE}_maniphest.maniphest_transaction; diff --git a/resources/sql/patches/20130924.mdraftkey.sql b/resources/sql/patches/20130924.mdraftkey.sql new file mode 100644 index 0000000000..677b97246d --- /dev/null +++ b/resources/sql/patches/20130924.mdraftkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_transaction_comment + DROP KEY `key_draft`; diff --git a/resources/sql/patches/20130925.mpolicy.sql b/resources/sql/patches/20130925.mpolicy.sql new file mode 100644 index 0000000000..c81d745e2e --- /dev/null +++ b/resources/sql/patches/20130925.mpolicy.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_task + ADD editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_maniphest.maniphest_task + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +UPDATE {$NAMESPACE}_maniphest.maniphest_task + SET editPolicy = 'users' WHERE editPolicy = ''; diff --git a/resources/sql/patches/20130925.xpolicy.sql b/resources/sql/patches/20130925.xpolicy.sql new file mode 100644 index 0000000000..374a67543f --- /dev/null +++ b/resources/sql/patches/20130925.xpolicy.sql @@ -0,0 +1,17 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_revision + ADD viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_differential.differential_revision + ADD editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET viewPolicy = 'users' WHERE viewPolicy = ''; + +UPDATE {$NAMESPACE}_differential.differential_revision + SET editPolicy = 'users' WHERE editPolicy = ''; + +ALTER TABLE {$NAMESPACE}_differential.differential_revision + ADD repositoryPHID VARCHAR(64) COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_differential.differential_revision + ADD KEY (repositoryPHID); diff --git a/resources/sql/patches/20130926.dcustom.sql b/resources/sql/patches/20130926.dcustom.sql new file mode 100644 index 0000000000..d81bdab0ff --- /dev/null +++ b/resources/sql/patches/20130926.dcustom.sql @@ -0,0 +1,29 @@ +CREATE TABLE {$NAMESPACE}_differential.differential_customfieldstorage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + fieldIndex CHAR(12) NOT NULL COLLATE utf8_bin, + fieldValue LONGTEXT NOT NULL, + UNIQUE KEY (objectPHID, fieldIndex) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_differential.differential_customfieldstringindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + indexKey VARCHAR(12) NOT NULL COLLATE utf8_bin, + indexValue LONGTEXT NOT NULL COLLATE utf8_general_ci, + + KEY `key_join` (objectPHID, indexKey, indexValue(64)), + KEY `key_find` (indexKey, indexValue(64)) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_differential.differential_customfieldnumericindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + indexKey VARCHAR(12) NOT NULL COLLATE utf8_bin, + indexValue BIGINT NOT NULL, + + KEY `key_join` (objectPHID, indexKey, indexValue), + KEY `key_find` (indexKey, indexValue) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20130926.dinkeys.sql b/resources/sql/patches/20130926.dinkeys.sql new file mode 100644 index 0000000000..7d7caf8b87 --- /dev/null +++ b/resources/sql/patches/20130926.dinkeys.sql @@ -0,0 +1,14 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + DROP KEY `key_draft`; + +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + ADD KEY `key_changeset` (changesetID); + +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + ADD KEY `key_draft` (authorPHID, transactionPHID); + +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + ADD KEY `key_revision` (revisionPHID); + +ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment + ADD KEY `key_legacy` (legacyCommentID); diff --git a/resources/sql/patches/20130926.dinline.php b/resources/sql/patches/20130926.dinline.php new file mode 100644 index 0000000000..7b67adc9b7 --- /dev/null +++ b/resources/sql/patches/20130926.dinline.php @@ -0,0 +1,89 @@ +establishConnection('w'); +$conn_w->openTransaction(); + +$src_table = 'differential_inlinecomment'; +$dst_table = 'differential_transaction_comment'; + +echo pht('Migrating Differential inline comments to new format...')."\n"; + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +$rows = new LiskRawMigrationIterator($conn_w, $src_table); +foreach ($rows as $row) { + $id = $row['id']; + + $revision_id = $row['revisionID']; + + echo pht('Migrating inline #%d (%s)...', $id, "D{$revision_id}")."\n"; + + $revision_row = queryfx_one( + $conn_w, + 'SELECT phid FROM %T WHERE id = %d', + $revision_table->getTableName(), + $revision_id); + if (!$revision_row) { + continue; + } + + $revision_phid = $revision_row['phid']; + + if ($row['commentID']) { + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + DifferentialRevisionPHIDType::TYPECONST); + } else { + $xaction_phid = null; + } + + $comment_phid = PhabricatorPHID::generateNewPHID( + PhabricatorPHIDConstants::PHID_TYPE_XCMT, + DifferentialRevisionPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T + (id, phid, transactionPHID, authorPHID, viewPolicy, editPolicy, + commentVersion, content, contentSource, isDeleted, + dateCreated, dateModified, revisionPHID, changesetID, + isNewFile, lineNumber, lineLength, hasReplies, legacyCommentID) + VALUES (%d, %s, %ns, %s, %s, %s, + %d, %s, %s, %d, + %d, %d, %s, %nd, + %d, %d, %d, %d, %nd)', + $dst_table, + + // id, phid, transactionPHID, authorPHID, viewPolicy, editPolicy + $row['id'], + $comment_phid, + $xaction_phid, + $row['authorPHID'], + 'public', + $row['authorPHID'], + + // commentVersion, content, contentSource, isDeleted + 1, + $row['content'], + $content_source, + 0, + + // dateCreated, dateModified, revisionPHID, changesetID + $row['dateCreated'], + $row['dateModified'], + $revision_phid, + $row['changesetID'], + + // isNewFile, lineNumber, lineLength, hasReplies, legacyCommentID + $row['isNewFile'], + $row['lineNumber'], + $row['lineLength'], + 0, + $row['commentID']); + +} + +$conn_w->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20130927.audiomacro.sql b/resources/sql/patches/20130927.audiomacro.sql new file mode 100644 index 0000000000..accb4a335c --- /dev/null +++ b/resources/sql/patches/20130927.audiomacro.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD audioPHID VARCHAR(64) COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_file.file_imagemacro + ADD audioBehavior VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_file.file_imagemacro + SET audioBehavior = 'audio:none' WHERE audioBehavior = ''; diff --git a/resources/sql/patches/20130929.filepolicy.sql b/resources/sql/patches/20130929.filepolicy.sql new file mode 100644 index 0000000000..85646a42f8 --- /dev/null +++ b/resources/sql/patches/20130929.filepolicy.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_file.file + ADD viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_file.file + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/patches/20131004.dxedgekey.sql b/resources/sql/patches/20131004.dxedgekey.sql new file mode 100644 index 0000000000..82bc066e4e --- /dev/null +++ b/resources/sql/patches/20131004.dxedgekey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.edge + ADD UNIQUE KEY `key_dst` (dst, type, src); diff --git a/resources/sql/patches/20131004.dxreviewers.php b/resources/sql/patches/20131004.dxreviewers.php new file mode 100644 index 0000000000..75a2ba53c1 --- /dev/null +++ b/resources/sql/patches/20131004.dxreviewers.php @@ -0,0 +1,50 @@ +establishConnection('w'); + +// NOTE: We migrate by revision because the relationship table doesn't have +// an "id" column. + +foreach (new LiskMigrationIterator($table) as $revision) { + $revision_id = $revision->getID(); + $revision_phid = $revision->getPHID(); + + echo pht('Migrating reviewers for %s...', "D{$revision_id}")."\n"; + + $reviewer_phids = queryfx_all( + $conn_w, + 'SELECT objectPHID FROM %T WHERE revisionID = %d + AND relation = %s ORDER BY sequence', + 'differential_relationship', + $revision_id, + 'revw'); + $reviewer_phids = ipull($reviewer_phids, 'objectPHID'); + + if (!$reviewer_phids) { + continue; + } + + $editor = new PhabricatorEdgeEditor(); + foreach ($reviewer_phids as $dst) { + if (phid_get_type($dst) == PhabricatorPHIDConstants::PHID_TYPE_UNKNOWN) { + // At least one old install ran into some issues here. Skip the row if we + // can't figure out what the destination PHID is. + continue; + } + + $editor->addEdge( + $revision_phid, + DifferentialRevisionHasReviewerEdgeType::EDGECONST, + $dst, + array( + 'data' => array( + 'status' => DifferentialReviewerStatus::STATUS_ADDED, + ), + )); + } + + $editor->save(); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131006.hdisable.sql b/resources/sql/patches/20131006.hdisable.sql new file mode 100644 index 0000000000..c7afca13d8 --- /dev/null +++ b/resources/sql/patches/20131006.hdisable.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_herald.herald_rule + ADD isDisabled INT UNSIGNED NOT NULL DEFAULT 0; diff --git a/resources/sql/patches/20131010.pstorage.sql b/resources/sql/patches/20131010.pstorage.sql new file mode 100644 index 0000000000..ec5c757b99 --- /dev/null +++ b/resources/sql/patches/20131010.pstorage.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_policy.policy ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + rules LONGTEXT NOT NULL COLLATE utf8_bin, + defaultAction VARCHAR(32) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131015.cpolicy.sql b/resources/sql/patches/20131015.cpolicy.sql new file mode 100644 index 0000000000..8f32a55c9a --- /dev/null +++ b/resources/sql/patches/20131015.cpolicy.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_countdown.countdown + ADD viewPolicy VARCHAR(64) NOT NULL; + +UPDATE {$NAMESPACE}_countdown.countdown + SET viewPolicy = 'users' WHERE viewPolicy = ''; diff --git a/resources/sql/patches/20131020.col1.sql b/resources/sql/patches/20131020.col1.sql new file mode 100644 index 0000000000..fb1a1a948b --- /dev/null +++ b/resources/sql/patches/20131020.col1.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_project.project_column ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + sequence INT UNSIGNED NOT NULL, + projectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + UNIQUE KEY `key_sequence` (projectPHID, sequence), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131020.harbormaster.sql b/resources/sql/patches/20131020.harbormaster.sql new file mode 100644 index 0000000000..eb7ffe4d2a --- /dev/null +++ b/resources/sql/patches/20131020.harbormaster.sql @@ -0,0 +1,74 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildable ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildablePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + containerPHID VARCHAR(64) COLLATE utf8_bin, + buildStatus VARCHAR(32) NOT NULL COLLATE utf8_bin, + buildableStatus VARCHAR(32) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_buildable` (buildablePHID), + KEY `key_container` (containerPHID), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + buildablePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + artifactType VARCHAR(32) NOT NULL COLLATE utf8_bin, + artifactIndex VARCHAR(12) NOT NULL COLLATE utf8_bin, + artifactKey VARCHAR(255) NOT NULL COLLATE utf8_bin, + artifactData LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_artifact` (buildablePHID, artifactType, artifactIndex), + UNIQUE KEY `key_artifact_type` (artifactType, artifactIndex), + KEY `key_garbagecollect` (artifactType, dateCreated) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplan ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + planStatus VARCHAR(32) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_status` (planStatus) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildplantransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_build ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildablePHID varchar(64) NOT NULL COLLATE utf8_bin, + buildPlanPHID varchar(64) NOT NULL COLLATE utf8_bin, + buildStatus VARCHAR(32) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_buildable` (buildablePHID), + KEY `key_plan` (buildPlanPHID), + KEY `key_status` (buildStatus) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131020.pcustom.sql b/resources/sql/patches/20131020.pcustom.sql new file mode 100644 index 0000000000..cf8efab13d --- /dev/null +++ b/resources/sql/patches/20131020.pcustom.sql @@ -0,0 +1,29 @@ +CREATE TABLE {$NAMESPACE}_project.project_customfieldstorage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + fieldIndex CHAR(12) NOT NULL COLLATE utf8_bin, + fieldValue LONGTEXT NOT NULL, + UNIQUE KEY (objectPHID, fieldIndex) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_project.project_customfieldstringindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + indexKey VARCHAR(12) NOT NULL COLLATE utf8_bin, + indexValue LONGTEXT NOT NULL COLLATE utf8_general_ci, + + KEY `key_join` (objectPHID, indexKey, indexValue(64)), + KEY `key_find` (indexKey, indexValue(64)) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_project.project_customfieldnumericindex ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + indexKey VARCHAR(12) NOT NULL COLLATE utf8_bin, + indexValue BIGINT NOT NULL, + + KEY `key_join` (objectPHID, indexKey, indexValue), + KEY `key_find` (indexKey, indexValue) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131020.pxaction.sql b/resources/sql/patches/20131020.pxaction.sql new file mode 100644 index 0000000000..aaed5126d5 --- /dev/null +++ b/resources/sql/patches/20131020.pxaction.sql @@ -0,0 +1,24 @@ +RENAME TABLE {$NAMESPACE}_project.project_transaction + TO {$NAMESPACE}_project.project_legacytransaction; + +CREATE TABLE {$NAMESPACE}_project.project_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131020.pxactionmig.php b/resources/sql/patches/20131020.pxactionmig.php new file mode 100644 index 0000000000..9a7b82f3e8 --- /dev/null +++ b/resources/sql/patches/20131020.pxactionmig.php @@ -0,0 +1,91 @@ +establishConnection('w'); +$conn_w->openTransaction(); + +$src_table = 'project_legacytransaction'; +$dst_table = 'project_transaction'; + +echo pht('Migrating Project transactions to new format...')."\n"; + +$content_source = PhabricatorContentSource::newForSource( + PhabricatorOldWorldContentSource::SOURCECONST)->serialize(); + +$rows = new LiskRawMigrationIterator($conn_w, $src_table); +foreach ($rows as $row) { + $id = $row['id']; + + $project_id = $row['projectID']; + + echo pht('Migrating transaction #%d (Project %d)...', $id, $project_id)."\n"; + + $project_row = queryfx_one( + $conn_w, + 'SELECT phid FROM %T WHERE id = %d', + $project_table->getTableName(), + $project_id); + if (!$project_row) { + continue; + } + + $project_phid = $project_row['phid']; + + $type_map = array( + 'name' => PhabricatorProjectNameTransaction::TRANSACTIONTYPE, + 'members' => PhabricatorProjectTransaction::TYPE_MEMBERS, + 'status' => PhabricatorProjectStatusTransaction::TRANSACTIONTYPE, + 'canview' => PhabricatorTransactions::TYPE_VIEW_POLICY, + 'canedit' => PhabricatorTransactions::TYPE_EDIT_POLICY, + 'canjoin' => PhabricatorTransactions::TYPE_JOIN_POLICY, + ); + + $new_type = idx($type_map, $row['transactionType']); + if (!$new_type) { + continue; + } + + $xaction_phid = PhabricatorPHID::generateNewPHID( + PhabricatorApplicationTransactionTransactionPHIDType::TYPECONST, + PhabricatorProjectProjectPHIDType::TYPECONST); + + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T + (phid, authorPHID, objectPHID, + viewPolicy, editPolicy, commentPHID, commentVersion, transactionType, + oldValue, newValue, contentSource, metadata, + dateCreated, dateModified) + VALUES + (%s, %s, %s, + %s, %s, %ns, %d, %s, + %s, %s, %s, %s, + %d, %d)', + $dst_table, + + // PHID, Author, Object + $xaction_phid, + $row['authorPHID'], + $project_phid, + + // View, Edit, Comment, Version, Type + 'public', + $row['authorPHID'], + null, + 0, + $new_type, + + // Old, New, Source, Meta, + $row['oldValue'], + $row['newValue'], + $content_source, + '{}', + + // Created, Modified + $row['dateCreated'], + $row['dateModified']); + +} + +$conn_w->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131025.repopush.sql b/resources/sql/patches/20131025.repopush.sql new file mode 100644 index 0000000000..22f60c3cef --- /dev/null +++ b/resources/sql/patches/20131025.repopush.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD COLUMN pushPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_repository.repository + SET pushPolicy = 'users' WHERE pushPolicy = ''; diff --git a/resources/sql/patches/20131026.commitstatus.sql b/resources/sql/patches/20131026.commitstatus.sql new file mode 100644 index 0000000000..373fbddf3c --- /dev/null +++ b/resources/sql/patches/20131026.commitstatus.sql @@ -0,0 +1,8 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_commit + ADD COLUMN importStatus INT UNSIGNED NOT NULL COLLATE utf8_bin; + +UPDATE {$NAMESPACE}_repository.repository_commit + SET importStatus = 15; + +ALTER TABLE {$NAMESPACE}_repository.repository_commit + ADD KEY (repositoryID, importStatus); diff --git a/resources/sql/patches/20131030.repostatusmessage.sql b/resources/sql/patches/20131030.repostatusmessage.sql new file mode 100644 index 0000000000..17ee068368 --- /dev/null +++ b/resources/sql/patches/20131030.repostatusmessage.sql @@ -0,0 +1,9 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_statusmessage ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + repositoryID INT UNSIGNED NOT NULL, + statusType VARCHAR(32) NOT NULL COLLATE utf8_bin, + statusCode VARCHAR(32) NOT NULL COLLATE utf8_bin, + parameters LONGTEXT NOT NULL, + epoch INT UNSIGNED NOT NULL, + UNIQUE KEY (repositoryID, statusType) +) ENGINE=InnoDB, CHARSET utf8; diff --git a/resources/sql/patches/20131031.vcspassword.sql b/resources/sql/patches/20131031.vcspassword.sql new file mode 100644 index 0000000000..017600625c --- /dev/null +++ b/resources/sql/patches/20131031.vcspassword.sql @@ -0,0 +1,8 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_vcspassword ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + userPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + passwordHash VARCHAR(50) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (userPHID) +) ENGINE=InnoDB, CHARSET utf8; diff --git a/resources/sql/patches/20131105.buildstep.sql b/resources/sql/patches/20131105.buildstep.sql new file mode 100644 index 0000000000..714e9a3088 --- /dev/null +++ b/resources/sql/patches/20131105.buildstep.sql @@ -0,0 +1,11 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildstep ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildPlanPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + className VARCHAR(255) NOT NULL COLLATE utf8_bin, + details LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_plan` (buildPlanPHID), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131106.diffphid.1.col.sql b/resources/sql/patches/20131106.diffphid.1.col.sql new file mode 100644 index 0000000000..d0a4fd5538 --- /dev/null +++ b/resources/sql/patches/20131106.diffphid.1.col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + ADD phid VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER id; diff --git a/resources/sql/patches/20131106.diffphid.2.mig.php b/resources/sql/patches/20131106.diffphid.2.mig.php new file mode 100644 index 0000000000..7976c910eb --- /dev/null +++ b/resources/sql/patches/20131106.diffphid.2.mig.php @@ -0,0 +1,47 @@ +establishConnection('w'); + +$size = 1000; + +$row_iter = id(new LiskMigrationIterator($diff_table))->setPageSize($size); +$chunk_iter = new PhutilChunkedIterator($row_iter, $size); + +foreach ($chunk_iter as $chunk) { + $sql = array(); + + foreach ($chunk as $diff) { + $id = $diff->getID(); + echo pht('Migrating diff ID %d...', $id)."\n"; + + $phid = $diff->getPHID(); + if (strlen($phid)) { + continue; + } + + $type_diff = DifferentialDiffPHIDType::TYPECONST; + $new_phid = PhabricatorPHID::generateNewPHID($type_diff); + + $sql[] = qsprintf( + $conn_w, + '(%d, %s)', + $id, + $new_phid); + } + + if (!$sql) { + continue; + } + + foreach (PhabricatorLiskDAO::chunkSQL($sql) as $sql_chunk) { + queryfx( + $conn_w, + 'INSERT IGNORE INTO %T (id, phid) VALUES %LQ + ON DUPLICATE KEY UPDATE phid = VALUES(phid)', + $diff_table->getTableName(), + $sql_chunk); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131106.diffphid.3.key.sql b/resources/sql/patches/20131106.diffphid.3.key.sql new file mode 100644 index 0000000000..63d68dd89b --- /dev/null +++ b/resources/sql/patches/20131106.diffphid.3.key.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_differential.differential_diff + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/patches/20131106.nuance-v0.sql b/resources/sql/patches/20131106.nuance-v0.sql new file mode 100644 index 0000000000..8041b70ac6 --- /dev/null +++ b/resources/sql/patches/20131106.nuance-v0.sql @@ -0,0 +1,259 @@ +CREATE TABLE {$NAMESPACE}_nuance.nuance_item ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + ownerPHID VARCHAR(64) COLLATE utf8_bin, + requestorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + sourcePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + sourceLabel VARCHAR(255), + status INT UNSIGNED NOT NULL, + data longtext NOT NULL COLLATE utf8_bin, + mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + dateNuanced INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_source` (sourcePHID, status, dateNuanced, id), + KEY `key_owner` (ownerPHID, status, dateNuanced, id), + KEY `key_contacter` (requestorPHID, status, dateNuanced, id) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_itemtransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_itemtransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_source ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255), + type INT UNSIGNED NOT NULL, + data longtext NOT NULL COLLATE utf8_bin, + mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL, + editPolicy VARCHAR(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + KEY `key_type` (type, dateModified) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_sourcetransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_sourcetransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_queue ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255), + mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL, + editPolicy VARCHAR(64) NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_queuetransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_queuetransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_queueitem ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + queuePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + itemPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + itemStatus INT UNSIGNED NOT NULL, + itemDateNuanced INT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_one_per_queue` (itemPHID, queuePHID), + KEY `key_queue` (queuePHID, itemStatus, itemDateNuanced, id) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_requestor ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + data longtext NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_requestortransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_requestortransaction_comment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + transactionPHID VARCHAR(64) COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + content LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + isDeleted BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_version` (transactionPHID, commentVersion) + +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.nuance_requestorsource ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + requestorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + sourcePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + sourceKey VARCHAR(128) NOT NULL COLLATE utf8_bin, + data LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_requestor` (requestorPHID, id), + KEY `key_source` (sourcePHID, id), + UNIQUE KEY `key_source_key` (sourcePHID, sourceKey) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_nuance.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131107.buildlog.sql b/resources/sql/patches/20131107.buildlog.sql new file mode 100644 index 0000000000..e761b46c9a --- /dev/null +++ b/resources/sql/patches/20131107.buildlog.sql @@ -0,0 +1,26 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildStepPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + logSource VARCHAR(255) NULL COLLATE utf8_bin, + logType VARCHAR(255) NULL COLLATE utf8_bin, + duration INT UNSIGNED NULL, + live BOOLEAN NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_build` (buildPHID, buildStepPHID), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_build +ADD COLUMN cancelRequested BOOLEAN NOT NULL; + +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlogchunk ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + logID INT UNSIGNED NOT NULL COLLATE utf8_bin, + encoding VARCHAR(30) NOT NULL COLLATE utf8_bin, + size LONG NULL, + chunk LONGBLOB NOT NULL, + KEY `key_log` (logID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131112.userverified.1.col.sql b/resources/sql/patches/20131112.userverified.1.col.sql new file mode 100644 index 0000000000..0612e79825 --- /dev/null +++ b/resources/sql/patches/20131112.userverified.1.col.sql @@ -0,0 +1,10 @@ +ALTER TABLE {$NAMESPACE}_user.user + ADD isEmailVerified INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_user.user + ADD isApproved INT UNSIGNED NOT NULL; + +ALTER TABLE {$NAMESPACE}_user.user + ADD KEY `key_approved` (isApproved); + +UPDATE {$NAMESPACE}_user.user SET isApproved = 1; diff --git a/resources/sql/patches/20131112.userverified.2.mig.php b/resources/sql/patches/20131112.userverified.2.mig.php new file mode 100644 index 0000000000..a8c231ec20 --- /dev/null +++ b/resources/sql/patches/20131112.userverified.2.mig.php @@ -0,0 +1,33 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $user) { + $username = $user->getUsername(); + echo pht('Migrating %s...', $username)."\n"; + if ($user->getIsEmailVerified()) { + // Email already verified. + continue; + } + + $primary = $user->loadPrimaryEmail(); + if (!$primary) { + // No primary email. + continue; + } + + if (!$primary->getIsVerified()) { + // Primary email not verified. + continue; + } + + // Primary email is verified, so mark the account as verified. + queryfx( + $conn_w, + 'UPDATE %T SET isEmailVerified = 1 WHERE id = %d', + $table->getTableName(), + $user->getID()); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131118.ownerorder.php b/resources/sql/patches/20131118.ownerorder.php new file mode 100644 index 0000000000..a3a5659946 --- /dev/null +++ b/resources/sql/patches/20131118.ownerorder.php @@ -0,0 +1,42 @@ +establishConnection('w'); + +$user_table = new PhabricatorUser(); +$user_conn = $user_table->establishConnection('r'); + +foreach (new LiskMigrationIterator($table) as $task) { + $id = $task->getID(); + + echo pht('Checking task %s...', "T{$id}")."\n"; + $owner_phid = $task->getOwnerPHID(); + + if (!$owner_phid && !$task->getOwnerOrdering()) { + // No owner and no ordering; we're all set. + continue; + } + + $owner_row = queryfx_one( + $user_conn, + 'SELECT * FROM %T WHERE phid = %s', + $user_table->getTableName(), + $owner_phid); + + if ($owner_row) { + $value = $owner_row['userName']; + } else { + $value = null; + } + + if ($value !== $task->getOwnerOrdering()) { + queryfx( + $conn_w, + 'UPDATE %T SET ownerOrdering = %ns WHERE id = %d', + $table->getTableName(), + $value, + $task->getID()); + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131119.passphrase.sql b/resources/sql/patches/20131119.passphrase.sql new file mode 100644 index 0000000000..3e1761867c --- /dev/null +++ b/resources/sql/patches/20131119.passphrase.sql @@ -0,0 +1,46 @@ +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credential ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) NOT NULL, + credentialType VARCHAR(64) NOT NULL COLLATE utf8_bin, + providesType VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + description LONGTEXT NOT NULL COLLATE utf8_bin, + username VARCHAR(255) NOT NULL, + secretID INT UNSIGNED, + isDestroyed BOOL NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_type` (credentialType), + KEY `key_provides` (providesType), + UNIQUE KEY `key_secret` (secretID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_secret ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + secretData LONGBLOB NOT NULL +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_passphrase.passphrase_credentialtransaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + commentPHID VARCHAR(64) COLLATE utf8_bin, + commentVersion INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + + UNIQUE KEY `key_phid` (phid), + KEY `key_object` (objectPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131120.nuancesourcetype.sql b/resources/sql/patches/20131120.nuancesourcetype.sql new file mode 100644 index 0000000000..14133e605e --- /dev/null +++ b/resources/sql/patches/20131120.nuancesourcetype.sql @@ -0,0 +1,11 @@ +ALTER TABLE {$NAMESPACE}_nuance.nuance_source + DROP KEY key_type; + +ALTER TABLE {$NAMESPACE}_nuance.nuance_source + DROP COLUMN type; + +ALTER TABLE {$NAMESPACE}_nuance.nuance_source + ADD type VARCHAR(32) NOT NULL COLLATE utf8_bin AFTER name; + +ALTER TABLE {$NAMESPACE}_nuance.nuance_source + ADD KEY `key_type` (type, dateModified); diff --git a/resources/sql/patches/20131121.passphraseedge.sql b/resources/sql/patches/20131121.passphraseedge.sql new file mode 100644 index 0000000000..38cfdb0453 --- /dev/null +++ b/resources/sql/patches/20131121.passphraseedge.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_passphrase.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_passphrase.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131121.repocredentials.1.col.sql b/resources/sql/patches/20131121.repocredentials.1.col.sql new file mode 100644 index 0000000000..9471c7189b --- /dev/null +++ b/resources/sql/patches/20131121.repocredentials.1.col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository + ADD credentialPHID VARCHAR(64) COLLATE utf8_bin; diff --git a/resources/sql/patches/20131121.repocredentials.2.mig.php b/resources/sql/patches/20131121.repocredentials.2.mig.php new file mode 100644 index 0000000000..a8cd6e5029 --- /dev/null +++ b/resources/sql/patches/20131121.repocredentials.2.mig.php @@ -0,0 +1,7 @@ +establishConnection('w'); +$viewer = PhabricatorUser::getOmnipotentUser(); + +// Since HarbormasterBuildStepQuery has been updated to handle the +// correct order, we can't use the built in database access. + +foreach (new LiskMigrationIterator($table) as $plan) { + $planname = $plan->getName(); + echo pht('Migrating steps in %s...', $planname)."\n"; + + $rows = queryfx_all( + $conn_w, + 'SELECT id, sequence FROM harbormaster_buildstep '. + 'WHERE buildPlanPHID = %s '. + 'ORDER BY id ASC', + $plan->getPHID()); + + $sequence = 1; + foreach ($rows as $row) { + $id = $row['id']; + $existing = $row['sequence']; + if ($existing != 0) { + echo " - ".pht('%d (already migrated)...', $id)."\n"; + continue; + } + echo " - ".pht('%d to position %s...', $id, $sequence)."\n"; + queryfx( + $conn_w, + 'UPDATE harbormaster_buildstep '. + 'SET sequence = %d '. + 'WHERE id = %d', + $sequence, + $id); + $sequence++; + } +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131205.buildtargets.sql b/resources/sql/patches/20131205.buildtargets.sql new file mode 100644 index 0000000000..cf8e33af08 --- /dev/null +++ b/resources/sql/patches/20131205.buildtargets.sql @@ -0,0 +1,32 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildtarget ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + buildStepPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + className VARCHAR(255) NOT NULL COLLATE utf8_bin, + details LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + variables LONGTEXT CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY `key_build` (buildPHID, buildStepPHID), + UNIQUE KEY `key_phid` (phid) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +TRUNCATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog; +TRUNCATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlogchunk; +TRUNCATE TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog +DROP COLUMN buildPHID; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog +DROP COLUMN buildStepPHID; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact +DROP COLUMN buildablePHID; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildlog +ADD COLUMN buildTargetPHID VARCHAR(64) NOT NULL COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildartifact +ADD COLUMN buildTargetPHID VARCHAR(64) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/20131206.phragment.sql b/resources/sql/patches/20131206.phragment.sql new file mode 100644 index 0000000000..21d3dfd148 --- /dev/null +++ b/resources/sql/patches/20131206.phragment.sql @@ -0,0 +1,24 @@ +CREATE TABLE {$NAMESPACE}_phragment.phragment_fragment ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + path VARCHAR(254) NOT NULL COLLATE utf8_bin, + depth INT UNSIGNED NOT NULL, + latestVersionPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_path` (path) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phragment.phragment_fragmentversion ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + sequence INT UNSIGNED NOT NULL, + fragmentPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + filePHID VARCHAR(64) NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_version` (fragmentPHID, sequence) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131206.phragmentnull.sql b/resources/sql/patches/20131206.phragmentnull.sql new file mode 100644 index 0000000000..01dbd9bfe3 --- /dev/null +++ b/resources/sql/patches/20131206.phragmentnull.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phragment.phragment_fragment +MODIFY latestVersionPHID VARCHAR(64) NULL; diff --git a/resources/sql/patches/20131208.phragmentsnapshot.sql b/resources/sql/patches/20131208.phragmentsnapshot.sql new file mode 100644 index 0000000000..ccf9f9b184 --- /dev/null +++ b/resources/sql/patches/20131208.phragmentsnapshot.sql @@ -0,0 +1,21 @@ +CREATE TABLE {$NAMESPACE}_phragment.phragment_snapshot ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + primaryFragmentPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(192) NOT NULL COLLATE utf8_bin, + description LONGTEXT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_phid` (phid), + UNIQUE KEY `key_name` (primaryFragmentPHID, name) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phragment.phragment_snapshotchild ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + snapshotPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + fragmentPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + fragmentVersionPHID VARCHAR(64) NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY `key_child` (snapshotPHID, fragmentPHID, fragmentVersionPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131211.phragmentedges.sql b/resources/sql/patches/20131211.phragmentedges.sql new file mode 100644 index 0000000000..51eead5c5d --- /dev/null +++ b/resources/sql/patches/20131211.phragmentedges.sql @@ -0,0 +1,15 @@ +CREATE TABLE {$NAMESPACE}_phragment.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phragment.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/20131217.pushlogphid.1.col.sql b/resources/sql/patches/20131217.pushlogphid.1.col.sql new file mode 100644 index 0000000000..d52daa2b27 --- /dev/null +++ b/resources/sql/patches/20131217.pushlogphid.1.col.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + ADD phid VARCHAR(64) NOT NULL COLLATE utf8_bin AFTER id; diff --git a/resources/sql/patches/20131217.pushlogphid.2.mig.php b/resources/sql/patches/20131217.pushlogphid.2.mig.php new file mode 100644 index 0000000000..5b253e2289 --- /dev/null +++ b/resources/sql/patches/20131217.pushlogphid.2.mig.php @@ -0,0 +1,20 @@ +establishConnection('w'); + +echo pht('Assigning PHIDs to push logs...')."\n"; + +$logs = new LiskMigrationIterator($table); +foreach ($logs as $log) { + $id = $log->getID(); + echo pht('Updating %s...', $id)."\n"; + queryfx( + $conn_w, + 'UPDATE %T SET phid = %s WHERE id = %d', + $table->getTableName(), + $log->generatePHID(), + $id); +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/20131217.pushlogphid.3.key.sql b/resources/sql/patches/20131217.pushlogphid.3.key.sql new file mode 100644 index 0000000000..6e618cb5c6 --- /dev/null +++ b/resources/sql/patches/20131217.pushlogphid.3.key.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_pushlog + ADD UNIQUE KEY `key_phid` (phid); diff --git a/resources/sql/patches/20131219.pxdrop.sql b/resources/sql/patches/20131219.pxdrop.sql new file mode 100644 index 0000000000..c4c2e3d035 --- /dev/null +++ b/resources/sql/patches/20131219.pxdrop.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_project.project_legacytransaction; diff --git a/resources/sql/patches/20131224.harbormanual.sql b/resources/sql/patches/20131224.harbormanual.sql new file mode 100644 index 0000000000..0ce5aba968 --- /dev/null +++ b/resources/sql/patches/20131224.harbormanual.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildable + ADD isManualBuildable BOOL NOT NULL; + +ALTER TABLE {$NAMESPACE}_harbormaster.harbormaster_buildable + ADD KEY `key_manual` (isManualBuildable); diff --git a/resources/sql/patches/20131227.heraldobject.sql b/resources/sql/patches/20131227.heraldobject.sql new file mode 100644 index 0000000000..04f886d9df --- /dev/null +++ b/resources/sql/patches/20131227.heraldobject.sql @@ -0,0 +1,5 @@ +ALTER TABLE {$NAMESPACE}_herald.herald_rule + ADD triggerObjectPHID VARCHAR(64) COLLATE utf8_bin; + +ALTER TABLE {$NAMESPACE}_herald.herald_rule + ADD KEY `key_trigger` (triggerObjectPHID); diff --git a/resources/sql/patches/20131231.dropshortcut.sql b/resources/sql/patches/20131231.dropshortcut.sql new file mode 100644 index 0000000000..fe507ba9ab --- /dev/null +++ b/resources/sql/patches/20131231.dropshortcut.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_repository.repository_shortcut; diff --git a/resources/sql/patches/20131302.maniphestvalue.sql b/resources/sql/patches/20131302.maniphestvalue.sql new file mode 100644 index 0000000000..bfcb9336f9 --- /dev/null +++ b/resources/sql/patches/20131302.maniphestvalue.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_maniphest.maniphest_taskauxiliarystorage + MODIFY value LONGTEXT COLLATE utf8_bin; diff --git a/resources/sql/patches/daemonstatus.sql b/resources/sql/patches/daemonstatus.sql new file mode 100644 index 0000000000..6a2f392495 --- /dev/null +++ b/resources/sql/patches/daemonstatus.sql @@ -0,0 +1,4 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD COLUMN `status` varchar(8) NOT NULL; + +UPDATE {$NAMESPACE}_daemon.daemon_log SET `status`='exit'; diff --git a/resources/sql/patches/daemonstatuskey.sql b/resources/sql/patches/daemonstatuskey.sql new file mode 100644 index 0000000000..9ce5291f8a --- /dev/null +++ b/resources/sql/patches/daemonstatuskey.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_daemon.daemon_log + ADD KEY `status` (`status`); diff --git a/resources/sql/patches/daemontaskarchive.sql b/resources/sql/patches/daemontaskarchive.sql new file mode 100644 index 0000000000..bad0027c3a --- /dev/null +++ b/resources/sql/patches/daemontaskarchive.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_worker.worker_archivetask ( + id INT UNSIGNED PRIMARY KEY, + taskClass VARCHAR(255) NOT NULL COLLATE utf8_bin, + leaseOwner VARCHAR(255) COLLATE utf8_bin, + leaseExpires INT UNSIGNED, + failureCount INT UNSIGNED NOT NULL, + dataID INT UNSIGNED NOT NULL, + result INT UNSIGNED NOT NULL, + duration BIGINT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + key(dateCreated) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/differentialbookmarks.sql b/resources/sql/patches/differentialbookmarks.sql new file mode 100644 index 0000000000..36d4d14ce4 --- /dev/null +++ b/resources/sql/patches/differentialbookmarks.sql @@ -0,0 +1,3 @@ +ALTER TABLE `{$NAMESPACE}_differential`.`differential_diff` + ADD `bookmark` VARCHAR(255) COLLATE utf8_general_ci DEFAULT NULL + AFTER `branch`; diff --git a/resources/sql/patches/draft-metadata.sql b/resources/sql/patches/draft-metadata.sql new file mode 100644 index 0000000000..ad9ecc894a --- /dev/null +++ b/resources/sql/patches/draft-metadata.sql @@ -0,0 +1,4 @@ +ALTER TABLE `{$NAMESPACE}_draft`.`draft` +ADD `metadata` longtext AFTER `draft`; + +UPDATE `{$NAMESPACE}_draft`.`draft` SET `metadata` = '[]'; diff --git a/resources/sql/patches/dropfileproxyimage.sql b/resources/sql/patches/dropfileproxyimage.sql new file mode 100644 index 0000000000..982c0ebf8d --- /dev/null +++ b/resources/sql/patches/dropfileproxyimage.sql @@ -0,0 +1 @@ +DROP TABLE {$NAMESPACE}_file.file_proxyimage; diff --git a/resources/sql/patches/drydockresourcetype.sql b/resources/sql/patches/drydockresourcetype.sql new file mode 100644 index 0000000000..f6a794d095 --- /dev/null +++ b/resources/sql/patches/drydockresourcetype.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease + ADD resourceType VARCHAR(128) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/drydocktaskid.sql b/resources/sql/patches/drydocktaskid.sql new file mode 100644 index 0000000000..7c3869d885 --- /dev/null +++ b/resources/sql/patches/drydocktaskid.sql @@ -0,0 +1 @@ +ALTER TABLE {$NAMESPACE}_drydock.drydock_lease ADD taskID INT UNSIGNED; diff --git a/resources/sql/patches/edgetype.sql b/resources/sql/patches/edgetype.sql new file mode 100644 index 0000000000..15dc5661aa --- /dev/null +++ b/resources/sql/patches/edgetype.sql @@ -0,0 +1,10 @@ +ALTER TABLE {$NAMESPACE}_phame.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_maniphest.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_repository.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_differential.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_file.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_user.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_project.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_metamta.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_harbormaster.edge MODIFY type int unsigned NOT NULL; +ALTER TABLE {$NAMESPACE}_ponder.edge MODIFY type int unsigned NOT NULL; diff --git a/resources/sql/patches/emailtableport.php b/resources/sql/patches/emailtableport.php index fb075b603c..d70f3341ff 100644 --- a/resources/sql/patches/emailtableport.php +++ b/resources/sql/patches/emailtableport.php @@ -1,43 +1,27 @@ establishConnection('r'); +$table->openTransaction(); +$conn = $table->establishConnection('w'); $emails = queryfx_all( $conn, - 'SELECT phid, email FROM %T', + 'SELECT phid, email FROM %T LOCK IN SHARE MODE', $table->getTableName()); $emails = ipull($emails, 'email', 'phid'); $etable = new PhabricatorUserEmail(); -$econn = $etable->establishConnection('w'); foreach ($emails as $phid => $email) { // NOTE: Grandfather all existing email in as primary / verified. We generate // verification codes because they are used for password resets, etc. - echo "Migrating '{$phid}'...\n"; + echo pht("Migrating '%s'...", $phid)."\n"; queryfx( - $econn, + $conn, 'INSERT INTO %T (userPHID, address, verificationCode, isVerified, isPrimary) VALUES (%s, %s, %s, 1, 1)', $etable->getTableName(), @@ -46,4 +30,5 @@ Filesystem::readRandomCharacters(24)); } -echo "Done.\n"; +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/emailtableremove.sql b/resources/sql/patches/emailtableremove.sql index be31125fec..9712d660dc 100644 --- a/resources/sql/patches/emailtableremove.sql +++ b/resources/sql/patches/emailtableremove.sql @@ -1 +1 @@ -ALTER TABLE {$NAMESPACE}_user.user DROP email; \ No newline at end of file +ALTER TABLE {$NAMESPACE}_user.user DROP email; diff --git a/resources/sql/patches/fact-raw.sql b/resources/sql/patches/fact-raw.sql new file mode 100644 index 0000000000..474dfb89c2 --- /dev/null +++ b/resources/sql/patches/fact-raw.sql @@ -0,0 +1,28 @@ +CREATE TABLE {$NAMESPACE}_fact.fact_raw ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + `factType` VARCHAR(32) NOT NULL COLLATE utf8_bin, + `objectPHID` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `objectA` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `valueX` BIGINT NOT NULL, + `valueY` BIGINT NOT NULL, + `epoch` INT UNSIGNED NOT NULL, + KEY (objectPHID), + KEY (factType, epoch), + KEY (factType, objectA, epoch) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_fact.fact_aggregate ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + `factType` VARCHAR(32) NOT NULL COLLATE utf8_bin, + `objectPHID` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `valueX` BIGINT NOT NULL, + UNIQUE KEY (factType, objectPHID), + KEY (factType, valueX) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_fact.fact_cursor ( + `id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + `name` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `position` VARCHAR(64) NOT NULL COLLATE utf8_bin, + UNIQUE KEY (name) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/harbormasterobject.sql b/resources/sql/patches/harbormasterobject.sql new file mode 100644 index 0000000000..f252ae8e5e --- /dev/null +++ b/resources/sql/patches/harbormasterobject.sql @@ -0,0 +1,23 @@ +CREATE TABLE {$NAMESPACE}_harbormaster.harbormaster_object ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(255) COLLATE utf8_general_ci, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_harbormaster.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/legalpad-mailkey-populate.php b/resources/sql/patches/legalpad-mailkey-populate.php new file mode 100644 index 0000000000..8aa2c593df --- /dev/null +++ b/resources/sql/patches/legalpad-mailkey-populate.php @@ -0,0 +1,25 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $document) { + $id = $document->getID(); + + echo pht('Document %s: ', $id); + if (!$document->getMailKey()) { + queryfx( + $document->establishConnection('w'), + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $document->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + echo pht('Generated Key')."\n"; + } else { + echo "-\n"; + } +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/legalpad-mailkey.sql b/resources/sql/patches/legalpad-mailkey.sql new file mode 100644 index 0000000000..b416f3518f --- /dev/null +++ b/resources/sql/patches/legalpad-mailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_legalpad`.legalpad_document + ADD mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/liskcounters-task.sql b/resources/sql/patches/liskcounters-task.sql new file mode 100644 index 0000000000..c75a7f1cdf --- /dev/null +++ b/resources/sql/patches/liskcounters-task.sql @@ -0,0 +1,8 @@ +ALTER TABLE `{$NAMESPACE}_worker`.worker_task + CHANGE id id INT UNSIGNED NOT NULL; + +RENAME TABLE `{$NAMESPACE}_worker`.worker_task + TO `{$NAMESPACE}_worker`.worker_activetask; + +UPDATE `{$NAMESPACE}_worker`.lisk_counter + SET counterName = 'worker_activetask' WHERE counterName = 'worker_task'; diff --git a/resources/sql/patches/liskcounters.php b/resources/sql/patches/liskcounters.php new file mode 100644 index 0000000000..198ed13742 --- /dev/null +++ b/resources/sql/patches/liskcounters.php @@ -0,0 +1,40 @@ +establishConnection('w'); + +$active_auto = head(queryfx_one( + $conn_w, + 'SELECT auto_increment FROM information_schema.tables + WHERE table_name = %s + AND table_schema = DATABASE()', + $old_table)); + +$active_max = head(queryfx_one( + $conn_w, + 'SELECT MAX(id) FROM %T', + $old_table)); + +$archive_max = head(queryfx_one( + $conn_w, + 'SELECT MAX(id) FROM %T', + $archive_table->getTableName())); + +$initial_counter = max((int)$active_auto, (int)$active_max, (int)$archive_max); + +queryfx( + $conn_w, + 'INSERT INTO %T (counterName, counterValue) + VALUES (%s, %d) + ON DUPLICATE KEY UPDATE counterValue = %d', + LiskDAO::COUNTER_TABLE_NAME, + $old_table, + $initial_counter + 1, + $initial_counter + 1); diff --git a/resources/sql/patches/liskcounters.sql b/resources/sql/patches/liskcounters.sql new file mode 100644 index 0000000000..f617a9699f --- /dev/null +++ b/resources/sql/patches/liskcounters.sql @@ -0,0 +1,9 @@ +CREATE TABLE `{$NAMESPACE}_harbormaster`.`lisk_counter` ( + counterName VARCHAR(64) COLLATE utf8_bin PRIMARY KEY, + counterValue BIGINT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `{$NAMESPACE}_worker`.`lisk_counter` ( + counterName VARCHAR(64) COLLATE utf8_bin PRIMARY KEY, + counterValue BIGINT UNSIGNED NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/maniphestxcache.sql b/resources/sql/patches/maniphestxcache.sql new file mode 100644 index 0000000000..131bb52bc1 --- /dev/null +++ b/resources/sql/patches/maniphestxcache.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_maniphest`.`maniphest_transaction` + DROP `cache`; diff --git a/resources/sql/patches/markupcache.sql b/resources/sql/patches/markupcache.sql new file mode 100644 index 0000000000..e13a236f25 --- /dev/null +++ b/resources/sql/patches/markupcache.sql @@ -0,0 +1,10 @@ +CREATE TABLE {$NAMESPACE}_cache.cache_markupcache ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + cacheKey VARCHAR(128) NOT NULL collate utf8_bin, + cacheData LONGTEXT NOT NULL COLLATE utf8_bin, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY (cacheKey), + KEY (dateCreated) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/migrate-differential-dependencies.php b/resources/sql/patches/migrate-differential-dependencies.php new file mode 100644 index 0000000000..c65165f9e4 --- /dev/null +++ b/resources/sql/patches/migrate-differential-dependencies.php @@ -0,0 +1,29 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $rev) { + $id = $rev->getID(); + echo pht('Revision %d: ', $id); + + $deps = $rev->getAttachedPHIDs(DifferentialRevisionPHIDType::TYPECONST); + if (!$deps) { + echo "-\n"; + continue; + } + + $editor = new PhabricatorEdgeEditor(); + foreach ($deps as $dep) { + $editor->addEdge( + $rev->getPHID(), + DifferentialRevisionDependsOnRevisionEdgeType::EDGECONST, + $dep); + } + $editor->save(); + echo pht('OKAY')."\n"; +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/migrate-maniphest-dependencies.php b/resources/sql/patches/migrate-maniphest-dependencies.php new file mode 100644 index 0000000000..1c607edd1d --- /dev/null +++ b/resources/sql/patches/migrate-maniphest-dependencies.php @@ -0,0 +1,3 @@ +establishConnection('w'); + +foreach (new LiskMigrationIterator($table) as $proj) { + $id = $proj->getID(); + echo pht('Project %d: ', $id); + + $members = queryfx_all( + $proj->establishConnection('w'), + 'SELECT userPHID FROM %T WHERE projectPHID = %s', + 'project_affiliation', + $proj->getPHID()); + + if (!$members) { + echo "-\n"; + continue; + } + + $members = ipull($members, 'userPHID'); + + $editor = new PhabricatorEdgeEditor(); + foreach ($members as $user_phid) { + $editor->addEdge( + $proj->getPHID(), + PhabricatorProjectProjectHasMemberEdgeType::EDGECONST, + $user_phid); + } + $editor->save(); + echo pht('OKAY')."\n"; +} + +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/owners-exclude.sql b/resources/sql/patches/owners-exclude.sql new file mode 100644 index 0000000000..6870c528b5 --- /dev/null +++ b/resources/sql/patches/owners-exclude.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_owners.owners_path + ADD excluded bool NOT NULL DEFAULT '0'; diff --git a/resources/sql/patches/pastepolicy.sql b/resources/sql/patches/pastepolicy.sql new file mode 100644 index 0000000000..9cde1b53b4 --- /dev/null +++ b/resources/sql/patches/pastepolicy.sql @@ -0,0 +1,5 @@ +ALTER TABLE `{$NAMESPACE}_pastebin`.`pastebin_paste` + ADD `viewPolicy` varchar(64) COLLATE utf8_bin; + +UPDATE `{$NAMESPACE}_pastebin`.`pastebin_paste` SET viewPolicy = 'users' + WHERE viewPolicy IS NULL; diff --git a/resources/sql/patches/phameblog.sql b/resources/sql/patches/phameblog.sql new file mode 100644 index 0000000000..74ae9c8f89 --- /dev/null +++ b/resources/sql/patches/phameblog.sql @@ -0,0 +1,30 @@ +CREATE TABLE {$NAMESPACE}_phame.phame_blog ( + `id` INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + `phid` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `name` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `description` LONGTEXT NOT NULL COLLATE utf8_bin, + `configData` LONGTEXT NOT NULL COLLATE utf8_bin, + `creatorPHID` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `dateCreated` INT UNSIGNED NOT NULL, + `dateModified` INT UNSIGNED NOT NULL, + UNIQUE KEY (`phid`) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phame.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_phame.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +ALTER TABLE {$NAMESPACE}_phame.phame_post + ADD KEY `instancePosts` (`visibility`, `datePublished`, `id`); diff --git a/resources/sql/patches/phamedomain.sql b/resources/sql/patches/phamedomain.sql new file mode 100644 index 0000000000..1feddd7ab4 --- /dev/null +++ b/resources/sql/patches/phamedomain.sql @@ -0,0 +1,4 @@ +ALTER TABLE `{$NAMESPACE}_phame`.`phame_blog` + ADD COLUMN `domain` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin + AFTER `description`, + ADD UNIQUE KEY (`domain`); diff --git a/resources/sql/patches/phameoneblog.sql b/resources/sql/patches/phameoneblog.sql new file mode 100644 index 0000000000..4796914d55 --- /dev/null +++ b/resources/sql/patches/phameoneblog.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_phame`.`phame_post` + ADD `blogPHID` varchar(64) COLLATE utf8_bin; diff --git a/resources/sql/patches/phamepolicy.sql b/resources/sql/patches/phamepolicy.sql new file mode 100644 index 0000000000..be86021e4e --- /dev/null +++ b/resources/sql/patches/phamepolicy.sql @@ -0,0 +1,17 @@ +ALTER TABLE `{$NAMESPACE}_phame`.`phame_blog` + ADD `viewPolicy` varchar(64) COLLATE utf8_bin; + +UPDATE `{$NAMESPACE}_phame`.`phame_blog` SET viewPolicy = 'users' + WHERE viewPolicy IS NULL; + +ALTER TABLE `{$NAMESPACE}_phame`.`phame_blog` + ADD `editPolicy` varchar(64) COLLATE utf8_bin; + +UPDATE `{$NAMESPACE}_phame`.`phame_blog` SET editPolicy = 'users' + WHERE editPolicy IS NULL; + +ALTER TABLE `{$NAMESPACE}_phame`.`phame_blog` + ADD `joinPolicy` varchar(64) COLLATE utf8_bin; + +UPDATE `{$NAMESPACE}_phame`.`phame_blog` SET joinPolicy = 'users' + WHERE joinPolicy IS NULL; diff --git a/resources/sql/patches/phiddrop.sql b/resources/sql/patches/phiddrop.sql index 53c95e5c20..6f3c3344d2 100644 --- a/resources/sql/patches/phiddrop.sql +++ b/resources/sql/patches/phiddrop.sql @@ -1 +1 @@ -DROP DATABASE IF EXISTS {$NAMESPACE}_phid; \ No newline at end of file +DROP DATABASE IF EXISTS {$NAMESPACE}_phid; diff --git a/resources/sql/patches/pholio.sql b/resources/sql/patches/pholio.sql new file mode 100644 index 0000000000..9dc443dd77 --- /dev/null +++ b/resources/sql/patches/pholio.sql @@ -0,0 +1,74 @@ +CREATE TABLE {$NAMESPACE}_pholio.pholio_mock ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(128) NOT NULL COLLATE utf8_general_ci, + originalName VARCHAR(128) NOT NULL COLLATE utf8_general_ci, + description LONGTEXT NOT NULL COLLATE utf8_general_ci, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, + coverPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + UNIQUE KEY (phid), + KEY (authorPHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.edge ( + src VARCHAR(64) NOT NULL COLLATE utf8_bin, + type VARCHAR(64) NOT NULL COLLATE utf8_bin, + dst VARCHAR(64) NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + seq INT UNSIGNED NOT NULL, + dataID INT UNSIGNED, + PRIMARY KEY (src, type, dst), + KEY (src, type, dateCreated, seq) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.edgedata ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + data LONGTEXT NOT NULL COLLATE utf8_bin +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.pholio_transaction ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + mockID INT UNSIGNED NOT NULL, + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, + newValue LONGTEXT NOT NULL COLLATE utf8_bin, + comment LONGTEXT NOT NULL COLLATE utf8_general_ci, + metadata LONGTEXT NOT NULL COLLATE utf8_bin, + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.pholio_image ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + mockID INT UNSIGNED NOT NULL, + filePHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + name VARCHAR(128) NOT NULL COLLATE utf8_general_ci, + description LONGTEXT NOT NULL COLLATE utf8_general_ci, + sequence INT UNSIGNED NOT NULL, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY (mockID, sequence) +) ENGINE=InnoDB, COLLATE utf8_general_ci; + +CREATE TABLE {$NAMESPACE}_pholio.pholio_pixelcomment ( + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, + mockID INT UNSIGNED NOT NULL, + imageID INT UNSIGNED NOT NULL, + transactionID INT UNSIGNED, + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, + x INT UNSIGNED NOT NULL, + y INT UNSIGNED NOT NULL, + width INT UNSIGNED NOT NULL, + height INT UNSIGNED NOT NULL, + comment LONGTEXT NOT NULL COLLATE utf8_general_ci, + dateCreated INT UNSIGNED NOT NULL, + dateModified INT UNSIGNED NOT NULL, + KEY (mockID), + KEY (authorPHID, transactionID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/patches/policy-project.sql b/resources/sql/patches/policy-project.sql new file mode 100644 index 0000000000..c26fcb5fd6 --- /dev/null +++ b/resources/sql/patches/policy-project.sql @@ -0,0 +1,8 @@ +ALTER TABLE `{$NAMESPACE}_project`.`project` + ADD `viewPolicy` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `{$NAMESPACE}_project`.`project` + ADD `editPolicy` varchar(64) COLLATE utf8_bin; + +ALTER TABLE `{$NAMESPACE}_project`.`project` + ADD `joinPolicy` varchar(64) COLLATE utf8_bin; diff --git a/resources/sql/patches/ponder-comments.sql b/resources/sql/patches/ponder-comments.sql new file mode 100644 index 0000000000..b93092f67b --- /dev/null +++ b/resources/sql/patches/ponder-comments.sql @@ -0,0 +1,11 @@ +CREATE TABLE `{$NAMESPACE}_ponder`.`ponder_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `targetPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `content` longtext CHARACTER SET utf8 NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `authorPHID` (`authorPHID`), + KEY `targetPHID` (`targetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/ponder-mailkey-populate.php b/resources/sql/patches/ponder-mailkey-populate.php new file mode 100644 index 0000000000..5d2c77fff4 --- /dev/null +++ b/resources/sql/patches/ponder-mailkey-populate.php @@ -0,0 +1,25 @@ +openTransaction(); + +foreach (new LiskMigrationIterator($table) as $question) { + $id = $question->getID(); + + echo pht('Question %d: ', $id); + if (!$question->getMailKey()) { + queryfx( + $question->establishConnection('w'), + 'UPDATE %T SET mailKey = %s WHERE id = %d', + $question->getTableName(), + Filesystem::readRandomCharacters(20), + $id); + echo pht('Generated Key')."\n"; + } else { + echo "-\n"; + } +} + +$table->saveTransaction(); +echo pht('Done.')."\n"; diff --git a/resources/sql/patches/ponder-mailkey.sql b/resources/sql/patches/ponder-mailkey.sql new file mode 100644 index 0000000000..611647d119 --- /dev/null +++ b/resources/sql/patches/ponder-mailkey.sql @@ -0,0 +1,2 @@ +ALTER TABLE `{$NAMESPACE}_ponder`.ponder_question + ADD mailKey VARCHAR(20) NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/ponder.sql b/resources/sql/patches/ponder.sql new file mode 100644 index 0000000000..868dbe66ce --- /dev/null +++ b/resources/sql/patches/ponder.sql @@ -0,0 +1,50 @@ +CREATE TABLE `{$NAMESPACE}_ponder`.`ponder_question` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) NOT NULL, + `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `voteCount` int(10) NOT NULL, + `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `content` longtext CHARACTER SET utf8 NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `contentSource` varchar(255) DEFAULT NULL, + `heat` float NOT NULL, + `answerCount` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `authorPHID` (`authorPHID`), + KEY `heat` (`heat`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=11; + +CREATE TABLE `{$NAMESPACE}_ponder`.`ponder_answer` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `questionID` int(10) unsigned NOT NULL, + `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `voteCount` int(10) NOT NULL, + `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `content` longtext CHARACTER SET utf8 NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `contentSource` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `questionID` (`questionID`), + KEY `authorPHID` (`authorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `{$NAMESPACE}_ponder`.`edge` ( + `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE `{$NAMESPACE}_ponder`.`edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/releeph.sql b/resources/sql/patches/releeph.sql new file mode 100644 index 0000000000..a824357958 --- /dev/null +++ b/resources/sql/patches/releeph.sql @@ -0,0 +1,92 @@ +CREATE TABLE {$NAMESPACE}_releeph.`releeph_project` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `name` varchar(255) NOT NULL, + `trunkBranch` varchar(255) NOT NULL, + `repositoryID` int(10) unsigned NOT NULL, + `repositoryPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `arcanistProjectID` int(10) unsigned NOT NULL, + `createdByUserPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `isActive` tinyint(1) NOT NULL DEFAULT '1', + `projectID` int(10) unsigned DEFAULT NULL, + `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `projectName` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_releeph.`releeph_branch` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `basename` varchar(64) NOT NULL, + `releephProjectID` int(10) unsigned NOT NULL, + `createdByUserPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `cutPointCommitIdentifier` + varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `cutPointCommitPHID` + varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `isActive` tinyint(1) NOT NULL DEFAULT '1', + `symbolicName` varchar(64) DEFAULT NULL, + `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `name` varchar(128) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `releephProjectID_2` (`releephProjectID`,`basename`), + UNIQUE KEY `releephProjectID_name` (`releephProjectID`,`name`), + UNIQUE KEY `releephProjectID` (`releephProjectID`,`symbolicName`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_releeph.`releeph_request` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `branchID` int(10) unsigned NOT NULL, + `summary` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `requestUserPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `requestCommitIdentifier` + varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `requestCommitPHID` + varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `requestCommitOrdinal` int(10) unsigned NOT NULL, + `commitIdentifier` + varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `committedByUserPHID` + varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `commitPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `status` tinyint(4) DEFAULT NULL, + `pickStatus` tinyint(4) DEFAULT NULL, + `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `userIntents` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `inBranch` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `requestIdentifierBranch` (`requestCommitIdentifier`,`branchID`), + KEY `branchID` (`branchID`,`requestCommitOrdinal`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_releeph.`releeph_requestevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `releephRequestID` int(10) unsigned NOT NULL, + `actorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `type` varchar(32) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +CREATE TABLE {$NAMESPACE}_releeph.`releeph_event` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `releephProjectID` int(10) unsigned NOT NULL, + `releephBranchID` int(10) unsigned DEFAULT NULL, + `type` varchar(32) NOT NULL, + `epoch` int(10) unsigned DEFAULT NULL, + `actorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/resources/sql/patches/repository-lint.sql b/resources/sql/patches/repository-lint.sql new file mode 100644 index 0000000000..f4da747047 --- /dev/null +++ b/resources/sql/patches/repository-lint.sql @@ -0,0 +1,24 @@ +CREATE TABLE {$NAMESPACE}_repository.repository_branch ( + id int unsigned NOT NULL AUTO_INCREMENT, + repositoryID int unsigned NOT NULL, + name varchar(255) NOT NULL, + lintCommit varchar(40), + dateCreated int unsigned NOT NULL, + dateModified int unsigned NOT NULL, + UNIQUE (repositoryID, name), + PRIMARY KEY (id) +); + +CREATE TABLE {$NAMESPACE}_repository.repository_lintmessage ( + id int unsigned NOT NULL AUTO_INCREMENT, + branchID int unsigned NOT NULL, + path varchar(512) NOT NULL, + line int unsigned NOT NULL, + code varchar(32) NOT NULL, + severity varchar(16) NOT NULL, + name varchar(255) NOT NULL, + description text NOT NULL, + INDEX (branchID, path(64)), + INDEX (branchID, code, path(64)), + PRIMARY KEY (id) +); diff --git a/resources/sql/patches/statustxt.sql b/resources/sql/patches/statustxt.sql new file mode 100644 index 0000000000..8cd1c033f9 --- /dev/null +++ b/resources/sql/patches/statustxt.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_user.user_status + ADD description LONGTEXT NOT NULL COLLATE utf8_bin; diff --git a/resources/sql/patches/symbolcontexts.sql b/resources/sql/patches/symbolcontexts.sql new file mode 100644 index 0000000000..e63839efed --- /dev/null +++ b/resources/sql/patches/symbolcontexts.sql @@ -0,0 +1,3 @@ +ALTER TABLE {$NAMESPACE}_repository.repository_symbol + ADD symbolContext varchar(128) COLLATE utf8_general_ci NOT NULL DEFAULT '' + AFTER arcanistProjectID; diff --git a/resources/sql/patches/xhprof.sql b/resources/sql/patches/xhprof.sql new file mode 100644 index 0000000000..3764037c41 --- /dev/null +++ b/resources/sql/patches/xhprof.sql @@ -0,0 +1,13 @@ +CREATE TABLE {$NAMESPACE}_xhprof.xhprof_sample ( + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + `filePHID` VARCHAR(64) NOT NULL COLLATE utf8_bin, + `sampleRate` INT NOT NULL, + `usTotal` BIGINT UNSIGNED NOT NULL, + `hostname` VARCHAR(255) COLLATE utf8_bin, + `requestPath` VARCHAR(255) COLLATE utf8_bin, + `controller` VARCHAR(255) COLLATE utf8_bin, + `userPHID` VARCHAR(64) COLLATE utf8_bin, + `dateCreated` BIGINT UNSIGNED NOT NULL, + `dateModified` BIGINT UNSIGNED NOT NULL, + UNIQUE KEY (filePHID) +) ENGINE=InnoDB, COLLATE utf8_general_ci; diff --git a/resources/sql/quickstart.sql b/resources/sql/quickstart.sql index bf8f115841..b2796d31e6 100644 --- a/resources/sql/quickstart.sql +++ b/resources/sql/quickstart.sql @@ -1,1496 +1,10651 @@ -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_audit` DEFAULT CHARACTER SET utf8; +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_almanac` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; -USE `{$NAMESPACE}_audit`; +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; -CREATE TABLE `audit_comment` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_binding` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `targetPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `actorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `servicePHID` varbinary(64) NOT NULL, + `devicePHID` varbinary(64) NOT NULL, + `interfacePHID` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `action` varchar(64) NOT NULL, - `content` longtext NOT NULL, - `metadata` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `isDisabled` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - KEY `targetPHID` (`targetPHID`,`actorPHID`,`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_service` (`servicePHID`,`interfacePHID`), + KEY `key_device` (`devicePHID`), + KEY `key_interface` (`interfacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `audit_inlinecomment` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_bindingtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `commitPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `pathID` int(10) unsigned NOT NULL, - `auditCommentID` int(10) unsigned DEFAULT NULL, - `isNewFile` tinyint(1) NOT NULL, - `lineNumber` int(10) unsigned NOT NULL, - `lineLength` int(10) unsigned NOT NULL, - `content` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `cache` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `commitPHID` (`commitPHID`,`pathID`), - KEY `authorPHID` (`authorPHID`,`commitPHID`,`auditCommentID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_chatlog` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_almanac`; -USE `{$NAMESPACE}_chatlog`; + SET NAMES utf8 ; -CREATE TABLE `chatlog_event` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_device` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `channel` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `epoch` int(10) unsigned NOT NULL, - `author` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(4) NOT NULL, - `message` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `loggedByPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `nameIndex` binary(12) NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `isBoundToClusterService` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - KEY `channel` (`channel`,`epoch`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_name` (`nameIndex`), + KEY `key_nametext` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_conduit` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_almanac`; -USE `{$NAMESPACE}_conduit`; + SET NAMES utf8 ; -CREATE TABLE `conduit_certificatetoken` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_devicename_ngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `token` varchar(64) DEFAULT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `userPHID` (`userPHID`), - UNIQUE KEY `token` (`token`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `conduit_connectionlog` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_devicetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `client` varchar(255) DEFAULT NULL, - `clientVersion` varchar(255) DEFAULT NULL, - `clientDescription` varchar(255) DEFAULT NULL, - `username` varchar(255) DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `conduit_methodcalllog` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `connectionID` bigint(20) unsigned DEFAULT NULL, - `method` varchar(255) NOT NULL, - `error` varchar(255) NOT NULL, - `duration` bigint(20) unsigned NOT NULL, +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_interface` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `devicePHID` varbinary(64) NOT NULL, + `networkPHID` varbinary(64) NOT NULL, + `address` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `port` int(10) unsigned NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_unique` (`devicePHID`,`networkPHID`,`address`,`port`), + KEY `key_location` (`networkPHID`,`address`,`port`), + KEY `key_device` (`devicePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_countdown` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_almanac`; -USE `{$NAMESPACE}_countdown`; + SET NAMES utf8 ; -CREATE TABLE `countdown_timer` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_interfacetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `title` varchar(255) NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `datepoint` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_daemon` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_almanac`; -USE `{$NAMESPACE}_daemon`; + SET NAMES utf8 ; -CREATE TABLE `daemon_log` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_namespace` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `daemon` varchar(255) NOT NULL, - `host` varchar(255) NOT NULL, - `pid` int(10) unsigned NOT NULL, - `argv` varchar(512) NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameIndex` binary(12) NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_nameindex` (`nameIndex`), + KEY `key_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `daemon_logevent` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_namespacename_ngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `logID` int(10) unsigned NOT NULL, - `logType` varchar(4) NOT NULL, - `message` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `epoch` int(10) unsigned NOT NULL, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `logID` (`logID`,`epoch`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_differential` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_almanac`; -USE `{$NAMESPACE}_differential`; + SET NAMES utf8 ; -CREATE TABLE `differential_affectedpath` ( - `repositoryID` int(10) unsigned NOT NULL, - `pathID` int(10) unsigned NOT NULL, - `epoch` int(10) unsigned NOT NULL, - `revisionID` int(10) unsigned NOT NULL, - KEY `repositoryID` (`repositoryID`,`pathID`,`epoch`), - KEY `revisionID` (`revisionID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `differential_auxiliaryfield` ( +CREATE TABLE `almanac_namespacetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `revisionPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `value` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `revisionPHID` (`revisionPHID`,`name`), - KEY `name` (`name`,`value`(64)) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_changeset` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_network` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `diffID` int(10) unsigned NOT NULL, - `oldFile` varchar(255) DEFAULT NULL, - `filename` varchar(255) NOT NULL, - `awayPaths` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `changeType` int(10) unsigned NOT NULL, - `fileType` int(10) unsigned NOT NULL, - `metadata` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `oldProperties` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `newProperties` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `addLines` int(10) unsigned NOT NULL, - `delLines` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `diffID` (`diffID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_changeset_parse_cache` ( - `id` int(10) unsigned NOT NULL, - `cache` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `dateCreated` (`dateCreated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; -CREATE TABLE `differential_comment` ( +CREATE TABLE `almanac_networkname_ngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `revisionID` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `action` varchar(64) NOT NULL, - `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - `cache` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `metadata` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contentSource` varchar(255) DEFAULT NULL, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `revisionID` (`revisionID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_commit` ( - `revisionID` int(10) unsigned NOT NULL, - `commitPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`revisionID`,`commitPHID`), - UNIQUE KEY `commitPHID` (`commitPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_almanac`; -CREATE TABLE `differential_diff` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_networktransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `revisionID` int(10) unsigned DEFAULT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `sourceMachine` varchar(255) DEFAULT NULL, - `sourcePath` varchar(255) DEFAULT NULL, - `sourceControlSystem` varchar(64) DEFAULT NULL, - `sourceControlBaseRevision` varchar(255) DEFAULT NULL, - `sourceControlPath` varchar(255) DEFAULT NULL, - `lintStatus` int(10) unsigned NOT NULL, - `unitStatus` int(10) unsigned NOT NULL, - `lineCount` int(10) unsigned NOT NULL, - `branch` varchar(255) DEFAULT NULL, - `parentRevisionID` int(10) unsigned DEFAULT NULL, - `arcanistProjectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `creationMethod` varchar(255) DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `description` varchar(255) DEFAULT NULL, - `repositoryUUID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), - KEY `revisionID` (`revisionID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_diffproperty` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_property` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `diffID` int(10) unsigned NOT NULL, - `name` varchar(255) NOT NULL, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldName` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `diffID` (`diffID`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_hunk` ( +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_service` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `changesetID` int(10) unsigned NOT NULL, - `changes` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `oldOffset` int(10) unsigned NOT NULL, - `oldLen` int(10) unsigned NOT NULL, - `newOffset` int(10) unsigned NOT NULL, - `newLen` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameIndex` binary(12) NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `serviceType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `changesetID` (`changesetID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_name` (`nameIndex`), + KEY `key_nametext` (`name`), + KEY `key_servicetype` (`serviceType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; -CREATE TABLE `differential_inlinecomment` ( +CREATE TABLE `almanac_servicename_ngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `revisionID` int(10) unsigned NOT NULL, - `commentID` int(10) unsigned DEFAULT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `changesetID` int(10) unsigned NOT NULL, - `isNewFile` tinyint(1) NOT NULL, - `lineNumber` int(10) unsigned NOT NULL, - `lineLength` int(10) unsigned NOT NULL, - `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - `cache` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `changesetID` (`changesetID`), - KEY `commentID` (`commentID`), - KEY `revisionID` (`revisionID`,`authorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_relationship` ( - `revisionID` int(10) unsigned NOT NULL, - `relation` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `objectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `sequence` int(10) unsigned NOT NULL, - `reasonPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - PRIMARY KEY (`revisionID`,`relation`,`objectPHID`), - KEY `objectPHID` (`objectPHID`,`relation`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_almanac`; -CREATE TABLE `differential_revision` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `almanac_servicetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `title` varchar(255) NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(32) NOT NULL, - `summary` longtext NOT NULL, - `testPlan` text NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `lastReviewerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `dateCommitted` int(10) unsigned DEFAULT NULL, - `lineCount` int(10) unsigned DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `attached` longtext NOT NULL, - `unsubscribed` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mailKey` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `branchName` varchar(255) DEFAULT NULL, - `arcanistProjectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - KEY `authorPHID` (`authorPHID`,`status`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `differential_revisionhash` ( - `revisionID` int(10) unsigned NOT NULL, - `type` char(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `hash` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - KEY `type` (`type`,`hash`), - KEY `revisionID` (`revisionID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_almanac`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `seq` int(10) unsigned NOT NULL, `dataID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `edgedata` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +USE `{$NAMESPACE}_almanac`; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_draft` DEFAULT CHARACTER SET utf8; + SET NAMES utf8 ; -USE `{$NAMESPACE}_draft`; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `draft` ( +CREATE TABLE `edgedata` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `draftKey` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `draft` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `authorPHID` (`authorPHID`,`draftKey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_drydock` DEFAULT CHARACTER SET utf8; +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_application` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; -USE `{$NAMESPACE}_drydock`; +USE `{$NAMESPACE}_application`; -CREATE TABLE `drydock_lease` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `resourceID` int(10) unsigned DEFAULT NULL, - `status` int(10) unsigned NOT NULL, - `until` int(10) unsigned DEFAULT NULL, - `ownerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `attributes` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET NAMES utf8 ; -CREATE TABLE `drydock_log` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `resourceID` int(10) unsigned DEFAULT NULL, - `leaseID` int(10) unsigned DEFAULT NULL, - `epoch` int(10) unsigned NOT NULL, - `message` longtext NOT NULL, - PRIMARY KEY (`id`), - KEY `resourceID` (`resourceID`,`epoch`), - KEY `leaseID` (`leaseID`,`epoch`), - KEY `epoch` (`epoch`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `drydock_resource` ( +CREATE TABLE `application_application` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `ownerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `status` int(10) unsigned NOT NULL, - `blueprintClass` varchar(255) NOT NULL, - `type` varchar(64) NOT NULL, - `attributes` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `capabilities` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_feed` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_application`; -USE `{$NAMESPACE}_feed`; + SET NAMES utf8 ; -CREATE TABLE `feed_storydata` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `application_applicationtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `chronologicalKey` bigint(20) unsigned NOT NULL, - `storyType` varchar(64) NOT NULL, - `storyData` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `chronologicalKey` (`chronologicalKey`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `feed_storyreference` ( - `objectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `chronologicalKey` bigint(20) unsigned NOT NULL, - UNIQUE KEY `objectPHID` (`objectPHID`,`chronologicalKey`), - KEY `chronologicalKey` (`chronologicalKey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_application`; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_file` DEFAULT CHARACTER SET utf8; + SET NAMES utf8 ; -USE `{$NAMESPACE}_file`; + SET character_set_client = {$CHARSET} ; CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `seq` int(10) unsigned NOT NULL, `dataID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_application`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; CREATE TABLE `edgedata` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `file` ( +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_audit` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_audit`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `audit_transaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) DEFAULT NULL, - `mimeType` varchar(255) DEFAULT NULL, - `byteSize` bigint(20) unsigned NOT NULL, - `storageEngine` varchar(32) NOT NULL, - `storageFormat` varchar(32) NOT NULL, - `storageHandle` varchar(255) NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `secretKey` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `contentHash` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - KEY `authorPHID` (`authorPHID`), - KEY `contentHash` (`contentHash`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `file_imagemacro` ( +USE `{$NAMESPACE}_audit`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `audit_transaction_comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `filePHID` varchar(64) NOT NULL, - `name` varchar(255) NOT NULL, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `commitPHID` varbinary(64) DEFAULT NULL, + `pathID` int(10) unsigned DEFAULT NULL, + `isNewFile` tinyint(1) NOT NULL, + `lineNumber` int(10) unsigned NOT NULL, + `lineLength` int(10) unsigned NOT NULL, + `fixedState` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `hasReplies` tinyint(1) NOT NULL, + `replyToCommentPHID` varbinary(64) DEFAULT NULL, + `legacyCommentID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`), + KEY `key_path` (`pathID`), + KEY `key_draft` (`authorPHID`,`transactionPHID`), + KEY `key_commit` (`commitPHID`), + KEY `key_legacy` (`legacyCommentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_auth` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_auth`; -CREATE TABLE `file_proxyimage` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_challenge` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `uri` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `filePHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `factorPHID` varbinary(64) NOT NULL, + `sessionPHID` varbinary(64) NOT NULL, + `challengeKey` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `challengeTTL` int(10) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `workflowKey` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `responseDigest` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `responseTTL` int(10) unsigned DEFAULT NULL, + `isCompleted` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `uri` (`uri`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_issued` (`userPHID`,`challengeTTL`), + KEY `key_collection` (`challengeTTL`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `file_storageblob` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_contactnumber` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longblob NOT NULL, + `phid` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `contactNumber` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `uniqueKey` binary(12) DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `isPrimary` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_unique` (`uniqueKey`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `file_transformedfile` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_contactnumbertransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `originalPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `transform` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `transformedPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `originalPHID` (`originalPHID`,`transform`), - KEY `transformedPHID` (`transformedPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_flag` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_auth`; -USE `{$NAMESPACE}_flag`; + SET NAMES utf8 ; -CREATE TABLE `flag` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_factorconfig` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `ownerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `objectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `reasonPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `color` int(10) unsigned NOT NULL, - `note` varchar(255) DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `factorName` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `factorSecret` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `factorProviderPHID` varbinary(64) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `ownerPHID` (`ownerPHID`,`type`,`objectPHID`), - KEY `objectPHID` (`objectPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_user` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_herald` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_auth`; -USE `{$NAMESPACE}_herald`; + SET NAMES utf8 ; -CREATE TABLE `herald_action` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_factorprovider` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `ruleID` int(10) unsigned NOT NULL, - `action` varchar(255) NOT NULL, - `target` text NOT NULL, + `phid` varbinary(64) NOT NULL, + `providerFactorKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `ruleID` (`ruleID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `herald_condition` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_factorprovidertransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `ruleID` int(10) unsigned NOT NULL, - `fieldName` varchar(255) NOT NULL, - `fieldCondition` varchar(255) NOT NULL, - `value` text NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `ruleID` (`ruleID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `herald_rule` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_hmackey` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contentType` varchar(255) NOT NULL, - `mustMatchAll` tinyint(1) NOT NULL, - `configVersion` int(10) unsigned NOT NULL DEFAULT '1', + `keyName` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `keyValue` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `repetitionPolicy` int(10) unsigned DEFAULT NULL, - `ruleType` varchar(255) NOT NULL DEFAULT 'global', PRIMARY KEY (`id`), - UNIQUE KEY `authorPHID` (`authorPHID`,`name`), - KEY `IDX_RULE_TYPE` (`ruleType`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_name` (`keyName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `herald_ruleapplied` ( - `ruleID` int(10) unsigned NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`ruleID`,`phid`), - KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_auth`; -CREATE TABLE `herald_ruleedit` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_message` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `ruleID` int(10) unsigned NOT NULL, - `editorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `messageKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `messageText` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `ruleName` varchar(255) NOT NULL, - `action` varchar(32) NOT NULL, PRIMARY KEY (`id`), - KEY `ruleID` (`ruleID`,`dateCreated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_type` (`messageKey`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `herald_savedheader` ( - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `header` varchar(255) NOT NULL, - PRIMARY KEY (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_auth`; -CREATE TABLE `herald_transcript` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_messagetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `time` int(10) unsigned NOT NULL, - `host` varchar(255) NOT NULL, - `psth` varchar(255) NOT NULL, - `duration` float NOT NULL, - `objectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dryRun` tinyint(1) NOT NULL, - `objectTranscript` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ruleTranscripts` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `conditionTranscripts` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `applyTranscripts` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `garbageCollected` tinyint(1) NOT NULL DEFAULT '0', + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - KEY `objectPHID` (`objectPHID`), - KEY `garbageCollected` (`garbageCollected`,`time`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_maniphest` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_auth`; -USE `{$NAMESPACE}_maniphest`; + SET NAMES utf8 ; -CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `seq` int(10) unsigned NOT NULL, - `dataID` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`src`,`type`,`dst`), - KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `edgedata` ( +CREATE TABLE `auth_password` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `phid` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `passwordType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `passwordHash` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isRevoked` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `passwordSalt` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `legacyDigestFormat` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_role` (`objectPHID`,`passwordType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `maniphest_savedquery` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_passwordtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `queryKey` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(128) NOT NULL, - `isDefault` tinyint(1) NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `userPHID` (`userPHID`,`name`), - KEY `userPHID_2` (`userPHID`,`isDefault`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `maniphest_task` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_providerconfig` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ownerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `ccPHIDs` text, - `attached` longtext NOT NULL, - `status` int(10) unsigned NOT NULL, - `priority` int(10) unsigned NOT NULL, - `title` text NOT NULL, - `description` longtext NOT NULL, + `phid` varbinary(64) NOT NULL, + `providerClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `providerType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `providerDomain` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isEnabled` tinyint(1) NOT NULL, + `shouldAllowLogin` tinyint(1) NOT NULL, + `shouldAllowRegistration` tinyint(1) NOT NULL, + `shouldAllowLink` tinyint(1) NOT NULL, + `shouldAllowUnlink` tinyint(1) NOT NULL, + `shouldTrustEmails` tinyint(1) NOT NULL DEFAULT '0', + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `projectPHIDs` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `mailKey` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `ownerOrdering` varchar(64) DEFAULT NULL, - `originalEmailSource` varchar(255) DEFAULT NULL, - `subpriority` double NOT NULL, + `shouldAutoLogin` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - KEY `priority` (`priority`,`status`), - KEY `status` (`status`), - KEY `ownerPHID` (`ownerPHID`,`status`), - KEY `authorPHID` (`authorPHID`,`status`), - KEY `ownerOrdering` (`ownerOrdering`), - KEY `priority_2` (`priority`,`subpriority`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_provider` (`providerType`,`providerDomain`), + KEY `key_class` (`providerClass`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `maniphest_taskauxiliarystorage` ( +USE `{$NAMESPACE}_auth`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `auth_providerconfigtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `taskPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `value` varchar(255) NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `taskPHID` (`taskPHID`,`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `maniphest_taskproject` ( - `taskPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `projectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`projectPHID`,`taskPHID`), - UNIQUE KEY `taskPHID` (`taskPHID`,`projectPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_auth`; -CREATE TABLE `maniphest_tasksubscriber` ( - `taskPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `subscriberPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`subscriberPHID`,`taskPHID`), - UNIQUE KEY `taskPHID` (`taskPHID`,`subscriberPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET NAMES utf8 ; -CREATE TABLE `maniphest_touch` ( - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `taskID` int(10) unsigned NOT NULL, - `touchedAt` int(10) unsigned NOT NULL, - PRIMARY KEY (`userPHID`,`taskID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `maniphest_transaction` ( +CREATE TABLE `auth_sshkey` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `taskID` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `transactionType` varchar(16) NOT NULL, - `oldValue` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `newValue` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `comments` longtext CHARACTER SET utf8 COLLATE utf8_bin, + `phid` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `keyType` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `keyBody` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `keyComment` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `cache` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `metadata` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `contentSource` varchar(255) DEFAULT NULL, + `keyIndex` binary(12) NOT NULL, + `isTrusted` tinyint(1) NOT NULL, + `isActive` tinyint(1) DEFAULT NULL, PRIMARY KEY (`id`), - KEY `taskID` (`taskID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_activeunique` (`keyIndex`,`isActive`), + KEY `key_object` (`objectPHID`), + KEY `key_active` (`isActive`,`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_meta_data` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_auth`; -USE `{$NAMESPACE}_meta_data`; + SET NAMES utf8 ; -CREATE TABLE `patch_status` ( - `patch` varchar(255) NOT NULL, - `applied` int(10) unsigned NOT NULL, - PRIMARY KEY (`patch`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1),('phabricator:0000.legacy.sql',1),('phabricator:001.maniphest_projects.sql',1),('phabricator:002.oauth.sql',1),('phabricator:003.more_oauth.sql',1),('phabricator:004.daemonrepos.sql',1),('phabricator:005.workers.sql',1),('phabricator:006.repository.sql',1),('phabricator:007.daemonlog.sql',1),('phabricator:008.repoopt.sql',1),('phabricator:009.repo_summary.sql',1),('phabricator:010.herald.sql',1),('phabricator:011.badcommit.sql',1),('phabricator:012.dropphidtype.sql',1),('phabricator:013.commitdetail.sql',1),('phabricator:014.shortcuts.sql',1),('phabricator:015.preferences.sql',1),('phabricator:016.userrealnameindex.sql',1),('phabricator:017.sessionkeys.sql',1),('phabricator:018.owners.sql',1),('phabricator:019.arcprojects.sql',1),('phabricator:020.pathcapital.sql',1),('phabricator:021.xhpastview.sql',1),('phabricator:022.differentialcommit.sql',1),('phabricator:023.dxkeys.sql',1),('phabricator:024.mlistkeys.sql',1),('phabricator:025.commentopt.sql',1),('phabricator:026.diffpropkey.sql',1),('phabricator:027.metamtakeys.sql',1),('phabricator:028.systemagent.sql',1),('phabricator:029.cursors.sql',1),('phabricator:030.imagemacro.sql',1),('phabricator:031.workerrace.sql',1),('phabricator:032.viewtime.sql',1),('phabricator:033.privtest.sql',1),('phabricator:034.savedheader.sql',1),('phabricator:035.proxyimage.sql',1),('phabricator:036.mailkey.sql',1),('phabricator:037.setuptest.sql',1),('phabricator:038.admin.sql',1),('phabricator:039.userlog.sql',1),('phabricator:040.transform.sql',1),('phabricator:041.heraldrepetition.sql',1),('phabricator:042.commentmetadata.sql',1),('phabricator:043.pastebin.sql',1),('phabricator:044.countdown.sql',1),('phabricator:045.timezone.sql',1),('phabricator:046.conduittoken.sql',1),('phabricator:047.projectstatus.sql',1),('phabricator:048.relationshipkeys.sql',1),('phabricator:049.projectowner.sql',1),('phabricator:050.taskdenormal.sql',1),('phabricator:051.projectfilter.sql',1),('phabricator:052.pastelanguage.sql',1),('phabricator:053.feed.sql',1),('phabricator:054.subscribers.sql',1),('phabricator:055.add_author_to_files.sql',1),('phabricator:056.slowvote.sql',1),('phabricator:057.parsecache.sql',1),('phabricator:058.missingkeys.sql',1),('phabricator:059.engines.php',1),('phabricator:060.phriction.sql',1),('phabricator:061.phrictioncontent.sql',1),('phabricator:062.phrictionmenu.sql',1),('phabricator:063.pasteforks.sql',1),('phabricator:064.subprojects.sql',1),('phabricator:065.sshkeys.sql',1),('phabricator:066.phrictioncontent.sql',1),('phabricator:067.preferences.sql',1),('phabricator:068.maniphestauxiliarystorage.sql',1),('phabricator:069.heraldxscript.sql',1),('phabricator:070.differentialaux.sql',1),('phabricator:071.contentsource.sql',1),('phabricator:072.blamerevert.sql',1),('phabricator:073.reposymbols.sql',1),('phabricator:074.affectedpath.sql',1),('phabricator:075.revisionhash.sql',1),('phabricator:076.indexedlanguages.sql',1),('phabricator:077.originalemail.sql',1),('phabricator:078.nametoken.sql',1),('phabricator:079.nametokenindex.php',1),('phabricator:080.filekeys.sql',1),('phabricator:081.filekeys.php',1),('phabricator:082.xactionkey.sql',1),('phabricator:083.dxviewtime.sql',1),('phabricator:084.pasteauthorkey.sql',1),('phabricator:085.packagecommitrelationship.sql',1),('phabricator:086.formeraffil.sql',1),('phabricator:087.phrictiondelete.sql',1),('phabricator:088.audit.sql',1),('phabricator:089.projectwiki.sql',1),('phabricator:090.forceuniqueprojectnames.php',1),('phabricator:091.uniqueslugkey.sql',1),('phabricator:092.dropgithubnotification.sql',1),('phabricator:093.gitremotes.php',1),('phabricator:094.phrictioncolumn.sql',1),('phabricator:095.directory.sql',1),('phabricator:096.filename.sql',1),('phabricator:097.heraldruletypes.sql',1),('phabricator:098.heraldruletypemigration.php',1),('phabricator:099.drydock.sql',1),('phabricator:100.projectxaction.sql',1),('phabricator:101.heraldruleapplied.sql',1),('phabricator:102.heraldcleanup.php',1),('phabricator:103.heraldedithistory.sql',1),('phabricator:104.searchkey.sql',1),('phabricator:105.mimetype.sql',1),('phabricator:106.chatlog.sql',1),('phabricator:107.oauthserver.sql',1),('phabricator:108.oauthscope.sql',1),('phabricator:109.oauthclientphidkey.sql',1),('phabricator:110.commitaudit.sql',1),('phabricator:111.commitauditmigration.php',1),('phabricator:112.oauthaccesscoderedirecturi.sql',1),('phabricator:113.lastreviewer.sql',1),('phabricator:114.auditrequest.sql',1),('phabricator:115.prepareutf8.sql',1),('phabricator:116.utf8-backup-first-expect-wait.sql',1),('phabricator:117.repositorydescription.php',1),('phabricator:118.auditinline.sql',1),('phabricator:119.filehash.sql',1),('phabricator:120.noop.sql',1),('phabricator:121.drydocklog.sql',1),('phabricator:122.flag.sql',1),('phabricator:123.heraldrulelog.sql',1),('phabricator:124.subpriority.sql',1),('phabricator:125.ipv6.sql',1),('phabricator:126.edges.sql',1),('phabricator:127.userkeybody.sql',1),('phabricator:128.phabricatorcom.sql',1),('phabricator:129.savedquery.sql',1),('phabricator:130.denormalrevisionquery.sql',1),('phabricator:131.migraterevisionquery.php',1),('phabricator:132.phame.sql',1),('phabricator:133.imagemacro.sql',1),('phabricator:134.emptysearch.sql',1),('phabricator:135.datecommitted.sql',1),('phabricator:136.sex.sql',1),('phabricator:137.auditmetadata.sql',1),('phabricator:db.audit',1),('phabricator:db.chatlog',1),('phabricator:db.conduit',1),('phabricator:db.countdown',1),('phabricator:db.daemon',1),('phabricator:db.differential',1),('phabricator:db.draft',1),('phabricator:db.drydock',1),('phabricator:db.feed',1),('phabricator:db.file',1),('phabricator:db.flag',1),('phabricator:db.herald',1),('phabricator:db.maniphest',1),('phabricator:db.metamta',1),('phabricator:db.meta_data',1),('phabricator:db.oauth_server',1),('phabricator:db.owners',1),('phabricator:db.pastebin',1),('phabricator:db.phame',1),('phabricator:db.phid',1),('phabricator:db.phriction',1),('phabricator:db.project',1),('phabricator:db.repository',1),('phabricator:db.search',1),('phabricator:db.slowvote',1),('phabricator:db.timeline',1),('phabricator:db.user',1),('phabricator:db.worker',1),('phabricator:db.xhpastview',1); +CREATE TABLE `auth_sshkeytransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_metamta` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_auth`; -USE `{$NAMESPACE}_metamta`; + SET NAMES utf8 ; -CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `seq` int(10) unsigned NOT NULL, - `dataID` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`src`,`type`,`dst`), - KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `edgedata` ( +CREATE TABLE `auth_temporarytoken` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `tokenResource` varbinary(64) NOT NULL, + `tokenType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `tokenExpires` int(10) unsigned NOT NULL, + `tokenCode` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `userPHID` varbinary(64) DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_token` (`tokenResource`,`tokenType`,`tokenCode`), + KEY `key_expires` (`tokenExpires`), + KEY `key_user` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `metamta_mail` ( +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_badges` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_badges`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `badges_award` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `parameters` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `status` varchar(255) NOT NULL, - `message` text, - `retryCount` int(10) unsigned NOT NULL, - `nextRetry` int(10) unsigned NOT NULL, - `relatedPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `badgePHID` varbinary(64) NOT NULL, + `recipientPHID` varbinary(64) NOT NULL, + `awarderPHID` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `status` (`status`,`nextRetry`), - KEY `relatedPHID` (`relatedPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_badge` (`badgePHID`,`recipientPHID`), + KEY `key_recipient` (`recipientPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_badges`; -CREATE TABLE `metamta_mailinglist` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `badges_badge` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `email` varchar(255) NOT NULL, - `uri` varchar(255) DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `flavor` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `icon` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `quality` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `email` (`email`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_creator` (`creatorPHID`,`dateModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `metamta_receivedmail` ( +USE `{$NAMESPACE}_badges`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `badges_badgename_ngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `headers` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bodies` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `attachments` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `relatedPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `message` longtext CHARACTER SET utf8 COLLATE utf8_bin, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `relatedPHID` (`relatedPHID`), - KEY `authorPHID` (`authorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_oauth_server` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_badges`; -USE `{$NAMESPACE}_oauth_server`; + SET NAMES utf8 ; -CREATE TABLE `oauth_server_oauthclientauthorization` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `badges_transaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `clientPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `scope` text NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `userPHID` (`userPHID`,`clientPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `oauth_server_oauthserveraccesstoken` ( +USE `{$NAMESPACE}_badges`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `badges_transaction_comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `token` varchar(32) NOT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `clientPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `token` (`token`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `oauth_server_oauthserverauthorizationcode` ( +USE `{$NAMESPACE}_badges`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_badges`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_cache` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_cache`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `cache_general` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `cacheKeyHash` binary(12) NOT NULL, + `cacheKey` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheFormat` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheData` longblob NOT NULL, + `cacheCreated` int(10) unsigned NOT NULL, + `cacheExpires` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_cacheKeyHash` (`cacheKeyHash`), + KEY `key_cacheCreated` (`cacheCreated`), + KEY `key_ttl` (`cacheExpires`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_cache`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `cache_markupcache` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `code` varchar(32) NOT NULL, - `clientPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `clientSecret` varchar(32) NOT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `cacheKey` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheData` longblob NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `redirectURI` varchar(255) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `code` (`code`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `cacheKey` (`cacheKey`), + KEY `dateCreated` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `oauth_server_oauthserverclient` ( +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_calendar` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_event` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `secret` varchar(32) NOT NULL, - `redirectURI` varchar(255) NOT NULL, - `creatorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `hostPHID` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isCancelled` tinyint(1) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, + `isAllDay` tinyint(1) NOT NULL, + `icon` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isRecurring` tinyint(1) NOT NULL, + `instanceOfEventPHID` varbinary(64) DEFAULT NULL, + `sequenceIndex` int(10) unsigned DEFAULT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `isStub` tinyint(1) NOT NULL, + `utcInitialEpoch` int(10) unsigned NOT NULL, + `utcUntilEpoch` int(10) unsigned DEFAULT NULL, + `utcInstanceEpoch` int(10) unsigned DEFAULT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `importAuthorPHID` varbinary(64) DEFAULT NULL, + `importSourcePHID` varbinary(64) DEFAULT NULL, + `importUIDIndex` binary(12) DEFAULT NULL, + `importUID` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `seriesParentPHID` varbinary(64) DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - KEY `creatorPHID` (`creatorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_instance` (`instanceOfEventPHID`,`sequenceIndex`), + UNIQUE KEY `key_rdate` (`instanceOfEventPHID`,`utcInstanceEpoch`), + KEY `key_epoch` (`utcInitialEpoch`,`utcUntilEpoch`), + KEY `key_series` (`seriesParentPHID`,`utcInitialEpoch`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_owners` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_owners`; + SET NAMES utf8 ; -CREATE TABLE `owners_owner` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_event_fdocument` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `packageID` int(10) unsigned NOT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `packageID` (`packageID`,`userPHID`), - KEY `userPHID` (`userPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `owners_package` ( +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_event_ffield` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `description` text NOT NULL, - `primaryOwnerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `auditingEnabled` tinyint(1) NOT NULL DEFAULT '0', + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `owners_path` ( +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_event_fngrams` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `packageID` int(10) unsigned NOT NULL, - `repositoryPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `path` varchar(255) NOT NULL, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - KEY `packageID` (`packageID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_pastebin` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_pastebin`; + SET NAMES utf8 ; -CREATE TABLE `pastebin_paste` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_event_fngrams_common` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `title` varchar(255) NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `filePHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - `language` varchar(64) NOT NULL, - `parentPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - KEY `parentPHID` (`parentPHID`), - KEY `authorPHID` (`authorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_phame` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_phame`; + SET NAMES utf8 ; -CREATE TABLE `phame_post` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_eventinvitee` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `bloggerPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(255) NOT NULL, - `phameTitle` varchar(64) NOT NULL, - `body` longtext, - `visibility` int(10) unsigned NOT NULL DEFAULT '0', - `configData` longtext, - `datePublished` int(10) unsigned NOT NULL, + `eventPHID` varbinary(64) NOT NULL, + `inviteePHID` varbinary(64) NOT NULL, + `inviterPHID` varbinary(64) NOT NULL, + `status` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `availability` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `phameTitle` (`bloggerPHID`,`phameTitle`), - KEY `bloggerPosts` (`bloggerPHID`,`visibility`,`datePublished`,`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_event` (`eventPHID`,`inviteePHID`), + KEY `key_invitee` (`inviteePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_phid` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_phid`; + SET NAMES utf8 ; -CREATE TABLE `phid` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `phidType` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `parentPHID` varchar(64) DEFAULT NULL, - `ownerPHID` varchar(64) DEFAULT NULL, + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_eventtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_phriction` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_phriction`; + SET NAMES utf8 ; -CREATE TABLE `phriction_content` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_eventtransaction_comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `documentID` int(10) unsigned NOT NULL, - `version` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(512) NOT NULL, - `slug` varchar(512) NOT NULL, - `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `description` varchar(512) DEFAULT NULL, - `changeType` int(10) unsigned NOT NULL DEFAULT '0', - `changeRef` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `documentID` (`documentID`,`version`), - KEY `authorPHID` (`authorPHID`), - KEY `slug` (`slug`(255)) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `phriction_document` ( +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_export` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `slug` varchar(128) NOT NULL, - `depth` int(10) unsigned NOT NULL, - `contentID` int(10) unsigned DEFAULT NULL, - `status` int(10) unsigned NOT NULL DEFAULT '0', + `phid` varbinary(64) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `policyMode` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `queryKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `secretKey` binary(20) NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `slug` (`slug`), - UNIQUE KEY `depth` (`depth`,`slug`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_secret` (`secretKey`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_author` (`authorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_project` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_project`; + SET NAMES utf8 ; -CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `seq` int(10) unsigned NOT NULL, - `dataID` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`src`,`type`,`dst`), - KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `edgedata` ( +CREATE TABLE `calendar_exporttransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `project` ( +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_externalinvitee` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameIndex` binary(12) NOT NULL, + `uri` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `sourcePHID` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `status` varchar(32) NOT NULL, - `subprojectPHIDs` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `phrictionSlug` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `name` (`name`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `phrictionSlug` (`phrictionSlug`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_name` (`nameIndex`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `project_affiliation` ( +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_import` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `projectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `role` varchar(255) NOT NULL, + `phid` varbinary(64) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `engineType` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDisabled` tinyint(1) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `isOwner` tinyint(1) NOT NULL, + `triggerPHID` varbinary(64) DEFAULT NULL, + `triggerFrequency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `projectPHID` (`projectPHID`,`userPHID`), - KEY `userPHID` (`userPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_author` (`authorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; -CREATE TABLE `project_profile` ( +CREATE TABLE `calendar_importlog` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `projectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `blurb` longtext NOT NULL, - `profileImagePHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `importPHID` varbinary(64) NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `projectPHID` (`projectPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_import` (`importPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `project_subproject` ( - `projectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `subprojectPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`subprojectPHID`,`projectPHID`), - UNIQUE KEY `projectPHID` (`projectPHID`,`subprojectPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_calendar`; -CREATE TABLE `project_transaction` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_importtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `projectID` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `transactionType` varchar(32) NOT NULL, - `oldValue` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `newValue` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - KEY `projectID` (`projectID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_repository` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_calendar`; -USE `{$NAMESPACE}_repository`; + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `calendar_notification` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `eventPHID` varbinary(64) NOT NULL, + `utcInitialEpoch` int(10) unsigned NOT NULL, + `targetPHID` varbinary(64) NOT NULL, + `didNotifyEpoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_notify` (`eventPHID`,`utcInitialEpoch`,`targetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `seq` int(10) unsigned NOT NULL, `dataID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_calendar`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; CREATE TABLE `edgedata` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository` ( +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_chatlog` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_chatlog`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `chatlog_channel` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `callsign` varchar(32) NOT NULL, - `versionControlSystem` varchar(32) NOT NULL, - `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `serviceName` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `serviceType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `channelName` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `uuid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `callsign` (`callsign`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_channel` (`channelName`,`serviceType`,`serviceName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_arcanistproject` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) NOT NULL, - `repositoryID` int(10) unsigned DEFAULT NULL, - `symbolIndexLanguages` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `symbolIndexProjects` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_chatlog`; -CREATE TABLE `repository_auditrequest` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `auditorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `commitPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `auditStatus` varchar(64) NOT NULL, - `auditReasons` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`), - KEY `commitPHID` (`commitPHID`), - KEY `auditorPHID` (`auditorPHID`,`auditStatus`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET NAMES utf8 ; -CREATE TABLE `repository_badcommit` ( - `fullCommitName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `description` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`fullCommitName`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `repository_commit` ( +CREATE TABLE `chatlog_event` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `repositoryID` int(10) unsigned NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `commitIdentifier` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `epoch` int(10) unsigned NOT NULL, - `mailKey` varchar(20) NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `auditStatus` int(10) unsigned NOT NULL, + `author` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `type` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `message` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `loggedByPHID` varbinary(64) NOT NULL, + `channelID` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `repositoryID` (`repositoryID`,`commitIdentifier`(16)), - KEY `repositoryID_2` (`repositoryID`,`epoch`), - KEY `authorPHID` (`authorPHID`,`auditStatus`,`epoch`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `channel` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_commitdata` ( +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_conduit` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_conduit`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conduit_certificatetoken` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `commitID` int(10) unsigned NOT NULL, - `authorName` varchar(255) NOT NULL, - `commitMessage` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `commitDetails` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `token` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `commitID` (`commitID`), - KEY `authorName` (`authorName`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `userPHID` (`userPHID`), + UNIQUE KEY `token` (`token`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_filesystem` ( +USE `{$NAMESPACE}_conduit`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conduit_methodcalllog` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `connectionID` bigint(20) unsigned DEFAULT NULL, + `method` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `error` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `duration` bigint(20) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `callerPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `key_method` (`method`), + KEY `key_callermethod` (`callerPHID`,`method`), + KEY `key_date` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conduit`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conduit_token` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `tokenType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `token` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `expires` int(10) unsigned DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_token` (`token`), + KEY `key_object` (`objectPHID`,`tokenType`), + KEY `key_expires` (`expires`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_config` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_config`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `config_entry` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `namespace` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `configKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `value` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_name` (`namespace`,`configKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_config`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `config_manualactivity` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `activityType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_type` (`activityType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_config`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `config_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_conpherence` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_index` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `threadPHID` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) NOT NULL, + `previousTransactionPHID` varbinary(64) DEFAULT NULL, + `corpus` longtext CHARACTER SET {$CHARSET_FULLTEXT} COLLATE {$COLLATE_FULLTEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_transaction` (`transactionPHID`), + UNIQUE KEY `key_previous` (`previousTransactionPHID`), + KEY `key_thread` (`threadPHID`), + FULLTEXT KEY `key_corpus` (`corpus`) +) ENGINE=MyISAM DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_participant` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `participantPHID` varbinary(64) NOT NULL, + `conpherencePHID` varbinary(64) NOT NULL, + `seenMessageCount` bigint(20) unsigned NOT NULL, + `settings` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `conpherencePHID` (`conpherencePHID`,`participantPHID`), + KEY `key_thread` (`participantPHID`,`conpherencePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_thread` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `messageCount` bigint(20) unsigned NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `joinPolicy` varbinary(64) NOT NULL, + `mailKey` varchar(20) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `topic` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_threadtitle_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `conpherence_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `conpherencePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`), + UNIQUE KEY `key_draft` (`authorPHID`,`conpherencePHID`,`transactionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_conpherence`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_countdown` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_countdown`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `countdown` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `editPolicy` varbinary(64) NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_epoch` (`epoch`), + KEY `key_author` (`authorPHID`,`epoch`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_countdown`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `countdown_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_countdown`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `countdown_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_countdown`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_countdown`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_daemon` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_daemon`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `daemon_locklog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `lockName` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lockReleased` int(10) unsigned DEFAULT NULL, + `lockParameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lockContext` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_lock` (`lockName`), + KEY `key_created` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_daemon`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `daemon_log` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `daemon` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `host` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `pid` int(10) unsigned NOT NULL, + `argv` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `explicitArgv` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `status` varchar(8) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `runningAsUser` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `daemonID` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_daemonID` (`daemonID`), + KEY `status` (`status`), + KEY `key_modified` (`dateModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_daemon`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `daemon_logevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `logID` int(10) unsigned NOT NULL, + `logType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `message` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `epoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `logID` (`logID`,`epoch`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_dashboard` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `layoutConfig` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `icon` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_dashboard_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_dashboard_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_dashboard_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_dashboard_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_panel` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `panelType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `isArchived` tinyint(1) NOT NULL DEFAULT '0', + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_panel_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_panel_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_panel_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_panel_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_paneltransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portal` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portal_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portal_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portal_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portal_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_portaltransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `dashboard_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_dashboard`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_differential` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_affectedpath` ( + `repositoryID` int(10) unsigned NOT NULL, + `pathID` int(10) unsigned NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `revisionID` int(10) unsigned NOT NULL, + KEY `repositoryID` (`repositoryID`,`pathID`,`epoch`), + KEY `revisionID` (`revisionID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_changeset` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `diffID` int(10) unsigned NOT NULL, + `oldFile` longblob, + `filename` longblob NOT NULL, + `awayPaths` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `changeType` int(10) unsigned NOT NULL, + `fileType` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `oldProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `newProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `addLines` int(10) unsigned NOT NULL, + `delLines` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `diffID` (`diffID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_changeset_parse_cache` ( + `id` int(10) unsigned NOT NULL, + `cache` longblob NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `dateCreated` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_commit` ( + `revisionID` int(10) unsigned NOT NULL, + `commitPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`revisionID`,`commitPHID`), + UNIQUE KEY `commitPHID` (`commitPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_customfieldnumericindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`), + KEY `key_find` (`indexKey`,`indexValue`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_customfieldstorage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_customfieldstringindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`(64)), + KEY `key_find` (`indexKey`,`indexValue`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_diff` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `revisionID` int(10) unsigned DEFAULT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `sourceMachine` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `sourcePath` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `sourceControlSystem` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `sourceControlBaseRevision` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `sourceControlPath` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `lintStatus` int(10) unsigned NOT NULL, + `unitStatus` int(10) unsigned NOT NULL, + `lineCount` int(10) unsigned NOT NULL, + `branch` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `bookmark` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `creationMethod` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `description` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `repositoryUUID` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `commitPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `revisionID` (`revisionID`), + KEY `key_commit` (`commitPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_diffproperty` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `diffID` int(10) unsigned NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `diffID` (`diffID`,`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_difftransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_hiddencomment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userPHID` varbinary(64) NOT NULL, + `commentID` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_user` (`userPHID`,`commentID`), + KEY `key_comment` (`commentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_hunk` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `changesetID` int(10) unsigned NOT NULL, + `oldOffset` int(10) unsigned NOT NULL, + `oldLen` int(10) unsigned NOT NULL, + `newOffset` int(10) unsigned NOT NULL, + `newLen` int(10) unsigned NOT NULL, + `dataType` binary(4) NOT NULL, + `dataEncoding` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dataFormat` binary(4) NOT NULL, + `data` longblob NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_changeset` (`changesetID`), + KEY `key_created` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_reviewer` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `revisionPHID` varbinary(64) NOT NULL, + `reviewerPHID` varbinary(64) NOT NULL, + `reviewerStatus` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `lastActionDiffPHID` varbinary(64) DEFAULT NULL, + `lastCommentDiffPHID` varbinary(64) DEFAULT NULL, + `lastActorPHID` varbinary(64) DEFAULT NULL, + `voidedPHID` varbinary(64) DEFAULT NULL, + `options` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_revision` (`revisionPHID`,`reviewerPHID`), + KEY `key_reviewer` (`reviewerPHID`,`revisionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revision` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `summary` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `testPlan` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `lastReviewerPHID` varbinary(64) DEFAULT NULL, + `lineCount` int(10) unsigned DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `attached` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(40) NOT NULL, + `branchName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `activeDiffPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `authorPHID` (`authorPHID`,`status`), + KEY `repositoryPHID` (`repositoryPHID`), + KEY `key_status` (`status`,`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revision_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revision_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revision_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revision_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_revisionhash` ( + `revisionID` int(10) unsigned NOT NULL, + `type` binary(4) NOT NULL, + `hash` binary(40) NOT NULL, + KEY `type` (`type`,`hash`), + KEY `revisionID` (`revisionID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `differential_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `revisionPHID` varbinary(64) DEFAULT NULL, + `changesetID` int(10) unsigned DEFAULT NULL, + `isNewFile` tinyint(1) NOT NULL, + `lineNumber` int(10) unsigned NOT NULL, + `lineLength` int(10) unsigned NOT NULL, + `fixedState` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `hasReplies` tinyint(1) NOT NULL, + `replyToCommentPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`), + KEY `key_changeset` (`changesetID`), + KEY `key_draft` (`authorPHID`,`transactionPHID`), + KEY `key_revision` (`revisionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_differential`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_diviner` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `diviner_liveatom` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `symbolPHID` varbinary(64) NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `atomData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `symbolPHID` (`symbolPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `diviner_livebook` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `configurationData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`), + UNIQUE KEY `phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `diviner_livebooktransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `diviner_livesymbol` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `bookPHID` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `context` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `type` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `atomIndex` int(10) unsigned NOT NULL, + `identityHash` binary(12) NOT NULL, + `graphHash` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `title` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `titleSlugHash` binary(12) DEFAULT NULL, + `groupName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `summary` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `isDocumentable` tinyint(1) NOT NULL, + `nodeHash` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `identityHash` (`identityHash`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `graphHash` (`graphHash`), + UNIQUE KEY `nodeHash` (`nodeHash`), + KEY `key_slug` (`titleSlugHash`), + KEY `bookPHID` (`bookPHID`,`type`,`name`(64),`context`(64),`atomIndex`), + KEY `name` (`name`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_diviner`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_doorkeeper` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_doorkeeper`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `doorkeeper_externalobject` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `objectKey` binary(12) NOT NULL, + `applicationType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `applicationDomain` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectID` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectURI` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `importerPHID` varbinary(64) DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_object` (`objectKey`), + KEY `key_full` (`applicationType`,`applicationDomain`,`objectType`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_doorkeeper`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_doorkeeper`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_draft` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_draft`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `draft` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `authorPHID` varbinary(64) NOT NULL, + `draftKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `draft` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `authorPHID` (`authorPHID`,`draftKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_draft`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `draft_versioneddraft` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `version` int(10) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`,`authorPHID`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_drydock` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_authorization` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `blueprintPHID` varbinary(64) NOT NULL, + `blueprintAuthorizationState` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `objectAuthorizationState` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_unique` (`objectPHID`,`blueprintPHID`), + KEY `key_blueprint` (`blueprintPHID`,`blueprintAuthorizationState`), + KEY `key_object` (`objectPHID`,`objectAuthorizationState`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_blueprint` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `className` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `blueprintName` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `details` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_blueprintname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_blueprinttransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_command` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `authorPHID` varbinary(64) NOT NULL, + `targetPHID` varbinary(64) NOT NULL, + `command` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isConsumed` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_target` (`targetPHID`,`isConsumed`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_lease` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `until` int(10) unsigned DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `attributes` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `resourceType` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `resourcePHID` varbinary(64) DEFAULT NULL, + `authorizingPHID` varbinary(64) NOT NULL, + `acquiredEpoch` int(10) unsigned DEFAULT NULL, + `activatedEpoch` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_resource` (`resourcePHID`,`status`), + KEY `key_status` (`status`), + KEY `key_owner` (`ownerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_log` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `epoch` int(10) unsigned NOT NULL, + `blueprintPHID` varbinary(64) DEFAULT NULL, + `resourcePHID` varbinary(64) DEFAULT NULL, + `leasePHID` varbinary(64) DEFAULT NULL, + `type` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `operationPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `epoch` (`epoch`), + KEY `key_blueprint` (`blueprintPHID`,`type`), + KEY `key_resource` (`resourcePHID`,`type`), + KEY `key_lease` (`leasePHID`,`type`), + KEY `key_operation` (`operationPHID`,`type`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_repositoryoperation` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `repositoryTarget` longblob NOT NULL, + `operationType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `operationState` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isDismissed` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`), + KEY `key_repository` (`repositoryPHID`,`operationState`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_resource` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `type` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `attributes` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `capabilities` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `blueprintPHID` varbinary(64) NOT NULL, + `until` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_type` (`type`,`status`), + KEY `key_blueprint` (`blueprintPHID`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `drydock_slotlock` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ownerPHID` varbinary(64) NOT NULL, + `lockIndex` binary(12) NOT NULL, + `lockKey` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_lock` (`lockIndex`), + KEY `key_owner` (`ownerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_drydock`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_fact` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_aggregate` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `factType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `valueX` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `factType` (`factType`,`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_chart` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `chartKey` binary(12) NOT NULL, + `chartParameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_chart` (`chartKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_cursor` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `position` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_intdatapoint` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `keyID` int(10) unsigned NOT NULL, + `objectID` int(10) unsigned NOT NULL, + `dimensionID` int(10) unsigned DEFAULT NULL, + `value` bigint(20) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_dimension` (`keyID`,`dimensionID`), + KEY `key_object` (`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_keydimension` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `factKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_factkey` (`factKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_objectdimension` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fact`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fact_raw` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `factType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `objectA` varbinary(64) NOT NULL, + `valueX` bigint(20) NOT NULL, + `valueY` bigint(20) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `objectPHID` (`objectPHID`), + KEY `factType` (`factType`,`epoch`), + KEY `factType_2` (`factType`,`objectA`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_feed` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_feed`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `feed_storydata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `chronologicalKey` bigint(20) unsigned NOT NULL, + `storyType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `storyData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `chronologicalKey` (`chronologicalKey`), + UNIQUE KEY `phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_feed`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `feed_storynotification` ( + `userPHID` varbinary(64) NOT NULL, + `primaryObjectPHID` varbinary(64) NOT NULL, + `chronologicalKey` bigint(20) unsigned NOT NULL, + `hasViewed` tinyint(1) NOT NULL, + UNIQUE KEY `userPHID` (`userPHID`,`chronologicalKey`), + KEY `userPHID_2` (`userPHID`,`hasViewed`,`primaryObjectPHID`), + KEY `key_object` (`primaryObjectPHID`), + KEY `key_chronological` (`chronologicalKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_feed`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `feed_storyreference` ( + `objectPHID` varbinary(64) NOT NULL, + `chronologicalKey` bigint(20) unsigned NOT NULL, + UNIQUE KEY `objectPHID` (`objectPHID`,`chronologicalKey`), + KEY `chronologicalKey` (`chronologicalKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_file` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `mimeType` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `byteSize` bigint(20) unsigned NOT NULL, + `storageEngine` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `storageFormat` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `storageHandle` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `secretKey` binary(20) DEFAULT NULL, + `contentHash` binary(64) DEFAULT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `ttl` int(10) unsigned DEFAULT NULL, + `isExplicitUpload` tinyint(1) DEFAULT '1', + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `isPartial` tinyint(1) NOT NULL DEFAULT '0', + `builtinKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `isDeleted` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_builtin` (`builtinKey`), + KEY `authorPHID` (`authorPHID`), + KEY `contentHash` (`contentHash`), + KEY `key_ttl` (`ttl`), + KEY `key_dateCreated` (`dateCreated`), + KEY `key_partial` (`authorPHID`,`isPartial`), + KEY `key_engine` (`storageEngine`,`storageHandle`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_chunk` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `chunkHandle` binary(12) NOT NULL, + `byteStart` bigint(20) unsigned NOT NULL, + `byteEnd` bigint(20) unsigned NOT NULL, + `dataFilePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `key_file` (`chunkHandle`,`byteStart`,`byteEnd`), + KEY `key_data` (`dataFilePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_externalrequest` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `filePHID` varbinary(64) DEFAULT NULL, + `ttl` int(10) unsigned NOT NULL, + `uri` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `uriIndex` binary(12) NOT NULL, + `isSuccessful` tinyint(1) NOT NULL, + `responseMessage` longtext COLLATE {$COLLATE_TEXT}, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_uriindex` (`uriIndex`), + KEY `key_ttl` (`ttl`), + KEY `key_file` (`filePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_filename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_imagemacro` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `filePHID` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + `audioPHID` varbinary(64) DEFAULT NULL, + `audioBehavior` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `name` (`name`), + KEY `key_disabled` (`isDisabled`), + KEY `key_dateCreated` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_storageblob` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longblob NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `file_transformedfile` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `originalPHID` varbinary(64) NOT NULL, + `transform` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `transformedPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `originalPHID` (`originalPHID`,`transform`), + KEY `transformedPHID` (`transformedPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `macro_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_file`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `macro_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_flag` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_flag`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `flag` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ownerPHID` varbinary(64) NOT NULL, + `type` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `reasonPHID` varbinary(64) NOT NULL, + `color` int(10) unsigned NOT NULL, + `note` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `ownerPHID` (`ownerPHID`,`type`,`objectPHID`), + KEY `objectPHID` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_fund` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_backer` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `initiativePHID` varbinary(64) NOT NULL, + `backerPHID` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `amountAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_initiative` (`initiativePHID`), + KEY `key_backer` (`backerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_backertransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiative` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `ownerPHID` varbinary(64) NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `merchantPHID` varbinary(64) DEFAULT NULL, + `risks` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `totalAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_status` (`status`), + KEY `key_owner` (`ownerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiative_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiative_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiative_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiative_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiativetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_fund`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `fund_initiativetransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_harbormaster` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_build` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `buildablePHID` varbinary(64) NOT NULL, + `buildPlanPHID` varbinary(64) NOT NULL, + `buildStatus` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `buildGeneration` int(10) unsigned NOT NULL DEFAULT '0', + `planAutoKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `buildParameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `initiatorPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_planautokey` (`buildablePHID`,`planAutoKey`), + KEY `key_buildable` (`buildablePHID`), + KEY `key_plan` (`buildPlanPHID`), + KEY `key_status` (`buildStatus`), + KEY `key_initiator` (`initiatorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildable` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `buildablePHID` varbinary(64) NOT NULL, + `containerPHID` varbinary(64) DEFAULT NULL, + `buildableStatus` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isManualBuildable` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_buildable` (`buildablePHID`), + KEY `key_container` (`containerPHID`), + KEY `key_manual` (`isManualBuildable`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildabletransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildartifact` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `artifactType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `artifactIndex` binary(12) NOT NULL, + `artifactKey` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `artifactData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `buildTargetPHID` varbinary(64) NOT NULL, + `isReleased` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_artifact` (`artifactType`,`artifactIndex`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_garbagecollect` (`artifactType`,`dateCreated`), + KEY `key_target` (`buildTargetPHID`,`artifactType`), + KEY `key_index` (`artifactIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildcommand` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `authorPHID` varbinary(64) NOT NULL, + `targetPHID` varbinary(64) NOT NULL, + `command` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_target` (`targetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildlintmessage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `buildTargetPHID` varbinary(64) NOT NULL, + `path` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `line` int(10) unsigned DEFAULT NULL, + `characterOffset` int(10) unsigned DEFAULT NULL, + `code` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `severity` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_target` (`buildTargetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildlog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `logSource` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `logType` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `duration` int(10) unsigned DEFAULT NULL, + `live` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `buildTargetPHID` varbinary(64) NOT NULL, + `filePHID` varbinary(64) DEFAULT NULL, + `byteLength` bigint(20) unsigned NOT NULL, + `chunkFormat` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lineMap` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_buildtarget` (`buildTargetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildlogchunk` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `logID` int(10) unsigned NOT NULL, + `encoding` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `size` int(10) unsigned DEFAULT NULL, + `chunk` longblob NOT NULL, + `headOffset` bigint(20) unsigned NOT NULL, + `tailOffset` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_offset` (`logID`,`headOffset`,`tailOffset`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildmessage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `authorPHID` varbinary(64) NOT NULL, + `receiverPHID` varbinary(64) NOT NULL, + `type` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isConsumed` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_receiver` (`receiverPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildplan` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `planStatus` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `planAutoKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_planautokey` (`planAutoKey`), + KEY `key_status` (`planStatus`), + KEY `key_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildplanname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildplantransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildstep` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `buildPlanPHID` varbinary(64) NOT NULL, + `className` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `details` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `sequence` int(10) unsigned NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `stepAutoKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_stepautokey` (`buildPlanPHID`,`stepAutoKey`), + KEY `key_plan` (`buildPlanPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildsteptransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildtarget` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `buildPHID` varbinary(64) NOT NULL, + `buildStepPHID` varbinary(64) NOT NULL, + `className` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `details` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `variables` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `targetStatus` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateStarted` int(10) unsigned DEFAULT NULL, + `dateCompleted` int(10) unsigned DEFAULT NULL, + `buildGeneration` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_build` (`buildPHID`,`buildStepPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_buildunitmessage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `buildTargetPHID` varbinary(64) NOT NULL, + `engine` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `namespace` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `result` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `duration` double DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `nameIndex` binary(12) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_target` (`buildTargetPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_object` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_scratchtable` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `bigData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `nonmutableData` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `data` (`data`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `harbormaster_string` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `stringIndex` binary(12) NOT NULL, + `stringValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_string` (`stringIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_harbormaster`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `lisk_counter` ( + `counterName` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `counterValue` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`counterName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_herald` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_action` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ruleID` int(10) unsigned NOT NULL, + `action` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `target` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `ruleID` (`ruleID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_condition` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ruleID` int(10) unsigned NOT NULL, + `fieldName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `fieldCondition` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `value` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `ruleID` (`ruleID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_rule` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `contentType` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mustMatchAll` tinyint(1) NOT NULL, + `configVersion` int(10) unsigned NOT NULL DEFAULT '1', + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `repetitionPolicy` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `ruleType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `isDisabled` int(10) unsigned NOT NULL DEFAULT '0', + `triggerObjectPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_trigger` (`triggerObjectPHID`), + KEY `key_name` (`name`(128)), + KEY `key_author` (`authorPHID`), + KEY `key_ruletype` (`ruleType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_ruleapplied` ( + `ruleID` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + PRIMARY KEY (`ruleID`,`phid`), + KEY `phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_ruletransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_savedheader` ( + `phid` varbinary(64) NOT NULL, + `header` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_transcript` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `time` int(10) unsigned NOT NULL, + `host` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `duration` double NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `dryRun` tinyint(1) NOT NULL, + `objectTranscript` longblob NOT NULL, + `ruleTranscripts` longblob NOT NULL, + `conditionTranscripts` longblob NOT NULL, + `applyTranscripts` longblob NOT NULL, + `garbageCollected` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `objectPHID` (`objectPHID`), + KEY `garbageCollected` (`garbageCollected`,`time`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_webhook` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `webhookURI` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `hmacKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_webhookrequest` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `webhookPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lastRequestResult` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lastRequestEpoch` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_ratelimit` (`webhookPHID`,`lastRequestResult`,`lastRequestEpoch`), + KEY `key_collect` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_herald`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `herald_webhooktransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_legalpad` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `legalpad_document` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contributorCount` int(10) unsigned NOT NULL DEFAULT '0', + `recentContributorPHIDs` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `versions` int(10) unsigned NOT NULL DEFAULT '0', + `documentBodyPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `mailKey` binary(20) NOT NULL, + `signatureType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `preamble` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `requireSignature` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_creator` (`creatorPHID`,`dateModified`), + KEY `key_required` (`requireSignature`,`dateModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `legalpad_documentbody` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `documentPHID` varbinary(64) NOT NULL, + `version` int(10) unsigned NOT NULL DEFAULT '0', + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `text` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_document` (`documentPHID`,`version`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `legalpad_documentsignature` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentPHID` varbinary(64) NOT NULL, + `documentVersion` int(10) unsigned NOT NULL DEFAULT '0', + `signatureType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `signerPHID` varbinary(64) DEFAULT NULL, + `signerName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `signerEmail` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `signatureData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `secretKey` binary(20) NOT NULL, + `verified` tinyint(1) DEFAULT '0', + `isExemption` tinyint(1) NOT NULL DEFAULT '0', + `exemptionPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `key_signer` (`signerPHID`,`dateModified`), + KEY `secretKey` (`secretKey`), + KEY `key_document` (`documentPHID`,`signerPHID`,`documentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `legalpad_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_legalpad`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `legalpad_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `documentID` int(10) unsigned DEFAULT NULL, + `lineNumber` int(10) unsigned NOT NULL, + `lineLength` int(10) unsigned NOT NULL, + `fixedState` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `hasReplies` tinyint(1) NOT NULL, + `replyToCommentPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`), + UNIQUE KEY `key_draft` (`authorPHID`,`documentID`,`transactionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_maniphest` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_customfieldnumericindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`), + KEY `key_find` (`indexKey`,`indexValue`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_customfieldstorage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_customfieldstringindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`(64)), + KEY `key_find` (`indexKey`,`indexValue`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_nameindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `indexedObjectPHID` varbinary(64) NOT NULL, + `indexedObjectName` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`indexedObjectPHID`), + KEY `key_name` (`indexedObjectName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_task` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `status` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `priority` int(10) unsigned NOT NULL, + `title` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `mailKey` binary(20) NOT NULL, + `ownerOrdering` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `originalEmailSource` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `subpriority` double NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `points` double DEFAULT NULL, + `bridgedObjectPHID` varbinary(64) DEFAULT NULL, + `subtype` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `closedEpoch` int(10) unsigned DEFAULT NULL, + `closerPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_bridgedobject` (`bridgedObjectPHID`), + KEY `priority` (`priority`,`status`), + KEY `status` (`status`), + KEY `ownerPHID` (`ownerPHID`,`status`), + KEY `authorPHID` (`authorPHID`,`status`), + KEY `ownerOrdering` (`ownerOrdering`), + KEY `priority_2` (`priority`,`subpriority`), + KEY `key_dateCreated` (`dateCreated`), + KEY `key_dateModified` (`dateModified`), + KEY `key_title` (`title`(64)), + KEY `key_subtype` (`subtype`), + KEY `key_closed` (`closedEpoch`), + KEY `key_closer` (`closerPHID`,`closedEpoch`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_task_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_task_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_task_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_task_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_maniphest`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `maniphest_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_meta_data` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_meta_data`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `hoststate` ( + `stateKey` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `stateValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`stateKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_meta_data`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `patch_status` ( + `patch` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `applied` int(10) unsigned NOT NULL, + `duration` bigint(20) unsigned DEFAULT NULL, + PRIMARY KEY (`patch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1556231684,NULL),('phabricator:0000.legacy.sql',1556231684,NULL),('phabricator:001.maniphest_projects.sql',1556231684,NULL),('phabricator:002.oauth.sql',1556231684,NULL),('phabricator:003.more_oauth.sql',1556231684,NULL),('phabricator:004.daemonrepos.sql',1556231684,NULL),('phabricator:005.workers.sql',1556231684,NULL),('phabricator:006.repository.sql',1556231684,NULL),('phabricator:007.daemonlog.sql',1556231684,NULL),('phabricator:008.repoopt.sql',1556231684,NULL),('phabricator:009.repo_summary.sql',1556231684,NULL),('phabricator:010.herald.sql',1556231684,NULL),('phabricator:011.badcommit.sql',1556231684,NULL),('phabricator:012.dropphidtype.sql',1556231684,NULL),('phabricator:013.commitdetail.sql',1556231684,NULL),('phabricator:014.shortcuts.sql',1556231684,NULL),('phabricator:015.preferences.sql',1556231684,NULL),('phabricator:016.userrealnameindex.sql',1556231684,NULL),('phabricator:017.sessionkeys.sql',1556231684,NULL),('phabricator:018.owners.sql',1556231684,NULL),('phabricator:019.arcprojects.sql',1556231684,NULL),('phabricator:020.pathcapital.sql',1556231684,NULL),('phabricator:021.xhpastview.sql',1556231684,NULL),('phabricator:022.differentialcommit.sql',1556231684,NULL),('phabricator:023.dxkeys.sql',1556231685,NULL),('phabricator:024.mlistkeys.sql',1556231685,NULL),('phabricator:025.commentopt.sql',1556231685,NULL),('phabricator:026.diffpropkey.sql',1556231685,NULL),('phabricator:027.metamtakeys.sql',1556231685,NULL),('phabricator:028.systemagent.sql',1556231685,NULL),('phabricator:029.cursors.sql',1556231685,NULL),('phabricator:030.imagemacro.sql',1556231685,NULL),('phabricator:031.workerrace.sql',1556231685,NULL),('phabricator:032.viewtime.sql',1556231685,NULL),('phabricator:033.privtest.sql',1556231685,NULL),('phabricator:034.savedheader.sql',1556231685,NULL),('phabricator:035.proxyimage.sql',1556231685,NULL),('phabricator:036.mailkey.sql',1556231685,NULL),('phabricator:037.setuptest.sql',1556231685,NULL),('phabricator:038.admin.sql',1556231685,NULL),('phabricator:039.userlog.sql',1556231685,NULL),('phabricator:040.transform.sql',1556231685,NULL),('phabricator:041.heraldrepetition.sql',1556231685,NULL),('phabricator:042.commentmetadata.sql',1556231685,NULL),('phabricator:043.pastebin.sql',1556231685,NULL),('phabricator:044.countdown.sql',1556231685,NULL),('phabricator:045.timezone.sql',1556231685,NULL),('phabricator:046.conduittoken.sql',1556231685,NULL),('phabricator:047.projectstatus.sql',1556231685,NULL),('phabricator:048.relationshipkeys.sql',1556231685,NULL),('phabricator:049.projectowner.sql',1556231685,NULL),('phabricator:050.taskdenormal.sql',1556231685,NULL),('phabricator:051.projectfilter.sql',1556231685,NULL),('phabricator:052.pastelanguage.sql',1556231685,NULL),('phabricator:053.feed.sql',1556231685,NULL),('phabricator:054.subscribers.sql',1556231685,NULL),('phabricator:055.add_author_to_files.sql',1556231685,NULL),('phabricator:056.slowvote.sql',1556231685,NULL),('phabricator:057.parsecache.sql',1556231685,NULL),('phabricator:058.missingkeys.sql',1556231685,NULL),('phabricator:059.engines.php',1556231685,NULL),('phabricator:060.phriction.sql',1556231685,NULL),('phabricator:061.phrictioncontent.sql',1556231685,NULL),('phabricator:062.phrictionmenu.sql',1556231685,NULL),('phabricator:063.pasteforks.sql',1556231685,NULL),('phabricator:064.subprojects.sql',1556231685,NULL),('phabricator:065.sshkeys.sql',1556231685,NULL),('phabricator:066.phrictioncontent.sql',1556231685,NULL),('phabricator:067.preferences.sql',1556231685,NULL),('phabricator:068.maniphestauxiliarystorage.sql',1556231685,NULL),('phabricator:069.heraldxscript.sql',1556231685,NULL),('phabricator:070.differentialaux.sql',1556231685,NULL),('phabricator:071.contentsource.sql',1556231685,NULL),('phabricator:072.blamerevert.sql',1556231685,NULL),('phabricator:073.reposymbols.sql',1556231685,NULL),('phabricator:074.affectedpath.sql',1556231685,NULL),('phabricator:075.revisionhash.sql',1556231685,NULL),('phabricator:076.indexedlanguages.sql',1556231685,NULL),('phabricator:077.originalemail.sql',1556231685,NULL),('phabricator:078.nametoken.sql',1556231685,NULL),('phabricator:079.nametokenindex.php',1556231685,NULL),('phabricator:080.filekeys.sql',1556231685,NULL),('phabricator:081.filekeys.php',1556231685,NULL),('phabricator:082.xactionkey.sql',1556231685,NULL),('phabricator:083.dxviewtime.sql',1556231685,NULL),('phabricator:084.pasteauthorkey.sql',1556231685,NULL),('phabricator:085.packagecommitrelationship.sql',1556231685,NULL),('phabricator:086.formeraffil.sql',1556231685,NULL),('phabricator:087.phrictiondelete.sql',1556231685,NULL),('phabricator:088.audit.sql',1556231685,NULL),('phabricator:089.projectwiki.sql',1556231685,NULL),('phabricator:090.forceuniqueprojectnames.php',1556231685,NULL),('phabricator:091.uniqueslugkey.sql',1556231686,NULL),('phabricator:092.dropgithubnotification.sql',1556231686,NULL),('phabricator:093.gitremotes.php',1556231686,NULL),('phabricator:094.phrictioncolumn.sql',1556231686,NULL),('phabricator:095.directory.sql',1556231686,NULL),('phabricator:096.filename.sql',1556231686,NULL),('phabricator:097.heraldruletypes.sql',1556231686,NULL),('phabricator:098.heraldruletypemigration.php',1556231686,NULL),('phabricator:099.drydock.sql',1556231686,NULL),('phabricator:100.projectxaction.sql',1556231686,NULL),('phabricator:101.heraldruleapplied.sql',1556231686,NULL),('phabricator:102.heraldcleanup.php',1556231686,NULL),('phabricator:103.heraldedithistory.sql',1556231686,NULL),('phabricator:104.searchkey.sql',1556231686,NULL),('phabricator:105.mimetype.sql',1556231686,NULL),('phabricator:106.chatlog.sql',1556231686,NULL),('phabricator:107.oauthserver.sql',1556231686,NULL),('phabricator:108.oauthscope.sql',1556231686,NULL),('phabricator:109.oauthclientphidkey.sql',1556231686,NULL),('phabricator:110.commitaudit.sql',1556231686,NULL),('phabricator:111.commitauditmigration.php',1556231686,NULL),('phabricator:112.oauthaccesscoderedirecturi.sql',1556231686,NULL),('phabricator:113.lastreviewer.sql',1556231686,NULL),('phabricator:114.auditrequest.sql',1556231686,NULL),('phabricator:115.prepareutf8.sql',1556231686,NULL),('phabricator:116.utf8-backup-first-expect-wait.sql',1556231688,NULL),('phabricator:117.repositorydescription.php',1556231688,NULL),('phabricator:118.auditinline.sql',1556231688,NULL),('phabricator:119.filehash.sql',1556231688,NULL),('phabricator:120.noop.sql',1556231688,NULL),('phabricator:121.drydocklog.sql',1556231688,NULL),('phabricator:122.flag.sql',1556231688,NULL),('phabricator:123.heraldrulelog.sql',1556231688,NULL),('phabricator:124.subpriority.sql',1556231688,NULL),('phabricator:125.ipv6.sql',1556231688,NULL),('phabricator:126.edges.sql',1556231688,NULL),('phabricator:127.userkeybody.sql',1556231688,NULL),('phabricator:128.phabricatorcom.sql',1556231688,NULL),('phabricator:129.savedquery.sql',1556231688,NULL),('phabricator:130.denormalrevisionquery.sql',1556231688,NULL),('phabricator:131.migraterevisionquery.php',1556231688,NULL),('phabricator:132.phame.sql',1556231688,NULL),('phabricator:133.imagemacro.sql',1556231688,NULL),('phabricator:134.emptysearch.sql',1556231688,NULL),('phabricator:135.datecommitted.sql',1556231688,NULL),('phabricator:136.sex.sql',1556231688,NULL),('phabricator:137.auditmetadata.sql',1556231688,NULL),('phabricator:138.notification.sql',1556231688,NULL),('phabricator:20121209.pholioxactions.sql',1556231689,NULL),('phabricator:20121209.xmacroadd.sql',1556231689,NULL),('phabricator:20121209.xmacromigrate.php',1556231689,NULL),('phabricator:20121209.xmacromigratekey.sql',1556231689,NULL),('phabricator:20121220.generalcache.sql',1556231689,NULL),('phabricator:20121226.config.sql',1556231689,NULL),('phabricator:20130101.confxaction.sql',1556231689,NULL),('phabricator:20130102.metamtareceivedmailmessageidhash.sql',1556231689,NULL),('phabricator:20130103.filemetadata.sql',1556231689,NULL),('phabricator:20130111.conpherence.sql',1556231689,NULL),('phabricator:20130127.altheraldtranscript.sql',1556231689,NULL),('phabricator:20130131.conpherencepics.sql',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.php',1556231689,NULL),('phabricator:20130201.revisionunsubscribed.sql',1556231689,NULL),('phabricator:20130214.chatlogchannel.sql',1556231689,NULL),('phabricator:20130214.chatlogchannelid.sql',1556231689,NULL),('phabricator:20130214.token.sql',1556231689,NULL),('phabricator:20130215.phabricatorfileaddttl.sql',1556231689,NULL),('phabricator:20130217.cachettl.sql',1556231689,NULL),('phabricator:20130218.longdaemon.sql',1556231689,NULL),('phabricator:20130218.updatechannelid.php',1556231689,NULL),('phabricator:20130219.commitsummary.sql',1556231689,NULL),('phabricator:20130219.commitsummarymig.php',1556231689,NULL),('phabricator:20130222.dropchannel.sql',1556231689,NULL),('phabricator:20130226.commitkey.sql',1556231689,NULL),('phabricator:20130304.lintauthor.sql',1556231689,NULL),('phabricator:20130310.xactionmeta.sql',1556231689,NULL),('phabricator:20130317.phrictionedge.sql',1556231689,NULL),('phabricator:20130319.conpherence.sql',1556231689,NULL),('phabricator:20130319.phabricatorfileexplicitupload.sql',1556231689,NULL),('phabricator:20130320.phlux.sql',1556231689,NULL),('phabricator:20130321.token.sql',1556231689,NULL),('phabricator:20130322.phortune.sql',1556231689,NULL),('phabricator:20130323.phortunepayment.sql',1556231689,NULL),('phabricator:20130324.phortuneproduct.sql',1556231689,NULL),('phabricator:20130330.phrequent.sql',1556231689,NULL),('phabricator:20130403.conpherencecache.sql',1556231689,NULL),('phabricator:20130403.conpherencecachemig.php',1556231689,NULL),('phabricator:20130409.commitdrev.php',1556231689,NULL),('phabricator:20130417.externalaccount.sql',1556231689,NULL),('phabricator:20130423.conpherenceindices.sql',1556231690,NULL),('phabricator:20130423.phortunepaymentrevised.sql',1556231690,NULL),('phabricator:20130423.updateexternalaccount.sql',1556231689,NULL),('phabricator:20130426.search_savedquery.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp1.sql',1556231690,NULL),('phabricator:20130502.countdownrevamp2.php',1556231690,NULL),('phabricator:20130502.countdownrevamp3.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkey.sql',1556231690,NULL),('phabricator:20130507.releephrqmailkeypop.php',1556231690,NULL),('phabricator:20130507.releephrqsimplifycols.sql',1556231690,NULL),('phabricator:20130508.releephtransactions.sql',1556231690,NULL),('phabricator:20130508.releephtransactionsmig.php',1556231690,NULL),('phabricator:20130508.search_namedquery.sql',1556231690,NULL),('phabricator:20130513.receviedmailstatus.sql',1556231690,NULL),('phabricator:20130519.diviner.sql',1556231690,NULL),('phabricator:20130521.dropconphimages.sql',1556231690,NULL),('phabricator:20130523.maniphest_owners.sql',1556231690,NULL),('phabricator:20130524.repoxactions.sql',1556231690,NULL),('phabricator:20130529.macroauthor.sql',1556231690,NULL),('phabricator:20130529.macroauthormig.php',1556231690,NULL),('phabricator:20130530.macrodatekey.sql',1556231690,NULL),('phabricator:20130530.pastekeys.sql',1556231690,NULL),('phabricator:20130530.sessionhash.php',1556231690,NULL),('phabricator:20130531.filekeys.sql',1556231690,NULL),('phabricator:20130602.morediviner.sql',1556231690,NULL),('phabricator:20130602.namedqueries.sql',1556231690,NULL),('phabricator:20130606.userxactions.sql',1556231690,NULL),('phabricator:20130607.xaccount.sql',1556231690,NULL),('phabricator:20130611.migrateoauth.php',1556231690,NULL),('phabricator:20130611.nukeldap.php',1556231690,NULL),('phabricator:20130613.authdb.sql',1556231690,NULL),('phabricator:20130619.authconf.php',1556231690,NULL),('phabricator:20130620.diffxactions.sql',1556231690,NULL),('phabricator:20130621.diffcommentphid.sql',1556231690,NULL),('phabricator:20130621.diffcommentphidmig.php',1556231690,NULL),('phabricator:20130621.diffcommentunphid.sql',1556231690,NULL),('phabricator:20130622.doorkeeper.sql',1556231690,NULL),('phabricator:20130628.legalpadv0.sql',1556231690,NULL),('phabricator:20130701.conduitlog.sql',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.php',1556231690,NULL),('phabricator:20130703.legalpaddocdenorm.sql',1556231690,NULL),('phabricator:20130709.droptimeline.sql',1556231690,NULL),('phabricator:20130709.legalpadsignature.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.php',1556231690,NULL),('phabricator:20130711.pholioimageobsolete.sql',1556231690,NULL),('phabricator:20130711.pholioimageobsolete2.sql',1556231690,NULL),('phabricator:20130711.trimrealnames.php',1556231690,NULL),('phabricator:20130714.votexactions.sql',1556231690,NULL),('phabricator:20130715.votecomments.php',1556231690,NULL),('phabricator:20130715.voteedges.sql',1556231690,NULL),('phabricator:20130716.archivememberlessprojects.php',1556231690,NULL),('phabricator:20130722.pholioreplace.sql',1556231690,NULL),('phabricator:20130723.taskstarttime.sql',1556231690,NULL),('phabricator:20130726.ponderxactions.sql',1556231690,NULL),('phabricator:20130727.ponderquestionstatus.sql',1556231690,NULL),('phabricator:20130728.ponderunique.php',1556231690,NULL),('phabricator:20130728.ponderuniquekey.sql',1556231690,NULL),('phabricator:20130728.ponderxcomment.php',1556231690,NULL),('phabricator:20130731.releephcutpointidentifier.sql',1556231690,NULL),('phabricator:20130731.releephproject.sql',1556231690,NULL),('phabricator:20130731.releephrepoid.sql',1556231690,NULL),('phabricator:20130801.pastexactions.php',1556231690,NULL),('phabricator:20130801.pastexactions.sql',1556231690,NULL),('phabricator:20130802.heraldphid.sql',1556231690,NULL),('phabricator:20130802.heraldphids.php',1556231690,NULL),('phabricator:20130802.heraldphidukey.sql',1556231690,NULL),('phabricator:20130802.heraldxactions.sql',1556231690,NULL),('phabricator:20130805.pasteedges.sql',1556231690,NULL),('phabricator:20130805.pastemailkey.sql',1556231690,NULL),('phabricator:20130805.pastemailkeypop.php',1556231690,NULL),('phabricator:20130814.usercustom.sql',1556231690,NULL),('phabricator:20130820.file-mailkey-populate.php',1556231691,NULL),('phabricator:20130820.filemailkey.sql',1556231691,NULL),('phabricator:20130820.filexactions.sql',1556231691,NULL),('phabricator:20130820.releephxactions.sql',1556231690,NULL),('phabricator:20130826.divinernode.sql',1556231691,NULL),('phabricator:20130912.maniphest.1.touch.sql',1556231691,NULL),('phabricator:20130912.maniphest.2.created.sql',1556231691,NULL),('phabricator:20130912.maniphest.3.nameindex.sql',1556231691,NULL),('phabricator:20130912.maniphest.4.fillindex.php',1556231691,NULL),('phabricator:20130913.maniphest.1.migratesearch.php',1556231691,NULL),('phabricator:20130914.usercustom.sql',1556231691,NULL),('phabricator:20130915.maniphestcustom.sql',1556231691,NULL),('phabricator:20130915.maniphestmigrate.php',1556231691,NULL),('phabricator:20130915.maniphestqdrop.sql',1556231691,NULL),('phabricator:20130919.mfieldconf.php',1556231691,NULL),('phabricator:20130920.repokeyspolicy.sql',1556231691,NULL),('phabricator:20130921.mtransactions.sql',1556231691,NULL),('phabricator:20130921.xmigratemaniphest.php',1556231691,NULL),('phabricator:20130923.mrename.sql',1556231691,NULL),('phabricator:20130924.mdraftkey.sql',1556231691,NULL),('phabricator:20130925.mpolicy.sql',1556231691,NULL),('phabricator:20130925.xpolicy.sql',1556231691,NULL),('phabricator:20130926.dcustom.sql',1556231691,NULL),('phabricator:20130926.dinkeys.sql',1556231691,NULL),('phabricator:20130926.dinline.php',1556231691,NULL),('phabricator:20130927.audiomacro.sql',1556231691,NULL),('phabricator:20130929.filepolicy.sql',1556231691,NULL),('phabricator:20131004.dxedgekey.sql',1556231691,NULL),('phabricator:20131004.dxreviewers.php',1556231691,NULL),('phabricator:20131006.hdisable.sql',1556231691,NULL),('phabricator:20131010.pstorage.sql',1556231691,NULL),('phabricator:20131015.cpolicy.sql',1556231691,NULL),('phabricator:20131020.col1.sql',1556231691,NULL),('phabricator:20131020.harbormaster.sql',1556231691,NULL),('phabricator:20131020.pcustom.sql',1556231691,NULL),('phabricator:20131020.pxaction.sql',1556231691,NULL),('phabricator:20131020.pxactionmig.php',1556231691,NULL),('phabricator:20131025.repopush.sql',1556231691,NULL),('phabricator:20131026.commitstatus.sql',1556231691,NULL),('phabricator:20131030.repostatusmessage.sql',1556231691,NULL),('phabricator:20131031.vcspassword.sql',1556231691,NULL),('phabricator:20131105.buildstep.sql',1556231691,NULL),('phabricator:20131106.diffphid.1.col.sql',1556231691,NULL),('phabricator:20131106.diffphid.2.mig.php',1556231691,NULL),('phabricator:20131106.diffphid.3.key.sql',1556231691,NULL),('phabricator:20131106.nuance-v0.sql',1556231691,NULL),('phabricator:20131107.buildlog.sql',1556231691,NULL),('phabricator:20131112.userverified.1.col.sql',1556231691,NULL),('phabricator:20131112.userverified.2.mig.php',1556231691,NULL),('phabricator:20131118.ownerorder.php',1556231691,NULL),('phabricator:20131119.passphrase.sql',1556231691,NULL),('phabricator:20131120.nuancesourcetype.sql',1556231691,NULL),('phabricator:20131121.passphraseedge.sql',1556231691,NULL),('phabricator:20131121.repocredentials.1.col.sql',1556231691,NULL),('phabricator:20131121.repocredentials.2.mig.php',1556231691,NULL),('phabricator:20131122.repomirror.sql',1556231691,NULL),('phabricator:20131123.drydockblueprintpolicy.sql',1556231691,NULL),('phabricator:20131129.drydockresourceblueprint.sql',1556231691,NULL),('phabricator:20131204.pushlog.sql',1556231691,NULL),('phabricator:20131205.buildsteporder.sql',1556231691,NULL),('phabricator:20131205.buildstepordermig.php',1556231691,NULL),('phabricator:20131205.buildtargets.sql',1556231691,NULL),('phabricator:20131206.phragment.sql',1556231691,NULL),('phabricator:20131206.phragmentnull.sql',1556231691,NULL),('phabricator:20131208.phragmentsnapshot.sql',1556231691,NULL),('phabricator:20131211.phragmentedges.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.1.col.sql',1556231691,NULL),('phabricator:20131217.pushlogphid.2.mig.php',1556231691,NULL),('phabricator:20131217.pushlogphid.3.key.sql',1556231692,NULL),('phabricator:20131219.pxdrop.sql',1556231692,NULL),('phabricator:20131224.harbormanual.sql',1556231692,NULL),('phabricator:20131227.heraldobject.sql',1556231692,NULL),('phabricator:20131231.dropshortcut.sql',1556231692,NULL),('phabricator:20131302.maniphestvalue.sql',1556231689,NULL),('phabricator:20140104.harbormastercmd.sql',1556231692,NULL),('phabricator:20140106.macromailkey.1.sql',1556231692,NULL),('phabricator:20140106.macromailkey.2.php',1556231692,NULL),('phabricator:20140108.ddbpname.1.sql',1556231692,NULL),('phabricator:20140108.ddbpname.2.php',1556231692,NULL),('phabricator:20140109.ddxactions.sql',1556231692,NULL),('phabricator:20140109.projectcolumnsdates.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.1.sql',1556231692,NULL),('phabricator:20140113.legalpadsig.2.php',1556231692,NULL),('phabricator:20140115.auth.1.id.sql',1556231692,NULL),('phabricator:20140115.auth.2.expires.sql',1556231692,NULL),('phabricator:20140115.auth.3.unlimit.php',1556231692,NULL),('phabricator:20140115.legalpadsigkey.sql',1556231692,NULL),('phabricator:20140116.reporefcursor.sql',1556231692,NULL),('phabricator:20140126.diff.1.parentrevisionid.sql',1556231692,NULL),('phabricator:20140126.diff.2.repositoryphid.sql',1556231692,NULL),('phabricator:20140130.dash.1.board.sql',1556231692,NULL),('phabricator:20140130.dash.2.panel.sql',1556231692,NULL),('phabricator:20140130.dash.3.boardxaction.sql',1556231692,NULL),('phabricator:20140130.dash.4.panelxaction.sql',1556231692,NULL),('phabricator:20140130.mail.1.retry.sql',1556231692,NULL),('phabricator:20140130.mail.2.next.sql',1556231692,NULL),('phabricator:20140201.gc.1.mailsent.sql',1556231692,NULL),('phabricator:20140201.gc.2.mailreceived.sql',1556231692,NULL),('phabricator:20140205.cal.1.rename.sql',1556231692,NULL),('phabricator:20140205.cal.2.phid-col.sql',1556231692,NULL),('phabricator:20140205.cal.3.phid-mig.php',1556231692,NULL),('phabricator:20140205.cal.4.phid-key.sql',1556231692,NULL),('phabricator:20140210.herald.rule-condition-mig.php',1556231692,NULL),('phabricator:20140210.projcfield.1.blurb.php',1556231692,NULL),('phabricator:20140210.projcfield.2.piccol.sql',1556231692,NULL),('phabricator:20140210.projcfield.3.picmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.4.memmig.sql',1556231692,NULL),('phabricator:20140210.projcfield.5.dropprofile.sql',1556231692,NULL),('phabricator:20140211.dx.1.nullablechangesetid.sql',1556231692,NULL),('phabricator:20140211.dx.2.migcommenttext.php',1556231692,NULL),('phabricator:20140211.dx.3.migsubscriptions.sql',1556231692,NULL),('phabricator:20140211.dx.999.drop.relationships.sql',1556231692,NULL),('phabricator:20140212.dx.1.armageddon.php',1556231692,NULL),('phabricator:20140214.clean.1.legacycommentid.sql',1556231692,NULL),('phabricator:20140214.clean.2.dropcomment.sql',1556231692,NULL),('phabricator:20140214.clean.3.dropinline.sql',1556231692,NULL),('phabricator:20140218.differentialdraft.sql',1556231692,NULL),('phabricator:20140218.passwords.1.extend.sql',1556231692,NULL),('phabricator:20140218.passwords.2.prefix.sql',1556231692,NULL),('phabricator:20140218.passwords.3.vcsextend.sql',1556231692,NULL),('phabricator:20140218.passwords.4.vcs.php',1556231692,NULL),('phabricator:20140223.bigutf8scratch.sql',1556231692,NULL),('phabricator:20140224.dxclean.1.datecommitted.sql',1556231692,NULL),('phabricator:20140226.dxcustom.1.fielddata.php',1556231692,NULL),('phabricator:20140226.dxcustom.99.drop.sql',1556231692,NULL),('phabricator:20140228.dxcomment.1.sql',1556231692,NULL),('phabricator:20140305.diviner.1.slugcol.sql',1556231692,NULL),('phabricator:20140305.diviner.2.slugkey.sql',1556231692,NULL),('phabricator:20140311.mdroplegacy.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.1.statuscol.sql',1556231692,NULL),('phabricator:20140314.projectcolumn.2.statuskey.sql',1556231692,NULL),('phabricator:20140317.mupdatedkey.sql',1556231692,NULL),('phabricator:20140321.harbor.1.bxaction.sql',1556231692,NULL),('phabricator:20140321.mstatus.1.col.sql',1556231692,NULL),('phabricator:20140321.mstatus.2.mig.php',1556231692,NULL),('phabricator:20140323.harbor.1.renames.php',1556231692,NULL),('phabricator:20140323.harbor.2.message.sql',1556231692,NULL),('phabricator:20140325.push.1.event.sql',1556231692,NULL),('phabricator:20140325.push.2.eventphid.sql',1556231692,NULL),('phabricator:20140325.push.3.groups.php',1556231692,NULL),('phabricator:20140325.push.4.prune.sql',1556231692,NULL),('phabricator:20140326.project.1.colxaction.sql',1556231692,NULL),('phabricator:20140328.releeph.1.productxaction.sql',1556231692,NULL),('phabricator:20140330.flagtext.sql',1556231692,NULL),('phabricator:20140402.actionlog.sql',1556231692,NULL),('phabricator:20140410.accountsecret.1.sql',1556231692,NULL),('phabricator:20140410.accountsecret.2.php',1556231692,NULL),('phabricator:20140416.harbor.1.sql',1556231692,NULL),('phabricator:20140420.rel.1.objectphid.sql',1556231692,NULL),('phabricator:20140420.rel.2.objectmig.php',1556231692,NULL),('phabricator:20140421.slowvotecolumnsisclosed.sql',1556231692,NULL),('phabricator:20140423.session.1.hisec.sql',1556231692,NULL),('phabricator:20140427.mfactor.1.sql',1556231692,NULL),('phabricator:20140430.auth.1.partial.sql',1556231692,NULL),('phabricator:20140430.dash.1.paneltype.sql',1556231692,NULL),('phabricator:20140430.dash.2.edge.sql',1556231692,NULL),('phabricator:20140501.passphraselockcredential.sql',1556231692,NULL),('phabricator:20140501.remove.1.dlog.sql',1556231692,NULL),('phabricator:20140507.smstable.sql',1556231692,NULL),('phabricator:20140509.coverage.1.sql',1556231692,NULL),('phabricator:20140509.dashboardlayoutconfig.sql',1556231692,NULL),('phabricator:20140512.dparents.1.sql',1556231692,NULL),('phabricator:20140514.harbormasterbuildabletransaction.sql',1556231692,NULL),('phabricator:20140514.pholiomockclose.sql',1556231692,NULL),('phabricator:20140515.trust-emails.sql',1556231692,NULL),('phabricator:20140517.dxbinarycache.sql',1556231692,NULL),('phabricator:20140518.dxmorebinarycache.sql',1556231693,NULL),('phabricator:20140519.dashboardinstall.sql',1556231693,NULL),('phabricator:20140520.authtemptoken.sql',1556231693,NULL),('phabricator:20140521.projectslug.1.create.sql',1556231693,NULL),('phabricator:20140521.projectslug.2.mig.php',1556231693,NULL),('phabricator:20140522.projecticon.sql',1556231693,NULL),('phabricator:20140524.auth.mfa.cache.sql',1556231693,NULL),('phabricator:20140525.hunkmodern.sql',1556231693,NULL),('phabricator:20140615.pholioedit.1.sql',1556231693,NULL),('phabricator:20140615.pholioedit.2.sql',1556231693,NULL),('phabricator:20140617.daemon.explicit-argv.sql',1556231693,NULL),('phabricator:20140617.daemonlog.sql',1556231693,NULL),('phabricator:20140624.projcolor.1.sql',1556231693,NULL),('phabricator:20140624.projcolor.2.sql',1556231693,NULL),('phabricator:20140629.dasharchive.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.1.sql',1556231693,NULL),('phabricator:20140629.legalsig.2.php',1556231693,NULL),('phabricator:20140701.legalexemption.1.sql',1556231693,NULL),('phabricator:20140701.legalexemption.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.1.sql',1556231693,NULL),('phabricator:20140703.legalcorp.2.sql',1556231693,NULL),('phabricator:20140703.legalcorp.3.sql',1556231693,NULL),('phabricator:20140703.legalcorp.4.sql',1556231693,NULL),('phabricator:20140703.legalcorp.5.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.1.sql',1556231693,NULL),('phabricator:20140704.harbormasterstep.2.sql',1556231693,NULL),('phabricator:20140704.legalpreamble.1.sql',1556231693,NULL),('phabricator:20140706.harbormasterdepend.1.php',1556231693,NULL),('phabricator:20140706.pedge.1.sql',1556231693,NULL),('phabricator:20140711.pnames.1.sql',1556231693,NULL),('phabricator:20140711.pnames.2.php',1556231693,NULL),('phabricator:20140711.workerpriority.sql',1556231693,NULL),('phabricator:20140712.projcoluniq.sql',1556231693,NULL),('phabricator:20140721.phortune.1.cart.sql',1556231693,NULL),('phabricator:20140721.phortune.2.purchase.sql',1556231693,NULL),('phabricator:20140721.phortune.3.charge.sql',1556231693,NULL),('phabricator:20140721.phortune.4.cartstatus.sql',1556231693,NULL),('phabricator:20140721.phortune.5.cstatusdefault.sql',1556231693,NULL),('phabricator:20140721.phortune.6.onetimecharge.sql',1556231693,NULL),('phabricator:20140721.phortune.7.nullmethod.sql',1556231693,NULL),('phabricator:20140722.appname.php',1556231693,NULL),('phabricator:20140722.audit.1.xactions.sql',1556231693,NULL),('phabricator:20140722.audit.2.comments.sql',1556231693,NULL),('phabricator:20140722.audit.3.miginlines.php',1556231693,NULL),('phabricator:20140722.audit.4.migtext.php',1556231693,NULL),('phabricator:20140722.renameauth.php',1556231693,NULL),('phabricator:20140723.apprenamexaction.sql',1556231693,NULL),('phabricator:20140725.audit.1.migxactions.php',1556231693,NULL),('phabricator:20140731.audit.1.subscribers.php',1556231693,NULL),('phabricator:20140731.cancdn.php',1556231693,NULL),('phabricator:20140731.harbormasterstepdesc.sql',1556231693,NULL),('phabricator:20140805.boardcol.1.sql',1556231693,NULL),('phabricator:20140805.boardcol.2.php',1556231693,NULL),('phabricator:20140807.harbormastertargettime.sql',1556231693,NULL),('phabricator:20140808.boardprop.1.sql',1556231693,NULL),('phabricator:20140808.boardprop.2.sql',1556231693,NULL),('phabricator:20140808.boardprop.3.php',1556231693,NULL),('phabricator:20140811.blob.1.sql',1556231693,NULL),('phabricator:20140811.blob.2.sql',1556231693,NULL),('phabricator:20140812.projkey.1.sql',1556231693,NULL),('phabricator:20140812.projkey.2.sql',1556231693,NULL),('phabricator:20140814.passphrasecredentialconduit.sql',1556231693,NULL),('phabricator:20140815.cancdncase.php',1556231693,NULL),('phabricator:20140818.harbormasterindex.1.sql',1556231693,NULL),('phabricator:20140821.harbormasterbuildgen.1.sql',1556231693,NULL),('phabricator:20140822.daemonenvhash.sql',1556231693,NULL),('phabricator:20140902.almanacdevice.1.sql',1556231693,NULL),('phabricator:20140904.macroattach.php',1556231693,NULL),('phabricator:20140911.fund.1.initiative.sql',1556231693,NULL),('phabricator:20140911.fund.2.xaction.sql',1556231693,NULL),('phabricator:20140911.fund.3.edge.sql',1556231693,NULL),('phabricator:20140911.fund.4.backer.sql',1556231693,NULL),('phabricator:20140911.fund.5.backxaction.sql',1556231693,NULL),('phabricator:20140914.betaproto.php',1556231693,NULL),('phabricator:20140917.project.canlock.sql',1556231693,NULL),('phabricator:20140918.schema.1.dropaudit.sql',1556231693,NULL),('phabricator:20140918.schema.2.dropauditinline.sql',1556231693,NULL),('phabricator:20140918.schema.3.wipecache.sql',1556231693,NULL),('phabricator:20140918.schema.4.cachetype.sql',1556231693,NULL),('phabricator:20140918.schema.5.slowvote.sql',1556231693,NULL),('phabricator:20140919.schema.01.calstatus.sql',1556231693,NULL),('phabricator:20140919.schema.02.calname.sql',1556231693,NULL),('phabricator:20140919.schema.03.dropaux.sql',1556231693,NULL),('phabricator:20140919.schema.04.droptaskproj.sql',1556231693,NULL),('phabricator:20140926.schema.01.droprelev.sql',1556231693,NULL),('phabricator:20140926.schema.02.droprelreqev.sql',1556231693,NULL),('phabricator:20140926.schema.03.dropldapinfo.sql',1556231693,NULL),('phabricator:20140926.schema.04.dropoauthinfo.sql',1556231693,NULL),('phabricator:20140926.schema.05.dropprojaffil.sql',1556231693,NULL),('phabricator:20140926.schema.06.dropsubproject.sql',1556231693,NULL),('phabricator:20140926.schema.07.droppondcom.sql',1556231693,NULL),('phabricator:20140927.schema.01.dropsearchq.sql',1556231693,NULL),('phabricator:20140927.schema.02.pholio1.sql',1556231693,NULL),('phabricator:20140927.schema.03.pholio2.sql',1556231693,NULL),('phabricator:20140927.schema.04.pholio3.sql',1556231693,NULL),('phabricator:20140927.schema.05.phragment1.sql',1556231693,NULL),('phabricator:20140927.schema.06.releeph1.sql',1556231693,NULL),('phabricator:20141001.schema.01.version.sql',1556231693,NULL),('phabricator:20141001.schema.02.taskmail.sql',1556231693,NULL),('phabricator:20141002.schema.01.liskcounter.sql',1556231693,NULL),('phabricator:20141002.schema.02.draftnull.sql',1556231693,NULL),('phabricator:20141004.currency.01.sql',1556231693,NULL),('phabricator:20141004.currency.02.sql',1556231693,NULL),('phabricator:20141004.currency.03.sql',1556231693,NULL),('phabricator:20141004.currency.04.sql',1556231693,NULL),('phabricator:20141004.currency.05.sql',1556231693,NULL),('phabricator:20141004.currency.06.sql',1556231693,NULL),('phabricator:20141004.harborliskcounter.sql',1556231693,NULL),('phabricator:20141005.phortuneproduct.sql',1556231694,NULL),('phabricator:20141006.phortunecart.sql',1556231694,NULL),('phabricator:20141006.phortunemerchant.sql',1556231694,NULL),('phabricator:20141006.phortunemerchantx.sql',1556231694,NULL),('phabricator:20141007.fundmerchant.sql',1556231694,NULL),('phabricator:20141007.fundrisks.sql',1556231694,NULL),('phabricator:20141007.fundtotal.sql',1556231694,NULL),('phabricator:20141007.phortunecartmerchant.sql',1556231694,NULL),('phabricator:20141007.phortunecharge.sql',1556231694,NULL),('phabricator:20141007.phortunepayment.sql',1556231694,NULL),('phabricator:20141007.phortuneprovider.sql',1556231694,NULL),('phabricator:20141007.phortuneproviderx.sql',1556231694,NULL),('phabricator:20141008.phortunemerchdesc.sql',1556231694,NULL),('phabricator:20141008.phortuneprovdis.sql',1556231694,NULL),('phabricator:20141008.phortunerefund.sql',1556231694,NULL),('phabricator:20141010.fundmailkey.sql',1556231694,NULL),('phabricator:20141011.phortunemerchedit.sql',1556231694,NULL),('phabricator:20141012.phortunecartxaction.sql',1556231694,NULL),('phabricator:20141013.phortunecartkey.sql',1556231694,NULL),('phabricator:20141016.almanac.device.sql',1556231694,NULL),('phabricator:20141016.almanac.dxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.interface.sql',1556231694,NULL),('phabricator:20141016.almanac.network.sql',1556231694,NULL),('phabricator:20141016.almanac.nxaction.sql',1556231694,NULL),('phabricator:20141016.almanac.service.sql',1556231694,NULL),('phabricator:20141016.almanac.sxaction.sql',1556231694,NULL),('phabricator:20141017.almanac.binding.sql',1556231694,NULL),('phabricator:20141017.almanac.bxaction.sql',1556231694,NULL),('phabricator:20141025.phriction.1.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.2.xaction.sql',1556231694,NULL),('phabricator:20141025.phriction.mailkey.sql',1556231694,NULL),('phabricator:20141103.almanac.1.delprop.sql',1556231694,NULL),('phabricator:20141103.almanac.2.addprop.sql',1556231694,NULL),('phabricator:20141104.almanac.3.edge.sql',1556231694,NULL),('phabricator:20141105.ssh.1.rename.sql',1556231694,NULL),('phabricator:20141106.dropold.sql',1556231694,NULL),('phabricator:20141106.uniqdrafts.php',1556231694,NULL),('phabricator:20141107.phriction.policy.1.sql',1556231694,NULL),('phabricator:20141107.phriction.policy.2.php',1556231694,NULL),('phabricator:20141107.phriction.popkeys.php',1556231694,NULL),('phabricator:20141107.ssh.1.colname.sql',1556231694,NULL),('phabricator:20141107.ssh.2.keyhash.sql',1556231694,NULL),('phabricator:20141107.ssh.3.keyindex.sql',1556231694,NULL),('phabricator:20141107.ssh.4.keymig.php',1556231694,NULL),('phabricator:20141107.ssh.5.indexnull.sql',1556231694,NULL),('phabricator:20141107.ssh.6.indexkey.sql',1556231694,NULL),('phabricator:20141107.ssh.7.colnull.sql',1556231694,NULL),('phabricator:20141113.auditdupes.php',1556231694,NULL),('phabricator:20141118.diffxaction.sql',1556231694,NULL),('phabricator:20141119.commitpedge.sql',1556231694,NULL),('phabricator:20141119.differential.diff.policy.sql',1556231694,NULL),('phabricator:20141119.sshtrust.sql',1556231694,NULL),('phabricator:20141123.taskpriority.1.sql',1556231694,NULL),('phabricator:20141123.taskpriority.2.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.1.sql',1556231694,NULL),('phabricator:20141210.maniphestsubscribersmig.2.sql',1556231694,NULL),('phabricator:20141210.reposervice.sql',1556231694,NULL),('phabricator:20141212.conduittoken.sql',1556231694,NULL),('phabricator:20141215.almanacservicetype.sql',1556231694,NULL),('phabricator:20141217.almanacdevicelock.sql',1556231694,NULL),('phabricator:20141217.almanaclock.sql',1556231694,NULL),('phabricator:20141218.maniphestcctxn.php',1556231694,NULL),('phabricator:20141222.maniphestprojtxn.php',1556231694,NULL),('phabricator:20141223.daemonloguser.sql',1556231694,NULL),('phabricator:20141223.daemonobjectphid.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicycolumn.sql',1556231694,NULL),('phabricator:20141230.pasteeditpolicyexisting.sql',1556231694,NULL),('phabricator:20150102.policyname.php',1556231694,NULL),('phabricator:20150102.tasksubscriber.sql',1556231694,NULL),('phabricator:20150105.conpsearch.sql',1556231694,NULL),('phabricator:20150114.oauthserver.client.policy.sql',1556231694,NULL),('phabricator:20150115.applicationemails.sql',1556231694,NULL),('phabricator:20150115.trigger.1.sql',1556231694,NULL),('phabricator:20150115.trigger.2.sql',1556231694,NULL),('phabricator:20150116.maniphestapplicationemails.php',1556231694,NULL),('phabricator:20150120.maniphestdefaultauthor.php',1556231694,NULL),('phabricator:20150124.subs.1.sql',1556231694,NULL),('phabricator:20150129.pastefileapplicationemails.php',1556231694,NULL),('phabricator:20150130.phortune.1.subphid.sql',1556231694,NULL),('phabricator:20150130.phortune.2.subkey.sql',1556231695,NULL),('phabricator:20150131.phortune.1.defaultpayment.sql',1556231695,NULL),('phabricator:20150205.authprovider.autologin.sql',1556231695,NULL),('phabricator:20150205.daemonenv.sql',1556231695,NULL),('phabricator:20150209.invite.sql',1556231695,NULL),('phabricator:20150209.oauthclient.trust.sql',1556231695,NULL),('phabricator:20150210.invitephid.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.1.sql',1556231695,NULL),('phabricator:20150212.legalpad.session.2.sql',1556231695,NULL),('phabricator:20150219.scratch.nonmutable.sql',1556231695,NULL),('phabricator:20150223.daemon.1.id.sql',1556231695,NULL),('phabricator:20150223.daemon.2.idlegacy.sql',1556231695,NULL),('phabricator:20150223.daemon.3.idkey.sql',1556231695,NULL),('phabricator:20150312.filechunk.1.sql',1556231695,NULL),('phabricator:20150312.filechunk.2.sql',1556231695,NULL),('phabricator:20150312.filechunk.3.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.1.sql',1556231695,NULL),('phabricator:20150317.conpherence.isroom.2.sql',1556231695,NULL),('phabricator:20150317.conpherence.policy.sql',1556231695,NULL),('phabricator:20150410.nukeruleedit.sql',1556231695,NULL),('phabricator:20150420.invoice.1.sql',1556231695,NULL),('phabricator:20150420.invoice.2.sql',1556231695,NULL),('phabricator:20150425.isclosed.sql',1556231695,NULL),('phabricator:20150427.calendar.1.edge.sql',1556231695,NULL),('phabricator:20150427.calendar.1.xaction.sql',1556231695,NULL),('phabricator:20150427.calendar.2.xaction.sql',1556231695,NULL),('phabricator:20150428.calendar.1.iscancelled.sql',1556231695,NULL),('phabricator:20150428.calendar.1.name.sql',1556231695,NULL),('phabricator:20150429.calendar.1.invitee.sql',1556231695,NULL),('phabricator:20150430.calendar.1.policies.sql',1556231695,NULL),('phabricator:20150430.multimeter.1.sql',1556231695,NULL),('phabricator:20150430.multimeter.2.host.sql',1556231695,NULL),('phabricator:20150430.multimeter.3.viewer.sql',1556231695,NULL),('phabricator:20150430.multimeter.4.context.sql',1556231695,NULL),('phabricator:20150430.multimeter.5.label.sql',1556231695,NULL),('phabricator:20150501.calendar.1.reply.sql',1556231695,NULL),('phabricator:20150501.calendar.2.reply.php',1556231695,NULL),('phabricator:20150501.conpherencepics.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.1.sql',1556231695,NULL),('phabricator:20150503.repositorysymbols.2.php',1556231695,NULL),('phabricator:20150503.repositorysymbols.3.sql',1556231695,NULL),('phabricator:20150504.symbolsproject.1.php',1556231695,NULL),('phabricator:20150504.symbolsproject.2.sql',1556231695,NULL),('phabricator:20150506.calendarunnamedevents.1.php',1556231695,NULL),('phabricator:20150507.calendar.1.isallday.sql',1556231695,NULL),('phabricator:20150513.user.cache.1.sql',1556231695,NULL),('phabricator:20150514.calendar.status.sql',1556231695,NULL),('phabricator:20150514.phame.blog.xaction.sql',1556231695,NULL),('phabricator:20150514.user.cache.2.sql',1556231695,NULL),('phabricator:20150515.phame.post.xaction.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.1.sql',1556231695,NULL),('phabricator:20150515.project.mailkey.2.php',1556231695,NULL),('phabricator:20150519.calendar.calendaricon.sql',1556231695,NULL),('phabricator:20150521.releephrepository.sql',1556231695,NULL),('phabricator:20150525.diff.hidden.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.1.sql',1556231695,NULL),('phabricator:20150526.owners.mailkey.2.php',1556231695,NULL),('phabricator:20150526.owners.xaction.sql',1556231695,NULL),('phabricator:20150527.calendar.recurringevents.sql',1556231695,NULL),('phabricator:20150601.spaces.1.namespace.sql',1556231695,NULL),('phabricator:20150601.spaces.2.xaction.sql',1556231695,NULL),('phabricator:20150602.mlist.1.sql',1556231695,NULL),('phabricator:20150602.mlist.2.php',1556231695,NULL),('phabricator:20150604.spaces.1.sql',1556231695,NULL),('phabricator:20150605.diviner.edges.sql',1556231695,NULL),('phabricator:20150605.diviner.editPolicy.sql',1556231695,NULL),('phabricator:20150605.diviner.xaction.sql',1556231695,NULL),('phabricator:20150606.mlist.1.php',1556231695,NULL),('phabricator:20150609.inline.sql',1556231695,NULL),('phabricator:20150609.spaces.1.pholio.sql',1556231695,NULL),('phabricator:20150609.spaces.2.maniphest.sql',1556231695,NULL),('phabricator:20150610.spaces.1.desc.sql',1556231695,NULL),('phabricator:20150610.spaces.2.edge.sql',1556231695,NULL),('phabricator:20150610.spaces.3.archive.sql',1556231695,NULL),('phabricator:20150611.spaces.1.mailxaction.sql',1556231695,NULL),('phabricator:20150611.spaces.2.appmail.sql',1556231695,NULL),('phabricator:20150616.divinerrepository.sql',1556231695,NULL),('phabricator:20150617.harbor.1.lint.sql',1556231695,NULL),('phabricator:20150617.harbor.2.unit.sql',1556231695,NULL),('phabricator:20150618.harbor.1.planauto.sql',1556231695,NULL),('phabricator:20150618.harbor.2.stepauto.sql',1556231695,NULL),('phabricator:20150618.harbor.3.buildauto.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.1.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.2.sql',1556231695,NULL),('phabricator:20150619.conpherencerooms.3.sql',1556231695,NULL),('phabricator:20150621.phrase.1.sql',1556231695,NULL),('phabricator:20150621.phrase.2.sql',1556231695,NULL),('phabricator:20150622.bulk.1.job.sql',1556231695,NULL),('phabricator:20150622.bulk.2.task.sql',1556231695,NULL),('phabricator:20150622.bulk.3.xaction.sql',1556231695,NULL),('phabricator:20150622.bulk.4.edge.sql',1556231696,NULL),('phabricator:20150622.metamta.1.phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.2.phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.3.phid-key.sql',1556231696,NULL),('phabricator:20150622.metamta.4.actor-phid-col.sql',1556231696,NULL),('phabricator:20150622.metamta.5.actor-phid-mig.php',1556231696,NULL),('phabricator:20150622.metamta.6.actor-phid-key.sql',1556231696,NULL),('phabricator:20150624.spaces.1.repo.sql',1556231696,NULL),('phabricator:20150626.spaces.1.calendar.sql',1556231696,NULL),('phabricator:20150630.herald.1.sql',1556231696,NULL),('phabricator:20150630.herald.2.sql',1556231696,NULL),('phabricator:20150701.herald.1.sql',1556231696,NULL),('phabricator:20150701.herald.2.sql',1556231696,NULL),('phabricator:20150702.spaces.1.slowvote.sql',1556231696,NULL),('phabricator:20150706.herald.1.sql',1556231696,NULL),('phabricator:20150707.herald.1.sql',1556231696,NULL),('phabricator:20150708.arcanistproject.sql',1556231696,NULL),('phabricator:20150708.herald.1.sql',1556231696,NULL),('phabricator:20150708.herald.2.sql',1556231696,NULL),('phabricator:20150708.herald.3.sql',1556231696,NULL),('phabricator:20150712.badges.1.sql',1556231696,NULL),('phabricator:20150714.spaces.countdown.1.sql',1556231696,NULL),('phabricator:20150717.herald.1.sql',1556231696,NULL),('phabricator:20150719.countdown.1.sql',1556231696,NULL),('phabricator:20150719.countdown.2.sql',1556231696,NULL),('phabricator:20150719.countdown.3.sql',1556231696,NULL),('phabricator:20150721.phurl.1.url.sql',1556231696,NULL),('phabricator:20150721.phurl.2.xaction.sql',1556231696,NULL),('phabricator:20150721.phurl.3.xactioncomment.sql',1556231696,NULL),('phabricator:20150721.phurl.4.url.sql',1556231696,NULL),('phabricator:20150721.phurl.5.edge.sql',1556231696,NULL),('phabricator:20150721.phurl.6.alias.sql',1556231696,NULL),('phabricator:20150721.phurl.7.authorphid.sql',1556231696,NULL),('phabricator:20150722.dashboard.1.sql',1556231696,NULL),('phabricator:20150722.dashboard.2.sql',1556231696,NULL),('phabricator:20150723.countdown.1.sql',1556231696,NULL),('phabricator:20150724.badges.comments.1.sql',1556231696,NULL),('phabricator:20150724.countdown.comments.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.badges.mailkey.2.php',1556231696,NULL),('phabricator:20150725.badges.viewpolicy.3.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.countdown.mailkey.2.php',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.1.sql',1556231696,NULL),('phabricator:20150725.slowvote.mailkey.2.php',1556231696,NULL),('phabricator:20150727.heraldaction.1.sql',1556231696,NULL),('phabricator:20150730.herald.1.sql',1556231696,NULL),('phabricator:20150730.herald.2.sql',1556231696,NULL),('phabricator:20150730.herald.3.sql',1556231696,NULL),('phabricator:20150730.herald.4.sql',1556231696,NULL),('phabricator:20150730.herald.5.sql',1556231696,NULL),('phabricator:20150730.herald.6.sql',1556231696,NULL),('phabricator:20150730.herald.7.sql',1556231696,NULL),('phabricator:20150803.herald.1.sql',1556231696,NULL),('phabricator:20150803.herald.2.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.1.sql',1556231696,NULL),('phabricator:20150804.ponder.answer.mailkey.2.php',1556231696,NULL),('phabricator:20150804.ponder.question.1.sql',1556231696,NULL),('phabricator:20150804.ponder.question.2.sql',1556231696,NULL),('phabricator:20150804.ponder.question.3.sql',1556231696,NULL),('phabricator:20150804.ponder.spaces.4.sql',1556231696,NULL),('phabricator:20150805.paste.status.1.sql',1556231696,NULL),('phabricator:20150805.paste.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150806.ponder.editpolicy.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.1.sql',1556231696,NULL),('phabricator:20150806.ponder.status.2.sql',1556231696,NULL),('phabricator:20150806.ponder.status.3.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.1.sql',1556231696,NULL),('phabricator:20150808.ponder.vote.2.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.1.sql',1556231696,NULL),('phabricator:20150812.ponder.answer.2.sql',1556231696,NULL),('phabricator:20150814.harbormater.artifact.phid.sql',1556231696,NULL),('phabricator:20150815.owners.status.1.sql',1556231696,NULL),('phabricator:20150815.owners.status.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.1.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.2.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.3.sql',1556231696,NULL),('phabricator:20150823.nuance.queue.4.sql',1556231696,NULL),('phabricator:20150828.ponder.wiki.1.sql',1556231696,NULL),('phabricator:20150829.ponder.dupe.1.sql',1556231696,NULL),('phabricator:20150904.herald.1.sql',1556231696,NULL),('phabricator:20150906.mailinglist.sql',1556231696,NULL),('phabricator:20150910.owners.custom.1.sql',1556231696,NULL),('phabricator:20150916.drydock.slotlocks.1.sql',1556231696,NULL),('phabricator:20150922.drydock.commands.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.1.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.2.sql',1556231696,NULL),('phabricator:20150923.drydock.resourceid.3.sql',1556231696,NULL),('phabricator:20150923.drydock.taskid.1.sql',1556231696,NULL),('phabricator:20150924.drydock.disable.1.sql',1556231696,NULL),('phabricator:20150924.drydock.status.1.sql',1556231696,NULL),('phabricator:20150928.drydock.rexpire.1.sql',1556231696,NULL),('phabricator:20150930.drydock.log.1.sql',1556231696,NULL),('phabricator:20151001.drydock.rname.1.sql',1556231696,NULL),('phabricator:20151002.dashboard.status.1.sql',1556231696,NULL),('phabricator:20151002.harbormaster.bparam.1.sql',1556231696,NULL),('phabricator:20151009.drydock.auth.1.sql',1556231696,NULL),('phabricator:20151010.drydock.auth.2.sql',1556231696,NULL),('phabricator:20151013.drydock.op.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.1.sql',1556231696,NULL),('phabricator:20151023.harborpolicy.2.php',1556231696,NULL),('phabricator:20151023.patchduration.sql',1556231697,141072),('phabricator:20151030.harbormaster.initiator.sql',1556231697,14355),('phabricator:20151106.editengine.1.table.sql',1556231697,7000),('phabricator:20151106.editengine.2.xactions.sql',1556231697,6327),('phabricator:20151106.phame.post.mailkey.1.sql',1556231697,13453),('phabricator:20151106.phame.post.mailkey.2.php',1556231697,1570),('phabricator:20151107.phame.blog.mailkey.1.sql',1556231697,11087),('phabricator:20151107.phame.blog.mailkey.2.php',1556231697,970),('phabricator:20151108.phame.blog.joinpolicy.sql',1556231697,11189),('phabricator:20151108.xhpast.stderr.sql',1556231697,18926),('phabricator:20151109.phame.post.comments.1.sql',1556231697,7158),('phabricator:20151109.repository.coverage.1.sql',1556231697,1260),('phabricator:20151109.xhpast.db.1.sql',1556231697,3950),('phabricator:20151109.xhpast.db.2.sql',1556231697,1156),('phabricator:20151110.daemonenvhash.sql',1556231697,24270),('phabricator:20151111.phame.blog.archive.1.sql',1556231697,11808),('phabricator:20151111.phame.blog.archive.2.sql',1556231697,570),('phabricator:20151112.herald.edge.sql',1556231697,10237),('phabricator:20151116.owners.edge.sql',1556231697,10178),('phabricator:20151128.phame.blog.picture.1.sql',1556231697,12092),('phabricator:20151130.phurl.mailkey.1.sql',1556231697,9727),('phabricator:20151130.phurl.mailkey.2.php',1556231697,1287),('phabricator:20151202.versioneddraft.1.sql',1556231697,5191),('phabricator:20151207.editengine.1.sql',1556231697,48281),('phabricator:20151210.land.1.refphid.sql',1556231697,9677),('phabricator:20151210.land.2.refphid.php',1556231697,629),('phabricator:20151215.phame.1.autotitle.sql',1556231697,20604),('phabricator:20151218.key.1.keyphid.sql',1556231697,13167),('phabricator:20151218.key.2.keyphid.php',1556231697,423),('phabricator:20151219.proj.01.prislug.sql',1556231697,13742),('phabricator:20151219.proj.02.prislugkey.sql',1556231697,8362),('phabricator:20151219.proj.03.copyslug.sql',1556231697,517),('phabricator:20151219.proj.04.dropslugkey.sql',1556231697,6993),('phabricator:20151219.proj.05.dropslug.sql',1556231697,14034),('phabricator:20151219.proj.06.defaultpolicy.php',1556231697,1187),('phabricator:20151219.proj.07.viewnull.sql',1556231697,17899),('phabricator:20151219.proj.08.editnull.sql',1556231697,17020),('phabricator:20151219.proj.09.joinnull.sql',1556231697,17501),('phabricator:20151219.proj.10.subcolumns.sql',1556231697,77351),('phabricator:20151219.proj.11.subprojectphids.sql',1556231697,14306),('phabricator:20151221.search.1.version.sql',1556231697,5434),('phabricator:20151221.search.2.ownersngrams.sql',1556231697,5494),('phabricator:20151221.search.3.reindex.php',1556231697,84),('phabricator:20151223.proj.01.paths.sql',1556231697,15641),('phabricator:20151223.proj.02.depths.sql',1556231697,15239),('phabricator:20151223.proj.03.pathkey.sql',1556231697,9414),('phabricator:20151223.proj.04.keycol.sql',1556231697,16788),('phabricator:20151223.proj.05.updatekeys.php',1556231697,483),('phabricator:20151223.proj.06.uniq.sql',1556231697,10101),('phabricator:20151226.reop.1.sql',1556231697,12605),('phabricator:20151227.proj.01.materialize.sql',1556231697,586),('phabricator:20151231.proj.01.icon.php',1556231697,2511),('phabricator:20160102.badges.award.sql',1556231697,6329),('phabricator:20160110.repo.01.slug.sql',1556231697,20421),('phabricator:20160110.repo.02.slug.php',1556231697,678),('phabricator:20160111.repo.01.slugx.sql',1556231697,1338),('phabricator:20160112.repo.01.uri.sql',1556231697,5759),('phabricator:20160112.repo.02.uri.index.php',1556231697,105),('phabricator:20160113.propanel.1.storage.sql',1556231697,6417),('phabricator:20160113.propanel.2.xaction.sql',1556231697,7222),('phabricator:20160119.project.1.silence.sql',1556231697,547),('phabricator:20160122.project.1.boarddefault.php',1556231697,759),('phabricator:20160124.people.1.icon.sql',1556231697,10389),('phabricator:20160124.people.2.icondefault.sql',1556231697,597),('phabricator:20160128.repo.1.pull.sql',1556231697,6188),('phabricator:20160201.revision.properties.1.sql',1556231697,13671),('phabricator:20160201.revision.properties.2.sql',1556231697,582),('phabricator:20160202.board.1.proxy.sql',1556231697,11473),('phabricator:20160202.ipv6.1.sql',1556231697,29431),('phabricator:20160202.ipv6.2.php',1556231697,1039),('phabricator:20160206.cover.1.sql',1556231697,16645),('phabricator:20160208.task.1.sql',1556231697,17354),('phabricator:20160208.task.2.sql',1556231697,28687),('phabricator:20160208.task.3.sql',1556231697,21722),('phabricator:20160212.proj.1.sql',1556231697,18838),('phabricator:20160212.proj.2.sql',1556231697,682),('phabricator:20160215.owners.policy.1.sql',1556231698,13159),('phabricator:20160215.owners.policy.2.sql',1556231698,13532),('phabricator:20160215.owners.policy.3.sql',1556231698,781),('phabricator:20160215.owners.policy.4.sql',1556231698,575),('phabricator:20160218.callsigns.1.sql',1556231698,18754),('phabricator:20160221.almanac.1.devicen.sql',1556231698,5402),('phabricator:20160221.almanac.2.devicei.php',1556231698,86),('phabricator:20160221.almanac.3.servicen.sql',1556231698,5514),('phabricator:20160221.almanac.4.servicei.php',1556231698,88),('phabricator:20160221.almanac.5.networkn.sql',1556231698,5797),('phabricator:20160221.almanac.6.networki.php',1556231698,98),('phabricator:20160221.almanac.7.namespacen.sql',1556231698,6222),('phabricator:20160221.almanac.8.namespace.sql',1556231698,6967),('phabricator:20160221.almanac.9.namespacex.sql',1556231698,6258),('phabricator:20160222.almanac.1.properties.php',1556231698,1785),('phabricator:20160223.almanac.1.bound.sql',1556231698,12636),('phabricator:20160223.almanac.2.lockbind.sql',1556231698,555),('phabricator:20160223.almanac.3.devicelock.sql',1556231698,12370),('phabricator:20160223.almanac.4.servicelock.sql',1556231698,12403),('phabricator:20160223.paste.fileedges.php',1556231698,563),('phabricator:20160225.almanac.1.disablebinding.sql',1556231698,13239),('phabricator:20160225.almanac.2.stype.sql',1556231698,5306),('phabricator:20160225.almanac.3.stype.php',1556231698,854),('phabricator:20160227.harbormaster.1.plann.sql',1556231698,5517),('phabricator:20160227.harbormaster.2.plani.php',1556231698,85),('phabricator:20160303.drydock.1.bluen.sql',1556231698,5916),('phabricator:20160303.drydock.2.bluei.php',1556231698,84),('phabricator:20160303.drydock.3.edge.sql',1556231698,9299),('phabricator:20160308.nuance.01.disabled.sql',1556231698,11938),('phabricator:20160308.nuance.02.cursordata.sql',1556231698,5933),('phabricator:20160308.nuance.03.sourcen.sql',1556231698,5421),('phabricator:20160308.nuance.04.sourcei.php',1556231698,84),('phabricator:20160308.nuance.05.sourcename.sql',1556231698,14051),('phabricator:20160308.nuance.06.label.sql',1556231698,14773),('phabricator:20160308.nuance.07.itemtype.sql',1556231698,12745),('phabricator:20160308.nuance.08.itemkey.sql',1556231698,12490),('phabricator:20160308.nuance.09.itemcontainer.sql',1556231698,14099),('phabricator:20160308.nuance.10.itemkeyu.sql',1556231698,525),('phabricator:20160308.nuance.11.requestor.sql',1556231698,16661),('phabricator:20160308.nuance.12.queue.sql',1556231698,12884),('phabricator:20160316.lfs.01.token.resource.sql',1556231698,14175),('phabricator:20160316.lfs.02.token.user.sql',1556231698,10063),('phabricator:20160316.lfs.03.token.properties.sql',1556231698,10329),('phabricator:20160316.lfs.04.token.default.sql',1556231698,508),('phabricator:20160317.lfs.01.ref.sql',1556231698,5342),('phabricator:20160321.nuance.01.taskbridge.sql',1556231698,17760),('phabricator:20160322.nuance.01.itemcommand.sql',1556231698,4975),('phabricator:20160323.badgemigrate.sql',1556231698,1649),('phabricator:20160329.nuance.01.requestor.sql',1556231698,3782),('phabricator:20160329.nuance.02.requestorsource.sql',1556231698,4055),('phabricator:20160329.nuance.03.requestorxaction.sql',1556231698,4785),('phabricator:20160329.nuance.04.requestorcomment.sql',1556231698,4420),('phabricator:20160330.badges.migratequality.sql',1556231698,15822),('phabricator:20160330.badges.qualityxaction.mig.sql',1556231698,2799),('phabricator:20160331.fund.comments.1.sql',1556231698,6871),('phabricator:20160404.oauth.1.xaction.sql',1556231698,6721),('phabricator:20160405.oauth.2.disable.sql',1556231698,10930),('phabricator:20160406.badges.ngrams.php',1556231698,97),('phabricator:20160406.badges.ngrams.sql',1556231698,6525),('phabricator:20160406.columns.1.php',1556231698,500),('phabricator:20160411.repo.1.version.sql',1556231698,5519),('phabricator:20160418.repouri.1.sql',1556231698,6074),('phabricator:20160418.repouri.2.sql',1556231698,11525),('phabricator:20160418.repoversion.1.sql',1556231698,10689),('phabricator:20160419.pushlog.1.sql',1556231698,14353),('phabricator:20160424.locks.1.sql',1556231698,10204),('phabricator:20160426.searchedge.sql',1556231698,9947),('phabricator:20160428.repo.1.urixaction.sql',1556231698,7021),('phabricator:20160503.repo.01.lpath.sql',1556231698,13307),('phabricator:20160503.repo.02.lpathkey.sql',1556231698,8490),('phabricator:20160503.repo.03.lpathmigrate.php',1556231698,504),('phabricator:20160503.repo.04.mirrormigrate.php',1556231698,850),('phabricator:20160503.repo.05.urimigrate.php',1556231698,424),('phabricator:20160510.repo.01.uriindex.php',1556231698,4595),('phabricator:20160513.owners.01.autoreview.sql',1556231698,10941),('phabricator:20160513.owners.02.autoreviewnone.sql',1556231698,564),('phabricator:20160516.owners.01.dominion.sql',1556231698,10783),('phabricator:20160516.owners.02.dominionstrong.sql',1556231698,572),('phabricator:20160517.oauth.01.edge.sql',1556231698,10687),('phabricator:20160518.ssh.01.activecol.sql',1556231698,10789),('phabricator:20160518.ssh.02.activeval.sql',1556231698,581),('phabricator:20160518.ssh.03.activekey.sql',1556231698,6783),('phabricator:20160519.ssh.01.xaction.sql',1556231698,6533),('phabricator:20160531.pref.01.xaction.sql',1556231698,7117),('phabricator:20160531.pref.02.datecreatecol.sql',1556231698,9742),('phabricator:20160531.pref.03.datemodcol.sql',1556231698,9161),('phabricator:20160531.pref.04.datecreateval.sql',1556231698,581),('phabricator:20160531.pref.05.datemodval.sql',1556231698,500),('phabricator:20160531.pref.06.phidcol.sql',1556231698,9802),('phabricator:20160531.pref.07.phidval.php',1556231698,812),('phabricator:20160601.user.01.cache.sql',1556231698,7441),('phabricator:20160601.user.02.copyprefs.php',1556231698,1761),('phabricator:20160601.user.03.removetime.sql',1556231698,15650),('phabricator:20160601.user.04.removetranslation.sql',1556231698,15109),('phabricator:20160601.user.05.removesex.sql',1556231698,14245),('phabricator:20160603.user.01.removedcenabled.sql',1556231698,13434),('phabricator:20160603.user.02.removedctab.sql',1556231698,14889),('phabricator:20160603.user.03.removedcvisible.sql',1556231698,14290),('phabricator:20160604.user.01.stringmailprefs.php',1556231698,605),('phabricator:20160604.user.02.removeimagecache.sql',1556231698,13598),('phabricator:20160605.user.01.prefnulluser.sql',1556231698,13603),('phabricator:20160605.user.02.prefbuiltin.sql',1556231698,9726),('phabricator:20160605.user.03.builtinunique.sql',1556231698,5808),('phabricator:20160616.phame.blog.header.1.sql',1556231698,10765),('phabricator:20160616.repo.01.oldref.sql',1556231698,5571),('phabricator:20160617.harbormaster.01.arelease.sql',1556231698,11995),('phabricator:20160618.phame.blog.subtitle.sql',1556231698,11187),('phabricator:20160620.phame.blog.parentdomain.2.sql',1556231698,11609),('phabricator:20160620.phame.blog.parentsite.1.sql',1556231698,13040),('phabricator:20160623.phame.blog.fulldomain.1.sql',1556231698,12008),('phabricator:20160623.phame.blog.fulldomain.2.sql',1556231698,564),('phabricator:20160623.phame.blog.fulldomain.3.sql',1556231698,1211),('phabricator:20160706.phame.blog.parentdomain.2.sql',1556231698,12418),('phabricator:20160706.phame.blog.parentsite.1.sql',1556231699,13036),('phabricator:20160707.calendar.01.stub.sql',1556231699,12754),('phabricator:20160711.files.01.builtin.sql',1556231699,15129),('phabricator:20160711.files.02.builtinkey.sql',1556231699,8836),('phabricator:20160713.event.01.host.sql',1556231699,15511),('phabricator:20160715.event.01.alldayfrom.sql',1556231699,14131),('phabricator:20160715.event.02.alldayto.sql',1556231699,12699),('phabricator:20160715.event.03.allday.php',1556231699,86),('phabricator:20160720.calendar.invitetxn.php',1556231699,1319),('phabricator:20160721.pack.01.pub.sql',1556231699,5812),('phabricator:20160721.pack.02.pubxaction.sql',1556231699,6139),('phabricator:20160721.pack.03.edge.sql',1556231699,10806),('phabricator:20160721.pack.04.pkg.sql',1556231699,6295),('phabricator:20160721.pack.05.pkgxaction.sql',1556231699,6625),('phabricator:20160721.pack.06.version.sql',1556231699,5517),('phabricator:20160721.pack.07.versionxaction.sql',1556231699,6541),('phabricator:20160722.pack.01.pubngrams.sql',1556231699,5991),('phabricator:20160722.pack.02.pkgngrams.sql',1556231699,6165),('phabricator:20160722.pack.03.versionngrams.sql',1556231699,5845),('phabricator:20160810.commit.01.summarylength.sql',1556231699,16647),('phabricator:20160824.connectionlog.sql',1556231699,3624),('phabricator:20160824.repohint.01.hint.sql',1556231699,5880),('phabricator:20160824.repohint.02.movebad.php',1556231699,610),('phabricator:20160824.repohint.03.nukebad.sql',1556231699,3549),('phabricator:20160825.ponder.sql',1556231699,635),('phabricator:20160829.pastebin.01.language.sql',1556231699,16331),('phabricator:20160829.pastebin.02.language.sql',1556231699,560),('phabricator:20160913.conpherence.topic.1.sql',1556231699,11148),('phabricator:20160919.repo.messagecount.sql',1556231699,10883),('phabricator:20160919.repo.messagedefault.sql',1556231699,3870),('phabricator:20160921.fileexternalrequest.sql',1556231699,6461),('phabricator:20160927.phurl.ngrams.php',1556231699,88),('phabricator:20160927.phurl.ngrams.sql',1556231699,5450),('phabricator:20160928.repo.messagecount.sql',1556231699,513),('phabricator:20160928.tokentoken.sql',1556231699,7220),('phabricator:20161003.cal.01.utcepoch.sql',1556231699,39888),('phabricator:20161003.cal.02.parameters.sql',1556231699,13545),('phabricator:20161004.cal.01.noepoch.php',1556231699,1824),('phabricator:20161005.cal.01.rrules.php',1556231699,313),('phabricator:20161005.cal.02.export.sql',1556231699,6093),('phabricator:20161005.cal.03.exportxaction.sql',1556231699,6495),('phabricator:20161005.conpherence.image.1.sql',1556231699,12059),('phabricator:20161005.conpherence.image.2.php',1556231699,85),('phabricator:20161011.conpherence.ngrams.php',1556231699,65),('phabricator:20161011.conpherence.ngrams.sql',1556231699,5332),('phabricator:20161012.cal.01.import.sql',1556231699,6181),('phabricator:20161012.cal.02.importxaction.sql',1556231699,6973),('phabricator:20161012.cal.03.eventimport.sql',1556231699,52644),('phabricator:20161013.cal.01.importlog.sql',1556231699,5063),('phabricator:20161016.conpherence.imagephids.sql',1556231699,10859),('phabricator:20161025.phortune.contact.1.sql',1556231699,9620),('phabricator:20161025.phortune.merchant.image.1.sql',1556231699,11081),('phabricator:20161026.calendar.01.importtriggers.sql',1556231699,23297),('phabricator:20161027.calendar.01.externalinvitee.sql',1556231699,5726),('phabricator:20161029.phortune.invoice.1.sql',1556231699,20493),('phabricator:20161031.calendar.01.seriesparent.sql',1556231699,13938),('phabricator:20161031.calendar.02.notifylog.sql',1556231699,5033),('phabricator:20161101.calendar.01.noholiday.sql',1556231699,3280),('phabricator:20161101.calendar.02.removecolumns.sql',1556231699,78114),('phabricator:20161104.calendar.01.availability.sql',1556231699,11128),('phabricator:20161104.calendar.02.availdefault.sql',1556231699,550),('phabricator:20161115.phamepost.01.subtitle.sql',1556231699,11909),('phabricator:20161115.phamepost.02.header.sql',1556231699,13239),('phabricator:20161121.cluster.01.hoststate.sql',1556231699,4824),('phabricator:20161124.search.01.stopwords.sql',1556231699,4622),('phabricator:20161125.search.01.stemmed.sql',1556231699,7243),('phabricator:20161130.search.01.manual.sql',1556231699,5811),('phabricator:20161130.search.02.rebuild.php',1556231699,1398),('phabricator:20161210.dashboards.01.author.sql',1556231699,11083),('phabricator:20161210.dashboards.02.author.php',1556231699,1611),('phabricator:20161211.menu.01.itemkey.sql',1556231699,4255),('phabricator:20161211.menu.02.itemprops.sql',1556231699,3566),('phabricator:20161211.menu.03.order.sql',1556231699,3844),('phabricator:20161212.dashboardpanel.01.author.sql',1556231699,10207),('phabricator:20161212.dashboardpanel.02.author.php',1556231699,836),('phabricator:20161212.dashboards.01.icon.sql',1556231699,11227),('phabricator:20161213.diff.01.hunks.php',1556231699,747),('phabricator:20161216.dashboard.ngram.01.sql',1556231699,10936),('phabricator:20161216.dashboard.ngram.02.php',1556231699,114),('phabricator:20170106.menu.01.customphd.sql',1556231699,10393),('phabricator:20170109.diff.01.commit.sql',1556231699,12971),('phabricator:20170119.menuitem.motivator.01.php',1556231699,407),('phabricator:20170131.dashboard.personal.01.php',1556231699,1445),('phabricator:20170301.subtype.01.col.sql',1556231699,12251),('phabricator:20170301.subtype.02.default.sql',1556231699,687),('phabricator:20170301.subtype.03.taskcol.sql',1556231699,17435),('phabricator:20170301.subtype.04.taskdefault.sql',1556231699,554),('phabricator:20170303.people.01.avatar.sql',1556231699,27615),('phabricator:20170313.reviewers.01.sql',1556231699,5349),('phabricator:20170316.rawfiles.01.php',1556231699,1720),('phabricator:20170320.reviewers.01.lastaction.sql',1556231699,11553),('phabricator:20170320.reviewers.02.lastcomment.sql',1556231699,10266),('phabricator:20170320.reviewers.03.migrate.php',1556231699,1127),('phabricator:20170322.reviewers.04.actor.sql',1556231699,10051),('phabricator:20170328.reviewers.01.void.sql',1556231699,11143),('phabricator:20170404.files.retroactive-content-hash.sql',1556231699,19835),('phabricator:20170406.hmac.01.keystore.sql',1556231699,5350),('phabricator:20170410.calendar.01.repair.php',1556231699,576),('phabricator:20170412.conpherence.01.picturecrop.sql',1556231699,499),('phabricator:20170413.conpherence.01.recentparty.sql',1556231700,11833),('phabricator:20170417.files.ngrams.sql',1556231700,5606),('phabricator:20170418.1.application.01.xaction.sql',1556231700,6959),('phabricator:20170418.1.application.02.edge.sql',1556231700,9907),('phabricator:20170418.files.isDeleted.sql',1556231700,16731),('phabricator:20170419.app.01.table.sql',1556231700,5395),('phabricator:20170419.thread.01.behind.sql',1556231700,11820),('phabricator:20170419.thread.02.status.sql',1556231700,11320),('phabricator:20170419.thread.03.touched.sql',1556231700,12098),('phabricator:20170424.user.01.verify.php',1556231700,450),('phabricator:20170427.owners.01.long.sql',1556231700,10936),('phabricator:20170504.1.slowvote.shuffle.sql',1556231700,13917),('phabricator:20170522.nuance.01.itemkey.sql',1556231700,13967),('phabricator:20170524.nuance.01.command.sql',1556231700,29175),('phabricator:20170524.nuance.02.commandstatus.sql',1556231700,10499),('phabricator:20170526.dropdifferentialdrafts.sql',1556231700,4528),('phabricator:20170526.milestones.php',1556231700,82),('phabricator:20170528.maniphestdupes.php',1556231700,407),('phabricator:20170612.repository.image.01.sql',1556231700,14513),('phabricator:20170614.taskstatus.sql',1556231700,22946),('phabricator:20170725.legalpad.date.01.sql',1556231700,1121),('phabricator:20170811.differential.01.status.php',1556231700,436),('phabricator:20170811.differential.02.modernstatus.sql',1556231700,1112),('phabricator:20170811.differential.03.modernxaction.php',1556231700,946),('phabricator:20170814.search.01.qconfig.sql',1556231700,5484),('phabricator:20170820.phame.01.post.views.sql',1556231700,12773),('phabricator:20170820.phame.02.post.views.sql',1556231700,492),('phabricator:20170824.search.01.saved.php',1556231700,1093),('phabricator:20170825.phame.01.post.views.sql',1556231700,14383),('phabricator:20170828.ferret.01.taskdoc.sql',1556231700,4720),('phabricator:20170828.ferret.02.taskfield.sql',1556231700,4430),('phabricator:20170828.ferret.03.taskngrams.sql',1556231700,4459),('phabricator:20170830.ferret.01.unique.sql',1556231700,11567),('phabricator:20170830.ferret.02.term.sql',1556231700,10544),('phabricator:20170905.ferret.01.diff.doc.sql',1556231700,4638),('phabricator:20170905.ferret.02.diff.field.sql',1556231700,4380),('phabricator:20170905.ferret.03.diff.ngrams.sql',1556231700,4849),('phabricator:20170907.ferret.01.user.doc.sql',1556231700,4719),('phabricator:20170907.ferret.02.user.field.sql',1556231700,4741),('phabricator:20170907.ferret.03.user.ngrams.sql',1556231700,4472),('phabricator:20170907.ferret.04.fund.doc.sql',1556231700,6308),('phabricator:20170907.ferret.05.fund.field.sql',1556231700,4669),('phabricator:20170907.ferret.06.fund.ngrams.sql',1556231700,4853),('phabricator:20170907.ferret.07.passphrase.doc.sql',1556231700,4554),('phabricator:20170907.ferret.08.passphrase.field.sql',1556231700,5115),('phabricator:20170907.ferret.09.passphrase.ngrams.sql',1556231700,4083),('phabricator:20170907.ferret.10.owners.doc.sql',1556231700,4723),('phabricator:20170907.ferret.11.owners.field.sql',1556231700,5061),('phabricator:20170907.ferret.12.owners.ngrams.sql',1556231700,4786),('phabricator:20170907.ferret.13.blog.doc.sql',1556231700,4252),('phabricator:20170907.ferret.14.blog.field.sql',1556231700,4923),('phabricator:20170907.ferret.15.blog.ngrams.sql',1556231700,4231),('phabricator:20170907.ferret.16.post.doc.sql',1556231700,4741),('phabricator:20170907.ferret.17.post.field.sql',1556231700,4888),('phabricator:20170907.ferret.18.post.ngrams.sql',1556231700,5208),('phabricator:20170907.ferret.19.project.doc.sql',1556231700,4908),('phabricator:20170907.ferret.20.project.field.sql',1556231700,5022),('phabricator:20170907.ferret.21.project.ngrams.sql',1556231700,4594),('phabricator:20170907.ferret.22.phriction.doc.sql',1556231700,4889),('phabricator:20170907.ferret.23.phriction.field.sql',1556231700,4387),('phabricator:20170907.ferret.24.phriction.ngrams.sql',1556231700,4437),('phabricator:20170907.ferret.25.event.doc.sql',1556231700,5550),('phabricator:20170907.ferret.26.event.field.sql',1556231700,4987),('phabricator:20170907.ferret.27.event.ngrams.sql',1556231700,4139),('phabricator:20170907.ferret.28.mock.doc.sql',1556231700,5204),('phabricator:20170907.ferret.29.mock.field.sql',1556231700,4481),('phabricator:20170907.ferret.30.mock.ngrams.sql',1556231700,4263),('phabricator:20170907.ferret.31.repo.doc.sql',1556231700,4498),('phabricator:20170907.ferret.32.repo.field.sql',1556231700,5632),('phabricator:20170907.ferret.33.repo.ngrams.sql',1556231700,4712),('phabricator:20170907.ferret.34.commit.doc.sql',1556231700,5410),('phabricator:20170907.ferret.35.commit.field.sql',1556231700,4832),('phabricator:20170907.ferret.36.commit.ngrams.sql',1556231700,4997),('phabricator:20170912.ferret.01.activity.php',1556231700,358),('phabricator:20170914.ref.01.position.sql',1556231700,4702),('phabricator:20170915.ref.01.migrate.php',1556231700,735),('phabricator:20170915.ref.02.drop.id.sql',1556231700,11053),('phabricator:20170915.ref.03.drop.closed.sql',1556231700,10493),('phabricator:20170915.ref.04.uniq.sql',1556231700,6301),('phabricator:20170918.ref.01.position.php',1556231700,6814),('phabricator:20171002.cngram.01.maniphest.sql',1556231700,6208),('phabricator:20171002.cngram.02.event.sql',1556231700,6453),('phabricator:20171002.cngram.03.revision.sql',1556231700,5686),('phabricator:20171002.cngram.04.fund.sql',1556231700,5388),('phabricator:20171002.cngram.05.owners.sql',1556231700,5625),('phabricator:20171002.cngram.06.passphrase.sql',1556231700,6665),('phabricator:20171002.cngram.07.blog.sql',1556231700,5687),('phabricator:20171002.cngram.08.post.sql',1556231700,5555),('phabricator:20171002.cngram.09.pholio.sql',1556231700,5669),('phabricator:20171002.cngram.10.phriction.sql',1556231700,5644),('phabricator:20171002.cngram.11.project.sql',1556231700,5239),('phabricator:20171002.cngram.12.user.sql',1556231700,6475),('phabricator:20171002.cngram.13.repository.sql',1556231700,5340),('phabricator:20171002.cngram.14.commit.sql',1556231700,5519),('phabricator:20171026.ferret.01.ponder.doc.sql',1556231700,4734),('phabricator:20171026.ferret.02.ponder.field.sql',1556231700,4312),('phabricator:20171026.ferret.03.ponder.ngrams.sql',1556231700,4486),('phabricator:20171026.ferret.04.ponder.cngrams.sql',1556231700,6303),('phabricator:20171026.ferret.05.ponder.index.php',1556231700,111),('phabricator:20171101.diff.01.active.sql',1556231700,13157),('phabricator:20171101.diff.02.populate.php',1556231700,466),('phabricator:20180119.bulk.01.silent.sql',1556231700,12179),('phabricator:20180120.auth.01.password.sql',1556231700,5465),('phabricator:20180120.auth.02.passwordxaction.sql',1556231700,7117),('phabricator:20180120.auth.03.vcsdata.sql',1556231700,1196),('phabricator:20180120.auth.04.vcsphid.php',1556231700,751),('phabricator:20180121.auth.01.vcsnuke.sql',1556231700,3980),('phabricator:20180121.auth.02.passsalt.sql',1556231700,9066),('phabricator:20180121.auth.03.accountdata.sql',1556231700,607),('phabricator:20180121.auth.04.accountphid.php',1556231700,431),('phabricator:20180121.auth.05.accountnuke.sql',1556231700,29120),('phabricator:20180121.auth.06.legacydigest.sql',1556231700,9699),('phabricator:20180121.auth.07.marklegacy.sql',1556231700,567),('phabricator:20180124.herald.01.repetition.sql',1556231700,17664),('phabricator:20180207.mail.01.task.sql',1556231700,18090),('phabricator:20180207.mail.02.revision.sql',1556231700,13051),('phabricator:20180207.mail.03.mock.sql',1556231700,11482),('phabricator:20180208.maniphest.01.close.sql',1556231700,34873),('phabricator:20180208.maniphest.02.populate.php',1556231700,494),('phabricator:20180209.hook.01.hook.sql',1556231700,5084),('phabricator:20180209.hook.02.hookxaction.sql',1556231700,6844),('phabricator:20180209.hook.03.hookrequest.sql',1556231700,4822),('phabricator:20180210.hunk.01.droplegacy.sql',1556231700,4058),('phabricator:20180210.hunk.02.renamemodern.sql',1556231700,4436),('phabricator:20180212.harbor.01.receiver.sql',1556231700,14179),('phabricator:20180214.harbor.01.aborted.php',1556231700,902),('phabricator:20180215.phriction.01.phidcol.sql',1556231701,12098),('phabricator:20180215.phriction.02.phidvalues.php',1556231701,643),('phabricator:20180215.phriction.03.descempty.sql',1556231701,535),('phabricator:20180215.phriction.04.descnull.sql',1556231701,14930),('phabricator:20180215.phriction.05.statustext.sql',1556231701,15691),('phabricator:20180215.phriction.06.statusvalue.sql',1556231701,904),('phabricator:20180218.fact.01.dim.key.sql',1556231701,5182),('phabricator:20180218.fact.02.dim.obj.sql',1556231701,4795),('phabricator:20180218.fact.03.data.int.sql',1556231701,4788),('phabricator:20180222.log.01.filephid.sql',1556231701,12884),('phabricator:20180223.log.01.bytelength.sql',1556231701,11783),('phabricator:20180223.log.02.chunkformat.sql',1556231701,10735),('phabricator:20180223.log.03.chunkdefault.sql',1556231701,508),('phabricator:20180223.log.04.linemap.sql',1556231701,12025),('phabricator:20180223.log.05.linemapdefault.sql',1556231701,597),('phabricator:20180228.log.01.offset.sql',1556231701,20084),('phabricator:20180305.lock.01.locklog.sql',1556231701,4480),('phabricator:20180306.opath.01.digest.sql',1556231701,11285),('phabricator:20180306.opath.02.digestpopulate.php',1556231701,636),('phabricator:20180306.opath.03.purge.php',1556231701,422),('phabricator:20180306.opath.04.unique.sql',1556231701,6155),('phabricator:20180306.opath.05.longpath.sql',1556231701,12989),('phabricator:20180306.opath.06.pathdisplay.sql',1556231701,10854),('phabricator:20180306.opath.07.copypaths.sql',1556231701,667),('phabricator:20180309.owners.01.primaryowner.sql',1556231701,12220),('phabricator:20180312.reviewers.01.options.sql',1556231701,10529),('phabricator:20180312.reviewers.02.optionsdefault.sql',1556231701,514),('phabricator:20180322.lock.01.identifier.sql',1556231701,18925),('phabricator:20180322.lock.02.wait.sql',1556231701,35843),('phabricator:20180326.lock.03.nonunique.sql',1556231701,5998),('phabricator:20180403.draft.01.broadcast.php',1556231701,689),('phabricator:20180410.almanac.01.iface.xaction.sql',1556231701,6457),('phabricator:20180418.alamanc.interface.unique.php',1556231701,8603),('phabricator:20180418.almanac.network.unique.php',1556231701,6736),('phabricator:20180419.phlux.edges.sql',1556231701,10016),('phabricator:20180423.mail.01.properties.sql',1556231701,5352),('phabricator:20180430.repo_identity.sql',1556231701,6953),('phabricator:20180504.owners.01.mailkey.php',1556231701,613),('phabricator:20180504.owners.02.rmkey.sql',1556231701,10972),('phabricator:20180504.owners.03.properties.sql',1556231701,11898),('phabricator:20180504.owners.04.default.sql',1556231701,626),('phabricator:20180504.repo_identity.author.sql',1556231701,11039),('phabricator:20180504.repo_identity.xaction.sql',1556231701,7323),('phabricator:20180509.repo_identity.commits.sql',1556231701,13684),('phabricator:20180730.phriction.01.spaces.sql',1556231701,12193),('phabricator:20180730.project.01.spaces.sql',1556231701,16504),('phabricator:20180809.repo_identities.activity.php',1556231701,412),('phabricator:20180827.drydock.01.acquired.sql',1556231701,11934),('phabricator:20180827.drydock.02.activated.sql',1556231701,10516),('phabricator:20180828.phriction.01.contentphid.sql',1556231701,12373),('phabricator:20180828.phriction.02.documentphid.sql',1556231701,12991),('phabricator:20180828.phriction.03.editedepoch.sql',1556231701,12601),('phabricator:20180828.phriction.04.migrate.php',1556231701,612),('phabricator:20180828.phriction.05.contentid.sql',1556231701,11315),('phabricator:20180828.phriction.06.c.documentid.php',1556231701,4931),('phabricator:20180828.phriction.06.documentid.sql',1556231701,12630),('phabricator:20180828.phriction.07.c.documentuniq.sql',1556231701,539),('phabricator:20180828.phriction.07.documentkey.sql',1556231701,6810),('phabricator:20180829.phriction.01.mailkey.php',1556231701,454),('phabricator:20180829.phriction.02.rmkey.sql',1556231701,12074),('phabricator:20180830.phriction.01.maxversion.sql',1556231701,12437),('phabricator:20180830.phriction.02.maxes.php',1556231701,429),('phabricator:20180910.audit.01.searches.php',1556231701,358),('phabricator:20180910.audit.02.string.sql',1556231701,27220),('phabricator:20180910.audit.03.status.php',1556231701,1070),('phabricator:20180910.audit.04.xactions.php',1556231701,1835),('phabricator:20180914.audit.01.mailkey.php',1556231701,501),('phabricator:20180914.audit.02.rmkey.sql',1556231701,15907),('phabricator:20180914.drydock.01.operationphid.sql',1556231701,11675),('phabricator:20181024.drydock.01.commandprops.sql',1556231701,10537),('phabricator:20181024.drydock.02.commanddefaults.sql',1556231701,562),('phabricator:20181031.board.01.queryreset.php',1556231701,2252),('phabricator:20181106.repo.01.sync.sql',1556231701,5414),('phabricator:20181106.repo.02.hook.sql',1556231701,10859),('phabricator:20181213.auth.01.sessionphid.sql',1556231701,11625),('phabricator:20181213.auth.02.populatephid.php',1556231701,418),('phabricator:20181213.auth.03.phidkey.sql',1556231701,8125),('phabricator:20181213.auth.04.longerhashes.sql',1556231701,15735),('phabricator:20181213.auth.05.longerloghashes.sql',1556231701,17050),('phabricator:20181213.auth.06.challenge.sql',1556231701,5795),('phabricator:20181214.auth.01.workflowkey.sql',1556231701,9956),('phabricator:20181217.auth.01.digest.sql',1556231701,10408),('phabricator:20181217.auth.02.ttl.sql',1556231701,10154),('phabricator:20181217.auth.03.completed.sql',1556231701,10782),('phabricator:20181218.pholio.01.imageauthor.sql',1556231701,11427),('phabricator:20181219.pholio.01.imagephid.sql',1556231701,11379),('phabricator:20181219.pholio.02.imagemigrate.php',1556231701,707),('phabricator:20181219.pholio.03.imageid.sql',1556231701,11959),('phabricator:20181220.pholio.01.mailkey.php',1556231701,444),('phabricator:20181220.pholio.02.dropmailkey.sql',1556231701,11687),('phabricator:20181228.auth.01.provider.sql',1556231701,4634),('phabricator:20181228.auth.02.xaction.sql',1556231701,6313),('phabricator:20181228.auth.03.name.sql',1556231701,10666),('phabricator:20190101.sms.01.drop.sql',1556231701,4467),('phabricator:20190115.mfa.01.provider.sql',1556231701,11158),('phabricator:20190115.mfa.02.migrate.php',1556231701,974),('phabricator:20190115.mfa.03.factorkey.sql',1556231701,10875),('phabricator:20190116.contact.01.number.sql',1556231701,5635),('phabricator:20190116.contact.02.xaction.sql',1556231701,6947),('phabricator:20190116.phortune.01.billing.sql',1556231701,9904),('phabricator:20190117.authmessage.01.message.sql',1556231701,4988),('phabricator:20190117.authmessage.02.xaction.sql',1556231701,6637),('phabricator:20190121.contact.01.primary.sql',1556231701,11548),('phabricator:20190127.project.01.subtype.sql',1556231701,17416),('phabricator:20190127.project.02.default.sql',1556231701,555),('phabricator:20190129.project.01.spaces.php',1556231701,406),('phabricator:20190206.external.01.legalpad.sql',1556231701,485),('phabricator:20190206.external.02.email.sql',1556231701,524),('phabricator:20190206.external.03.providerphid.sql',1556231701,13239),('phabricator:20190206.external.04.providerlink.php',1556231701,698),('phabricator:20190207.packages.01.state.sql',1556231702,10942),('phabricator:20190207.packages.02.migrate.sql',1556231702,565),('phabricator:20190207.packages.03.drop.sql',1556231702,11126),('phabricator:20190207.packages.04.xactions.php',1556231702,1229),('phabricator:20190215.daemons.01.dropdataid.php',1556231702,5352),('phabricator:20190215.daemons.02.nulldataid.sql',1556231702,13353),('phabricator:20190215.harbor.01.stringindex.sql',1556231702,5418),('phabricator:20190215.harbor.02.stringcol.sql',1556231702,10942),('phabricator:20190220.daemon_worker.completed.01.sql',1556231702,12323),('phabricator:20190220.daemon_worker.completed.02.sql',1556231702,12844),('phabricator:20190226.harbor.01.planprops.sql',1556231702,10963),('phabricator:20190226.harbor.02.planvalue.sql',1556231702,644),('phabricator:20190307.herald.01.comments.sql',1556231702,4292),('phabricator:20190312.triggers.01.trigger.sql',1556231702,5749),('phabricator:20190312.triggers.02.xaction.sql',1556231702,7189),('phabricator:20190312.triggers.03.triggerphid.sql',1556231702,12671),('phabricator:20190322.triggers.01.usage.sql',1556231702,5436),('phabricator:20190329.portals.01.create.sql',1556231702,4633),('phabricator:20190329.portals.02.xaction.sql',1556231702,8280),('phabricator:20190410.portals.01.ferret.doc.sql',1556231702,5198),('phabricator:20190410.portals.02.ferret.field.sql',1556231702,4797),('phabricator:20190410.portals.03.ferret.ngrams.sql',1556231702,4275),('phabricator:20190410.portals.04.ferret.cngrams.sql',1556231702,5990),('phabricator:20190412.dashboard.01.panels.php',1556231702,453),('phabricator:20190412.dashboard.02.install.sql',1556231702,3768),('phabricator:20190412.dashboard.03.dashngrams.sql',1556231702,4706),('phabricator:20190412.dashboard.04.panelngrams.sql',1556231702,4492),('phabricator:20190412.dashboard.05.dferret.doc.sql',1556231702,4528),('phabricator:20190412.dashboard.06.dferret.field.sql',1556231702,5105),('phabricator:20190412.dashboard.07.dferret.ngrams.sql',1556231702,4069),('phabricator:20190412.dashboard.08.dferret.cngrams.sql',1556231702,5099),('phabricator:20190412.dashboard.09.pferret.doc.sql',1556231702,4827),('phabricator:20190412.dashboard.10.pferret.field.sql',1556231702,5374),('phabricator:20190412.dashboard.11.pferret.ngrams.sql',1556231702,5073),('phabricator:20190412.dashboard.12.pferret.cngrams.sql',1556231702,5528),('phabricator:20190412.dashboard.13.rebuild.php',1556231702,7019),('phabricator:20190412.herald.01.rebuild.php',1556231702,1878),('phabricator:20190416.chart.01.storage.sql',1556231702,4935),('phabricator:daemonstatus.sql',1556231688,NULL),('phabricator:daemonstatuskey.sql',1556231689,NULL),('phabricator:daemontaskarchive.sql',1556231689,NULL),('phabricator:db.almanac',1556231684,NULL),('phabricator:db.application',1556231684,NULL),('phabricator:db.audit',1556231684,NULL),('phabricator:db.auth',1556231684,NULL),('phabricator:db.badges',1556231684,NULL),('phabricator:db.cache',1556231684,NULL),('phabricator:db.calendar',1556231684,NULL),('phabricator:db.chatlog',1556231684,NULL),('phabricator:db.conduit',1556231684,NULL),('phabricator:db.config',1556231684,NULL),('phabricator:db.conpherence',1556231684,NULL),('phabricator:db.countdown',1556231684,NULL),('phabricator:db.daemon',1556231684,NULL),('phabricator:db.dashboard',1556231684,NULL),('phabricator:db.differential',1556231684,NULL),('phabricator:db.diviner',1556231684,NULL),('phabricator:db.doorkeeper',1556231684,NULL),('phabricator:db.draft',1556231684,NULL),('phabricator:db.drydock',1556231684,NULL),('phabricator:db.fact',1556231684,NULL),('phabricator:db.feed',1556231684,NULL),('phabricator:db.file',1556231684,NULL),('phabricator:db.flag',1556231684,NULL),('phabricator:db.fund',1556231684,NULL),('phabricator:db.harbormaster',1556231684,NULL),('phabricator:db.herald',1556231684,NULL),('phabricator:db.legalpad',1556231684,NULL),('phabricator:db.maniphest',1556231684,NULL),('phabricator:db.meta_data',1556231684,NULL),('phabricator:db.metamta',1556231684,NULL),('phabricator:db.multimeter',1556231684,NULL),('phabricator:db.nuance',1556231684,NULL),('phabricator:db.oauth_server',1556231684,NULL),('phabricator:db.owners',1556231684,NULL),('phabricator:db.packages',1556231684,NULL),('phabricator:db.passphrase',1556231684,NULL),('phabricator:db.pastebin',1556231684,NULL),('phabricator:db.phame',1556231684,NULL),('phabricator:db.phlux',1556231684,NULL),('phabricator:db.pholio',1556231684,NULL),('phabricator:db.phortune',1556231684,NULL),('phabricator:db.phragment',1556231684,NULL),('phabricator:db.phrequent',1556231684,NULL),('phabricator:db.phriction',1556231684,NULL),('phabricator:db.phurl',1556231684,NULL),('phabricator:db.policy',1556231684,NULL),('phabricator:db.ponder',1556231684,NULL),('phabricator:db.project',1556231684,NULL),('phabricator:db.releeph',1556231684,NULL),('phabricator:db.repository',1556231684,NULL),('phabricator:db.search',1556231684,NULL),('phabricator:db.slowvote',1556231684,NULL),('phabricator:db.spaces',1556231684,NULL),('phabricator:db.system',1556231684,NULL),('phabricator:db.timeline',1556231684,NULL),('phabricator:db.token',1556231684,NULL),('phabricator:db.user',1556231684,NULL),('phabricator:db.worker',1556231684,NULL),('phabricator:db.xhpast',1556231684,NULL),('phabricator:db.xhpastview',1556231684,NULL),('phabricator:db.xhprof',1556231684,NULL),('phabricator:differentialbookmarks.sql',1556231688,NULL),('phabricator:draft-metadata.sql',1556231689,NULL),('phabricator:dropfileproxyimage.sql',1556231689,NULL),('phabricator:drydockresoucetype.sql',1556231689,NULL),('phabricator:drydocktaskid.sql',1556231689,NULL),('phabricator:edgetype.sql',1556231689,NULL),('phabricator:emailtable.sql',1556231688,NULL),('phabricator:emailtableport.sql',1556231688,NULL),('phabricator:emailtableremove.sql',1556231688,NULL),('phabricator:fact-raw.sql',1556231688,NULL),('phabricator:harbormasterobject.sql',1556231688,NULL),('phabricator:holidays.sql',1556231688,NULL),('phabricator:ldapinfo.sql',1556231688,NULL),('phabricator:legalpad-mailkey-populate.php',1556231690,NULL),('phabricator:legalpad-mailkey.sql',1556231690,NULL),('phabricator:liskcounters-task.sql',1556231689,NULL),('phabricator:liskcounters.php',1556231689,NULL),('phabricator:liskcounters.sql',1556231689,NULL),('phabricator:maniphestxcache.sql',1556231688,NULL),('phabricator:markupcache.sql',1556231688,NULL),('phabricator:migrate-differential-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-dependencies.php',1556231688,NULL),('phabricator:migrate-maniphest-revisions.php',1556231688,NULL),('phabricator:migrate-project-edges.php',1556231688,NULL),('phabricator:owners-exclude.sql',1556231689,NULL),('phabricator:pastepolicy.sql',1556231689,NULL),('phabricator:phameblog.sql',1556231688,NULL),('phabricator:phamedomain.sql',1556231689,NULL),('phabricator:phameoneblog.sql',1556231689,NULL),('phabricator:phamepolicy.sql',1556231689,NULL),('phabricator:phiddrop.sql',1556231688,NULL),('phabricator:pholio.sql',1556231689,NULL),('phabricator:policy-project.sql',1556231689,NULL),('phabricator:ponder-comments.sql',1556231689,NULL),('phabricator:ponder-mailkey-populate.php',1556231689,NULL),('phabricator:ponder-mailkey.sql',1556231689,NULL),('phabricator:ponder.sql',1556231688,NULL),('phabricator:releeph.sql',1556231689,NULL),('phabricator:repository-lint.sql',1556231689,NULL),('phabricator:statustxt.sql',1556231689,NULL),('phabricator:symbolcontexts.sql',1556231688,NULL),('phabricator:testdatabase.sql',1556231688,NULL),('phabricator:threadtopic.sql',1556231688,NULL),('phabricator:userstatus.sql',1556231688,NULL),('phabricator:usertranslation.sql',1556231688,NULL),('phabricator:xhprof.sql',1556231689,NULL); + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_metamta` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `metamta_applicationemail` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `applicationPHID` varbinary(64) NOT NULL, + `address` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `configData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_address` (`address`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_application` (`applicationPHID`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `metamta_applicationemailtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `metamta_mail` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `actorPHID` varbinary(64) DEFAULT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `message` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `relatedPHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `relatedPHID` (`relatedPHID`), + KEY `key_created` (`dateCreated`), + KEY `key_actorPHID` (`actorPHID`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `metamta_mailproperties` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `mailProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_metamta`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `metamta_receivedmail` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `headers` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `bodies` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `attachments` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `relatedPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `message` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `messageIDHash` binary(12) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `relatedPHID` (`relatedPHID`), + KEY `authorPHID` (`authorPHID`), + KEY `key_messageIDHash` (`messageIDHash`), + KEY `key_created` (`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_multimeter` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_multimeter`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `multimeter_context` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameHash` binary(12) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`nameHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_multimeter`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `multimeter_event` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `eventType` int(10) unsigned NOT NULL, + `eventLabelID` int(10) unsigned NOT NULL, + `resourceCost` bigint(20) NOT NULL, + `sampleRate` int(10) unsigned NOT NULL, + `eventContextID` int(10) unsigned NOT NULL, + `eventHostID` int(10) unsigned NOT NULL, + `eventViewerID` int(10) unsigned NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `requestKey` binary(12) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_request` (`requestKey`), + KEY `key_type` (`eventType`,`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_multimeter`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `multimeter_host` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameHash` binary(12) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`nameHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_multimeter`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `multimeter_label` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameHash` binary(12) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`nameHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_multimeter`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `multimeter_viewer` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `nameHash` binary(12) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`nameHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_nuance` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_importcursordata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `sourcePHID` varbinary(64) NOT NULL, + `cursorKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cursorType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_source` (`sourcePHID`,`cursorKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_item` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `requestorPHID` varbinary(64) DEFAULT NULL, + `sourcePHID` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `queuePHID` varbinary(64) DEFAULT NULL, + `itemType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `itemKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `itemContainerKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_item` (`sourcePHID`,`itemKey`), + KEY `key_source` (`sourcePHID`,`status`), + KEY `key_owner` (`ownerPHID`,`status`), + KEY `key_requestor` (`requestorPHID`,`status`), + KEY `key_queue` (`queuePHID`,`status`), + KEY `key_container` (`sourcePHID`,`itemContainerKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_itemcommand` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `itemPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `command` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `queuePHID` varbinary(64) DEFAULT NULL, + `status` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_pending` (`itemPHID`,`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_itemtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_itemtransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_queue` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_queuetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_queuetransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_source` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `type` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `defaultQueuePHID` varbinary(64) NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_type` (`type`,`dateModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_sourcename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_sourcetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_nuance`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `nuance_sourcetransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_oauth_server` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `oauth_server_oauthclientauthorization` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `clientPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `scope` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `userPHID` (`userPHID`,`clientPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `oauth_server_oauthserveraccesstoken` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `token` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `clientPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `token` (`token`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `oauth_server_oauthserverauthorizationcode` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `code` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `clientPHID` varbinary(64) NOT NULL, + `clientSecret` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `redirectURI` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `code` (`code`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `oauth_server_oauthserverclient` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `secret` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `redirectURI` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `isTrusted` tinyint(1) NOT NULL DEFAULT '0', + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `creatorPHID` (`creatorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_oauth_server`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `oauth_server_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_owners` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_customfieldnumericindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`), + KEY `key_find` (`indexKey`,`indexValue`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_customfieldstorage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_customfieldstringindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`(64)), + KEY `key_find` (`indexKey`,`indexValue`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_name_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_owner` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `packageID` int(10) unsigned NOT NULL, + `userPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `packageID` (`packageID`,`userPHID`), + KEY `userPHID` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_package` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `autoReview` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dominion` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `auditingState` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_package_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_package_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_package_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_package_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_packagetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_owners`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `owners_path` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `packageID` int(10) unsigned NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `path` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `excluded` tinyint(1) NOT NULL DEFAULT '0', + `pathIndex` binary(12) NOT NULL, + `pathDisplay` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_path` (`packageID`,`repositoryPHID`,`pathIndex`), + KEY `key_repository` (`repositoryPHID`,`pathIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_packages` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_package` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `publisherPHID` varbinary(64) NOT NULL, + `packageKey` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_package` (`publisherPHID`,`packageKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_packagename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_packagetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_publisher` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `publisherKey` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_publisher` (`publisherKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_publishername_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_publishertransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_version` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `packagePHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_package` (`packagePHID`,`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_versionname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_packages`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `packages_versiontransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_passphrase` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credential` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `credentialType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `providesType` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `username` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `secretID` int(10) unsigned DEFAULT NULL, + `isDestroyed` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isLocked` tinyint(1) NOT NULL, + `allowConduit` tinyint(1) NOT NULL DEFAULT '0', + `authorPHID` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_secret` (`secretID`), + KEY `key_type` (`credentialType`), + KEY `key_provides` (`providesType`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credential_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credential_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credential_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credential_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_credentialtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_passphrase`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `passphrase_secret` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `secretData` longblob NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_pastebin` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_pastebin`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pastebin`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pastebin`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pastebin_paste` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `filePHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `language` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `parentPHID` varbinary(64) DEFAULT NULL, + `viewPolicy` varbinary(64) DEFAULT NULL, + `editPolicy` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `parentPHID` (`parentPHID`), + KEY `authorPHID` (`authorPHID`), + KEY `key_dateCreated` (`dateCreated`), + KEY `key_language` (`language`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pastebin`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pastebin_pastetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pastebin`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pastebin_pastetransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `lineNumber` int(10) unsigned DEFAULT NULL, + `lineLength` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phame` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `domain` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `configData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `viewPolicy` varbinary(64) DEFAULT NULL, + `editPolicy` varbinary(64) DEFAULT NULL, + `mailKey` binary(20) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + `headerImagePHID` varbinary(64) DEFAULT NULL, + `subtitle` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parentDomain` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `parentSite` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `domainFullURI` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `domain` (`domain`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blog_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blog_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blog_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blog_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_blogtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_post` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `bloggerPHID` varbinary(64) NOT NULL, + `title` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `phameTitle` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `body` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `visibility` int(10) unsigned NOT NULL DEFAULT '0', + `configData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `datePublished` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `blogPHID` varbinary(64) DEFAULT NULL, + `mailKey` binary(20) NOT NULL, + `subtitle` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `headerImagePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `bloggerPosts` (`bloggerPHID`,`visibility`,`datePublished`,`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_post_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_post_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_post_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_post_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_posttransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phame`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phame_posttransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phlux` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phlux`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phlux`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phlux`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phlux_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phlux`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phlux_variable` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `variableKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `variableValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_key` (`variableKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_pholio` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_image` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `filePHID` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `sequence` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isObsolete` tinyint(1) NOT NULL DEFAULT '0', + `replacesImagePHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `mockPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_mock` (`mockPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_mock` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `coverPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `status` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `authorPHID` (`authorPHID`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_mock_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_mock_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_mock_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_mock_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_pholio`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `pholio_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `imageID` int(10) unsigned DEFAULT NULL, + `x` int(10) unsigned DEFAULT NULL, + `y` int(10) unsigned DEFAULT NULL, + `width` int(10) unsigned DEFAULT NULL, + `height` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`), + UNIQUE KEY `key_draft` (`authorPHID`,`imageID`,`transactionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phortune` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_account` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `billingName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `billingAddress` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_accounttransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_cart` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `accountPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cartClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `merchantPHID` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, + `subscriptionPHID` varbinary(64) DEFAULT NULL, + `isInvoice` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_account` (`accountPHID`), + KEY `key_merchant` (`merchantPHID`), + KEY `key_subscription` (`subscriptionPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_carttransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_charge` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `accountPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `cartPHID` varbinary(64) NOT NULL, + `paymentMethodPHID` varbinary(64) DEFAULT NULL, + `amountAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `merchantPHID` varbinary(64) NOT NULL, + `providerPHID` varbinary(64) NOT NULL, + `amountRefundedAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `refundingPHID` varbinary(64) DEFAULT NULL, + `refundedChargePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_cart` (`cartPHID`), + KEY `key_account` (`accountPHID`), + KEY `key_merchant` (`merchantPHID`), + KEY `key_provider` (`providerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_merchant` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contactInfo` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + `invoiceEmail` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `invoiceFooter` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_merchanttransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_paymentmethod` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `accountPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `brand` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `expires` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lastFourDigits` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `merchantPHID` varbinary(64) NOT NULL, + `providerPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_account` (`accountPHID`,`status`), + KEY `key_merchant` (`merchantPHID`,`accountPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_paymentproviderconfig` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `merchantPHID` varbinary(64) NOT NULL, + `providerClassKey` binary(12) NOT NULL, + `providerClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isEnabled` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_merchant` (`merchantPHID`,`providerClassKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_paymentproviderconfigtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_product` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `productClassKey` binary(12) NOT NULL, + `productClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `productRefKey` binary(12) NOT NULL, + `productRef` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_product` (`productClassKey`,`productRefKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_purchase` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `productPHID` varbinary(64) NOT NULL, + `accountPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `cartPHID` varbinary(64) DEFAULT NULL, + `basePriceAsCurrency` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `quantity` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_cart` (`cartPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phortune`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phortune_subscription` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `accountPHID` varbinary(64) NOT NULL, + `merchantPHID` varbinary(64) NOT NULL, + `triggerPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `subscriptionClassKey` binary(12) NOT NULL, + `subscriptionClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `subscriptionRefKey` binary(12) NOT NULL, + `subscriptionRef` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `defaultPaymentMethodPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_subscription` (`subscriptionClassKey`,`subscriptionRefKey`), + KEY `key_account` (`accountPHID`), + KEY `key_merchant` (`merchantPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phrequent` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phrequent`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phrequent_usertime` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) DEFAULT NULL, + `note` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `dateStarted` int(10) unsigned NOT NULL, + `dateEnded` int(10) unsigned DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phriction` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_content` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `version` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `title` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `slug` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `changeType` int(10) unsigned NOT NULL DEFAULT '0', + `changeRef` int(10) unsigned DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `documentPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_version` (`documentPHID`,`version`), + UNIQUE KEY `key_phid` (`phid`), + KEY `authorPHID` (`authorPHID`), + KEY `slug` (`slug`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_document` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `slug` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `depth` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `contentPHID` varbinary(64) NOT NULL, + `editedEpoch` int(10) unsigned NOT NULL, + `maxVersion` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `slug` (`slug`), + UNIQUE KEY `depth` (`depth`,`slug`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_document_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_document_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_document_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_document_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phriction`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phriction_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_phurl` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phurl_phurlname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phurl_url` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `longURL` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `alias` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `mailKey` binary(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_instance` (`alias`), + KEY `key_author` (`authorPHID`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phurl_urltransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_phurl`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phurl_urltransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_policy` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_policy`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `policy` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `rules` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `defaultAction` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_ponder` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_answer` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `questionID` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `voteCount` int(10) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `mailKey` binary(20) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_oneanswerperquestion` (`questionID`,`authorPHID`), + KEY `questionID` (`questionID`), + KEY `authorPHID` (`authorPHID`), + KEY `status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_answertransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_answertransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_question` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `answerCount` int(10) unsigned NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `answerWiki` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `authorPHID` (`authorPHID`), + KEY `status` (`status`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_question_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_question_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_question_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_question_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_questiontransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_ponder`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `ponder_questiontransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_project` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `joinPolicy` varbinary(64) NOT NULL, + `isMembershipLocked` tinyint(1) NOT NULL DEFAULT '0', + `profileImagePHID` varbinary(64) DEFAULT NULL, + `icon` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `color` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mailKey` binary(20) NOT NULL, + `primarySlug` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `parentProjectPHID` varbinary(64) DEFAULT NULL, + `hasWorkboard` tinyint(1) NOT NULL, + `hasMilestones` tinyint(1) NOT NULL, + `hasSubprojects` tinyint(1) NOT NULL, + `milestoneNumber` int(10) unsigned DEFAULT NULL, + `projectPath` varbinary(64) NOT NULL, + `projectDepth` int(10) unsigned NOT NULL, + `projectPathKey` binary(4) NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `subtype` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_pathkey` (`projectPathKey`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_primaryslug` (`primarySlug`), + UNIQUE KEY `key_milestone` (`parentProjectPHID`,`milestoneNumber`), + KEY `key_icon` (`icon`), + KEY `key_color` (`color`), + KEY `key_path` (`projectPath`,`projectDepth`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_column` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` int(10) unsigned NOT NULL, + `sequence` int(10) unsigned NOT NULL, + `projectPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `proxyPHID` varbinary(64) DEFAULT NULL, + `triggerPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_proxy` (`projectPHID`,`proxyPHID`), + KEY `key_status` (`projectPHID`,`status`,`sequence`), + KEY `key_sequence` (`projectPHID`,`sequence`), + KEY `key_trigger` (`triggerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_columnposition` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `boardPHID` varbinary(64) NOT NULL, + `columnPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `sequence` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `boardPHID` (`boardPHID`,`columnPHID`,`objectPHID`), + KEY `objectPHID` (`objectPHID`,`boardPHID`), + KEY `boardPHID_2` (`boardPHID`,`columnPHID`,`sequence`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_columntransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_customfieldnumericindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`), + KEY `key_find` (`indexKey`,`indexValue`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_customfieldstorage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_customfieldstringindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`(64)), + KEY `key_find` (`indexKey`,`indexValue`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_datasourcetoken` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `projectID` int(10) unsigned NOT NULL, + `token` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `token` (`token`,`projectID`), + KEY `projectID` (`projectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_project_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_project_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_project_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_project_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_slug` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `projectPHID` varbinary(64) NOT NULL, + `slug` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_slug` (`slug`), + KEY `key_projectPHID` (`projectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_trigger` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `ruleset` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_triggertransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_project`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `project_triggerusage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `triggerPHID` varbinary(64) NOT NULL, + `examplePHID` varbinary(64) DEFAULT NULL, + `columnCount` int(10) unsigned NOT NULL, + `activeColumnCount` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_trigger` (`triggerPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_repository` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `callsign` varchar(32) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `versionControlSystem` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `details` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `uuid` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `pushPolicy` varbinary(64) NOT NULL, + `credentialPHID` varbinary(64) DEFAULT NULL, + `almanacServicePHID` varbinary(64) DEFAULT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `repositorySlug` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `localPath` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `callsign` (`callsign`), + UNIQUE KEY `key_slug` (`repositorySlug`), + UNIQUE KEY `key_local` (`localPath`), + KEY `key_vcs` (`versionControlSystem`), + KEY `key_name` (`name`(128)), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_auditrequest` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `auditorPHID` varbinary(64) NOT NULL, + `commitPHID` varbinary(64) NOT NULL, + `auditStatus` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `auditReasons` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_unique` (`commitPHID`,`auditorPHID`), + KEY `commitPHID` (`commitPHID`), + KEY `auditorPHID` (`auditorPHID`,`auditStatus`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_branch` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryID` int(10) unsigned NOT NULL, + `name` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `lintCommit` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `repositoryID` (`repositoryID`,`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commit` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryID` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `commitIdentifier` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `auditStatus` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `summary` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `importStatus` int(10) unsigned NOT NULL, + `authorIdentityPHID` varbinary(64) DEFAULT NULL, + `committerIdentityPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_commit_identity` (`commitIdentifier`,`repositoryID`), + KEY `repositoryID_2` (`repositoryID`,`epoch`), + KEY `authorPHID` (`authorPHID`,`auditStatus`,`epoch`), + KEY `repositoryID` (`repositoryID`,`importStatus`), + KEY `key_epoch` (`epoch`), + KEY `key_author` (`authorPHID`,`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commit_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commit_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commit_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commit_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commitdata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `commitID` int(10) unsigned NOT NULL, + `authorName` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `commitMessage` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `commitDetails` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `commitID` (`commitID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_commithint` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `oldCommitIdentifier` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newCommitIdentifier` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `hintType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_old` (`repositoryPHID`,`oldCommitIdentifier`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_coverage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `branchID` int(10) unsigned NOT NULL, + `commitID` int(10) unsigned NOT NULL, + `pathID` int(10) unsigned NOT NULL, + `coverage` longblob NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_path` (`branchID`,`pathID`,`commitID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_filesystem` ( + `repositoryID` int(10) unsigned NOT NULL, + `parentID` int(10) unsigned NOT NULL, + `svnCommit` int(10) unsigned NOT NULL, + `pathID` int(10) unsigned NOT NULL, + `existed` tinyint(1) NOT NULL, + `fileType` int(10) unsigned NOT NULL, + PRIMARY KEY (`repositoryID`,`parentID`,`pathID`,`svnCommit`), + KEY `repositoryID` (`repositoryID`,`svnCommit`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_gitlfsref` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `objectHash` binary(64) NOT NULL, + `byteSize` bigint(20) unsigned NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `filePHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`repositoryPHID`,`objectHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_identity` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `automaticGuessedUserPHID` varbinary(64) DEFAULT NULL, + `manuallySetUserPHID` varbinary(64) DEFAULT NULL, + `currentEffectiveUserPHID` varbinary(64) DEFAULT NULL, + `identityNameHash` binary(12) NOT NULL, + `identityNameRaw` longblob NOT NULL, + `identityNameEncoding` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_identity` (`identityNameHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_identitytransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_lintmessage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `branchID` int(10) unsigned NOT NULL, + `path` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `line` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `code` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `severity` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `branchID` (`branchID`,`path`(64)), + KEY `branchID_2` (`branchID`,`code`,`path`(64)), + KEY `key_author` (`authorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_mirror` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `remoteURI` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `credentialPHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_oldref` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `commitIdentifier` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_repository` (`repositoryPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_parents` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `childCommitID` int(10) unsigned NOT NULL, + `parentCommitID` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_child` (`childCommitID`,`parentCommitID`), + KEY `key_parent` (`parentCommitID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_path` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `path` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `pathHash` binary(32) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `pathHash` (`pathHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_pathchange` ( `repositoryID` int(10) unsigned NOT NULL, - `parentID` int(10) unsigned NOT NULL, - `svnCommit` int(10) unsigned NOT NULL, `pathID` int(10) unsigned NOT NULL, - `existed` tinyint(1) NOT NULL, + `commitID` int(10) unsigned NOT NULL, + `targetPathID` int(10) unsigned DEFAULT NULL, + `targetCommitID` int(10) unsigned DEFAULT NULL, + `changeType` int(10) unsigned NOT NULL, `fileType` int(10) unsigned NOT NULL, - PRIMARY KEY (`repositoryID`,`parentID`,`pathID`,`svnCommit`), - KEY `repositoryID` (`repositoryID`,`svnCommit`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `isDirect` tinyint(1) NOT NULL, + `commitSequence` int(10) unsigned NOT NULL, + PRIMARY KEY (`commitID`,`pathID`), + KEY `repositoryID` (`repositoryID`,`pathID`,`commitSequence`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_pullevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `epoch` int(10) unsigned NOT NULL, + `pullerPHID` varbinary(64) DEFAULT NULL, + `remoteAddress` varbinary(64) DEFAULT NULL, + `remoteProtocol` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `resultType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `resultCode` int(10) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_pushevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `pusherPHID` varbinary(64) NOT NULL, + `remoteAddress` varbinary(64) DEFAULT NULL, + `remoteProtocol` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `rejectCode` int(10) unsigned NOT NULL, + `rejectDetails` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `requestIdentifier` binary(12) DEFAULT NULL, + `writeWait` bigint(20) unsigned DEFAULT NULL, + `readWait` bigint(20) unsigned DEFAULT NULL, + `hostWait` bigint(20) unsigned DEFAULT NULL, + `hookWait` bigint(20) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_identifier` (`requestIdentifier`), + KEY `key_reject` (`rejectCode`,`rejectDetails`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_pushlog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `pushEventPHID` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `pusherPHID` varbinary(64) NOT NULL, + `refType` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `refNameHash` binary(12) DEFAULT NULL, + `refNameRaw` longblob, + `refNameEncoding` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `refOld` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `refNew` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `mergeBase` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `changeFlags` int(10) unsigned NOT NULL, + `devicePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_ref` (`repositoryPHID`,`refNew`), + KEY `key_pusher` (`pusherPHID`), + KEY `key_name` (`repositoryPHID`,`refNameHash`), + KEY `key_event` (`pushEventPHID`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_refcursor` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `refType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `refNameHash` binary(12) NOT NULL, + `refNameRaw` longblob NOT NULL, + `refNameEncoding` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ref` (`repositoryPHID`,`refType`,`refNameHash`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_refposition` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `cursorID` int(10) unsigned NOT NULL, + `commitIdentifier` varchar(40) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isClosed` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_position` (`cursorID`,`commitIdentifier`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_repository_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_repository_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_repository_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_repository_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_statusmessage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryID` int(10) unsigned NOT NULL, + `statusType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `statusCode` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `messageCount` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `repositoryID` (`repositoryID`,`statusType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_summary` ( + `repositoryID` int(10) unsigned NOT NULL, + `size` int(10) unsigned NOT NULL, + `lastCommitID` int(10) unsigned NOT NULL, + `epoch` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`repositoryID`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_symbol` ( + `repositoryPHID` varbinary(64) NOT NULL, + `symbolContext` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `symbolName` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `symbolType` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `symbolLanguage` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `pathID` int(10) unsigned NOT NULL, + `lineNumber` int(10) unsigned NOT NULL, + KEY `symbolName` (`symbolName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_syncevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `epoch` int(10) unsigned NOT NULL, + `devicePHID` varbinary(64) NOT NULL, + `fromDevicePHID` varbinary(64) NOT NULL, + `deviceVersion` int(10) unsigned DEFAULT NULL, + `fromDeviceVersion` int(10) unsigned DEFAULT NULL, + `resultType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `resultCode` int(10) unsigned NOT NULL, + `syncWait` bigint(20) unsigned NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_uri` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `uri` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `builtinProtocol` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `builtinIdentifier` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `ioType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `displayType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `credentialPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_builtin` (`repositoryPHID`,`builtinProtocol`,`builtinIdentifier`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_uriindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `repositoryURI` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_uri` (`repositoryURI`(128)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_uritransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_repository`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `repository_workingcopyversion` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `devicePHID` varbinary(64) NOT NULL, + `repositoryVersion` int(10) unsigned NOT NULL, + `isWriting` tinyint(1) NOT NULL, + `writeProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `lockOwner` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_workingcopy` (`repositoryPHID`,`devicePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_search` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_document` ( + `phid` varbinary(64) NOT NULL, + `documentType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `documentTitle` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `documentCreated` int(10) unsigned NOT NULL, + `documentModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`phid`), + KEY `documentCreated` (`documentCreated`), + KEY `key_type` (`documentType`,`documentCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_documentfield` ( + `phid` varbinary(64) NOT NULL, + `phidType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `field` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `auxPHID` varbinary(64) DEFAULT NULL, + `corpus` longtext CHARACTER SET {$CHARSET_FULLTEXT} COLLATE {$COLLATE_FULLTEXT}, + `stemmedCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT}, + KEY `phid` (`phid`), + FULLTEXT KEY `key_corpus` (`corpus`,`stemmedCorpus`) +) ENGINE=MyISAM DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_documentrelationship` ( + `phid` varbinary(64) NOT NULL, + `relatedPHID` varbinary(64) NOT NULL, + `relation` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `relatedType` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `relatedTime` int(10) unsigned NOT NULL, + KEY `phid` (`phid`), + KEY `relatedPHID` (`relatedPHID`,`relation`), + KEY `relation` (`relation`,`relatedPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_editengineconfiguration` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `engineKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `builtinKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDisabled` tinyint(1) NOT NULL DEFAULT '0', + `isDefault` tinyint(1) NOT NULL DEFAULT '0', + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isEdit` tinyint(1) NOT NULL, + `createOrder` int(10) unsigned NOT NULL, + `editOrder` int(10) unsigned NOT NULL, + `subtype` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_engine` (`engineKey`,`builtinKey`), + KEY `key_default` (`engineKey`,`isDefault`,`isDisabled`), + KEY `key_edit` (`engineKey`,`isEdit`,`isDisabled`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_editengineconfigurationtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_indexversion` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `extensionKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `version` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`,`extensionKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_namedquery` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userPHID` varbinary(64) NOT NULL, + `engineClassName` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `queryName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `queryKey` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `isBuiltin` tinyint(1) NOT NULL DEFAULT '0', + `isDisabled` tinyint(1) NOT NULL DEFAULT '0', + `sequence` int(10) unsigned NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + UNIQUE KEY `key_userquery` (`userPHID`,`engineClassName`,`queryKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_namedqueryconfig` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `engineClassName` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `scopePHID` varbinary(64) NOT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_scope` (`engineClassName`,`scopePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_profilepanelconfiguration` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `profilePHID` varbinary(64) NOT NULL, + `menuItemKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `builtinKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `menuItemOrder` int(10) unsigned DEFAULT NULL, + `visibility` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `menuItemProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `customPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_profile` (`profilePHID`,`menuItemOrder`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_profilepanelconfigurationtransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `search_savedquery` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `engineClassName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `queryKey` varchar(12) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_queryKey` (`queryKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_search`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `stopwords` ( + `value` varchar(32) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +INSERT INTO `stopwords` VALUES ('the'),('be'),('and'),('of'),('a'),('in'),('to'),('have'),('it'),('I'),('that'),('for'),('you'),('he'),('with'),('on'),('do'),('say'),('this'),('they'),('at'),('but'),('we'),('his'),('from'),('not'),('by'),('or'),('as'),('what'),('go'),('their'),('can'),('who'),('get'),('if'),('would'),('all'),('my'),('will'),('up'),('there'),('so'),('its'),('us'); + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_slowvote` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `slowvote_choice` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pollID` int(10) unsigned NOT NULL, + `optionID` int(10) unsigned NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `pollID` (`pollID`), + KEY `authorPHID` (`authorPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `slowvote_option` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `pollID` int(10) unsigned NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `pollID` (`pollID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `slowvote_poll` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `question` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `responseVisibility` int(10) unsigned NOT NULL, + `shuffle` tinyint(1) NOT NULL DEFAULT '0', + `method` int(10) unsigned NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `spacePHID` varbinary(64) DEFAULT NULL, + `mailKey` binary(20) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `phid` (`phid`), + KEY `key_space` (`spacePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `slowvote_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_slowvote`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `slowvote_transaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_spaces` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_spaces`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_spaces`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_spaces`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `spaces_namespace` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `namespaceName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `isDefaultNamespace` tinyint(1) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `description` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isArchived` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_default` (`isDefaultNamespace`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_spaces`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `spaces_namespacetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_system` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_system`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `system_actionlog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `actorHash` binary(12) NOT NULL, + `actorIdentity` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `action` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `score` double NOT NULL, + `epoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_epoch` (`epoch`), + KEY `key_action` (`actorHash`,`action`,`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_system`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `system_destructionlog` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectClass` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rootLogID` int(10) unsigned DEFAULT NULL, + `objectPHID` varbinary(64) DEFAULT NULL, + `objectMonogram` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `epoch` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_token` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_token`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `token_count` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `tokenCount` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_objectPHID` (`objectPHID`), + KEY `key_count` (`tokenCount`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_token`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `token_given` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `tokenPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_all` (`objectPHID`,`authorPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_token` (`tokenPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_token`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `token_token` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `flavor` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `builtinKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `creatorPHID` varbinary(64) NOT NULL, + `tokenImagePHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_builtin` (`builtinKey`), + KEY `key_creator` (`creatorPHID`,`dateModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_user` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `phabricator_session` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userPHID` varbinary(64) NOT NULL, + `type` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `sessionKey` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `sessionStart` int(10) unsigned NOT NULL, + `sessionExpires` int(10) unsigned NOT NULL, + `highSecurityUntil` int(10) unsigned DEFAULT NULL, + `isPartial` tinyint(1) NOT NULL DEFAULT '0', + `signedLegalpadDocuments` tinyint(1) NOT NULL DEFAULT '0', + `phid` varbinary(64) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `sessionKey` (`sessionKey`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_identity` (`userPHID`,`type`), + KEY `key_expires` (`sessionExpires`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `userName` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `realName` varchar(128) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + `conduitCertificate` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `isSystemAgent` tinyint(1) NOT NULL DEFAULT '0', + `isDisabled` tinyint(1) NOT NULL, + `isAdmin` tinyint(1) NOT NULL, + `isEmailVerified` int(10) unsigned NOT NULL, + `isApproved` int(10) unsigned NOT NULL, + `accountSecret` binary(64) NOT NULL, + `isEnrolledInMultiFactor` tinyint(1) NOT NULL DEFAULT '0', + `availabilityCache` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `availabilityCacheTTL` int(10) unsigned DEFAULT NULL, + `isMailingList` tinyint(1) NOT NULL, + `defaultProfileImagePHID` varbinary(64) DEFAULT NULL, + `defaultProfileImageVersion` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `userName` (`userName`), + UNIQUE KEY `phid` (`phid`), + KEY `realName` (`realName`), + KEY `key_approved` (`isApproved`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_path` ( +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_authinvite` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `path` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `pathHash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `emailAddress` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `verificationHash` binary(12) NOT NULL, + `acceptedByPHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `pathHash` (`pathHash`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_address` (`emailAddress`), + UNIQUE KEY `key_code` (`verificationHash`), + UNIQUE KEY `key_phid` (`phid`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_pathchange` ( - `repositoryID` int(10) unsigned NOT NULL, - `pathID` int(10) unsigned NOT NULL, - `commitID` int(10) unsigned NOT NULL, - `targetPathID` int(10) unsigned DEFAULT NULL, - `targetCommitID` int(10) unsigned DEFAULT NULL, - `changeType` int(10) unsigned NOT NULL, - `fileType` int(10) unsigned NOT NULL, - `isDirect` tinyint(1) NOT NULL, - `commitSequence` int(10) unsigned NOT NULL, - PRIMARY KEY (`commitID`,`pathID`), - KEY `repositoryID` (`repositoryID`,`pathID`,`commitSequence`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; -CREATE TABLE `repository_shortcut` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_cache` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) NOT NULL, - `href` varchar(255) NOT NULL, - `description` varchar(255) NOT NULL, - `sequence` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `userPHID` varbinary(64) NOT NULL, + `cacheIndex` binary(12) NOT NULL, + `cacheKey` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheData` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_usercache` (`userPHID`,`cacheIndex`), + KEY `key_cachekey` (`cacheIndex`), + KEY `key_cachetype` (`cacheType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `repository_summary` ( - `repositoryID` int(10) unsigned NOT NULL, - `size` int(10) unsigned NOT NULL, - `lastCommitID` int(10) unsigned NOT NULL, - `epoch` int(10) unsigned DEFAULT NULL, - PRIMARY KEY (`repositoryID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_user`; -CREATE TABLE `repository_symbol` ( - `arcanistProjectID` int(10) unsigned NOT NULL, - `symbolName` varchar(128) NOT NULL, - `symbolType` varchar(12) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `symbolLanguage` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `pathID` int(10) unsigned NOT NULL, - `lineNumber` int(10) unsigned NOT NULL, - KEY `symbolName` (`symbolName`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET NAMES utf8 ; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_search` DEFAULT CHARACTER SET utf8; + SET character_set_client = {$CHARSET} ; -USE `{$NAMESPACE}_search`; +CREATE TABLE `user_configuredcustomfieldstorage` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `fieldIndex` binary(12) NOT NULL, + `fieldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `objectPHID` (`objectPHID`,`fieldIndex`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `search_document` ( - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `documentType` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `documentTitle` varchar(255) NOT NULL, - `documentCreated` int(10) unsigned NOT NULL, - `documentModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`phid`), - KEY `documentCreated` (`documentCreated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_user`; -CREATE TABLE `search_documentfield` ( - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `phidType` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `field` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `auxPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `corpus` text, - KEY `phid` (`phid`), - FULLTEXT KEY `corpus` (`corpus`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; + SET NAMES utf8 ; -CREATE TABLE `search_documentrelationship` ( - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `relatedPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `relation` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `relatedType` varchar(4) NOT NULL, - `relatedTime` int(10) unsigned NOT NULL, - KEY `phid` (`phid`), - KEY `relatedPHID` (`relatedPHID`,`relation`), - KEY `relation` (`relation`,`relatedPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_customfieldnumericindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` bigint(20) NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`), + KEY `key_find` (`indexKey`,`indexValue`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_customfieldstringindex` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `indexKey` binary(12) NOT NULL, + `indexValue` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_join` (`objectPHID`,`indexKey`,`indexValue`(64)), + KEY `key_find` (`indexKey`,`indexValue`(64)) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; -CREATE TABLE `search_query` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_email` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `query` varchar(255) NOT NULL, - `parameters` text NOT NULL, + `userPHID` varbinary(64) NOT NULL, + `address` varchar(128) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `isVerified` tinyint(1) NOT NULL DEFAULT '0', + `isPrimary` tinyint(1) NOT NULL DEFAULT '0', + `verificationCode` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `queryKey` varchar(12) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `queryKey` (`queryKey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `address` (`address`), + KEY `userPHID` (`userPHID`,`isPrimary`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_slowvote` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_user`; -USE `{$NAMESPACE}_slowvote`; + SET NAMES utf8 ; -CREATE TABLE `slowvote_choice` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_externalaccount` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `pollID` int(10) unsigned NOT NULL, - `optionID` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `phid` varbinary(64) NOT NULL, + `userPHID` varbinary(64) DEFAULT NULL, + `accountType` varchar(16) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `accountDomain` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `accountSecret` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT}, + `accountID` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `displayName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `username` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `realName` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `email` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `emailVerified` tinyint(1) NOT NULL, + `accountURI` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + `properties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `providerConfigPHID` varbinary(64) NOT NULL, PRIMARY KEY (`id`), - KEY `pollID` (`pollID`), - KEY `authorPHID` (`authorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `account_details` (`accountType`,`accountDomain`,`accountID`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_user` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; -CREATE TABLE `slowvote_comment` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_log` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `pollID` int(10) unsigned NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `commentText` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `actorPHID` varbinary(64) DEFAULT NULL, + `userPHID` varbinary(64) NOT NULL, + `action` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `details` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `remoteAddr` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `session` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `pollID` (`pollID`,`authorPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `actorPHID` (`actorPHID`,`dateCreated`), + KEY `userPHID` (`userPHID`,`dateCreated`), + KEY `action` (`action`,`dateCreated`), + KEY `dateCreated` (`dateCreated`), + KEY `remoteAddr` (`remoteAddr`,`dateCreated`), + KEY `session` (`session`,`dateCreated`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `slowvote_option` ( +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_nametoken` ( + `token` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `userID` int(10) unsigned NOT NULL, + KEY `token` (`token`(128)), + KEY `userID` (`userID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_preferences` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `pollID` int(10) unsigned NOT NULL, - `name` varchar(255) NOT NULL, + `userPHID` varbinary(64) DEFAULT NULL, + `preferences` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `builtinKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), - KEY `pollID` (`pollID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_builtin` (`builtinKey`), + UNIQUE KEY `key_user` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `slowvote_poll` ( +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_preferencestransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `question` varchar(255) NOT NULL, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `responseVisibility` int(10) unsigned NOT NULL, - `shuffle` int(10) unsigned NOT NULL, - `method` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_timeline` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_user`; -USE `{$NAMESPACE}_timeline`; + SET NAMES utf8 ; -CREATE TABLE `timeline_cursor` ( - `name` varchar(255) NOT NULL, - `position` int(10) unsigned NOT NULL, - PRIMARY KEY (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `timeline_event` ( +CREATE TABLE `user_profile` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` char(4) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dataID` int(10) unsigned DEFAULT NULL, + `userPHID` varbinary(64) NOT NULL, + `title` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `blurb` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `profileImagePHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `icon` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `dataID` (`dataID`), - KEY `type` (`type`,`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `userPHID` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; -CREATE TABLE `timeline_eventdata` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_transaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `eventData` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_user_fdocument` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectPHID` varbinary(64) NOT NULL, + `isClosed` tinyint(1) NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `ownerPHID` varbinary(64) DEFAULT NULL, + `epochCreated` int(10) unsigned NOT NULL, + `epochModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_object` (`objectPHID`), + KEY `key_author` (`authorPHID`), + KEY `key_owner` (`ownerPHID`), + KEY `key_created` (`epochCreated`), + KEY `key_modified` (`epochModified`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_user_ffield` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `fieldKey` varchar(4) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `rawCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `termCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `normalCorpus` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_documentfield` (`documentID`,`fieldKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_user`; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_user` DEFAULT CHARACTER SET utf8; + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_user_fngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `documentID` int(10) unsigned NOT NULL, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_ngram` (`ngram`,`documentID`), + KEY `key_object` (`documentID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; USE `{$NAMESPACE}_user`; + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `user_user_fngrams_common` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `ngram` char(3) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `needsCollection` tinyint(1) NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_ngram` (`ngram`), + KEY `key_collect` (`needsCollection`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_worker` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + CREATE TABLE `edge` ( - `src` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `dst` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `seq` int(10) unsigned NOT NULL, `dataID` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), KEY `src` (`src`,`type`,`dateCreated`,`seq`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; CREATE TABLE `edgedata` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `phabricator_session` ( - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `type` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `sessionKey` varchar(40) NOT NULL, - `sessionStart` int(10) unsigned NOT NULL, - PRIMARY KEY (`userPHID`,`type`), - UNIQUE KEY `sessionKey` (`sessionKey`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_worker`; -CREATE TABLE `user` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `userName` varchar(64) NOT NULL, - `realName` varchar(128) NOT NULL, - `email` varchar(255) NOT NULL, - `sex` char(1) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `passwordSalt` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `passwordHash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `lisk_counter` ( + `counterName` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `counterValue` bigint(20) unsigned NOT NULL, + PRIMARY KEY (`counterName`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +INSERT INTO `lisk_counter` VALUES ('worker_activetask',5); + +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_activetask` ( + `id` int(10) unsigned NOT NULL, + `taskClass` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `leaseOwner` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `leaseExpires` int(10) unsigned DEFAULT NULL, + `failureCount` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned NOT NULL, + `failureTime` int(10) unsigned DEFAULT NULL, + `priority` int(10) unsigned NOT NULL, + `objectPHID` varbinary(64) DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `profileImagePHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `consoleEnabled` tinyint(1) NOT NULL, - `consoleVisible` tinyint(1) NOT NULL, - `consoleTab` varchar(64) NOT NULL, - `conduitCertificate` varchar(255) NOT NULL, - `isSystemAgent` tinyint(1) NOT NULL DEFAULT '0', - `isDisabled` tinyint(1) NOT NULL, - `isAdmin` tinyint(1) NOT NULL, - `timezoneIdentifier` varchar(255) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `userName` (`userName`), - UNIQUE KEY `email` (`email`), - UNIQUE KEY `phid` (`phid`), - KEY `realName` (`realName`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `leaseExpires` (`leaseExpires`), + KEY `key_failuretime` (`failureTime`), + KEY `taskClass` (`taskClass`), + KEY `key_owner` (`leaseOwner`,`priority`,`id`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `user_log` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `actorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `action` varchar(64) NOT NULL, - `oldValue` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `newValue` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `details` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, +INSERT INTO `worker_activetask` VALUES (3,'PhabricatorRebuildIndexesWorker',NULL,NULL,0,1,NULL,3500,NULL,1556231702,1556231702),(4,'PhabricatorRebuildIndexesWorker',NULL,NULL,0,2,NULL,3500,NULL,1556231702,1556231702),(5,'PhabricatorRebuildIndexesWorker',NULL,NULL,0,3,NULL,3500,NULL,1556231702,1556231702); + +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_archivetask` ( + `id` int(10) unsigned NOT NULL, + `taskClass` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `leaseOwner` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `leaseExpires` int(10) unsigned DEFAULT NULL, + `failureCount` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned NOT NULL, + `result` int(10) unsigned NOT NULL, + `duration` bigint(20) unsigned NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `remoteAddr` varchar(45) NOT NULL, - `session` varchar(40) DEFAULT NULL, + `priority` int(10) unsigned NOT NULL, + `objectPHID` varbinary(64) DEFAULT NULL, + `archivedEpoch` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`), - KEY `actorPHID` (`actorPHID`,`dateCreated`), - KEY `userPHID` (`userPHID`,`dateCreated`), - KEY `action` (`action`,`dateCreated`), KEY `dateCreated` (`dateCreated`), - KEY `remoteAddr` (`remoteAddr`,`dateCreated`), - KEY `session` (`session`,`dateCreated`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_modified` (`dateModified`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `user_nametoken` ( - `token` varchar(255) NOT NULL, - `userID` int(10) unsigned NOT NULL, - KEY `token` (`token`), - KEY `userID` (`userID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_worker`; -CREATE TABLE `user_oauthinfo` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_bulkjob` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userID` int(10) unsigned NOT NULL, - `oauthProvider` varchar(255) NOT NULL, - `oauthUID` varchar(255) NOT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `jobTypeKey` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `size` int(10) unsigned NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `accountURI` varchar(255) DEFAULT NULL, - `accountName` varchar(255) DEFAULT NULL, - `token` varchar(255) DEFAULT NULL, - `tokenExpires` int(10) unsigned DEFAULT NULL, - `tokenScope` varchar(255) DEFAULT NULL, - `tokenStatus` varchar(255) DEFAULT NULL, + `isSilent` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `userID` (`userID`,`oauthProvider`), - UNIQUE KEY `oauthProvider` (`oauthProvider`,`oauthUID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_type` (`jobTypeKey`), + KEY `key_author` (`authorPHID`), + KEY `key_status` (`status`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `user_preferences` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `preferences` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `userPHID` (`userPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +USE `{$NAMESPACE}_worker`; -CREATE TABLE `user_profile` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_bulkjobtransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `title` varchar(255) NOT NULL, - `blurb` text NOT NULL, - `profileImagePHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `userPHID` (`userPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; -CREATE TABLE `user_sshkey` ( + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_bulktask` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `name` varchar(255) DEFAULT NULL, - `keyType` varchar(255) DEFAULT NULL, - `keyBody` text CHARACTER SET utf8 COLLATE utf8_bin, - `keyHash` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `keyComment` varchar(255) DEFAULT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, + `bulkJobPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `status` varchar(32) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `keyHash` (`keyHash`), - KEY `userPHID` (`userPHID`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + KEY `key_job` (`bulkJobPHID`,`status`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_worker` DEFAULT CHARACTER SET utf8; +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_taskdata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +INSERT INTO `worker_taskdata` VALUES (1,'{\"queryClass\":\"PhabricatorDashboardQuery\"}'),(2,'{\"queryClass\":\"PhabricatorDashboardPanelQuery\"}'),(3,'{\"queryClass\":\"HeraldRuleQuery\"}'); USE `{$NAMESPACE}_worker`; -CREATE TABLE `worker_task` ( + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_trigger` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `taskClass` varchar(255) NOT NULL, - `leaseOwner` varchar(255) DEFAULT NULL, - `leaseExpires` int(10) unsigned DEFAULT NULL, - `failureCount` int(10) unsigned NOT NULL, - `dataID` int(10) unsigned DEFAULT NULL, + `phid` varbinary(64) NOT NULL, + `triggerVersion` int(10) unsigned NOT NULL, + `clockClass` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `clockProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `actionClass` varchar(64) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `actionProperties` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `dataID` (`dataID`), - KEY `taskClass` (`taskClass`), - KEY `leaseExpires` (`leaseExpires`), - KEY `leaseOwner` (`leaseOwner`(16)) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_trigger` (`triggerVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `worker_taskdata` ( +USE `{$NAMESPACE}_worker`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `worker_triggerevent` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `data` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; + `triggerID` int(10) unsigned NOT NULL, + `lastEventEpoch` int(10) unsigned DEFAULT NULL, + `nextEventEpoch` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_trigger` (`triggerID`), + KEY `key_next` (`nextEventEpoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_xhpast` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_xhpast`; -CREATE DATABASE IF NOT EXISTS `{$NAMESPACE}_xhpastview` DEFAULT CHARACTER SET utf8; + SET NAMES utf8 ; -USE `{$NAMESPACE}_xhpastview`; + SET character_set_client = {$CHARSET} ; -CREATE TABLE `xhpastview_parsetree` ( +CREATE TABLE `xhpast_parsetree` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `authorPHID` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, - `input` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `stdout` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `authorPHID` varbinary(64) DEFAULT NULL, + `input` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `returnCode` int(10) NOT NULL, + `stdout` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, + `stderr` longtext CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_xhprof` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; + +USE `{$NAMESPACE}_xhprof`; + + SET NAMES utf8 ; + + SET character_set_client = {$CHARSET} ; + +CREATE TABLE `xhprof_sample` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `filePHID` varbinary(64) NOT NULL, + `sampleRate` int(10) unsigned NOT NULL, + `usTotal` bigint(20) unsigned NOT NULL, + `hostname` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `requestPath` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `controller` varchar(255) CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `userPHID` varbinary(64) DEFAULT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `filePHID` (`filePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; diff --git a/resources/sql/stopwords.txt b/resources/sql/stopwords.txt new file mode 100644 index 0000000000..89f5d060f7 --- /dev/null +++ b/resources/sql/stopwords.txt @@ -0,0 +1,50 @@ +the +be +and +of +a +in +to +have +to +it +I +that +for +you +he +with +on +do +say +this +they +at +but +we +his +from +that +not +by +or +as +what +go +their +can +who +get +if +would +all +my +will +as +up +there +so +its +us +in +on diff --git a/resources/sql/stopwords_myisam.txt b/resources/sql/stopwords_myisam.txt new file mode 100644 index 0000000000..9a0bde3e9b --- /dev/null +++ b/resources/sql/stopwords_myisam.txt @@ -0,0 +1,543 @@ +a's +able +about +above +according +accordingly +across +actually +after +afterwards +again +against +ain't +all +allow +allows +almost +alone +along +already +also +although +always +am +among +amongst +an +and +another +any +anybody +anyhow +anyone +anything +anyway +anyways +anywhere +apart +appear +appreciate +appropriate +are +aren't +around +as +aside +ask +asking +associated +at +available +away +awfully +be +became +because +become +becomes +becoming +been +before +beforehand +behind +being +believe +below +beside +besides +best +better +between +beyond +both +brief +but +by +c'mon +c's +came +can +can't +cannot +cant +cause +causes +certain +certainly +changes +clearly +co +com +come +comes +concerning +consequently +consider +considering +contain +containing +contains +corresponding +could +couldn't +course +currently +definitely +described +despite +did +didn't +different +do +does +doesn't +doing +don't +done +down +downwards +during +each +edu +eg +eight +either +else +elsewhere +enough +entirely +especially +et +etc +even +ever +every +everybody +everyone +everything +everywhere +ex +exactly +example +except +far +few +fifth +first +five +followed +following +follows +for +former +formerly +forth +four +from +further +furthermore +get +gets +getting +given +gives +go +goes +going +gone +got +gotten +greetings +had +hadn't +happens +hardly +has +hasn't +have +haven't +having +he +he's +hello +help +hence +her +here +here's +hereafter +hereby +herein +hereupon +hers +herself +hi +him +himself +his +hither +hopefully +how +howbeit +however +i'd +i'll +i'm +i've +ie +if +ignored +immediate +in +inasmuch +inc +indeed +indicate +indicated +indicates +inner +insofar +instead +into +inward +is +isn't +it +it'd +it'll +it's +its +itself +just +keep +keeps +kept +know +known +knows +last +lately +later +latter +latterly +least +less +lest +let +let's +like +liked +likely +little +look +looking +looks +ltd +mainly +many +may +maybe +me +mean +meanwhile +merely +might +more +moreover +most +mostly +much +must +my +myself +name +namely +nd +near +nearly +necessary +need +needs +neither +never +nevertheless +new +next +nine +no +nobody +non +none +noone +nor +normally +not +nothing +novel +now +nowhere +obviously +of +off +often +oh +ok +okay +old +on +once +one +ones +only +onto +or +other +others +otherwise +ought +our +ours +ourselves +out +outside +over +overall +own +particular +particularly +per +perhaps +placed +please +plus +possible +presumably +probably +provides +que +quite +qv +rather +rd +re +really +reasonably +regarding +regardless +regards +relatively +respectively +right +said +same +saw +say +saying +says +second +secondly +see +seeing +seem +seemed +seeming +seems +seen +self +selves +sensible +sent +serious +seriously +seven +several +shall +she +should +shouldn't +since +six +so +some +somebody +somehow +someone +something +sometime +sometimes +somewhat +somewhere +soon +sorry +specified +specify +specifying +still +sub +such +sup +sure +t's +take +taken +tell +tends +th +than +thank +thanks +thanx +that +that's +thats +the +their +theirs +them +themselves +then +thence +there +there's +thereafter +thereby +therefore +therein +theres +thereupon +these +they +they'd +they'll +they're +they've +think +third +this +thorough +thoroughly +those +though +three +through +throughout +thru +thus +to +together +too +took +toward +towards +tried +tries +truly +try +trying +twice +two +un +under +unfortunately +unless +unlikely +until +unto +up +upon +us +use +used +useful +uses +using +usually +value +various +very +via +viz +vs +want +wants +was +wasn't +way +we +we'd +we'll +we're +we've +welcome +well +went +were +weren't +what +what's +whatever +when +whence +whenever +where +where's +whereafter +whereas +whereby +wherein +whereupon +wherever +whether +which +while +whither +who +who's +whoever +whole +whom +whose +why +will +willing +wish +with +within +without +won't +wonder +would +wouldn't +yes +yet +you +you'd +you'll +you're +you've +your +yours +yourself +yourselves +zero diff --git a/resources/sshd/phabricator-ssh-hook.sh b/resources/sshd/phabricator-ssh-hook.sh new file mode 100755 index 0000000000..fc7de81dad --- /dev/null +++ b/resources/sshd/phabricator-ssh-hook.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# NOTE: Replace this with the username that you expect users to connect with. +VCSUSER="vcs-user" + +# NOTE: Replace this with the path to your Phabricator directory. +ROOT="/path/to/phabricator" + +if [ "$1" != "$VCSUSER" ]; +then + exit 1 +fi + +exec "$ROOT/bin/ssh-auth" $@ diff --git a/resources/sshd/sshd_config.phabricator.example b/resources/sshd/sshd_config.phabricator.example new file mode 100644 index 0000000000..506d32bbbf --- /dev/null +++ b/resources/sshd/sshd_config.phabricator.example @@ -0,0 +1,24 @@ +# NOTE: You must have OpenSSHD 6.2 or newer; support for AuthorizedKeysCommand +# was added in this version. + +# NOTE: Edit these to the correct values for your setup. + +AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh +AuthorizedKeysCommandUser vcs-user +AllowUsers vcs-user + +# You may need to tweak these options, but mostly they just turn off everything +# dangerous. + +Port 2222 +Protocol 2 +PermitRootLogin no +AllowAgentForwarding no +AllowTcpForwarding no +PrintMotd no +PrintLastLog no +PasswordAuthentication no +ChallengeResponseAuthentication no +AuthorizedKeysFile none + +PidFile /var/run/sshd-phabricator.pid diff --git a/resources/timezones/generate-timezone-map.php b/resources/timezones/generate-timezone-map.php new file mode 100755 index 0000000000..77ee76c52b --- /dev/null +++ b/resources/timezones/generate-timezone-map.php @@ -0,0 +1,46 @@ +#!/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/resources/timezones/windows-timezones.json b/resources/timezones/windows-timezones.json new file mode 100644 index 0000000000..7a287b6c55 --- /dev/null +++ b/resources/timezones/windows-timezones.json @@ -0,0 +1,126 @@ +{ + "Egypt Standard Time": "Africa/Cairo", + "Morocco Standard Time": "Africa/Casablanca", + "South Africa Standard Time": "Africa/Johannesburg", + "W. Central Africa Standard Time": "Africa/Lagos", + "E. Africa Standard Time": "Africa/Nairobi", + "Libya Standard Time": "Africa/Tripoli", + "Namibia Standard Time": "Africa/Windhoek", + "Aleutian Standard Time": "America/Adak", + "Alaskan Standard Time": "America/Anchorage", + "Tocantins Standard Time": "America/Araguaina", + "Paraguay Standard Time": "America/Asuncion", + "Bahia Standard Time": "America/Bahia", + "SA Pacific Standard Time": "America/Bogota", + "Argentina Standard Time": "America/Buenos_Aires", + "Eastern Standard Time (Mexico)": "America/Cancun", + "Venezuela Standard Time": "America/Caracas", + "SA Eastern Standard Time": "America/Cayenne", + "Central Standard Time": "America/Chicago", + "Mountain Standard Time (Mexico)": "America/Chihuahua", + "Central Brazilian Standard Time": "America/Cuiaba", + "Mountain Standard Time": "America/Denver", + "Greenland Standard Time": "America/Godthab", + "Turks And Caicos Standard Time": "America/Grand_Turk", + "Central America Standard Time": "America/Guatemala", + "Atlantic Standard Time": "America/Halifax", + "Cuba Standard Time": "America/Havana", + "US Eastern Standard Time": "America/Indianapolis", + "SA Western Standard Time": "America/La_Paz", + "Pacific Standard Time": "America/Los_Angeles", + "Central Standard Time (Mexico)": "America/Mexico_City", + "Saint Pierre Standard Time": "America/Miquelon", + "Montevideo Standard Time": "America/Montevideo", + "Eastern Standard Time": "America/New_York", + "US Mountain Standard Time": "America/Phoenix", + "Haiti Standard Time": "America/Port-au-Prince", + "Canada Central Standard Time": "America/Regina", + "Pacific SA Standard Time": "America/Santiago", + "E. South America Standard Time": "America/Sao_Paulo", + "Newfoundland Standard Time": "America/St_Johns", + "Pacific Standard Time (Mexico)": "America/Tijuana", + "Central Asia Standard Time": "Asia/Almaty", + "Jordan Standard Time": "Asia/Amman", + "Arabic Standard Time": "Asia/Baghdad", + "Azerbaijan Standard Time": "Asia/Baku", + "SE Asia Standard Time": "Asia/Bangkok", + "Altai Standard Time": "Asia/Barnaul", + "Middle East Standard Time": "Asia/Beirut", + "India Standard Time": "Asia/Calcutta", + "Transbaikal Standard Time": "Asia/Chita", + "Sri Lanka Standard Time": "Asia/Colombo", + "Syria Standard Time": "Asia/Damascus", + "Bangladesh Standard Time": "Asia/Dhaka", + "Arabian Standard Time": "Asia/Dubai", + "West Bank Standard Time": "Asia/Hebron", + "W. Mongolia Standard Time": "Asia/Hovd", + "North Asia East Standard Time": "Asia/Irkutsk", + "Israel Standard Time": "Asia/Jerusalem", + "Afghanistan Standard Time": "Asia/Kabul", + "Russia Time Zone 11": "Asia/Kamchatka", + "Pakistan Standard Time": "Asia/Karachi", + "Nepal Standard Time": "Asia/Katmandu", + "North Asia Standard Time": "Asia/Krasnoyarsk", + "Magadan Standard Time": "Asia/Magadan", + "N. Central Asia Standard Time": "Asia/Novosibirsk", + "Omsk Standard Time": "Asia/Omsk", + "North Korea Standard Time": "Asia/Pyongyang", + "Myanmar Standard Time": "Asia/Rangoon", + "Arab Standard Time": "Asia/Riyadh", + "Sakhalin Standard Time": "Asia/Sakhalin", + "Korea Standard Time": "Asia/Seoul", + "China Standard Time": "Asia/Shanghai", + "Singapore Standard Time": "Asia/Singapore", + "Russia Time Zone 10": "Asia/Srednekolymsk", + "Taipei Standard Time": "Asia/Taipei", + "West Asia Standard Time": "Asia/Tashkent", + "Georgian Standard Time": "Asia/Tbilisi", + "Iran Standard Time": "Asia/Tehran", + "Tokyo Standard Time": "Asia/Tokyo", + "Tomsk Standard Time": "Asia/Tomsk", + "Ulaanbaatar Standard Time": "Asia/Ulaanbaatar", + "Vladivostok Standard Time": "Asia/Vladivostok", + "Yakutsk Standard Time": "Asia/Yakutsk", + "Ekaterinburg Standard Time": "Asia/Yekaterinburg", + "Caucasus Standard Time": "Asia/Yerevan", + "Azores Standard Time": "Atlantic/Azores", + "Cape Verde Standard Time": "Atlantic/Cape_Verde", + "Greenwich Standard Time": "Atlantic/Reykjavik", + "Cen. Australia Standard Time": "Australia/Adelaide", + "E. Australia Standard Time": "Australia/Brisbane", + "AUS Central Standard Time": "Australia/Darwin", + "Aus Central W. Standard Time": "Australia/Eucla", + "Tasmania Standard Time": "Australia/Hobart", + "Lord Howe Standard Time": "Australia/Lord_Howe", + "W. Australia Standard Time": "Australia/Perth", + "AUS Eastern Standard Time": "Australia/Sydney", + "Dateline Standard Time": "Etc/GMT+12", + "Astrakhan Standard Time": "Europe/Astrakhan", + "W. Europe Standard Time": "Europe/Berlin", + "GTB Standard Time": "Europe/Bucharest", + "Central Europe Standard Time": "Europe/Budapest", + "E. Europe Standard Time": "Europe/Chisinau", + "Turkey Standard Time": "Europe/Istanbul", + "Kaliningrad Standard Time": "Europe/Kaliningrad", + "FLE Standard Time": "Europe/Kiev", + "GMT Standard Time": "Europe/London", + "Belarus Standard Time": "Europe/Minsk", + "Russian Standard Time": "Europe/Moscow", + "Romance Standard Time": "Europe/Paris", + "Russia Time Zone 3": "Europe/Samara", + "Central European Standard Time": "Europe/Warsaw", + "Mauritius Standard Time": "Indian/Mauritius", + "Samoa Standard Time": "Pacific/Apia", + "New Zealand Standard Time": "Pacific/Auckland", + "Bougainville Standard Time": "Pacific/Bougainville", + "Chatham Islands Standard Time": "Pacific/Chatham", + "Easter Island Standard Time": "Pacific/Easter", + "Fiji Standard Time": "Pacific/Fiji", + "Central Pacific Standard Time": "Pacific/Guadalcanal", + "Hawaiian Standard Time": "Pacific/Honolulu", + "Line Islands Standard Time": "Pacific/Kiritimati", + "Marquesas Standard Time": "Pacific/Marquesas", + "Norfolk Standard Time": "Pacific/Norfolk", + "West Pacific Standard Time": "Pacific/Port_Moresby", + "Tonga Standard Time": "Pacific/Tongatapu" +} diff --git a/scripts/__init_script__.php b/scripts/__init_script__.php index f77b9114c9..b807ae68a4 100644 --- a/scripts/__init_script__.php +++ b/scripts/__init_script__.php @@ -1,80 +1,3 @@ setLanguage($translation->getLanguage()) - ->addTranslations($translation->getTranslations()); - -phutil_load_library('arcanist/src'); - -foreach (PhabricatorEnv::getEnvConfig('load-libraries') as $library) { - phutil_load_library($library); -} - -PhutilErrorHandler::initialize(); -PhabricatorEventEngine::initialize(); - -$tz = PhabricatorEnv::getEnvConfig('phabricator.timezone'); -if ($tz) { - date_default_timezone_set($tz); -} +require_once dirname(__FILE__).'/init/init-script.php'; diff --git a/scripts/almanac/manage_almanac.php b/scripts/almanac/manage_almanac.php new file mode 100755 index 0000000000..761891e142 --- /dev/null +++ b/scripts/almanac/manage_almanac.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage host directory')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('AlmanacManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/aphront/aphrontpath.php b/scripts/aphront/aphrontpath.php deleted file mode 100755 index e768876cab..0000000000 --- a/scripts/aphront/aphrontpath.php +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env php -\n"; - echo "Purpose: Print controller which will process passed .\n"; - exit(1); -} - -$url = parse_url(http://github.com/$argv[1]); -$path = '/'.(isset($url['path']) ? ltrim($url['path'], '/') : ''); - -$config_key = 'aphront.default-application-configuration-class'; -$application = PhabricatorEnv::newObjectFromConfig($config_key); -$mapper = new AphrontURIMapper($application->getURIMap()); - -list($controller) = $mapper->mapPath($path); -if (!$controller && $path[strlen($path) - 1] !== '/') { - list($controller) = $mapper->mapPath($path.'/'); -} -if ($controller) { - echo "$controller\n"; -} diff --git a/scripts/cache/manage_cache.php b/scripts/cache/manage_cache.php new file mode 100755 index 0000000000..002ba2be58 --- /dev/null +++ b/scripts/cache/manage_cache.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage cache')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorCacheManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/calendar/import_us_holidays.php b/scripts/calendar/import_us_holidays.php deleted file mode 100755 index d69367f6ac..0000000000 --- a/scripts/calendar/import_us_holidays.php +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env php - "New Year's Day", - '2012-01-16' => "Birthday of Martin Luther King, Jr.", - '2012-02-20' => "Washington's Birthday", - '2012-05-28' => "Memorial Day", - '2012-07-04' => "Independence Day", - '2012-09-03' => "Labor Day", - '2012-10-08' => "Columbus Day", - '2012-11-12' => "Veterans Day", - '2012-11-22' => "Thanksgiving Day", - '2012-12-25' => "Christmas Day", - '2013-01-01' => "New Year's Day", - '2013-01-21' => "Birthday of Martin Luther King, Jr.", - '2013-02-18' => "Washington's Birthday", - '2013-05-27' => "Memorial Day", - '2013-07-04' => "Independence Day", - '2013-09-02' => "Labor Day", - '2013-10-14' => "Columbus Day", - '2013-11-11' => "Veterans Day", - '2013-11-28' => "Thanksgiving Day", - '2013-12-25' => "Christmas Day", - '2014-01-01' => "New Year's Day", - '2014-01-20' => "Birthday of Martin Luther King, Jr.", - '2014-02-17' => "Washington's Birthday", - '2014-05-26' => "Memorial Day", - '2014-07-04' => "Independence Day", - '2014-09-01' => "Labor Day", - '2014-10-13' => "Columbus Day", - '2014-11-11' => "Veterans Day", - '2014-11-27' => "Thanksgiving Day", - '2014-12-25' => "Christmas Day", - '2015-01-01' => "New Year's Day", - '2015-01-19' => "Birthday of Martin Luther King, Jr.", - '2015-02-16' => "Washington's Birthday", - '2015-05-25' => "Memorial Day", - '2015-07-03' => "Independence Day", - '2015-09-07' => "Labor Day", - '2015-10-12' => "Columbus Day", - '2015-11-11' => "Veterans Day", - '2015-11-26' => "Thanksgiving Day", - '2015-12-25' => "Christmas Day", -); - -$table = new PhabricatorCalendarHoliday(); -$conn_w = $table->establishConnection('w'); -$table_name = $table->getTableName(); - -foreach ($holidays as $day => $name) { - queryfx( - $conn_w, - 'INSERT IGNORE INTO %T (day, name) VALUES (%s, %s)', - $table_name, - $day, - $name); -} diff --git a/scripts/celerity/generate_emoji.php b/scripts/celerity/generate_emoji.php new file mode 100755 index 0000000000..d533752932 --- /dev/null +++ b/scripts/celerity/generate_emoji.php @@ -0,0 +1,50 @@ +#!/usr/bin/env php +setTagline(pht('regenerate Emoji data sheets')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'force', + 'help' => pht('Force regeneration even if sources have not changed.'), + ), + )); + +$root = dirname(phutil_get_library_root('phabricator')); +// move this to an argument? +$path = $root.'/emoji_strategy.json'; +$export_path = $root.'/resources/emoji/manifest.json'; + +if (Filesystem::pathExists($path)) { + $json = Filesystem::readFile($path); + + $emojis = phutil_json_decode($json); + $data = array(); + foreach ($emojis as $shortname => $emoji) { + $unicode = $emoji['unicode']; + $codes = explode('-', $unicode); + $hex = ''; + foreach ($codes as $code) { + $hex .= phutil_utf8_encode_codepoint(hexdec($code)); + } + $data[$shortname] = $hex; + } + + ksort($data); + $json = new PhutilJSON(); + $data = $json->encodeFormatted($data); + Filesystem::writeFile($export_path, $data); + echo pht('Done.')."\n"; +} else { + echo pht('Path %s not exist.', $path)."\n"; +} diff --git a/scripts/celerity/generate_sprites.php b/scripts/celerity/generate_sprites.php new file mode 100755 index 0000000000..ccdd194b36 --- /dev/null +++ b/scripts/celerity/generate_sprites.php @@ -0,0 +1,82 @@ +#!/usr/bin/env php +setTagline(pht('regenerate CSS sprite sheets')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'force', + 'help' => pht('Force regeneration even if sources have not changed.'), + ), + )); + +$root = dirname(phutil_get_library_root('phabricator')); +$webroot = $root.'/webroot/rsrc'; +$webroot = Filesystem::readablePath($webroot); + +$generator = new CeleritySpriteGenerator(); + +$sheets = array( + 'tokens' => $generator->buildTokenSheet(), + 'login' => $generator->buildLoginSheet(), +); + +list($err) = exec_manual('optipng'); +if ($err) { + $have_optipng = false; + echo phutil_console_format( + " %s %s\n%s\n", + pht('WARNING'), + pht('`%s` not found in PATH.', 'optipng'), + pht('Sprites will not be optimized! Install `%s`!', 'optipng')); +} else { + $have_optipng = true; +} + +foreach ($sheets as $name => $sheet) { + + $sheet->setBasePath($root); + + $manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json'; + if (!$args->getArg('force')) { + if (Filesystem::pathExists($manifest_path)) { + $data = Filesystem::readFile($manifest_path); + $data = phutil_json_decode($data); + if (!$sheet->needsRegeneration($data)) { + continue; + } + } + } + + $sheet + ->generateCSS($webroot."/css/sprite-{$name}.css") + ->generateManifest($root."/resources/sprite/manifest/{$name}.json"); + + foreach ($sheet->getScales() as $scale) { + if ($scale == 1) { + $sheet_name = "sprite-{$name}.png"; + } else { + $sheet_name = "sprite-{$name}-X{$scale}.png"; + } + + $full_path = "{$webroot}/image/{$sheet_name}"; + $sheet->generateImage($full_path, $scale); + + if ($have_optipng) { + echo pht('Optimizing...')."\n"; + phutil_passthru('optipng -o7 -clobber %s', $full_path); + } + } +} + +echo pht('Done.')."\n"; diff --git a/scripts/celerity/install_merge.sh b/scripts/celerity/install_merge.sh new file mode 100755 index 0000000000..84a627b5b2 --- /dev/null +++ b/scripts/celerity/install_merge.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +echo "resources/celerity/map.php merge=celerity" \ + >> `dirname "$0"`/../../.git/info/attributes + +git config merge.celerity.name "Celerity Mapper" + +git config merge.celerity.driver \ + 'php $GIT_DIR/../bin/celerity map' diff --git a/scripts/celerity_mapper.php b/scripts/celerity_mapper.php deleted file mode 100755 index 5327c49275..0000000000 --- a/scripts/celerity_mapper.php +++ /dev/null @@ -1,379 +0,0 @@ -#!/usr/bin/env php - array( - 'javelin-util', - 'javelin-install', - 'javelin-event', - 'javelin-stratcom', - 'javelin-behavior', - 'javelin-request', - 'javelin-vector', - 'javelin-dom', - 'javelin-json', - 'javelin-uri', - ), - 'typeahead.pkg.js' => array( - 'javelin-typeahead', - 'javelin-typeahead-normalizer', - 'javelin-typeahead-source', - 'javelin-typeahead-preloaded-source', - 'javelin-typeahead-ondemand-source', - 'javelin-tokenizer', - 'javelin-behavior-aphront-basic-tokenizer', - ), - 'core.pkg.js' => array( - 'javelin-mask', - 'javelin-workflow', - 'javelin-behavior-workflow', - 'javelin-behavior-aphront-form-disable-on-submit', - 'phabricator-keyboard-shortcut-manager', - 'phabricator-keyboard-shortcut', - 'javelin-behavior-phabricator-keyboard-shortcuts', - 'javelin-behavior-refresh-csrf', - 'javelin-behavior-phabricator-watch-anchor', - 'javelin-behavior-phabricator-autofocus', - 'phabricator-paste-file-upload', - 'phabricator-menu-item', - 'phabricator-dropdown-menu', - 'javelin-behavior-phabricator-oncopy', - 'phabricator-tooltip', - 'javelin-behavior-phabricator-tooltips', - 'phabricator-prefab', - ), - 'core.pkg.css' => array( - 'phabricator-core-css', - 'phabricator-core-buttons-css', - 'phabricator-standard-page-view', - 'aphront-dialog-view-css', - 'aphront-form-view-css', - 'aphront-panel-view-css', - 'aphront-side-nav-view-css', - 'aphront-table-view-css', - 'aphront-crumbs-view-css', - 'aphront-tokenizer-control-css', - 'aphront-typeahead-control-css', - 'aphront-list-filter-view-css', - - 'phabricator-directory-css', - 'phabricator-jump-nav', - 'phabricator-app-buttons-css', - - 'phabricator-remarkup-css', - 'syntax-highlighting-css', - 'aphront-pager-view-css', - 'phabricator-transaction-view-css', - 'aphront-tooltip-css', - 'aphront-headsup-view-css', - 'phabricator-flag-css', - 'aphront-error-view-css', - ), - 'differential.pkg.css' => array( - 'differential-core-view-css', - 'differential-changeset-view-css', - 'differential-results-table-css', - 'differential-revision-history-css', - 'differential-table-of-contents-css', - 'differential-revision-comment-css', - 'differential-revision-add-comment-css', - 'differential-revision-comment-list-css', - 'phabricator-object-selector-css', - 'aphront-headsup-action-list-view-css', - 'phabricator-content-source-view-css', - 'differential-local-commits-view-css', - 'inline-comment-summary-css', - ), - 'differential.pkg.js' => array( - 'phabricator-drag-and-drop-file-upload', - 'phabricator-shaped-request', - - 'javelin-behavior-differential-feedback-preview', - 'javelin-behavior-differential-edit-inline-comments', - 'javelin-behavior-differential-populate', - 'javelin-behavior-differential-show-more', - 'javelin-behavior-differential-diff-radios', - 'javelin-behavior-differential-accept-with-errors', - 'javelin-behavior-differential-comment-jump', - 'javelin-behavior-differential-add-reviewers-and-ccs', - 'javelin-behavior-differential-keyboard-navigation', - 'javelin-behavior-aphront-drag-and-drop', - 'javelin-behavior-aphront-drag-and-drop-textarea', - 'javelin-behavior-phabricator-object-selector', - 'javelin-behavior-repository-crossreference', - - 'differential-inline-comment-editor', - 'javelin-behavior-differential-dropdown-menus', - 'javelin-behavior-buoyant', - ), - 'diffusion.pkg.css' => array( - 'diffusion-commit-view-css', - 'diffusion-icons-css', - ), - 'diffusion.pkg.js' => array( - 'javelin-behavior-diffusion-pull-lastmodified', - 'javelin-behavior-diffusion-commit-graph', - 'javelin-behavior-audit-preview', - ), - 'maniphest.pkg.css' => array( - 'maniphest-task-summary-css', - 'maniphest-transaction-detail-css', - 'aphront-attached-file-view-css', - 'phabricator-project-tag-css', - ), - 'maniphest.pkg.js' => array( - 'javelin-behavior-maniphest-batch-selector', - 'javelin-behavior-maniphest-transaction-controls', - 'javelin-behavior-maniphest-transaction-preview', - 'javelin-behavior-maniphest-transaction-expand', - 'javelin-behavior-maniphest-subpriority-editor', - ), -); - - -require_once dirname(__FILE__).'/__init_script__.php'; - -$args = new PhutilArgumentParser($argv); -$args->setTagline('map static resources'); -$args->setSynopsis( - "**celerity_mapper.php** [--output __path__] [--with-custom] "); -$args->parse( - array( - array( - 'name' => 'output', - 'param' => 'path', - 'default' => '../src/__celerity_resource_map__.php', - 'help' => "Set the path for resource map. It is usually useful for ". - "'celerity.resource-path' configuration.", - ), - array( - 'name' => 'with-custom', - 'help' => 'Include resources in /rsrc/custom/.', - ), - array( - 'name' => 'webroot', - 'wildcard' => true, - ), - )); - -$root = $args->getArg('webroot'); -if (count($root) != 1 || !is_dir(reset($root))) { - $args->printHelpAndExit(); -} -$root = Filesystem::resolvePath(reset($root)); - -$celerity_path = Filesystem::resolvePath($args->getArg('output'), $root); -$with_custom = $args->getArg('with-custom'); - -$resource_hash = PhabricatorEnv::getEnvConfig('celerity.resource-hash'); -$runtime_map = array(); - -echo "Finding raw static resources...\n"; -$finder = id(new FileFinder($root)) - ->withType('f') - ->withSuffix('png') - ->withSuffix('jpg') - ->withSuffix('gif') - ->withSuffix('swf') - ->withFollowSymlinks(true) - ->setGenerateChecksums(true); -if (!$with_custom) { - $finder->excludePath('./rsrc/custom'); -} -$raw_files = $finder->find(); - -echo "Processing ".count($raw_files)." files"; -foreach ($raw_files as $path => $hash) { - echo "."; - $path = '/'.Filesystem::readablePath($path, $root); - $type = CelerityResourceTransformer::getResourceType($path); - - $hash = md5($hash.$path.$resource_hash); - $uri = '/res/'.substr($hash, 0, 8).$path; - - $runtime_map[$path] = array( - 'hash' => $hash, - 'uri' => $uri, - 'disk' => $path, - 'type' => $type, - ); -} -echo "\n"; - -$xformer = id(new CelerityResourceTransformer()) - ->setMinify(false) - ->setRawResourceMap($runtime_map); - -echo "Finding transformable static resources...\n"; -$finder = id(new FileFinder($root)) - ->withType('f') - ->withSuffix('js') - ->withSuffix('css') - ->withFollowSymlinks(true) - ->setGenerateChecksums(true); -if (!$with_custom) { - $finder->excludePath('./rsrc/custom'); -} -$files = $finder->find(); - -echo "Processing ".count($files)." files"; - -$file_map = array(); -foreach ($files as $path => $raw_hash) { - echo "."; - $path = '/'.Filesystem::readablePath($path, $root); - $data = Filesystem::readFile($root.$path); - - $data = $xformer->transformResource($path, $data); - $hash = md5($data); - $hash = md5($hash.$path.$resource_hash); - - $file_map[$path] = array( - 'hash' => $hash, - 'disk' => $path, - ); -} -echo "\n"; - -$resource_graph = array(); -$hash_map = array(); - -$parser = new PhutilDocblockParser(); -foreach ($file_map as $path => $info) { - $type = CelerityResourceTransformer::getResourceType($path); - - $data = Filesystem::readFile($root.$info['disk']); - $matches = array(); - $ok = preg_match('@/[*][*].*?[*]/@s', $data, $matches); - if (!$ok) { - throw new Exception( - "File {$path} does not have a header doc comment. Encode dependency ". - "data in a header docblock."); - } - - list($description, $metadata) = $parser->parse($matches[0]); - - $provides = preg_split('/\s+/', trim(idx($metadata, 'provides'))); - $requires = preg_split('/\s+/', trim(idx($metadata, 'requires'))); - $provides = array_filter($provides); - $requires = array_filter($requires); - - if (!$provides) { - // Tests and documentation-only JS is permitted to @provide no targets. - continue; - } - - if (count($provides) > 1) { - throw new Exception( - "File {$path} must @provide at most one Celerity target."); - } - - $provides = reset($provides); - - $uri = '/res/'.substr($info['hash'], 0, 8).$path; - - $hash_map[$provides] = $info['hash']; - - $resource_graph[$provides] = $requires; - - $runtime_map[$provides] = array( - 'uri' => $uri, - 'type' => $type, - 'requires' => $requires, - 'disk' => $path, - ); -} - -$celerity_resource_graph = new CelerityResourceGraph(); -$celerity_resource_graph->addNodes($resource_graph); -$celerity_resource_graph->setResourceGraph($resource_graph); -$celerity_resource_graph->loadGraph(); - -foreach ($resource_graph as $provides => $requires) { - $cycle = $celerity_resource_graph->detectCycles($provides); - if ($cycle) { - throw new Exception( - "Cycle detected in resource graph: ". implode($cycle, " => ") - ); - } -} - -$package_map = array(); -foreach ($package_spec as $name => $package) { - $hashes = array(); - $type = null; - foreach ($package as $symbol) { - if (empty($hash_map[$symbol])) { - throw new Exception( - "Package specification for '{$name}' includes '{$symbol}', but that ". - "symbol is not defined anywhere."); - } - if ($type === null) { - $type = $runtime_map[$symbol]['type']; - } else { - $ntype = $runtime_map[$symbol]['type']; - if ($type !== $ntype) { - throw new Exception( - "Package specification for '{$name}' mixes resources of type ". - "'{$type}' with resources of type '{$ntype}'. Each package may only ". - "contain one type of resource."); - } - } - $hashes[] = $symbol.':'.$hash_map[$symbol]; - } - $key = substr(md5(implode("\n", $hashes)), 0, 8); - $package_map['packages'][$key] = array( - 'name' => $name, - 'symbols' => $package, - 'uri' => '/res/pkg/'.$key.'/'.$name, - 'type' => $type, - ); - foreach ($package as $symbol) { - $package_map['reverse'][$symbol] = $key; - } -} - -ksort($runtime_map); -$runtime_map = var_export($runtime_map, true); -$runtime_map = preg_replace('/\s+$/m', '', $runtime_map); -$runtime_map = preg_replace('/array \(/', 'array(', $runtime_map); - -$package_map['packages'] = isort($package_map['packages'], 'name'); -ksort($package_map['reverse']); -$package_map = var_export($package_map, true); -$package_map = preg_replace('/\s+$/m', '', $package_map); -$package_map = preg_replace('/array \(/', 'array(', $package_map); - -$generated = '@'.'generated'; -$resource_map = << \n"; - exit(1); -} - -$user = null; -$user_str = $argv[1]; -try { - $user = id(new PhabricatorUser()) - ->loadOneWhere('phid = %s', $user_str); -} catch (Exception $e) { - // no op; we'll error in a line or two -} -if (empty($user)) { - echo "usage: api.php \n" . - "user {$user_str} does not exist or failed to load\n"; - exit(1); -} - -$method = $argv[2]; -$method_class_str = ConduitAPIMethod::getClassNameFromAPIMethodName($method); -try { - $method_class = newv($method_class_str, array()); -} catch (Exception $e) { - echo "usage: api.php \n" . - "method {$method_class_str} does not exist\n"; - exit(1); -} -$log = new PhabricatorConduitMethodCallLog(); -$log->setMethod($method); - -$params = @file_get_contents('php://stdin'); -$params = json_decode($params, true); -if (!is_array($params)) { - echo "provide method parameters on stdin as a JSON blob"; - exit(1); -} - -// build a quick ConduitAPIRequest from stdin PLUS the authenticated user -$conduit_request = new ConduitAPIRequest($params); -$conduit_request->setUser($user); - -try { - $result = $method_class->executeMethod($conduit_request); - $error_code = null; - $error_info = null; -} catch (ConduitException $ex) { - $result = null; - $error_code = $ex->getMessage(); - if ($ex->getErrorDescription()) { - $error_info = $ex->getErrorDescription(); - } else { - $error_info = $method_handler->getErrorDescription($error_code); - } -} -$time_end = microtime(true); - -$response = id(new ConduitAPIResponse()) - ->setResult($result) - ->setErrorCode($error_code) - ->setErrorInfo($error_info); -echo json_encode($response->toDictionary()), "\n"; - -// TODO -- how get $connection_id from SSH? -$connection_id = null; -$log->setConnectionID($connection_id); -$log->setError((string)$error_code); -$log->setDuration(1000000 * ($time_end - $time_start)); -$log->save(); - -exit(); diff --git a/scripts/daemon/exec/exec_daemon.php b/scripts/daemon/exec/exec_daemon.php new file mode 100755 index 0000000000..af53131612 --- /dev/null +++ b/scripts/daemon/exec/exec_daemon.php @@ -0,0 +1,131 @@ +#!/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 new file mode 100755 index 0000000000..44e70f710d --- /dev/null +++ b/scripts/daemon/launch_daemon.php @@ -0,0 +1,24 @@ +#!/usr/bin/env php +getAllLibraries() as $library) { + $overseer->addLibrary(phutil_get_library_root($library)); +} + +$overseer->run(); diff --git a/scripts/daemon/manage_daemons.php b/scripts/daemon/manage_daemons.php new file mode 100755 index 0000000000..793bd608d3 --- /dev/null +++ b/scripts/daemon/manage_daemons.php @@ -0,0 +1,23 @@ +#!/usr/bin/env php +setTagline(pht('manage daemons')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorDaemonManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/daemon/phabricator_daemon_launcher.php b/scripts/daemon/phabricator_daemon_launcher.php deleted file mode 100755 index 84a76bf316..0000000000 --- a/scripts/daemon/phabricator_daemon_launcher.php +++ /dev/null @@ -1,228 +0,0 @@ -#!/usr/bin/env php -executeListCommand(); - exit($err); - - case 'status': - $err = $control->executeStatusCommand(); - exit($err); - - case 'stop': - $pass_argv = array_slice($argv, 2); - $err = $control->executeStopCommand($pass_argv); - exit($err); - - case 'restart': - $err = $control->executeStopCommand(array()); - if ($err) { - exit($err); - } - /* Fall Through */ - case 'start': - $running = $control->loadRunningDaemons(); - if ($running) { - echo phutil_console_wrap( - "phd start: Unable to start daemons because daemons are already ". - "running.\n". - "You can view running daemons with 'phd status'.\n". - "You can stop running daemons with 'phd stop'.\n". - "You can use 'phd restart' to stop all daemons before starting new ". - "daemons.\n"); - exit(1); - } - - $daemons = array( - array('PhabricatorRepositoryPullLocalDaemon', array()), - array('PhabricatorGarbageCollectorDaemon', array()), - ); - - $taskmasters = PhabricatorEnv::getEnvConfig('phd.start-taskmasters'); - for ($ii = 0; $ii < $taskmasters; $ii++) { - $daemons[] = array('PhabricatorTaskmasterDaemon', array()); - } - - will_launch($control); - foreach ($daemons as $spec) { - list($name, $argv) = $spec; - echo "Launching '{$name}'...\n"; - $control->launchDaemon($name, $argv); - } - - echo "Done.\n"; - break; - - case 'repository-launch-readonly': - case 'repository-launch-master': - if ($command == 'repository-launch-readonly') { - $daemon_args = array( - '--', - '--no-discovery', - ); - } else { - $daemon_args = array(); - } - - $need_launch = phd_load_tracked_repositories(); - if (!$need_launch) { - echo "There are no repositories with tracking enabled.\n"; - exit(1); - } - - will_launch($control); - - echo "Launching PullLocal daemon...\n"; - $control->launchDaemon( - 'PhabricatorRepositoryPullLocalDaemon', - $daemon_args); - - echo "NOTE: '{$command}' is deprecated. Consult the documentation.\n"; - - echo "Done.\n"; - break; - - case 'launch': - case 'debug': - $is_debug = ($argv[1] == 'debug'); - - $daemon = idx($argv, 2); - if (!$daemon) { - throw new Exception("Daemon name required!"); - } - - $pass_argv = array_slice($argv, 3); - - $n = 1; - if (!$is_debug) { - if (is_numeric($daemon)) { - $n = $daemon; - if ($n < 1) { - throw new Exception("Count must be at least 1!"); - } - $daemon = idx($argv, 3); - if (!$daemon) { - throw new Exception("Daemon name required!"); - } - $pass_argv = array_slice($argv, 4); - } - } - - $loader = new PhutilSymbolLoader(); - $symbols = $loader - ->setAncestorClass('PhutilDaemon') - ->selectSymbolsWithoutLoading(); - - $symbols = ipull($symbols, 'name'); - $match = array(); - foreach ($symbols as $symbol) { - if (stripos($symbol, $daemon) !== false) { - if (strtolower($symbol) == strtolower($daemon)) { - $match = array($symbol); - break; - } else { - $match[] = $symbol; - } - } - } - - if (count($match) == 0) { - throw new Exception( - "No daemons match! Use 'phd list' for a list of daemons."); - } else if (count($match) > 1) { - throw new Exception( - "Which of these daemons did you mean?\n". - " ".implode("\n ", $match)); - } else { - $daemon = reset($match); - } - - $with_logs = true; - if ($is_debug) { - // In debug mode, we emit errors straight to stdout, so nothing useful - // will show up in the logs. Don't echo the message about stuff showing - // up in them, since it would be confusing. - $with_logs = false; - } - - will_launch($control, $with_logs); - - if ($is_debug) { - echo "Launching {$daemon} in debug mode (nondaemonized)...\n"; - } else { - echo "Launching {$n} x {$daemon}"; - } - - for ($ii = 0; $ii < $n; $ii++) { - $control->launchDaemon($daemon, $pass_argv, $is_debug); - if (!$is_debug) { - echo "."; - } - } - - echo "\n"; - echo "Done.\n"; - - break; - - case '--help': - case 'help': - default: - $err = $control->executeHelpCommand(); - exit($err); -} - -function phd_load_tracked_repositories() { - $repositories = id(new PhabricatorRepository())->loadAll(); - foreach ($repositories as $key => $repository) { - if (!$repository->isTracked()) { - unset($repositories[$key]); - } - } - - return $repositories; -} - -function will_launch($control, $with_logs = true) { - echo "Staging launch...\n"; - $control->pingConduit(); - if ($with_logs) { - $log_dir = $control->getControlDirectory('log').'/daemons.log'; - echo "NOTE: Logs will appear in '{$log_dir}'.\n\n"; - } -} - diff --git a/scripts/daemon/phd-daemon b/scripts/daemon/phd-daemon new file mode 120000 index 0000000000..26441218dc --- /dev/null +++ b/scripts/daemon/phd-daemon @@ -0,0 +1 @@ +launch_daemon.php \ No newline at end of file diff --git a/scripts/differential/detect_copied_code.php b/scripts/differential/detect_copied_code.php deleted file mode 100755 index d3dfce46cf..0000000000 --- a/scripts/differential/detect_copied_code.php +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env php - \n"; - exit(1); -} -list(, $from, $to) = $argv; - -for ($diff_id = $from; $diff_id <= $to; $diff_id++) { - echo "Processing $diff_id"; - $diff = id(new DifferentialDiff())->load($diff_id); - if ($diff) { - $diff->attachChangesets($diff->loadChangesets()); - $orig_copy = array(); - foreach ($diff->getChangesets() as $i => $changeset) { - $orig_copy[$i] = idx((array)$changeset->getMetadata(), 'copy:lines'); - $changeset->attachHunks($changeset->loadHunks()); - } - $diff->detectCopiedCode(); - foreach ($diff->getChangesets() as $i => $changeset) { - if (idx($changeset->getMetadata(), 'copy:lines') || $orig_copy[$i]) { - echo "."; - $changeset->save(); - } - } - } - echo "\n"; -} - -echo "Done.\n"; diff --git a/scripts/differential/remove_empty_revisions.php b/scripts/differential/remove_empty_revisions.php deleted file mode 100755 index 1aa72b10fa..0000000000 --- a/scripts/differential/remove_empty_revisions.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -establishConnection('r'), - 'select distinct r.id from differential_revision r left join '. - 'differential_diff d on r.id=d.revisionID where d.revisionID is NULL'); - -$empty_revisions = ipull($empty_revisions, 'id'); - -if (!$empty_revisions) { - echo "No empty revisions found.\n"; - exit(0); -} - -echo phutil_console_wrap( - "The following revision don't contain any diff:\n". - implode(', ', $empty_revisions)); - -if (!phutil_console_confirm('Do you want to delete them?')) { - echo "Cancelled.\n"; - exit(1); -} - -foreach ($empty_revisions as $revision_id) { - $revision = id(new DifferentialRevision())->load($revision_id); - $revision->delete(); -} - -echo "Done.\n"; diff --git a/scripts/diviner/diviner.php b/scripts/diviner/diviner.php new file mode 100755 index 0000000000..fa4c19caa7 --- /dev/null +++ b/scripts/diviner/diviner.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('documentation generator')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('DivinerWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/drydock/drydock_control.php b/scripts/drydock/drydock_control.php index e3a7612e8d..f22032b286 100755 --- a/scripts/drydock/drydock_control.php +++ b/scripts/drydock/drydock_control.php @@ -1,50 +1,21 @@ #!/usr/bin/env php makeSynchronous(); -$allocator->setResourceType('webroot'); -$lease = $allocator->allocate(); - -$lease->waitUntilActive(); - - -$cmd = $lease->getInterface('webroot'); -echo "URI: ".$cmd->getURI()."\n"; - -$lease->release(); - -die("Done.\n"); - -$i_file = $lease->getInterface('command'); - -list($stdout) = $i_file->execx('ls / ; echo -- ; uptime ; echo -- ; uname -n'); -echo $stdout; - - -$lease->release(); - - -//$i_http = $lease->getInterface('httpd'); -//echo $i_http->getURI('/index.html')."\n"; +require_once $root.'/scripts/init/init-script-with-signals.php'; + +$args = new PhutilArgumentParser($argv); +$args->setTagline(pht('manage drydock software resources')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('DrydockManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/fact/manage_facts.php b/scripts/fact/manage_facts.php new file mode 100755 index 0000000000..8a773cfbdc --- /dev/null +++ b/scripts/fact/manage_facts.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +setTagline(pht('manage fact configuration')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorFactManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/files/manage_files.php b/scripts/files/manage_files.php new file mode 100755 index 0000000000..3d7ff887a5 --- /dev/null +++ b/scripts/files/manage_files.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage files')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorFilesManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/fpm/warmup.php b/scripts/fpm/warmup.php deleted file mode 100644 index f4744d1991..0000000000 --- a/scripts/fpm/warmup.php +++ /dev/null @@ -1,54 +0,0 @@ -selectAndLoadSymbols(); - - define('__WARMUP__', true); -} - -__warmup__(); diff --git a/scripts/init/init-aphlict.php b/scripts/init/init-aphlict.php new file mode 100644 index 0000000000..e2029a0d2a --- /dev/null +++ b/scripts/init/init-aphlict.php @@ -0,0 +1,10 @@ + true, + )); diff --git a/scripts/init/init-script-with-signals.php b/scripts/init/init-script-with-signals.php new file mode 100644 index 0000000000..a479c4b758 --- /dev/null +++ b/scripts/init/init-script-with-signals.php @@ -0,0 +1,11 @@ + false, + )); diff --git a/scripts/init/init-setup.php b/scripts/init/init-setup.php new file mode 100644 index 0000000000..fea975830d --- /dev/null +++ b/scripts/init/init-setup.php @@ -0,0 +1,12 @@ + true, + )); diff --git a/scripts/init/lib.php b/scripts/init/lib.php new file mode 100644 index 0000000000..4c544da9d0 --- /dev/null +++ b/scripts/init/lib.php @@ -0,0 +1,27 @@ +. It might not work perfectly on your -# system, but hopefully it should be easy to adapt. +# system, but hopefully it should be easy to adapt. This script is not intended +# to work without modifications. # NOTE: This script assumes you are running it from a directory which contains -# arcanist/, libphutil/, phabricator/, and possibly diviner/. +# arcanist/ and phabricator/. ROOT=`pwd` # You can hard-code the path here instead. ### UPDATE WORKING COPIES ###################################################### -if [ -e $ROOT/diviner ] -then - cd $ROOT/diviner - git pull -fi - -cd $ROOT/libphutil -git pull - cd $ROOT/arcanist git pull cd $ROOT/phabricator git pull -git submodule update --init - - -### RUN TESTS ################################################################## - -# This is an acceptance test that makes sure all symbols can be loaded to -# avoid issues like missing methods in descendants of abstract base classes. -cd $ROOT/phabricator -../arcanist/bin/arc unit src/infrastructure/__tests__/ -### CYCLE APACHE AND DAEMONS ################################################### +### CYCLE WEB SERVER AND DAEMONS ############################################### # Stop daemons. $ROOT/phabricator/bin/phd stop -# Stop Apache. Depening on what system you're running, you may need to use -# 'apachectl' or something else to cycle apache. -sudo /etc/init.d/httpd stop +# If running the notification server, stop it. +# $ROOT/phabricator/bin/aphlict stop -# Upgrade the database schema. -$ROOT/phabricator/bin/storage upgrade --force +# Stop the webserver (apache, nginx, lighttpd, etc). This command will differ +# depending on which system and webserver you are running: replace it with an +# appropriate command for your system. +# NOTE: If you're running php-fpm, you should stop it here too. -# Restart apache. -sudo /etc/init.d/httpd start +sudo /etc/init.d/httpd stop -# Restart daemons. Customize this to start whatever daemons you're running on -# your system. -$ROOT/phabricator/bin/phd start -# $ROOT/phabricator/bin/phd launch ircbot /config/bot.json +# Upgrade the database schema. You may want to add the "--force" flag to allow +# this script to run noninteractively. +$ROOT/phabricator/bin/storage upgrade +# Restart the webserver. As above, this depends on your system and webserver. +# NOTE: If you're running php-fpm, restart it here too. +sudo /etc/init.d/httpd start -### GENERATE DOCUMENTATION ##################################################### +# Restart daemons. +$ROOT/phabricator/bin/phd start -# This generates documentation if you have diviner/ checked out. You generally -# don't need to do this unless you're contributing to Phabricator and want to -# preview some of the amazing documentation you've just written. -if [ -e $ROOT/diviner ] -then - cd $ROOT/diviner && $ROOT/diviner/bin/diviner . - cd $ROOT/libphutil && $ROOT/diviner/bin/diviner . - cd $ROOT/arcanist && $ROOT/diviner/bin/diviner . - cd $ROOT/phabricator && $ROOT/diviner/bin/diviner . -fi +# If running the notification server, start it. +# $ROOT/phabricator/bin/aphlict start diff --git a/scripts/lipsum/manage_lipsum.php b/scripts/lipsum/manage_lipsum.php new file mode 100755 index 0000000000..9d45b573d4 --- /dev/null +++ b/scripts/lipsum/manage_lipsum.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('synthetic data generator')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorLipsumManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/mail/create_worker_tasks.php b/scripts/mail/create_worker_tasks.php deleted file mode 100755 index 8d6c805663..0000000000 --- a/scripts/mail/create_worker_tasks.php +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env php -loadAllWhere( - 'status = %s', PhabricatorMetaMTAMail::STATUS_QUEUE); - -foreach ($messages as $message) { - if (!$message->getWorkerTaskID()) { - $mailer_task = new PhabricatorWorkerTask(); - $mailer_task->setTaskClass('PhabricatorMetaMTAWorker'); - $mailer_task->setData($message->getID()); - $mailer_task->save(); - - $message->setWorkerTaskID($mailer_task->getID()); - $message->save(); - $id = $message->getID(); - echo "#$id\n"; - } -} diff --git a/scripts/mail/mail_handler.php b/scripts/mail/mail_handler.php index d60fcec11d..bf6f315f3a 100755 --- a/scripts/mail/mail_handler.php +++ b/scripts/mail/mail_handler.php @@ -1,54 +1,70 @@ #!/usr/bin/env php 1) { - $_SERVER['PHABRICATOR_ENV'] = $argv[1]; + foreach (array_slice($argv, 1) as $arg) { + if (!preg_match('/^-/', $arg)) { + $_SERVER['PHABRICATOR_ENV'] = $arg; + break; + } + } } $root = dirname(dirname(dirname(__FILE__))); require_once $root.'/scripts/__init_script__.php'; require_once $root.'/externals/mimemailparser/MimeMailParser.class.php'; +$args = new PhutilArgumentParser($argv); +$args->parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'process-duplicates', + 'help' => pht( + "Process this message, even if it's a duplicate of another message. ". + "This is mostly useful when debugging issues with mail routing."), + ), + array( + 'name' => 'env', + 'wildcard' => true, + ), + )); + $parser = new MimeMailParser(); $parser->setText(file_get_contents('php://stdin')); -$text_body = $parser->getMessageBody('text'); +$content = array(); +foreach (array('text', 'html') as $part) { + $part_body = $parser->getMessageBody($part); + + if (strlen($part_body) && !phutil_is_utf8($part_body)) { + $part_headers = $parser->getMessageBodyHeaders($part); + if (!is_array($part_headers)) { + $part_headers = array(); + } + $content_type = idx($part_headers, 'content-type'); + if (preg_match('/charset="(.*?)"/', $content_type, $matches) || + preg_match('/charset=(\S+)/', $content_type, $matches)) { + $part_body = phutil_utf8_convert($part_body, 'UTF-8', $matches[1]); + } + } -$text_body_headers = $parser->getMessageBodyHeaders('text'); -$content_type = idx($text_body_headers, 'content-type'); -if ( - !phutil_is_utf8($text_body) && - preg_match('/charset="(.*?)"/', $content_type, $matches) -) { - $text_body = mb_convert_encoding($text_body, "UTF-8", $matches[1]); + $content[$part] = $part_body; } $headers = $parser->getHeaders(); -$headers['subject'] = iconv_mime_decode($headers['subject'], 0, "UTF-8"); -$headers['from'] = iconv_mime_decode($headers['from'], 0, "UTF-8"); +$headers['subject'] = phutil_decode_mime_header($headers['subject']); +$headers['from'] = phutil_decode_mime_header($headers['from']); + +if ($args->getArg('process-duplicates')) { + $headers['message-id'] = Filesystem::readRandomCharacters(64); +} $received = new PhabricatorMetaMTAReceivedMail(); $received->setHeaders($headers); -$received->setBodies(array( - 'text' => $text_body, - 'html' => $parser->getMessageBody('html'), -)); +$received->setBodies($content); $attachments = array(); foreach ($parser->getAttachments() as $attachment) { @@ -65,6 +81,7 @@ $attachment->getContent(), array( 'name' => $attachment->getFilename(), + 'viewPolicy' => PhabricatorPolicies::POLICY_NOONE, )); $attachments[] = $file->getPHID(); } @@ -75,8 +92,8 @@ $received->processReceivedMail(); } catch (Exception $e) { $received - ->setMessage('EXCEPTION: '.$e->getMessage()) + ->setMessage(pht('EXCEPTION: %s', $e->getMessage())) ->save(); -} - + throw $e; +} diff --git a/scripts/mail/manage_mail.php b/scripts/mail/manage_mail.php new file mode 100755 index 0000000000..12b907a2ee --- /dev/null +++ b/scripts/mail/manage_mail.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage mail')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorMailManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/manage_bulk.php b/scripts/manage_bulk.php new file mode 120000 index 0000000000..04d0550497 --- /dev/null +++ b/scripts/manage_bulk.php @@ -0,0 +1 @@ +../scripts/setup/manage_bulk.php \ No newline at end of file diff --git a/scripts/repository/audit.php b/scripts/repository/audit.php deleted file mode 100755 index 6e729d5352..0000000000 --- a/scripts/repository/audit.php +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env php -setTagline('manage open Audit requests'); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'more', - 'wildcard' => true, - ), - )); - -$more = $args->getArg('more'); -if (count($more) !== 1) { - $args->printHelpAndExit(); -} -$callsign = reset($more); - -$repository = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $callsign); -if (!$repository) { - throw new Exception("No repository exists with callsign '{$callsign}'!"); -} - -$ok = phutil_console_confirm( - 'This will reset all open audit requests ("Audit Required" or "Concern '. - 'Raised") for commits in this repository to "Audit Not Required". This '. - 'operation destroys information and can not be undone! Are you sure '. - 'you want to proceed?'); -if (!$ok) { - echo "OK, aborting.\n"; - die(1); -} - -echo "Loading commits...\n"; -$all_commits = id(new PhabricatorRepositoryCommit())->loadAllWhere( - 'repositoryID = %d', - $repository->getID()); - -echo "Clearing audit requests...\n"; - -foreach ($all_commits as $commit) { - $query = id(new PhabricatorAuditQuery()) - ->withStatus(PhabricatorAuditQuery::STATUS_OPEN) - ->withCommitPHIDs(array($commit->getPHID())); - $requests = $query->execute(); - - echo "Clearing ".$commit->getPHID()."... "; - - if (!$requests) { - echo "nothing to do.\n"; - continue; - } else { - echo count($requests)." requests to clear"; - } - - foreach ($requests as $request) { - $request->setAuditStatus( - PhabricatorAuditStatusConstants::AUDIT_NOT_REQUIRED); - $request->save(); - echo "."; - } - - $commit->setAuditStatus(PhabricatorAuditCommitStatusConstants::NONE); - $commit->save(); - echo "\n"; -} - -echo "Done.\n"; diff --git a/scripts/repository/binary_safe_diff.sh b/scripts/repository/binary_safe_diff.sh deleted file mode 100755 index 1473e80442..0000000000 --- a/scripts/repository/binary_safe_diff.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -diff "$@" -if [ "$?" = "2" ]; then - exit 1 -fi diff --git a/scripts/repository/commit_hook.php b/scripts/repository/commit_hook.php new file mode 100755 index 0000000000..ca50a4f52e --- /dev/null +++ b/scripts/repository/commit_hook.php @@ -0,0 +1,237 @@ +#!/usr/bin/env php + 1) { + $context = $argv[1]; + $context = explode(':', $context, 2); + $argv[1] = $context[0]; + + if (count($context) > 1) { + $_ENV['PHABRICATOR_INSTANCE'] = $context[1]; + putenv('PHABRICATOR_INSTANCE='.$context[1]); + } +} + +$root = dirname(dirname(dirname(__FILE__))); +require_once $root.'/scripts/__init_script__.php'; + +if ($argc < 2) { + throw new Exception(pht('usage: commit-hook ')); +} + +$engine = id(new DiffusionCommitHookEngine()) + ->setStartTime($hook_start); + +$repository = id(new PhabricatorRepositoryQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIdentifiers(array($argv[1])) + ->needProjectPHIDs(true) + ->executeOne(); + +if (!$repository) { + throw new Exception(pht('No such repository "%s"!', $argv[1])); +} + +if (!$repository->isHosted()) { + // In Mercurial, the "pretxnchangegroup" hook fires for both pulls and + // pushes. Normally we only install the hook for hosted repositories, but + // if a hosted repository is later converted into an observed repository we + // can end up with an observed repository that has the hook installed. + // If we're running hooks from an observed repository, just exit without + // taking action. For more discussion, see PHI24. + return 0; +} + +$engine->setRepository($repository); + +$args = new PhutilArgumentParser($argv); +$args->parsePartial( + array( + array( + 'name' => 'hook-mode', + 'param' => 'mode', + 'help' => pht('Hook execution mode.'), + ), + )); + +$argv = array_merge( + array($argv[0]), + $args->getUnconsumedArgumentVector()); + +// Figure out which user is writing the commit. +$hook_mode = $args->getArg('hook-mode'); +if ($hook_mode !== null) { + $known_modes = array( + 'svn-revprop' => true, + ); + + if (empty($known_modes[$hook_mode])) { + throw new Exception( + pht( + 'Invalid Hook Mode: This hook was invoked in "%s" mode, but this '. + 'is not a recognized hook mode. Valid modes are: %s.', + $hook_mode, + implode(', ', array_keys($known_modes)))); + } +} + +$is_svnrevprop = ($hook_mode == 'svn-revprop'); + +if ($is_svnrevprop) { + // For now, we let these through if the repository allows dangerous changes + // and prevent them if it doesn't. See T11208 for discussion. + + $revprop_key = $argv[5]; + + if ($repository->shouldAllowDangerousChanges()) { + $err = 0; + } else { + $err = 1; + + $console = PhutilConsole::getConsole(); + $console->writeErr( + pht( + "DANGEROUS CHANGE: Dangerous change protection is enabled for this ". + "repository, so you can not change revision properties (you are ". + "attempting to edit \"%s\").\n". + "Edit the repository configuration before making dangerous changes.", + $revprop_key)); + } + + exit($err); +} else if ($repository->isGit() || $repository->isHg()) { + $username = getenv(DiffusionCommitHookEngine::ENV_USER); + if ($username === null || !strlen($username)) { + throw new Exception( + pht( + 'No Direct Pushes: You are pushing directly to a hosted repository. '. + 'This will not work. See "No Direct Pushes" in the documentation '. + 'for more information.')); + } + + if ($repository->isHg()) { + // We respond to several different hooks in Mercurial. + $engine->setMercurialHook($argv[2]); + } + +} else if ($repository->isSVN()) { + // NOTE: In Subversion, the entire environment gets wiped so we can't read + // DiffusionCommitHookEngine::ENV_USER. Instead, we've set "--tunnel-user" to + // specify the correct user; read this user out of the commit log. + + if ($argc < 4) { + throw new Exception(pht('usage: commit-hook ')); + } + + $svn_repo = $argv[2]; + $svn_txn = $argv[3]; + list($username) = execx('svnlook author -t %s %s', $svn_txn, $svn_repo); + $username = rtrim($username, "\n"); + + $engine->setSubversionTransactionInfo($svn_txn, $svn_repo); +} else { + throw new Exception(pht('Unknown repository type.')); +} + +$user = id(new PhabricatorPeopleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withUsernames(array($username)) + ->executeOne(); + +if (!$user) { + throw new Exception(pht('No such user "%s"!', $username)); +} + +$engine->setViewer($user); + + +// Read stdin for the hook engine. + +if ($repository->isHg()) { + // Mercurial leaves stdin open, so we can't just read it until EOF. + $stdin = ''; +} else { + // Git and Subversion write data into stdin and then close it. Read the + // data. + $stdin = @file_get_contents('php://stdin'); + if ($stdin === false) { + throw new Exception(pht('Failed to read stdin!')); + } +} + +$engine->setStdin($stdin); +$engine->setOriginalArgv(array_slice($argv, 2)); + +$remote_address = getenv(DiffusionCommitHookEngine::ENV_REMOTE_ADDRESS); +if ($remote_address !== false && strlen($remote_address)) { + $engine->setRemoteAddress($remote_address); +} + +$remote_protocol = getenv(DiffusionCommitHookEngine::ENV_REMOTE_PROTOCOL); +if ($remote_protocol !== false && strlen($remote_protocol)) { + $engine->setRemoteProtocol($remote_protocol); +} + +$request_identifier = getenv(DiffusionCommitHookEngine::ENV_REQUEST); +if ($request_identifier !== false && strlen($request_identifier)) { + $engine->setRequestIdentifier($request_identifier); +} + +try { + $err = $engine->execute(); +} catch (DiffusionCommitHookRejectException $ex) { + $console = PhutilConsole::getConsole(); + + if (PhabricatorEnv::getEnvConfig('phabricator.serious-business')) { + $preamble = pht('*** PUSH REJECTED BY COMMIT HOOK ***'); + } else { + $preamble = pht(<<writeErr("%s\n\n", $preamble); + $console->writeErr("%s\n\n", $ex->getMessage()); + $err = 1; +} + +exit($err); diff --git a/scripts/repository/discover.php b/scripts/repository/discover.php deleted file mode 100755 index 51a02f9618..0000000000 --- a/scripts/repository/discover.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -setTagline('manually discover working copies'); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'repositories', - 'wildcard' => true, - ), - )); - -$repo_names = $args->getArg('repositories'); -if (!$repo_names) { - echo "Specify one or more repositories to pull, by callsign or PHID.\n"; - exit(1); -} - -$repos = PhabricatorRepository::loadAllByPHIDOrCallsign($repo_names); -foreach ($repos as $repo) { - $callsign = $repo->getCallsign(); - echo "Discovering '{$callsign}'...\n"; - PhabricatorRepositoryPullLocalDaemon::discoverRepository($repo); -} -echo "Done.\n"; diff --git a/scripts/repository/manage_repositories.php b/scripts/repository/manage_repositories.php new file mode 100755 index 0000000000..5023dc66c6 --- /dev/null +++ b/scripts/repository/manage_repositories.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +setTagline(pht('manage repositories')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorRepositoryManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/repository/parse_one_commit.php b/scripts/repository/parse_one_commit.php deleted file mode 100755 index 855899b8bd..0000000000 --- a/scripts/repository/parse_one_commit.php +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env php - --message --change\n\n". - "See that script for more options.\n"; -exit(1); diff --git a/scripts/repository/pull.php b/scripts/repository/pull.php deleted file mode 100755 index 668c005f7e..0000000000 --- a/scripts/repository/pull.php +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env php -setTagline('manually pull working copies'); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'repositories', - 'wildcard' => true, - ), - )); - -$repo_names = $args->getArg('repositories'); -if (!$repo_names) { - echo "Specify one or more repositories to pull, by callsign or PHID.\n"; - exit(1); -} - -$repos = PhabricatorRepository::loadAllByPHIDOrCallsign($repo_names); -foreach ($repos as $repo) { - $callsign = $repo->getCallsign(); - echo "Pulling '{$callsign}'...\n"; - PhabricatorRepositoryPullLocalDaemon::pullRepository($repo); -} -echo "Done.\n"; diff --git a/scripts/repository/rebuild_summaries.php b/scripts/repository/rebuild_summaries.php deleted file mode 100755 index d06f146c4d..0000000000 --- a/scripts/repository/rebuild_summaries.php +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env php -establishConnection('w'); -$sizes = queryfx_all( - $conn_w, - 'SELECT repositoryID, count(*) N FROM %T GROUP BY repositoryID', - $commit->getTableName()); -$sizes = ipull($sizes, 'N', 'repositoryID'); - -$maxes = queryfx_all( - $conn_w, - 'SELECT repositoryID, max(epoch) maxEpoch FROM %T GROUP BY repositoryID', - $commit->getTableName()); -$maxes = ipull($maxes, 'maxEpoch', 'repositoryID'); - - -$repository_ids = array_keys($sizes + $maxes); - -echo "Updating ".count($repository_ids)." repositories"; - -foreach ($repository_ids as $repository_id) { - $last_commit = queryfx_one( - $conn_w, - 'SELECT id FROM %T WHERE repositoryID = %d AND epoch = %d LIMIT 1', - $commit->getTableName(), - $repository_id, - idx($maxes, $repository_id, 0)); - if ($last_commit) { - $last_commit = $last_commit['id']; - } else { - $last_commit = 0; - } - queryfx( - $conn_w, - 'INSERT INTO %T (repositoryID, lastCommitID, size, epoch) - VALUES (%d, %d, %d, %d) ON DUPLICATE KEY UPDATE - lastCommitID = VALUES(lastCommitID), - size = VALUES(size), - epoch = VALUES(epoch)', - PhabricatorRepository::TABLE_SUMMARY, - $repository_id, - $last_commit, - idx($sizes, $repository_id, 0), - idx($maxes, $repository_id, 0)); - echo "."; -} -echo "\ndone.\n"; diff --git a/scripts/repository/reconcile.php b/scripts/repository/reconcile.php deleted file mode 100755 index 224438c21b..0000000000 --- a/scripts/repository/reconcile.php +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env php -setTagline('reconcile Phabricator state after repository changes'); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'more', - 'wildcard' => true, - ), - )); - -$more = $args->getArg('more'); -if (count($more) !== 1) { - $args->printHelpAndExit(); -} -$callsign = reset($more); - - -$repository = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $callsign); -if (!$repository) { - throw new Exception("No repository exists with callsign '{$callsign}'!"); -} - -switch ($repository->getVersionControlSystem()) { - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: - default: - throw new Exception("For now, you can only reconcile git repositories."); -} - -echo "Loading commits...\n"; -$all_commits = id(new PhabricatorRepositoryCommit())->loadAllWhere( - 'repositoryID = %d', - $repository->getID()); - -echo "Updating repository..\n"; -try { - // Sanity-check the repository working copy and make sure we're up to date. - $repository->execxLocalCommand('fetch --all'); -} catch (Exception $ex) { - echo "Unable to `git fetch` the working copy to update it. Reconciliation ". - "requires an up-to-date working copy.\n"; - throw $ex; -} - -echo "Verifying commits (this may take some time if the repository is large)"; -$futures = array(); -foreach ($all_commits as $id => $commit) { - // NOTE: We use "cat-file -t", not "rev-parse --verify", because - // "rev-parse --verify" does not verify that the object actually exists, only - // that the name is properly formatted. - $futures[$id] = $repository->getLocalCommandFuture( - 'cat-file -t %s', - $commit->getCommitIdentifier()); -} - -$bad = array(); -foreach (Futures($futures)->limit(8) as $id => $future) { - list($err) = $future->resolve(); - if ($err) { - $bad[$id] = $all_commits[$id]; - echo "#"; - } else { - echo "."; - } -} -echo "\nDone.\n"; - -if (!count($bad)) { - echo "No bad commits found!\n"; -} else { - echo "Found ".count($bad)." bad commits:\n\n"; - echo ' '.implode("\n ", mpull($bad, 'getCommitIdentifier')); - $ok = phutil_console_confirm("Do you want to delete these commits?"); - if (!$ok) { - echo "OK, aborting.\n"; - exit(1); - } - - echo "Deleting commits"; - foreach ($bad as $commit) { - echo "."; - $commit->delete(); - } - echo "\nDone.\n"; -} - -//// Clean Up Links //////////////////////////////////////////////////////// - -$table = new PhabricatorRepositoryCommit(); - -$valid_phids = queryfx_all( - $table->establishConnection('r'), - 'SELECT phid FROM %T', - $table->getTableName()); -$valid_phids = ipull($valid_phids, null, 'phid'); - -//////// Differential <-> Diffusion Links ////////////////////////////////// - -$dx_conn = id(new DifferentialRevision())->establishConnection('w'); -$dx_table = DifferentialRevision::TABLE_COMMIT; -$dx_phids = queryfx_all( - $dx_conn, - 'SELECT commitPHID FROM %T', - $dx_table); - -$bad_phids = array(); -foreach ($dx_phids as $dx_phid) { - if (empty($valid_phids[$dx_phid['commitPHID']])) { - $bad_phids[] = $dx_phid['commitPHID']; - } -} - -if ($bad_phids) { - echo "Deleting ".count($bad_phids)." bad Diffusion links...\n"; - queryfx( - $dx_conn, - 'DELETE FROM %T WHERE commitPHID IN (%Ls)', - $dx_table, - $bad_phids); - echo "Done.\n"; -} else { - echo "Diffusion links are clean.\n"; -} - -// TODO: There are some links in owners that we should probably clean up too. diff --git a/scripts/repository/reparse.php b/scripts/repository/reparse.php deleted file mode 100755 index 15039bae05..0000000000 --- a/scripts/repository/reparse.php +++ /dev/null @@ -1,263 +0,0 @@ -#!/usr/bin/env php -loadOneWhere( - 'callsign = %s OR phid = %s', - $reparse_what, - $reparse_what); - if (!$repository) { - throw new Exception("Unknown repository '{$reparse_what}'!"); - } - $commits = id(new PhabricatorRepositoryCommit())->loadAllWhere( - 'repositoryID = %d', - $repository->getID()); - if (!$commits) { - throw new Exception("No commits have been discovered in that repository!"); - } - $callsign = $repository->getCallsign(); -} else { - $matches = null; - if (!preg_match('/r([A-Z]+)([a-z0-9]+)/', $reparse_what, $matches)) { - throw new Exception("Can't parse commit identifier!"); - } - $callsign = $matches[1]; - $commit_identifier = $matches[2]; - $repository = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $callsign); - if (!$repository) { - throw new Exception("No repository with callsign '{$callsign}'!"); - } - $commit = id(new PhabricatorRepositoryCommit())->loadOneWhere( - 'repositoryID = %d AND commitIdentifier = %s', - $repository->getID(), - $commit_identifier); - if (!$commit) { - throw new Exception( - "No matching commit '{$commit_identifier}' in repository '{$callsign}'. ". - "(For git and mercurial repositories, you must specify the entire ". - "commit hash.)"); - } - $commits = array($commit); -} - -if ($is_all) { - echo phutil_console_format( - '**NOTE**: This script will queue tasks to reparse the data. Once the '. - 'tasks have been queued, you need to run Taskmaster daemons to execute '. - 'them.'); - echo "\n\n"; - echo "QUEUEING TASKS (".number_format(count($commits))." Commits):\n"; -} - -$tasks = array(); -foreach ($commits as $commit) { - $classes = array(); - switch ($repository->getVersionControlSystem()) { - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: - if ($reparse_message) { - $classes[] = 'PhabricatorRepositoryGitCommitMessageParserWorker'; - } - if ($reparse_change) { - $classes[] = 'PhabricatorRepositoryGitCommitChangeParserWorker'; - } - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: - if ($reparse_message) { - $classes[] = 'PhabricatorRepositoryMercurialCommitMessageParserWorker'; - } - if ($reparse_change) { - $classes[] = 'PhabricatorRepositoryMercurialCommitChangeParserWorker'; - } - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: - if ($reparse_message) { - $classes[] = 'PhabricatorRepositorySvnCommitMessageParserWorker'; - } - if ($reparse_change) { - $classes[] = 'PhabricatorRepositorySvnCommitChangeParserWorker'; - } - break; - } - - if ($reparse_herald) { - $classes[] = 'PhabricatorRepositoryCommitHeraldWorker'; - } - - if ($reparse_owners) { - $classes[] = 'PhabricatorRepositoryCommitOwnersWorker'; - } - - $spec = array( - 'commitID' => $commit->getID(), - 'only' => true, - ); - - if ($is_all) { - foreach ($classes as $class) { - $task = new PhabricatorWorkerTask(); - $task->setTaskClass($class); - $task->setData($spec); - $task->save(); - - $commit_name = 'r'.$callsign.$commit->getCommitIdentifier(); - echo " Queued '{$class}' for commit '{$commit_name}'.\n"; - } - } else { - foreach ($classes as $class) { - $worker = newv($class, array($spec)); - echo "Running '{$class}'...\n"; - $worker->doWork(); - } - } -} - -echo "\nDone.\n"; - -function usage($message) { - echo "Usage Error: {$message}"; - echo "\n\n"; - echo "Run 'reparse.php --help' for detailed help.\n"; - exit(1); -} - -function help() { - $help = << --message\n\n". - "See that script for more options.\n"; -exit(1); - diff --git a/scripts/repository/save_lint.php b/scripts/repository/save_lint.php new file mode 100755 index 0000000000..fde2ab8fed --- /dev/null +++ b/scripts/repository/save_lint.php @@ -0,0 +1,61 @@ +#!/usr/bin/env php +setTagline(pht('save lint errors to database')) + ->setSynopsis($synopsis) + ->parseStandardArguments() + ->parse(array( + array( + 'name' => 'all', + 'help' => pht( + 'Discover problems in the whole repository instead of just changes '. + 'since the last run.'), + ), + array( + 'name' => 'arc', + 'param' => 'path', + 'default' => 'arc', + 'help' => pht('Path to Arcanist executable.'), + ), + array( + 'name' => 'severity', + 'param' => 'string', + 'default' => ArcanistLintSeverity::SEVERITY_ADVICE, + 'help' => pht( + 'Minimum severity, one of %s constants.', + 'ArcanistLintSeverity'), + ), + array( + 'name' => 'chunk-size', + 'param' => 'number', + 'default' => 256, + 'help' => pht('Number of paths passed to `%s` at once.', 'arc'), + ), + array( + 'name' => 'blame', + 'help' => pht( + 'Assign lint errors to authors who last modified the line.'), + ), + )); + +echo pht('Saving lint errors to database...')."\n"; + +$count = id(new DiffusionLintSaveRunner()) + ->setAll($args->getArg('all', false)) + ->setArc($args->getArg('arc')) + ->setSeverity($args->getArg('severity')) + ->setChunkSize($args->getArg('chunk-size')) + ->setNeedsBlame($args->getArg('blame')) + ->run('.'); + +echo "\n".pht('Processed %d files.', $count)."\n"; diff --git a/scripts/repository/test_connection.php b/scripts/repository/test_connection.php deleted file mode 100755 index 4ccabbaed8..0000000000 --- a/scripts/repository/test_connection.php +++ /dev/null @@ -1,111 +0,0 @@ -#!/usr/bin/env php -\n"; - exit(1); -} - -echo phutil_console_wrap( - phutil_console_format( - 'This script will test that you have configured valid credentials for '. - 'access to a repository, so the Phabricator daemons can pull from it. '. - 'You should run this as the **same user you will run the daemons as**, '. - 'from the **same machine they will run from**. Doing this will help '. - 'detect various problems with your configuration, such as SSH issues.')); - -list($whoami) = execx('whoami'); -$whoami = trim($whoami); - -$ok = phutil_console_confirm("Do you want to continue as '{$whoami}'?"); -if (!$ok) { - die(1); -} - -$callsign = $argv[1]; -echo "Loading '{$callsign}' repository...\n"; -$repository = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $argv[1]); -if (!$repository) { - throw new Exception("No such repository exists!"); -} - -$vcs = $repository->getVersionControlSystem(); - -PhutilServiceProfiler::installEchoListener(); - -echo phutil_console_format( - "\n". - "**NOTE:** If you are prompted for an SSH password in the next step, the\n". - "daemon won't work because it doesn't have the password and can't respond\n". - "to an interactive prompt. Instead of typing the password, it will hang\n". - "forever when prompted. There are several ways to resolve this:\n\n". - " - Run the daemon inside an ssh-agent session where you have unlocked\n". - " the key (most secure, but most complicated).\n". - " - Generate a new, passwordless certificate for the daemon to use\n". - " (usually quite easy).\n". - " - Remove the passphrase from the key with `ssh-keygen -p`\n". - " (easy, but questionable)."); - -phutil_console_confirm('Did you read all that?', $default_no = false); - -echo "Trying to connect to the remote...\n"; -switch ($vcs) { - case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: - $err = $repository->passthruRemoteCommand( - '--limit 1 log %s', - $repository->getRemoteURI()); - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: - // Do an ls-remote on a nonexistent ref, which we expect to just return - // nothing. - $err = $repository->passthruRemoteCommand( - 'ls-remote %s %s', - $repository->getRemoteURI(), - 'just-testing'); - break; - case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: - // TODO: 'hg id' doesn't support --insecure so we can't tell it not to - // spew. If 'hg id' eventually supports --insecure, consider using it. - echo "(It is safe to ignore any 'certificate with fingerprint ... not ". - "verified' warnings, although you may want to configure Mercurial ". - "to recognize the server's fingerprint/certificate.)\n"; - $err = $repository->passthruRemoteCommand( - 'id --rev tip %s', - $repository->getRemoteURI()); - break; - default: - throw new Exception("Unsupported repository type."); -} - -if ($err) { - echo phutil_console_format( - "** FAIL ** Connection failed. The credentials for this ". - "repository appear to be incorrectly configured.\n"); - exit(1); -} else { - echo phutil_console_format( - "** OKAY ** Connection successful. The credentials for ". - "this repository appear to be correctly configured.\n"); -} - diff --git a/scripts/repository/undo_commits.php b/scripts/repository/undo_commits.php deleted file mode 100755 index a68f9dab98..0000000000 --- a/scripts/repository/undo_commits.php +++ /dev/null @@ -1,194 +0,0 @@ -#!/usr/bin/env php -setTagline('reopen reviews accidentally closed by a bad push'); -$args->setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'repository', - 'param' => 'callsign', - 'help' => 'Callsign for the repository these commits appear in.', - ), - )); - -$callsign = $args->getArg('repository'); -if (!$callsign) { - $args->printHelpAndExit(); -} - -$repository = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $callsign); - -if (!$repository) { - throw new Exception("No repository with callsign '{$callsign}'!"); -} - -echo "Reading commit identifiers from stdin...\n"; - -$identifiers = @file_get_contents('php://stdin'); -$identifiers = trim($identifiers); -$identifiers = explode("\n", $identifiers); - -echo "Read ".count($identifiers)." commit identifiers.\n"; - -if (!$identifiers) { - throw new Exception("You must provide commmit identifiers on stdin!"); -} - -echo "Looking up commits...\n"; -$commits = id(new PhabricatorRepositoryCommit())->loadAllWhere( - 'repositoryID = %d AND commitIdentifier IN (%Ls)', - $repository->getID(), - $identifiers); - -echo "Found ".count($commits)." matching commits.\n"; - -if (!$commits) { - throw new Exception("None of the commits could be found!"); -} - -$commit_phids = mpull($commits, 'getPHID', 'getPHID'); - -echo "Looking up revisions marked 'closed' by these commits...\n"; -$revision_ids = queryfx_all( - id(new DifferentialRevision())->establishConnection('r'), - 'SELECT DISTINCT revisionID from %T WHERE commitPHID IN (%Ls)', - DifferentialRevision::TABLE_COMMIT, - $commit_phids); -$revision_ids = ipull($revision_ids, 'revisionID'); - -echo "Found ".count($revision_ids)." associated revisions.\n"; -if (!$revision_ids) { - echo "Done -- nothing to do.\n"; - return; -} - -$status_closed = ArcanistDifferentialRevisionStatus::CLOSED; - -$revisions = array(); -$map = array(); - -if ($revision_ids) { - foreach ($revision_ids as $revision_id) { - echo "Assessing revision D{$revision_id}...\n"; - $revision = id(new DifferentialRevision())->load($revision_id); - - if ($revision->getStatus() != $status_closed) { - echo "Revision is not 'closed', skipping.\n"; - } - - $assoc_commits = queryfx_all( - $revision->establishConnection('r'), - 'SELECT commitPHID FROM %T WHERE revisionID = %d', - DifferentialRevision::TABLE_COMMIT, - $revision_id); - $assoc_commits = ipull($assoc_commits, 'commitPHID', 'commitPHID'); - - if (array_diff_key($assoc_commits, $commit_phids)) { - echo "Revision is associated with other commits, skipping.\n"; - } - - $comments = id(new DifferentialComment())->loadAllWhere( - 'revisionID = %d', - $revision_id); - - $new_status = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; - foreach ($comments as $comment) { - switch ($comment->getAction()) { - case DifferentialAction::ACTION_ACCEPT: - $new_status = ArcanistDifferentialRevisionStatus::ACCEPTED; - break; - case DifferentialAction::ACTION_REJECT: - case DifferentialAction::ACTION_RETHINK: - $new_status = ArcanistDifferentialRevisionStatus::NEEDS_REVISION; - break; - case DifferentialAction::ACTION_ABANDON: - $new_status = ArcanistDifferentialRevisionStatus::ABANDONED; - break; - case DifferentialAction::ACTION_RECLAIM: - case DifferentialAction::ACTION_UPDATE: - $new_status = ArcanistDifferentialRevisionStatus::NEEDS_REVIEW; - break; - } - } - - $revisions[$revision_id] = $revision; - $map[$revision_id] = $new_status; - } -} - -if (!$revisions) { - echo "Done -- nothing to do.\n"; -} - -echo "Found ".count($revisions)." revisions to update:\n\n"; -foreach ($revisions as $id => $revision) { - - $old_status = ArcanistDifferentialRevisionStatus::getNameForRevisionStatus( - $revision->getStatus()); - $new_status = ArcanistDifferentialRevisionStatus::getNameForRevisionStatus( - $map[$id]); - - echo " - D{$id}: ".$revision->getTitle()."\n"; - echo " Will update: {$old_status} -> {$new_status}\n\n"; -} - -$ok = phutil_console_confirm('Apply these changes?'); -if (!$ok) { - echo "Aborted.\n"; - exit(1); -} - -echo "Saving changes...\n"; -foreach ($revisions as $id => $revision) { - queryfx( - $revision->establishConnection('r'), - 'UPDATE %T SET status = %d WHERE id = %d', - $revision->getTableName(), - $map[$id], - $id); -} -echo "Done.\n"; - - diff --git a/scripts/search/index_one_commit.php b/scripts/search/index_one_commit.php deleted file mode 100755 index d75f8c3184..0000000000 --- a/scripts/search/index_one_commit.php +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env php -\n"; - die(1); -} - -$commit = isset($argv[1]) ? $argv[1] : null; -if (!$commit) { - throw new Exception("Provide a commit to index!"); -} -$matches = null; -if (!preg_match('/r([A-Z]+)([a-z0-9]+)/', $commit, $matches)) { - throw new Exception("Can't parse commit identifier!"); -} -$repo = id(new PhabricatorRepository())->loadOneWhere( - 'callsign = %s', - $matches[1]); -if (!$repo) { - throw new Exception("Unknown repository!"); -} - -$commit = id(new PhabricatorRepositoryCommit())->loadOneWhere( - 'repositoryID = %d AND commitIdentifier = %s', - $repo->getID(), - $matches[2]); -if (!$commit) { - throw new Exception('Unknown commit.'); -} - -PhabricatorSearchCommitIndexer::indexCommit($commit); -echo "Done.\n"; diff --git a/scripts/search/manage_search.php b/scripts/search/manage_search.php new file mode 100755 index 0000000000..acd659dffe --- /dev/null +++ b/scripts/search/manage_search.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage search')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorSearchManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/search/reindex_all_users.php b/scripts/search/reindex_all_users.php deleted file mode 100755 index b829d5843a..0000000000 --- a/scripts/search/reindex_all_users.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php -loadAll(); -echo "Indexing ".count($users)." users"; -foreach ($users as $user) { - PhabricatorSearchUserIndexer::indexUser($user); - echo '.'; -} -echo "\n"; -echo "Done.\n"; - diff --git a/scripts/search/reindex_everything.php b/scripts/search/reindex_everything.php deleted file mode 100755 index 0e4eea2c03..0000000000 --- a/scripts/search/reindex_everything.php +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env php -loadAll(); -$count = count($revs); -echo "Reindexing {$count} revisions"; -foreach ($revs as $rev) { - PhabricatorSearchDifferentialIndexer::indexRevision($rev); - echo '.'; -} -echo "\n"; - -echo "Loading commits...\n"; -$commits = id(new PhabricatorRepositoryCommit())->loadAll(); -$count = count($commits); -echo "Reindexing {$count} commits"; -foreach ($commits as $commit) { - PhabricatorSearchCommitIndexer::indexCommit($commit); - echo '.'; -} -echo "\n"; - -echo "Loading tasks...\n"; -$tasks = id(new ManiphestTask())->loadAll(); -$count = count($tasks); -echo "Reindexing {$count} tasks"; -foreach ($tasks as $task) { - PhabricatorSearchManiphestIndexer::indexTask($task); - echo '.'; -} -echo "\n"; -echo "Done.\n"; - diff --git a/scripts/search/reindex_maniphest.php b/scripts/search/reindex_maniphest.php deleted file mode 100755 index 89235c6590..0000000000 --- a/scripts/search/reindex_maniphest.php +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env php -loadAll(); -echo "Updating relationships for ".count($tasks)." tasks"; -foreach ($tasks as $task) { - ManiphestTaskProject::updateTaskProjects($task); - ManiphestTaskSubscriber::updateTaskSubscribers($task); - echo '.'; -} -echo "\nDone.\n"; - diff --git a/scripts/setup/manage_audit.php b/scripts/setup/manage_audit.php new file mode 100755 index 0000000000..89b9927ad6 --- /dev/null +++ b/scripts/setup/manage_audit.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage audits')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorAuditManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_auth.php b/scripts/setup/manage_auth.php new file mode 100755 index 0000000000..3ddbdf6e1e --- /dev/null +++ b/scripts/setup/manage_auth.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage authentication')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorAuthManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_bulk.php b/scripts/setup/manage_bulk.php new file mode 100755 index 0000000000..9786f9b078 --- /dev/null +++ b/scripts/setup/manage_bulk.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage bulk jobs')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorBulkManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_calendar.php b/scripts/setup/manage_calendar.php new file mode 100755 index 0000000000..135c42ded1 --- /dev/null +++ b/scripts/setup/manage_calendar.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage Calendar')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorCalendarManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_celerity.php b/scripts/setup/manage_celerity.php new file mode 100755 index 0000000000..2ae67743b2 --- /dev/null +++ b/scripts/setup/manage_celerity.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage celerity')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('CelerityManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_conduit.php b/scripts/setup/manage_conduit.php new file mode 100755 index 0000000000..07384e7ed8 --- /dev/null +++ b/scripts/setup/manage_conduit.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage Conduit')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorConduitManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_config.php b/scripts/setup/manage_config.php new file mode 100755 index 0000000000..e33da20244 --- /dev/null +++ b/scripts/setup/manage_config.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage configuration')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorConfigManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_differential.php b/scripts/setup/manage_differential.php new file mode 100755 index 0000000000..30e11d27a9 --- /dev/null +++ b/scripts/setup/manage_differential.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage hunks')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorDifferentialManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_feed.php b/scripts/setup/manage_feed.php new file mode 100755 index 0000000000..02516aa9a5 --- /dev/null +++ b/scripts/setup/manage_feed.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage feed')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorFeedManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_garbage.php b/scripts/setup/manage_garbage.php new file mode 100755 index 0000000000..326730375e --- /dev/null +++ b/scripts/setup/manage_garbage.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage garbage collectors')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorGarbageCollectorManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_harbormaster.php b/scripts/setup/manage_harbormaster.php new file mode 100755 index 0000000000..484c671aa9 --- /dev/null +++ b/scripts/setup/manage_harbormaster.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage Harbormaster')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('HarbormasterManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_herald.php b/scripts/setup/manage_herald.php new file mode 100755 index 0000000000..4ebd94f820 --- /dev/null +++ b/scripts/setup/manage_herald.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage Herald')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('HeraldManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_i18n.php b/scripts/setup/manage_i18n.php new file mode 100755 index 0000000000..5f01b6331c --- /dev/null +++ b/scripts/setup/manage_i18n.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage internationalization')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorInternationalizationManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_lock.php b/scripts/setup/manage_lock.php new file mode 100755 index 0000000000..ec5405ec01 --- /dev/null +++ b/scripts/setup/manage_lock.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage locks')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorLockManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_nuance.php b/scripts/setup/manage_nuance.php new file mode 100755 index 0000000000..ebf312305a --- /dev/null +++ b/scripts/setup/manage_nuance.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage Nuance')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('NuanceManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_phortune.php b/scripts/setup/manage_phortune.php new file mode 100755 index 0000000000..a04ed0ccd6 --- /dev/null +++ b/scripts/setup/manage_phortune.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage billing')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorPhortuneManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_policy.php b/scripts/setup/manage_policy.php new file mode 100755 index 0000000000..3e36592abc --- /dev/null +++ b/scripts/setup/manage_policy.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage policies')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorPolicyManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_remove.php b/scripts/setup/manage_remove.php new file mode 100755 index 0000000000..9a49e8774d --- /dev/null +++ b/scripts/setup/manage_remove.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('remove objects')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorSystemRemoveWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_trigger.php b/scripts/setup/manage_trigger.php new file mode 100755 index 0000000000..9bfcd0e692 --- /dev/null +++ b/scripts/setup/manage_trigger.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage triggers')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorWorkerTriggerManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_user.php b/scripts/setup/manage_user.php new file mode 100755 index 0000000000..f571cb9346 --- /dev/null +++ b/scripts/setup/manage_user.php @@ -0,0 +1,20 @@ +#!/usr/bin/env php +setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorPeopleManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_webhook.php b/scripts/setup/manage_webhook.php new file mode 100755 index 0000000000..afe662617a --- /dev/null +++ b/scripts/setup/manage_webhook.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage webhooks')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('HeraldWebhookManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/manage_worker.php b/scripts/setup/manage_worker.php new file mode 100755 index 0000000000..588cb69972 --- /dev/null +++ b/scripts/setup/manage_worker.php @@ -0,0 +1,21 @@ +#!/usr/bin/env php +setTagline(pht('manage task queue')); +$args->setSynopsis(<<parseStandardArguments(); + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorWorkerManagementWorkflow') + ->execute(); +$workflows[] = new PhutilHelpArgumentWorkflow(); +$args->parseWorkflows($workflows); diff --git a/scripts/setup/pcntl_available.php b/scripts/setup/pcntl_available.php deleted file mode 100755 index 4fe250ceac..0000000000 --- a/scripts/setup/pcntl_available.php +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env php -setTagline('manage Phabricator storage and schemata'); +$args->setTagline(pht('manage storage and schemata')); $args->setSynopsis(<<parseStandardArguments(); -$conf = PhabricatorEnv::newObjectFromConfig('mysql.configuration-provider'); - -$default_user = $conf->getUser(); -$default_password = $conf->getPassword(); -$default_host = $conf->getHost(); $default_namespace = PhabricatorLiskDAO::getDefaultStorageNamespace(); try { @@ -48,36 +27,56 @@ array( 'name' => 'force', 'short' => 'f', - 'help' => 'Do not prompt before performing dangerous operations.', + 'help' => pht( + 'Do not prompt before performing dangerous operations.'), + ), + array( + 'name' => 'host', + 'param' => 'hostname', + 'help' => pht( + 'Operate on the database server identified by __hostname__.'), + ), + array( + 'name' => 'ref', + 'param' => 'ref', + 'help' => pht( + 'Operate on the database identified by __ref__.'), ), array( 'name' => 'user', 'short' => 'u', 'param' => 'username', - 'default' => $default_user, - 'help' => "Connect with __username__ instead of the configured ". - "default ('{$default_user}').", + 'help' => pht( + 'Connect with __username__ instead of the configured default.'), ), array( 'name' => 'password', 'short' => 'p', 'param' => 'password', - 'default' => $default_password, - 'help' => 'Use __password__ instead of the configured default.', + 'help' => pht('Use __password__ instead of the configured default.'), ), array( 'name' => 'namespace', 'param' => 'name', 'default' => $default_namespace, - 'help' => "Use namespace __namespace__ instead of the configured ". - "default ('{$default_namespace}'). This is an advanced ". - "feature used by unit tests; you should not normally ". - "use this flag.", + 'help' => pht( + "Use namespace __namespace__ instead of the configured ". + "default ('%s'). This is an advanced feature used by unit tests; ". + "you should not normally use this flag.", + $default_namespace), + ), + array( + 'name' => 'dryrun', + 'help' => pht( + 'Do not actually change anything, just show what would be changed.'), ), array( - 'name' => 'dryrun', - 'help' => 'Do not actually change anything, just show what would be '. - 'changed.', + 'name' => 'disable-utf8mb4', + 'help' => pht( + 'Disable %s, even if the database supports it. This is an '. + 'advanced feature used for testing internal changes; you '. + 'should not normally use this flag.', + 'utf8mb4'), ), )); } catch (PhutilArgumentUsageException $ex) { @@ -85,36 +84,163 @@ exit(77); } -$api = new PhabricatorStorageManagementAPI(); -$api->setUser($args->getArg('user')); -$api->setHost($default_host); -$api->setPassword($args->getArg('password')); -$api->setNamespace($args->getArg('namespace')); +// First, test that the Phabricator configuration is set up correctly. After +// we know this works we'll test any administrative credentials specifically. -try { - queryfx( - $api->getConn('meta_data', $select_database = false), - 'SELECT 1'); -} catch (AphrontQueryException $ex) { - echo phutil_console_format( - "**%s**: %s\n", - 'Unable To Connect', - $ex->getMessage()); - exit(1); +$refs = PhabricatorDatabaseRef::getActiveDatabaseRefs(); +if (!$refs) { + throw new PhutilArgumentUsageException( + pht('No databases are configured.')); } -$workflows = array( - new PhabricatorStorageManagementDatabasesWorkflow(), - new PhabricatorStorageManagementDestroyWorkflow(), - new PhabricatorStorageManagementDumpWorkflow(), - new PhabricatorStorageManagementStatusWorkflow(), - new PhabricatorStorageManagementUpgradeWorkflow(), -); +$host = $args->getArg('host'); +$ref_key = $args->getArg('ref'); +if (($host !== null) || ($ref_key !== null)) { + if ($host && $ref_key) { + throw new PhutilArgumentUsageException( + pht( + 'Use "--host" or "--ref" to select a database, but not both.')); + } + + $refs = PhabricatorDatabaseRef::getActiveDatabaseRefs(); + + $possible_refs = array(); + foreach ($refs as $possible_ref) { + if ($host && ($possible_ref->getHost() == $host)) { + $possible_refs[] = $possible_ref; + break; + } + if ($ref_key && ($possible_ref->getRefKey() == $ref_key)) { + $possible_refs[] = $possible_ref; + break; + } + } + + if (!$possible_refs) { + if ($host) { + throw new PhutilArgumentUsageException( + pht( + 'There is no configured database on host "%s". This command can '. + 'only interact with configured databases.', + $host)); + } else { + throw new PhutilArgumentUsageException( + pht( + 'There is no configured database with ref "%s". This command can '. + 'only interact with configured databases.', + $ref_key)); + } + } + + if (count($possible_refs) > 1) { + throw new PhutilArgumentUsageException( + pht( + 'Host "%s" identifies more than one database. Use "--ref" to select '. + 'a specific database.', + $host)); + } + + $refs = $possible_refs; +} + +$apis = array(); +foreach ($refs as $ref) { + $default_user = $ref->getUser(); + $default_host = $ref->getHost(); + $default_port = $ref->getPort(); + + $test_api = id(new PhabricatorStorageManagementAPI()) + ->setUser($default_user) + ->setHost($default_host) + ->setPort($default_port) + ->setPassword($ref->getPass()) + ->setNamespace($args->getArg('namespace')); + + try { + queryfx( + $test_api->getConn(null), + 'SELECT 1'); + } catch (AphrontQueryException $ex) { + $message = phutil_console_format( + "**%s**\n\n%s\n\n%s\n\n%s\n\n**%s**: %s\n", + pht('MySQL Credentials Not Configured'), + pht( + 'Unable to connect to MySQL using the configured credentials. '. + 'You must configure standard credentials before you can upgrade '. + 'storage. Run these commands to set up credentials:'), + " $ ./bin/config set mysql.host __host__\n". + " $ ./bin/config set mysql.user __username__\n". + " $ ./bin/config set mysql.pass __password__", + pht( + 'These standard credentials are separate from any administrative '. + 'credentials provided to this command with __%s__ or '. + '__%s__, and must be configured correctly before you can proceed.', + '--user', + '--password'), + pht('Raw MySQL Error'), + $ex->getMessage()); + echo phutil_console_wrap($message); + exit(1); + } + + if ($args->getArg('password') === null) { + // This is already a PhutilOpaqueEnvelope. + $password = $ref->getPass(); + } else { + // Put this in a PhutilOpaqueEnvelope. + $password = new PhutilOpaqueEnvelope($args->getArg('password')); + PhabricatorEnv::overrideConfig('mysql.pass', $args->getArg('password')); + } + + $selected_user = $args->getArg('user'); + if ($selected_user === null) { + $selected_user = $default_user; + } + + $api = id(new PhabricatorStorageManagementAPI()) + ->setUser($selected_user) + ->setHost($default_host) + ->setPort($default_port) + ->setPassword($password) + ->setNamespace($args->getArg('namespace')) + ->setDisableUTF8MB4($args->getArg('disable-utf8mb4')); + PhabricatorEnv::overrideConfig('mysql.user', $api->getUser()); + + $ref->setUser($selected_user); + $ref->setPass($password); + + try { + queryfx( + $api->getConn(null), + 'SELECT 1'); + } catch (AphrontQueryException $ex) { + $message = phutil_console_format( + "**%s**\n\n%s\n\n**%s**: %s\n", + pht('Bad Administrative Credentials'), + pht( + 'Unable to connect to MySQL using the administrative credentials '. + 'provided with the __%s__ and __%s__ flags. Check that '. + 'you have entered them correctly.', + '--user', + '--password'), + pht('Raw MySQL Error'), + $ex->getMessage()); + echo phutil_console_wrap($message); + exit(1); + } + + $api->setRef($ref); + $apis[] = $api; +} + +$workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorStorageManagementWorkflow') + ->execute(); $patches = PhabricatorSQLPatchList::buildAllPatches(); foreach ($workflows as $workflow) { - $workflow->setAPI($api); + $workflow->setAPIs($apis); $workflow->setPatches($patches); } diff --git a/scripts/sql/probe.php b/scripts/sql/probe.php deleted file mode 100755 index ac953e6dd1..0000000000 --- a/scripts/sql/probe.php +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env php -establishConnection('r'); -$databases = queryfx_all($conn_r, 'SHOW DATABASES'); -foreach ($databases as $database) { - $name = head($database); - queryfx($conn_r, 'USE %C', $name); - $tables = queryfx_all( - $conn_r, - 'SHOW TABLE STATUS'); - $tables = ipull($tables, null, 'Name'); - $data[$name] = $tables; -} - -$totals = array_fill_keys(array_keys($data), 0); -$overall = 0; - -foreach ($data as $db => $tables) { - foreach ($tables as $table => $info) { - $table_size = $info['Data_length'] + $info['Index_length']; - - $data[$db][$table]['_totalSize'] = $table_size; - $totals[$db] += $table_size; - $overall += $table_size; - } -} - -echo "APPROXIMATE TABLE SIZES\n"; -asort($totals); -foreach ($totals as $db => $size) { - printf("%-32.32s %18s\n", $db, fmt($totals[$db], $overall)); - $data[$db] = isort($data[$db], '_totalSize'); - foreach ($data[$db] as $table => $info) { - printf(" %-28.28s %18s\n", $table, fmt($info['_totalSize'], $overall)); - } -} -printf("%-32.32s %18s\n", 'TOTAL', fmt($overall, $overall)); - -function fmt($n, $o) { - - return sprintf( - '%8.8s MB %5.5s%%', - number_format($n / (1024 * 1024), 1), - sprintf('%3.1f', 100 * ($n / $o))); -} - - diff --git a/scripts/sql/upgrade_schema.php b/scripts/sql/upgrade_schema.php deleted file mode 100755 index 16383493f9..0000000000 --- a/scripts/sql/upgrade_schema.php +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env php -setLogName(pht('SSH Error Log')) + ->setLogPath(PhabricatorEnv::getEnvConfig('log.ssh-error.path')) + ->activateLog(); + +// TODO: For now, this is using "parseParital()", not "parse()". This allows +// the script to accept (and ignore) additional arguments. This preserves +// backward compatibility until installs have time to migrate to the new +// syntax. + +$args = id(new PhutilArgumentParser($argv)) + ->parsePartial( + array( + array( + 'name' => 'sshd-key', + 'param' => 'k', + 'help' => pht( + 'Accepts the "%%k" parameter from "AuthorizedKeysCommand".'), + ), + )); + +$sshd_key = $args->getArg('sshd-key'); + +// NOTE: We are caching a datastructure rather than the flat key file because +// the path on disk to "ssh-exec" is arbitrarily mutable at runtime. See T12397. + +$cache = PhabricatorCaches::getMutableCache(); +$authstruct_key = PhabricatorAuthSSHKeyQuery::AUTHSTRUCT_CACHEKEY; +$authstruct_raw = $cache->getKey($authstruct_key); + +$authstruct = null; + +if ($authstruct_raw !== null && strlen($authstruct_raw)) { + try { + $authstruct = phutil_json_decode($authstruct_raw); + } catch (Exception $ex) { + // Ignore any issues with the cached data; we'll just rebuild the + // structure below. + } +} + +if ($authstruct === null) { + $keys = id(new PhabricatorAuthSSHKeyQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIsActive(true) + ->execute(); + + if (!$keys) { + echo pht('No keys found.')."\n"; + exit(1); + } + + $key_list = array(); + foreach ($keys as $ssh_key) { + $key_argv = array(); + $object = $ssh_key->getObject(); + if ($object instanceof PhabricatorUser) { + $key_argv[] = '--phabricator-ssh-user'; + $key_argv[] = $object->getUsername(); + } else if ($object instanceof AlmanacDevice) { + if (!$ssh_key->getIsTrusted()) { + // If this key is not a trusted device key, don't allow SSH + // authentication. + continue; + } + $key_argv[] = '--phabricator-ssh-device'; + $key_argv[] = $object->getName(); + } else { + // We don't know what sort of key this is; don't permit SSH auth. + continue; + } + + $key_argv[] = '--phabricator-ssh-key'; + $key_argv[] = $ssh_key->getID(); + + // Strip out newlines and other nonsense from the key type and key body. + $type = $ssh_key->getKeyType(); + $type = preg_replace('@[\x00-\x20]+@', '', $type); + if (!strlen($type)) { + continue; + } + + $key = $ssh_key->getKeyBody(); + $key = preg_replace('@[\x00-\x20]+@', '', $key); + if (!strlen($key)) { + continue; + } + + $key_list[] = array( + 'argv' => $key_argv, + 'type' => $type, + 'key' => $key, + ); + } + + $authstruct = array( + 'keys' => $key_list, + ); + + $authstruct_raw = phutil_json_encode($authstruct); + $ttl = phutil_units('24 hours in seconds'); + $cache->setKey($authstruct_key, $authstruct_raw, $ttl); +} + +// If we've received an "--sshd-key" argument and it matches some known key, +// only emit that key. (For now, if the key doesn't match, we'll fall back to +// emitting all keys.) +if ($sshd_key !== null) { + $matches = array(); + foreach ($authstruct['keys'] as $key => $key_struct) { + if ($key_struct['key'] === $sshd_key) { + $matches[$key] = $key_struct; + } + } + + if ($matches) { + $authstruct['keys'] = $matches; + } +} + +$bin = $root.'/bin/ssh-exec'; +$instance = PhabricatorEnv::getEnvConfig('cluster.instance'); + +$lines = array(); +foreach ($authstruct['keys'] as $key_struct) { + $key_argv = $key_struct['argv']; + $key = $key_struct['key']; + $type = $key_struct['type']; + + $cmd = csprintf('%s %Ls', $bin, $key_argv); + + if ($instance !== null && strlen($instance)) { + $cmd = csprintf('PHABRICATOR_INSTANCE=%s %C', $instance, $cmd); + } + + // This is additional escaping for the SSH 'command="..."' string. + $cmd = addcslashes($cmd, '"\\'); + + $options = array( + 'command="'.$cmd.'"', + 'no-port-forwarding', + 'no-X11-forwarding', + 'no-agent-forwarding', + 'no-pty', + ); + $options = implode(',', $options); + + $lines[] = $options.' '.$type.' '.$key."\n"; +} + +$authfile = implode('', $lines); + +echo $authfile; + +exit(0); diff --git a/scripts/ssh/ssh-connect.php b/scripts/ssh/ssh-connect.php new file mode 100755 index 0000000000..c128f3b32f --- /dev/null +++ b/scripts/ssh/ssh-connect.php @@ -0,0 +1,159 @@ +#!/usr/bin/env php +parsePartial( + array( + array( + 'name' => 'port', + 'short' => 'p', + 'param' => pht('port'), + 'help' => pht('Port number to connect to.'), + ), + array( + 'name' => 'options', + 'short' => 'o', + 'param' => pht('options'), + 'repeat' => true, + 'help' => pht('SSH options.'), + ), + )); + +$unconsumed_argv = $args->getUnconsumedArgumentVector(); + +if (function_exists('pcntl_signal')) { + pcntl_signal(SIGTERM, 'ssh_connect_signal'); +} + +function ssh_connect_signal($signo) { + // This is just letting destructors fire. In particular, we want to clean + // up any temporary files we wrote. See T10547. + exit(128 + $signo); +} + +$pattern = array(); +$arguments = array(); + +$pattern[] = 'ssh'; + +$pattern[] = '-o'; +$pattern[] = 'StrictHostKeyChecking=no'; + +// This prevents "known host" failures, and covers for issues where HOME is set +// to something unusual. +$pattern[] = '-o'; +$pattern[] = 'UserKnownHostsFile=/dev/null'; + +$as_device = getenv('PHABRICATOR_AS_DEVICE'); +$credential_phid = getenv('PHABRICATOR_CREDENTIAL'); + +if ($as_device) { + $device = AlmanacKeys::getLiveDevice(); + if (!$device) { + throw new Exception( + pht( + 'Attempting to create an SSH connection that authenticates with '. + 'the current device, but this host is not configured as a cluster '. + 'device.')); + } + + if ($credential_phid) { + throw new Exception( + pht( + 'Attempting to proxy an SSH connection that authenticates with '. + 'both the current device and a specific credential. These options '. + 'are mutually exclusive.')); + } +} + +if ($credential_phid) { + $viewer = PhabricatorUser::getOmnipotentUser(); + $key = PassphraseSSHKey::loadFromPHID($credential_phid, $viewer); + + $pattern[] = '-l %P'; + $arguments[] = $key->getUsernameEnvelope(); + $pattern[] = '-i %P'; + $arguments[] = $key->getKeyfileEnvelope(); +} + +if ($as_device) { + $pattern[] = '-l %R'; + $arguments[] = AlmanacKeys::getClusterSSHUser(); + $pattern[] = '-i %R'; + $arguments[] = AlmanacKeys::getKeyPath('device.key'); +} + +// Subversion passes us a host in the form "domain.com:port", which is not +// valid for normal SSH but which we can parse into a valid "-p" flag. + +$passthru_args = $unconsumed_argv; +$host = array_shift($passthru_args); +$parts = explode(':', $host, 2); +$host = $parts[0]; + +$port = $args->getArg('port'); + +if (!$port) { + if (count($parts) == 2) { + $port = $parts[1]; + } +} + +if ($port) { + $pattern[] = '-p %d'; + $arguments[] = $port; +} + +$options = $args->getArg('options'); +$allowed_ssh_options = array('SendEnv=GIT_PROTOCOL'); + +if (!empty($options)) { + foreach ($options as $option) { + if (array_search($option, $allowed_ssh_options) !== false) { + $pattern[] = '-o %s'; + $arguments[] = $option; + } else { + throw new Exception( + pht( + 'Disallowed ssh option "%s" given with "-o". '. + 'Allowed options are: %s.', + $option, + implode(', ', $allowed_ssh_options))); + } + } +} + +$pattern[] = '--'; + +$pattern[] = '%s'; +$arguments[] = $host; + +foreach ($passthru_args as $passthru_arg) { + $pattern[] = '%s'; + $arguments[] = $passthru_arg; +} + +$pattern = implode(' ', $pattern); +array_unshift($arguments, $pattern); + +$err = newv('PhutilExecPassthru', $arguments) + ->resolve(); + +exit($err); diff --git a/scripts/ssh/ssh-exec.php b/scripts/ssh/ssh-exec.php new file mode 100755 index 0000000000..11e4a3275a --- /dev/null +++ b/scripts/ssh/ssh-exec.php @@ -0,0 +1,349 @@ +#!/usr/bin/env php +setLogName(pht('SSH Error Log')) + ->setLogPath(PhabricatorEnv::getEnvConfig('log.ssh-error.path')) + ->activateLog(); + +$ssh_log = PhabricatorSSHLog::getLog(); + +$request_identifier = Filesystem::readRandomCharacters(12); +$ssh_log->setData( + array( + 'Q' => $request_identifier, + )); + +$args = new PhutilArgumentParser($argv); +$args->setTagline(pht('execute SSH requests')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'phabricator-ssh-user', + 'param' => 'username', + 'help' => pht( + 'If the request authenticated with a user key, the name of the '. + 'user.'), + ), + array( + 'name' => 'phabricator-ssh-device', + 'param' => 'name', + 'help' => pht( + 'If the request authenticated with a device key, the name of the '. + 'device.'), + ), + array( + 'name' => 'phabricator-ssh-key', + 'param' => 'id', + 'help' => pht( + 'The ID of the SSH key which authenticated this request. This is '. + 'used to allow logs to report when specific keys were used, to make '. + 'it easier to manage credentials.'), + ), + array( + 'name' => 'ssh-command', + 'param' => 'command', + 'help' => pht( + 'Provide a command to execute. This makes testing this script '. + 'easier. When running normally, the command is read from the '. + 'environment (%s), which is populated by sshd.', + 'SSH_ORIGINAL_COMMAND'), + ), + )); + +try { + $remote_address = null; + $ssh_client = getenv('SSH_CLIENT'); + if ($ssh_client) { + // This has the format " ". Grab the IP. + $remote_address = head(explode(' ', $ssh_client)); + $ssh_log->setData( + array( + 'r' => $remote_address, + )); + } + + $key_id = $args->getArg('phabricator-ssh-key'); + if ($key_id) { + $ssh_log->setData( + array( + 'k' => $key_id, + )); + } + + $user_name = $args->getArg('phabricator-ssh-user'); + $device_name = $args->getArg('phabricator-ssh-device'); + + $user = null; + $device = null; + $is_cluster_request = false; + + if ($user_name && $device_name) { + throw new Exception( + pht( + 'The %s and %s flags are mutually exclusive. You can not '. + 'authenticate as both a user ("%s") and a device ("%s"). '. + 'Specify one or the other, but not both.', + '--phabricator-ssh-user', + '--phabricator-ssh-device', + $user_name, + $device_name)); + } else if ($user_name !== null && strlen($user_name)) { + $user = id(new PhabricatorPeopleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withUsernames(array($user_name)) + ->executeOne(); + if (!$user) { + throw new Exception( + pht( + 'Invalid username ("%s"). There is no user with this username.', + $user_name)); + } + + id(new PhabricatorAuthSessionEngine()) + ->willServeRequestForUser($user); + } else if ($device_name !== null && strlen($device_name)) { + if (!$remote_address) { + throw new Exception( + pht( + 'Unable to identify remote address from the %s environment '. + 'variable. Device authentication is accepted only from trusted '. + 'sources.', + 'SSH_CLIENT')); + } + + if (!PhabricatorEnv::isClusterAddress($remote_address)) { + throw new Exception( + pht( + 'This request originates from outside of the cluster address range. '. + 'Requests signed with a trusted device key must originate from '. + 'trusted hosts.')); + } + + $device = id(new AlmanacDeviceQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withNames(array($device_name)) + ->executeOne(); + if (!$device) { + throw new Exception( + pht( + 'Invalid device name ("%s"). There is no device with this name.', + $device_name)); + } + + if ($device->isDisabled()) { + throw new Exception( + pht( + 'This request has authenticated as a device ("%s"), but this '. + 'device is disabled.', + $device->getName())); + } + + // We're authenticated as a device, but we're going to read the user out of + // the command below. + $is_cluster_request = true; + } else { + throw new Exception( + pht( + 'This script must be invoked with either the %s or %s flag.', + '--phabricator-ssh-user', + '--phabricator-ssh-device')); + } + + if ($args->getArg('ssh-command')) { + $original_command = $args->getArg('ssh-command'); + } else { + $original_command = getenv('SSH_ORIGINAL_COMMAND'); + } + + $original_argv = id(new PhutilShellLexer()) + ->splitArguments($original_command); + + if ($device) { + // If we're authenticating as a device, the first argument may be a + // "@username" argument to act as a particular user. + $first_argument = head($original_argv); + if (preg_match('/^@/', $first_argument)) { + $act_as_name = array_shift($original_argv); + $act_as_name = substr($act_as_name, 1); + $user = id(new PhabricatorPeopleQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withUsernames(array($act_as_name)) + ->executeOne(); + if (!$user) { + throw new Exception( + pht( + 'Device request identifies an acting user with an invalid '. + 'username ("%s"). There is no user with this username.', + $act_as_name)); + } + } else { + $user = PhabricatorUser::getOmnipotentUser(); + } + } + + if ($user->isOmnipotent()) { + $user_name = 'device/'.$device->getName(); + } else { + $user_name = $user->getUsername(); + } + + $ssh_log->setData( + array( + 'u' => $user_name, + 'P' => $user->getPHID(), + )); + + if (!$device) { + if (!$user->canEstablishSSHSessions()) { + throw new Exception( + pht( + 'Your account ("%s") does not have permission to establish SSH '. + 'sessions. Visit the web interface for more information.', + $user_name)); + } + } + + $workflows = id(new PhutilClassMapQuery()) + ->setAncestorClass('PhabricatorSSHWorkflow') + ->setUniqueMethod('getName') + ->execute(); + + $command_list = array_keys($workflows); + $command_list = implode(', ', $command_list); + + $error_lines = array(); + $error_lines[] = pht( + 'Welcome to %s.', + PlatformSymbols::getPlatformServerName()); + $error_lines[] = pht( + 'You are logged in as %s.', + $user_name); + + if (!$original_argv) { + $error_lines[] = pht( + 'You have not specified a command to run. This means you are requesting '. + 'an interactive shell, but this server does not provide interactive '. + 'shells over SSH.'); + $error_lines[] = pht( + '(Usually, you should run a command like "git clone" or "hg push" '. + 'instead of connecting directly with SSH.)'); + $error_lines[] = pht( + 'Supported commands are: %s.', + $command_list); + + $error_lines = implode("\n\n", $error_lines); + throw new PhutilArgumentUsageException($error_lines); + } + + $log_argv = implode(' ', $original_argv); + $log_argv = id(new PhutilUTF8StringTruncator()) + ->setMaximumCodepoints(128) + ->truncateString($log_argv); + + $ssh_log->setData( + array( + 'C' => $original_argv[0], + 'U' => $log_argv, + )); + + $command = head($original_argv); + + $parseable_argv = $original_argv; + array_unshift($parseable_argv, 'phabricator-ssh-exec'); + + $parsed_args = new PhutilArgumentParser($parseable_argv); + + if (empty($workflows[$command])) { + $error_lines[] = pht( + 'You have specified the command "%s", but that command is not '. + 'supported by this server. As received by this server, your entire '. + 'argument list was:', + $command); + + $error_lines[] = csprintf(' $ ssh ... -- %Ls', $parseable_argv); + + $error_lines[] = pht( + 'Supported commands are: %s.', + $command_list); + + $error_lines = implode("\n\n", $error_lines); + throw new PhutilArgumentUsageException($error_lines); + } + + $workflow = $parsed_args->parseWorkflows($workflows); + $workflow->setSSHUser($user); + $workflow->setOriginalArguments($original_argv); + $workflow->setIsClusterRequest($is_cluster_request); + $workflow->setRequestIdentifier($request_identifier); + + $sock_stdin = fopen('php://stdin', 'r'); + if (!$sock_stdin) { + throw new Exception(pht('Unable to open stdin.')); + } + + $sock_stdout = fopen('php://stdout', 'w'); + if (!$sock_stdout) { + throw new Exception(pht('Unable to open stdout.')); + } + + $sock_stderr = fopen('php://stderr', 'w'); + if (!$sock_stderr) { + throw new Exception(pht('Unable to open stderr.')); + } + + $socket_channel = new PhutilSocketChannel( + $sock_stdin, + $sock_stdout); + $error_channel = new PhutilSocketChannel(null, $sock_stderr); + $metrics_channel = new PhutilMetricsChannel($socket_channel); + $workflow->setIOChannel($metrics_channel); + $workflow->setErrorChannel($error_channel); + + $rethrow = null; + try { + $err = $workflow->execute($parsed_args); + + $metrics_channel->flush(); + $error_channel->flush(); + } catch (Exception $ex) { + $rethrow = $ex; + } + + // Always write this if we got as far as building a metrics channel. + $ssh_log->setData( + array( + 'i' => $metrics_channel->getBytesRead(), + 'o' => $metrics_channel->getBytesWritten(), + )); + + if ($rethrow) { + throw $rethrow; + } +} catch (Exception $ex) { + fwrite(STDERR, "phabricator-ssh-exec: ".$ex->getMessage()."\n"); + $err = 1; +} + +$ssh_log->setData( + array( + 'c' => $err, + 'T' => phutil_microseconds_since($ssh_start_time), + )); + +exit($err); diff --git a/scripts/symbols/clear_repository_symbols.php b/scripts/symbols/clear_repository_symbols.php new file mode 100755 index 0000000000..701034c6cc --- /dev/null +++ b/scripts/symbols/clear_repository_symbols.php @@ -0,0 +1,60 @@ +#!/usr/bin/env php +setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'repository', + 'wildcard' => true, + ), + )); + +$identifiers = $args->getArg('repository'); +if (count($identifiers) !== 1) { + $args->printHelpAndExit(); +} + +$identifier = head($identifiers); +$repository = id(new PhabricatorRepositoryQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIdentifiers($identifiers) + ->executeOne(); + +if (!$repository) { + echo tsprintf( + "%s\n", + pht('Repository "%s" does not exist.', $identifier)); + exit(1); +} + +$input = file_get_contents('php://stdin'); +$normalized = array(); +foreach (explode("\n", trim($input)) as $path) { + // Emulate the behavior of the symbol generation scripts. + $normalized[] = '/'.ltrim($path, './'); +} +$paths = PhabricatorRepositoryCommitChangeParserWorker::lookupOrCreatePaths( + $normalized); + +$symbol = new PhabricatorRepositorySymbol(); +$conn_w = $symbol->establishConnection('w'); + +foreach (array_chunk(array_values($paths), 128) as $chunk) { + queryfx( + $conn_w, + 'DELETE FROM %T WHERE repositoryPHID = %s AND pathID IN (%Ld)', + $symbol->getTableName(), + $repository->getPHID(), + $chunk); +} diff --git a/scripts/symbols/generate_ctags_symbols.php b/scripts/symbols/generate_ctags_symbols.php index f9a65d00ea..e93b0c5cbc 100755 --- a/scripts/symbols/generate_ctags_symbols.php +++ b/scripts/symbols/generate_ctags_symbols.php @@ -1,125 +1,133 @@ #!/usr/bin/env php setSynopsis(<<parseStandardArguments(); + if (ctags_check_executable() == false) { echo phutil_console_format( - "Could not find Exuberant ctags. Make sure it is installed and\n". - "available in executable path.\n\n". - "Exuberant ctags project page: http://ctags.sourceforge.net/\n"); + "%s\n\n%s\n", + pht( + 'Could not find Exuberant Ctags. Make sure it is installed and '. + 'available in executable path.'), + pht( + 'Exuberant Ctags project page: %s', + 'http://ctags.sourceforge.net/')); exit(1); } -if ($argc !== 1 || posix_isatty(STDIN)) { +if (posix_isatty(STDIN)) { echo phutil_console_format( - "usage: find . -type f -name '*.py' | ./generate_ctags_symbols.php\n"); + "%s\n", + pht( + 'Usage: %s', + "find . -type f -name '*.py' | ./generate_ctags_symbols.php")); exit(1); } $input = file_get_contents('php://stdin'); -$input = trim($input); -$input = explode("\n", $input); - $data = array(); $futures = array(); -foreach ($input as $file) { +foreach (explode("\n", trim($input)) as $file) { + if (!strlen($file)) { + continue; + } + $file = Filesystem::readablePath($file); $futures[$file] = ctags_get_parser_future($file); } -foreach (Futures($futures)->limit(8) as $file => $future) { +$futures = new FutureIterator($futures); +foreach ($futures->limit(8) as $file => $future) { $tags = $future->resolve(); $tags = explode("\n", $tags[1]); foreach ($tags as $tag) { - $parts = explode(";", $tag); - // skip lines that we can not parse + $parts = explode(';', $tag); + + // Skip lines that we can not parse. if (count($parts) < 2) { continue; } - // split ctags information + // Split ctags information. $tag_info = explode("\t", $parts[0]); - // split exuberant ctags "extension fields" (additional information) + + // Split exuberant ctags "extension fields" (additional information). $parts[1] = trim($parts[1], "\t \""); $extension_fields = explode("\t", $parts[1]); - // skip lines that we can not parse + // Skip lines that we can not parse. if (count($tag_info) < 3 || count($extension_fields) < 2) { continue; } + // Default context to empty. + $extension_fields[] = ''; list($token, $file_path, $line_num) = $tag_info; - list($type, $language) = $extension_fields; + list($type, $language, $context) = $extension_fields; - // strip "language:" + // Skip lines with tokens containing a space. + if (strpos($token, ' ') !== false) { + continue; + } + + // Strip "language:" $language = substr($language, 9); // To keep consistent with "Separate with commas, for example: php, py" // in Arcanist Project edit form. - $language = str_ireplace("python", "py", $language); - - // also, "normalize" c++ and c# - $language = str_ireplace("c++", "cpp", $language); - $language = str_ireplace("c#", "csharp", $language); - - switch ($type) { - case 'class': - print_symbol($file_path, $line_num, 'class', $token, $language); - break; - case 'function': - print_symbol($file_path, $line_num, 'function', $token, $language); - break; - default: + $language = str_ireplace('python', 'py', $language); + + // Also, "normalize" C++ and C#. + $language = str_ireplace('c++', 'cpp', $language); + $language = str_ireplace('c#', 'cs', $language); + + // Ruby has "singleton method", for example. + $type = substr(str_replace(' ', '_', $type), 0, 12); + + // class:foo, struct:foo, union:foo, enum:foo, ... + $context = last(explode(':', $context, 2)); + + $ignore = array( + 'variable' => true, + ); + if (empty($ignore[$type])) { + print_symbol($file_path, $line_num, $type, $token, $context, $language); } } } -function ctags_get_parser_future($file_path) { - $future = new ExecFuture('ctags -n --fields=Kl -o - %s', - $file_path); +function ctags_get_parser_future($path) { + $future = new ExecFuture('ctags -n --fields=Kls -o - %s', $path); return $future; } function ctags_check_executable() { - $future = new ExecFuture('ctags --version'); - $result = $future->resolve(); - - if (empty($result[1])) { - return false; - } - - return true; + $result = exec_manual('ctags --version'); + return !empty($result[1]); } -function print_symbol($file, $line_num, $type, $token, $language) { - // get rid of relative path +function print_symbol($file, $line_num, $type, $token, $context, $language) { + // Get rid of relative path. $file = explode('/', $file); - if ($file[0] == '.' || $file[0] == "..") { + if ($file[0] == '.' || $file[0] == '..') { array_shift($file); } - $file = '/' . implode('/', $file); + $file = '/'.implode('/', $file); $parts = array( + $context, $token, $type, strtolower($language), diff --git a/scripts/symbols/generate_php_symbols.php b/scripts/symbols/generate_php_symbols.php index 39125bea71..af87d580d8 100755 --- a/scripts/symbols/generate_php_symbols.php +++ b/scripts/symbols/generate_php_symbols.php @@ -1,54 +1,57 @@ #!/usr/bin/env php setSynopsis(<<parseStandardArguments(); + +if (posix_isatty(STDIN)) { echo phutil_console_format( - "usage: find . -type f -name '*.php' | ./generate_php_symbols.php\n"); + "%s\n", + pht( + 'Usage: %s', + "find . -type f -name '*.php' | ./generate_php_symbols.php")); exit(1); } $input = file_get_contents('php://stdin'); -$input = trim($input); -$input = explode("\n", $input); - $data = array(); $futures = array(); -foreach ($input as $file) { +foreach (explode("\n", trim($input)) as $file) { + if (!strlen($file)) { + continue; + } + $file = Filesystem::readablePath($file); $data[$file] = Filesystem::readFile($file); - $futures[$file] = xhpast_get_parser_future($data[$file]); + $futures[$file] = PhutilXHPASTBinary::getParserFuture($data[$file]); } -foreach (Futures($futures)->limit(8) as $file => $future) { +$futures = new FutureIterator($futures); +foreach ($futures->limit(8) as $file => $future) { $tree = XHPASTTree::newFromDataAndResolvedExecFuture( $data[$file], $future->resolve()); $root = $tree->getRootNode(); + $scopes = array(); $functions = $root->selectDescendantsOfType('n_FUNCTION_DECLARATION'); foreach ($functions as $function) { $name = $function->getChildByIndex(2); + // Skip anonymous functions. + if (!$name->getConcreteString()) { + continue; + } print_symbol($file, 'function', $name); } @@ -56,21 +59,68 @@ foreach ($classes as $class) { $class_name = $class->getChildByIndex(1); print_symbol($file, 'class', $class_name); + $scopes[] = array($class, $class_name); } $interfaces = $root->selectDescendantsOfType('n_INTERFACE_DECLARATION'); foreach ($interfaces as $interface) { $interface_name = $interface->getChildByIndex(1); - print_symbol($file, 'interface', $interface_name); + // We don't differentiate classes and interfaces in highlighters. + print_symbol($file, 'class', $interface_name); + $scopes[] = array($interface, $interface_name); + } + + $constants = $root->selectDescendantsOfType('n_CONSTANT_DECLARATION_LIST'); + foreach ($constants as $constant_list) { + foreach ($constant_list->getChildren() as $constant) { + $constant_name = $constant->getChildByIndex(0); + print_symbol($file, 'constant', $constant_name); + } + } + + foreach ($scopes as $scope) { + // This prints duplicate symbols in the case of nested classes. + // Luckily, PHP doesn't allow those. + list($class, $class_name) = $scope; + + $consts = $class->selectDescendantsOfType( + 'n_CLASS_CONSTANT_DECLARATION_LIST'); + foreach ($consts as $const_list) { + foreach ($const_list->getChildren() as $const) { + $const_name = $const->getChildByIndex(0); + print_symbol($file, 'class_const', $const_name, $class_name); + } + } + + $members = $class->selectDescendantsOfType( + 'n_CLASS_MEMBER_DECLARATION_LIST'); + foreach ($members as $member_list) { + foreach ($member_list->getChildren() as $member) { + if ($member->getTypeName() == 'n_CLASS_MEMBER_MODIFIER_LIST') { + continue; + } + $member_name = $member->getChildByIndex(0); + print_symbol($file, 'member', $member_name, $class_name); + } + } + + $methods = $class->selectDescendantsOfType('n_METHOD_DECLARATION'); + foreach ($methods as $method) { + $method_name = $method->getChildByIndex(2); + print_symbol($file, 'method', $method_name, $class_name); + } } } -function print_symbol($file, $type, $token) { +function print_symbol($file, $type, XHPASTNode $node, $context = null) { $parts = array( - $token->getConcreteString(), + $context ? $context->getConcreteString() : '', + // Variable tokens are `$name`, not just `name`, so strip the "$"" off of + // class field names + ltrim($node->getConcreteString(), '$'), $type, 'php', - $token->getLineNumber(), + $node->getLineNumber(), '/'.ltrim($file, './'), ); echo implode(' ', $parts)."\n"; diff --git a/scripts/symbols/import_project_symbols.php b/scripts/symbols/import_project_symbols.php deleted file mode 100755 index 8aef684a40..0000000000 --- a/scripts/symbols/import_project_symbols.php +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env php -setSynopsis(<<parseStandardArguments(); -$args->parse( - array( - array( - 'name' => 'ignore-duplicates', - 'help' => 'Ignore duplicate symbols, choosing one at random. By '. - 'default, this script throws if given duplicate '. - 'symbols.', - ), - array( - 'name' => 'more', - 'wildcard' => true, - ), - )); - -$ignore_duplicates = $args->getArg('ignore-duplicates'); -$more = $args->getArg('more'); -if (count($more) !== 1) { - $args->printHelpAndExit(); -} - -$project_name = head($more); -$project = id(new PhabricatorRepositoryArcanistProject())->loadOneWhere( - 'name = %s', - $project_name); - -if (!$project) { - // TODO: Provide a less silly way to do this explicitly, or just do it right - // here. - echo "Project '{$project_name}' is unknown. Upload a diff to implicitly ". - "create it.\n"; - exit(1); -} - -echo "Parsing input from stdin...\n"; -$input = file_get_contents('php://stdin'); -$input = trim($input); -$input = explode("\n", $input); - -$map = array(); -$symbols = array(); -foreach ($input as $key => $line) { - $line_no = $key + 1; - $matches = null; - $ok = preg_match('/^([^ ]+) ([^ ]+) ([^ ]+) (\d+) (.*)$/', $line, $matches); - if (!$ok) { - throw new Exception( - "Line #{$line_no} of input is invalid. Expected five space-delimited ". - "fields: symbol name, symbol type, symbol language, line number, path. ". - "For example:\n\n". - "idx function php 13 /path/to/some/file.php\n\n". - "Actual line was:\n\n". - "{$line}"); - } - list($all, $name, $type, $lang, $line_number, $path) = $matches; - - if (isset($map[$name][$type][$lang])) { - if ($ignore_duplicates) { - echo "Ignoring duplicate definition of '{$name}' on line {$line_no}.\n"; - } else { - $previous = $map[$name][$type][$lang] + 1; - throw new Exception( - "Line #{$line_no} of input is invalid. It specifies a duplicate ". - "symbol (same name, language, and type) which has already been ". - "defined elsewhere. You must preprocess the symbol list to remove ". - "duplicates and choose exactly one master definition for each ". - "symbol, or specify --ignore-duplicates. This symbol was previously ". - "defined on line #{$previous}.\n\n". - "Line #{$line_no}:\n". - $line."\n\n". - "Line #{$previous}:\n". - $input[$previous - 1]); - } - } else { - $map[$name][$type][$lang] = $key; - } - - if (strlen($name) > 128) { - throw new Exception( - "Symbol name '{$name}' defined on line #{$line_no} is too long, maximum ". - "symbol name length is 128 characters."); - } - - if (strlen($type) > 12) { - throw new Exception( - "Symbol type '{$type}' defined on line #{$line_no} is too long, maximum ". - "symbol type length is 12 characters."); - } - - if (strlen($lang) > 32) { - throw new Exception( - "Symbol language '{$lang}' defined on line #{$line_no} is too long, ". - "maximum symbol language length is 32 characters."); - } - - if (!strlen($path) || $path[0] != 0) { - throw new Exception( - "Path '{$path}' defined on line #{$line_no} is invalid. Paths should be ". - "begin with '/' and specify a path from the root of the project, like ". - "'/src/utils/utils.php'."); - } - - $symbols[] = array( - 'name' => $name, - 'type' => $type, - 'lang' => $lang, - 'line' => $line_number, - 'path' => $path, - ); -} - -echo "Looking up path IDs...\n"; -$path_map = PhabricatorRepositoryCommitChangeParserWorker::lookupOrCreatePaths( - ipull($symbols, 'path')); - -$symbol = new PhabricatorRepositorySymbol(); -$conn_w = $symbol->establishConnection('w'); - -echo "Preparing queries...\n"; -$sql = array(); -foreach ($symbols as $dict) { - $sql[] = qsprintf( - $conn_w, - '(%d, %s, %s, %s, %d, %d)', - $project->getID(), - $dict['name'], - $dict['type'], - $dict['lang'], - $dict['line'], - $path_map[$dict['path']]); -} - -echo "Purging old symbols...\n"; -queryfx( - $conn_w, - 'DELETE FROM %T WHERE arcanistProjectID = %d', - $symbol->getTableName(), - $project->getID()); - -echo "Loading ".number_format(count($sql))." symbols...\n"; -foreach (array_chunk($sql, 128) as $chunk) { - queryfx( - $conn_w, - 'INSERT INTO %T - (arcanistProjectID, symbolName, symbolType, symbolLanguage, lineNumber, - pathID) VALUES %Q', - $symbol->getTableName(), - implode(', ', $chunk)); -} - -echo "Done.\n"; diff --git a/scripts/symbols/import_repository_symbols.php b/scripts/symbols/import_repository_symbols.php new file mode 100755 index 0000000000..24a0624d64 --- /dev/null +++ b/scripts/symbols/import_repository_symbols.php @@ -0,0 +1,231 @@ +#!/usr/bin/env php +setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'no-purge', + 'help' => pht( + 'Do not clear all symbols for this repository before '. + 'uploading new symbols. Useful for incremental updating.'), + ), + array( + 'name' => 'ignore-errors', + 'help' => pht( + "If a line can't be parsed, ignore that line and ". + "continue instead of exiting."), + ), + array( + 'name' => 'max-transaction', + 'param' => 'num-syms', + 'default' => '100000', + 'help' => pht( + 'Maximum number of symbols that should '. + 'be part of a single transaction.'), + ), + array( + 'name' => 'repository', + 'wildcard' => true, + ), + )); + +$identifiers = $args->getArg('repository'); +if (count($identifiers) !== 1) { + $args->printHelpAndExit(); +} + +$identifier = head($identifiers); +$repository = id(new PhabricatorRepositoryQuery()) + ->setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIdentifiers($identifiers) + ->executeOne(); + +if (!$repository) { + echo tsprintf( + "%s\n", + pht('Repository "%s" does not exist.', $identifier)); + exit(1); +} + +if (!function_exists('posix_isatty') || posix_isatty(STDIN)) { + echo pht('Parsing input from stdin...'), "\n"; +} + +$input = file_get_contents('php://stdin'); +$input = trim($input); +$input = explode("\n", $input); + + +function commit_symbols( + array $symbols, + PhabricatorRepository $repository, + $no_purge) { + + echo pht('Looking up path IDs...'), "\n"; + $path_map = + PhabricatorRepositoryCommitChangeParserWorker::lookupOrCreatePaths( + ipull($symbols, 'path')); + + $symbol = new PhabricatorRepositorySymbol(); + $conn_w = $symbol->establishConnection('w'); + + echo pht('Preparing queries...'), "\n"; + $sql = array(); + foreach ($symbols as $dict) { + $sql[] = qsprintf( + $conn_w, + '(%s, %s, %s, %s, %s, %d, %d)', + $repository->getPHID(), + $dict['ctxt'], + $dict['name'], + $dict['type'], + $dict['lang'], + $dict['line'], + $path_map[$dict['path']]); + } + + if (!$no_purge) { + echo pht('Purging old symbols...'), "\n"; + queryfx( + $conn_w, + 'DELETE FROM %T WHERE repositoryPHID = %s', + $symbol->getTableName(), + $repository->getPHID()); + } + + echo pht('Loading %s symbols...', phutil_count($sql)), "\n"; + foreach (array_chunk($sql, 128) as $chunk) { + queryfx( + $conn_w, + 'INSERT INTO %T + (repositoryPHID, symbolContext, symbolName, symbolType, + symbolLanguage, lineNumber, pathID) VALUES %LQ', + $symbol->getTableName(), + $chunk); + } +} + +function check_string_value($value, $field_name, $line_no, $max_length) { + if (strlen($value) > $max_length) { + throw new Exception( + pht( + "%s '%s' defined on line #%d is too long, ". + "maximum %s length is %d characters.", + $field_name, + $value, + $line_no, + $field_name, + $max_length)); + } + + if (!phutil_is_utf8_with_only_bmp_characters($value)) { + throw new Exception( + pht( + "%s '%s' defined on line #%d is not a valid ". + "UTF-8 string, it should contain only UTF-8 characters.", + $field_name, + $value, + $line_no)); + } +} + +$no_purge = $args->getArg('no-purge'); +$symbols = array(); +foreach ($input as $key => $line) { + try { + $line_no = $key + 1; + $matches = null; + $ok = preg_match( + '/^((?P[^ ]+)? )?(?P[^ ]+) (?P[^ ]+) '. + '(?P[^ ]+) (?P\d+) (?P.*)$/', + $line, + $matches); + if (!$ok) { + throw new Exception( + pht( + "Line #%d of input is invalid. Expected five or six space-delimited ". + "fields: maybe symbol context, symbol name, symbol type, symbol ". + "language, line number, path. For example:\n\n%s\n\n". + "Actual line was:\n\n%s", + $line_no, + 'idx function php 13 /path/to/some/file.php', + $line)); + } + if (empty($matches['context'])) { + $matches['context'] = ''; + } + $context = $matches['context']; + $name = $matches['name']; + $type = $matches['type']; + $lang = $matches['lang']; + $line_number = $matches['line']; + $path = $matches['path']; + + check_string_value($context, pht('Symbol context'), $line_no, 128); + check_string_value($name, pht('Symbol name'), $line_no, 128); + check_string_value($type, pht('Symbol type'), $line_no, 12); + check_string_value($lang, pht('Symbol language'), $line_no, 32); + check_string_value($path, pht('Path'), $line_no, 512); + + if (!strlen($path) || $path[0] != '/') { + throw new Exception( + pht( + "Path '%s' defined on line #%d is invalid. Paths should begin with ". + "'%s' and specify a path from the root of the project, like '%s'.", + $path, + $line_no, + '/', + '/src/utils/utils.php')); + } + + $symbols[] = array( + 'ctxt' => $context, + 'name' => $name, + 'type' => $type, + 'lang' => $lang, + 'line' => $line_number, + 'path' => $path, + ); + } catch (Exception $e) { + if ($args->getArg('ignore-errors')) { + continue; + } else { + throw $e; + } + } + + if (count($symbols) >= $args->getArg('max-transaction')) { + try { + echo pht( + "Committing %s symbols...\n", + new PhutilNumber($args->getArg('max-transaction'))); + commit_symbols($symbols, $repository, $no_purge); + $no_purge = true; + unset($symbols); + $symbols = array(); + } catch (Exception $e) { + if ($args->getArg('ignore-errors')) { + continue; + } else { + throw $e; + } + } + } +} + +if (count($symbols)) { + commit_symbols($symbols, $repository, $no_purge); +} + +echo pht('Done.')."\n"; diff --git a/scripts/user/account_admin.php b/scripts/user/account_admin.php deleted file mode 100755 index 52c09f2781..0000000000 --- a/scripts/user/account_admin.php +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env php -loadOneWhere( - 'username = %s', - $username); - -if (!$user) { - $original = new PhabricatorUser(); - - echo "There is no existing user account '{$username}'.\n"; - $ok = phutil_console_confirm( - "Do you want to create a new '{$username}' account?", - $default_no = false); - if (!$ok) { - echo "Cancelled.\n"; - exit(1); - } - $user = new PhabricatorUser(); - $user->setUsername($username); - - $is_new = true; -} else { - $original = clone $user; - - echo "There is an existing user account '{$username}'.\n"; - $ok = phutil_console_confirm( - "Do you want to edit the existing '{$username}' account?", - $default_no = false); - if (!$ok) { - echo "Cancelled.\n"; - exit(1); - } - - $is_new = false; -} - -$user_realname = $user->getRealName(); -if (strlen($user_realname)) { - $realname_prompt = ' ['.$user_realname.']'; -} else { - $realname_prompt = ''; -} -$realname = nonempty( - phutil_console_prompt("Enter user real name{$realname_prompt}:"), - $user_realname); -$user->setRealName($realname); - -// When creating a new user we prompt for an email address; when editing an -// existing user we just skip this because it would be quite involved to provide -// a reasonable CLI interface for editing multiple addresses and managing email -// verification and primary addresses. - -$new_email = null; -if ($is_new) { - do { - $email = phutil_console_prompt("Enter user email address:"); - $duplicate = id(new PhabricatorUserEmail())->loadOneWhere( - 'address = %s', - $email); - if ($duplicate) { - echo "ERROR: There is already a user with that email address. ". - "Each user must have a unique email address.\n"; - } else { - break; - } - } while (true); - - $new_email = $email; -} - -$changed_pass = false; -// This disables local echo, so the user's password is not shown as they type -// it. -phutil_passthru('stty -echo'); -$password = phutil_console_prompt( - "Enter a password for this user [blank to leave unchanged]:"); -phutil_passthru('stty echo'); -if (strlen($password)) { - $changed_pass = $password; -} - -$is_admin = $user->getIsAdmin(); -$set_admin = phutil_console_confirm( - 'Should this user be an administrator?', - $default_no = !$is_admin); - -echo "\n\nACCOUNT SUMMARY\n\n"; -$tpl = "%12s %-30s %-30s\n"; -printf($tpl, null, 'OLD VALUE', 'NEW VALUE'); -printf($tpl, 'Username', $original->getUsername(), $user->getUsername()); -printf($tpl, 'Real Name', $original->getRealName(), $user->getRealName()); -if ($new_email) { - printf($tpl, 'Email', '', $new_email); -} -printf($tpl, 'Password', null, - ($changed_pass !== false) - ? 'Updated' - : 'Unchanged'); - -printf( - $tpl, - 'Admin', - $original->getIsAdmin() ? 'Y' : 'N', - $user->getIsAdmin() ? 'Y' : 'N'); - -echo "\n"; - -if (!phutil_console_confirm("Save these changes?", $default_no = false)) { - echo "Cancelled.\n"; - exit(1); -} - -$user->openTransaction(); - - $editor = new PhabricatorUserEditor(); - - // TODO: This is wrong, but we have a chicken-and-egg problem when you use - // this script to create the first user. - $editor->setActor($user); - - if ($new_email) { - $email = id(new PhabricatorUserEmail()) - ->setAddress($new_email) - ->setIsVerified(1); - - $editor->createNewUser($user, $email); - } else { - $editor->updateUser($user); - } - - $editor->makeAdminUser($user, $set_admin); - - if ($changed_pass !== false) { - $editor->changePassword($user, $changed_pass); - } - -$user->saveTransaction(); - -echo "Saved changes.\n"; diff --git a/scripts/user/add_user.php b/scripts/user/add_user.php deleted file mode 100755 index a8b22f6fe8..0000000000 --- a/scripts/user/add_user.php +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env php - \n"; - exit(1); -} - -$username = $argv[1]; -$email = $argv[2]; -$realname = $argv[3]; -$admin = $argv[4]; - -$admin = id(new PhabricatorUser())->loadOneWhere( - 'username = %s', - $argv[4]); -if (!$admin) { - throw new Exception( - "Admin user must be the username of a valid Phabricator account, used ". - "to send the new user a welcome email."); -} - -$existing_user = id(new PhabricatorUser())->loadOneWhere( - 'username = %s', - $username); -if ($existing_user) { - throw new Exception( - "There is already a user with the username '{$username}'!"); -} - -$existing_email = id(new PhabricatorUserEmail())->loadOneWhere( - 'address = %s', - $email); -if ($existing_email) { - throw new Exception( - "There is already a user with the email '{$email}'!"); -} - -$user = new PhabricatorUser(); -$user->setUsername($username); -$user->setRealname($realname); - -$email_object = id(new PhabricatorUserEmail()) - ->setAddress($email) - ->setIsVerified(1); - -id(new PhabricatorUserEditor()) - ->setActor($admin) - ->createNewUser($user, $email_object); - -$user->sendWelcomeEmail($admin); - -echo "Created user '{$username}' (realname='{$realname}', email='{$email}').\n"; diff --git a/scripts/util/add_macro.php b/scripts/util/add_macro.php index cd35588bd5..03566cfb76 100755 --- a/scripts/util/add_macro.php +++ b/scripts/util/add_macro.php @@ -1,27 +1,11 @@ #!/usr/bin/env php setTagline('load files as image macros'); +$args->setTagline(pht('load files as image macros')); $args->setSynopsis(<< 'as', 'param' => 'name', - 'help' => 'Use a specific name instead of the first part of the image '. - 'name.', + 'help' => pht( + 'Use a specific name instead of the first part of the image name.'), ), array( 'name' => 'more', @@ -61,13 +45,14 @@ 'name = %s', $name); if ($existing) { - throw new Exception("A macro already exists with the name '{$name}'!"); + throw new Exception(pht("A macro already exists with the name '%s'!", $name)); } $file = PhabricatorFile::newFromFileData( $data, array( 'name' => basename($path), + 'canCDN' => true, )); $macro = id(new PhabricatorFileImageMacro()) @@ -77,4 +62,4 @@ $id = $file->getID(); -echo "Added macro '{$name}' (F{$id}).\n"; +echo pht("Added macro '%s' (%s).", $name, "F{$id}")."\n"; diff --git a/scripts/util/emit_test_event.php b/scripts/util/emit_test_event.php new file mode 100755 index 0000000000..c8502d0fe6 --- /dev/null +++ b/scripts/util/emit_test_event.php @@ -0,0 +1,41 @@ +#!/usr/bin/env php +setTagline(pht('emit a test event')); +$args->setSynopsis(<<parseStandardArguments(); +$args->parse( + array( + array( + 'name' => 'listen', + 'param' => 'listener', + 'repeat' => true, + ), + )); + +$console = PhutilConsole::getConsole(); +foreach ($args->getArg('listen') as $listener) { + $console->writeOut("%s\n", pht("Installing '%s'...", $listener)); + newv($listener, array())->register(); +} + + +$console->writeOut("%s\n", pht('Emitting event...')); + +PhutilEventEngine::dispatchEvent( + new PhabricatorEvent( + PhabricatorEventType::TYPE_TEST_DIDRUNTEST, + array( + 'time' => time(), + ))); + +$console->writeOut("%s\n", pht('Done.')); +exit(0); diff --git a/scripts/util/purge_cache.php b/scripts/util/purge_cache.php deleted file mode 100755 index 45c91040c1..0000000000 --- a/scripts/util/purge_cache.php +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env php -establishConnection('w'), - 'DELETE FROM %T WHERE id IN (%Ld)', - DifferentialChangeset::TABLE_CACHE, - $changesets); - } else { - echo "Purging changeset cache...\n"; - queryfx( - $table->establishConnection('w'), - 'TRUNCATE TABLE %T', - DifferentialChangeset::TABLE_CACHE); - } - echo "Done.\n"; -} - -if ($purge_differential) { - echo "Purging Differential comment cache...\n"; - $table = new DifferentialComment(); - queryfx( - $table->establishConnection('w'), - 'UPDATE %T SET cache = NULL', - $table->getTableName()); - echo "Purging Differential inline comment cache...\n"; - $table = new DifferentialInlineComment(); - queryfx( - $table->establishConnection('w'), - 'UPDATE %T SET cache = NULL', - $table->getTableName()); - echo "Done.\n"; -} - -if ($purge_maniphest) { - echo "Purging Maniphest comment cache...\n"; - $table = new ManiphestTransaction(); - queryfx( - $table->establishConnection('w'), - 'UPDATE %T SET cache = NULL', - $table->getTableName()); - echo "Done.\n"; -} - -echo "Ok, caches purged.\n"; - -function usage($message) { - echo "Usage Error: {$message}"; - echo "\n\n"; - echo "Run 'purge_cache.php --help' for detailed help.\n"; - exit(1); -} - -function help() { - $help = << - array( - 'hash' => 'f7cb4abeb73245fea4098a02fd784653', - 'uri' => '/res/f7cb4abe/rsrc/image/apps.png', - 'disk' => '/rsrc/image/apps.png', - 'type' => 'png', - ), - '/rsrc/image/avatar.png' => - array( - 'hash' => '1c5f255071537f05406adee86717ff27', - 'uri' => '/res/1c5f2550/rsrc/image/avatar.png', - 'disk' => '/rsrc/image/avatar.png', - 'type' => 'png', - ), - '/rsrc/image/credit_cards.png' => - array( - 'hash' => '681448de424ea159b6ea68af04c046ae', - 'uri' => '/res/681448de/rsrc/image/credit_cards.png', - 'disk' => '/rsrc/image/credit_cards.png', - 'type' => 'png', - ), - '/rsrc/image/custom/example_facebook.png' => - array( - 'hash' => '062911a848dd7b58159d4184488ecac4', - 'uri' => '/res/062911a8/rsrc/image/custom/example_facebook.png', - 'disk' => '/rsrc/image/custom/example_facebook.png', - 'type' => 'png', - ), - '/rsrc/image/custom/example_rainbow.png' => - array( - 'hash' => '7af08c16d969a2d63b4acdbd5cee2e8f', - 'uri' => '/res/7af08c16/rsrc/image/custom/example_rainbow.png', - 'disk' => '/rsrc/image/custom/example_rainbow.png', - 'type' => 'png', - ), - '/rsrc/image/custom/example_template.png' => - array( - 'hash' => '9971fe1adb16682a18f9b588c4fc051b', - 'uri' => '/res/9971fe1a/rsrc/image/custom/example_template.png', - 'disk' => '/rsrc/image/custom/example_template.png', - 'type' => 'png', - ), - '/rsrc/image/grippy_texture.png' => - array( - 'hash' => 'a8945e12ceeaddd5b491a8d81cfa19c1', - 'uri' => '/res/a8945e12/rsrc/image/grippy_texture.png', - 'disk' => '/rsrc/image/grippy_texture.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/arrow_branch.png' => - array( - 'hash' => 'f27b67520766e3d971722bcff703f3a8', - 'uri' => '/res/f27b6752/rsrc/image/icon/fatcow/arrow_branch.png', - 'disk' => '/rsrc/image/icon/fatcow/arrow_branch.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/arrow_merge.png' => - array( - 'hash' => 'c4bd97f3b1257439e2123ef69d2194d0', - 'uri' => '/res/c4bd97f3/rsrc/image/icon/fatcow/arrow_merge.png', - 'disk' => '/rsrc/image/icon/fatcow/arrow_merge.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/bullet_black.png' => - array( - 'hash' => '718f9c560a13766796f1be7dfaadeeab', - 'uri' => '/res/718f9c56/rsrc/image/icon/fatcow/bullet_black.png', - 'disk' => '/rsrc/image/icon/fatcow/bullet_black.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/bullet_orange.png' => - array( - 'hash' => 'c3bf91b65baacb27f2af143ab9180119', - 'uri' => '/res/c3bf91b6/rsrc/image/icon/fatcow/bullet_orange.png', - 'disk' => '/rsrc/image/icon/fatcow/bullet_orange.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/bullet_red.png' => - array( - 'hash' => '00273e4aa6ea3de630295610d6c9560c', - 'uri' => '/res/00273e4a/rsrc/image/icon/fatcow/bullet_red.png', - 'disk' => '/rsrc/image/icon/fatcow/bullet_red.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/calendar_edit.png' => - array( - 'hash' => 'de249c0f4f37bf5b2c69ff39ec5573fb', - 'uri' => '/res/de249c0f/rsrc/image/icon/fatcow/calendar_edit.png', - 'disk' => '/rsrc/image/icon/fatcow/calendar_edit.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_blue.png' => - array( - 'hash' => '75a080492f900fbe489e4b27e403962b', - 'uri' => '/res/75a08049/rsrc/image/icon/fatcow/flag_blue.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_blue.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_finish.png' => - array( - 'hash' => '4af11fc7fab8e4610cbc3c88a02d4f78', - 'uri' => '/res/4af11fc7/rsrc/image/icon/fatcow/flag_finish.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_finish.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_ghost.png' => - array( - 'hash' => '14c9f30a37b43f276f27a27a924bf02d', - 'uri' => '/res/14c9f30a/rsrc/image/icon/fatcow/flag_ghost.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_ghost.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_green.png' => - array( - 'hash' => 'fed01374cd396cb774872762dcc447e1', - 'uri' => '/res/fed01374/rsrc/image/icon/fatcow/flag_green.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_green.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_orange.png' => - array( - 'hash' => '88008cb8bb99761a37e5a743e2455aeb', - 'uri' => '/res/88008cb8/rsrc/image/icon/fatcow/flag_orange.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_orange.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_pink.png' => - array( - 'hash' => '2f199f06ffc3dfc81b7561a057e0bc33', - 'uri' => '/res/2f199f06/rsrc/image/icon/fatcow/flag_pink.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_pink.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_purple.png' => - array( - 'hash' => '16358629dc86c39550b575586eb5df80', - 'uri' => '/res/16358629/rsrc/image/icon/fatcow/flag_purple.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_purple.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_red.png' => - array( - 'hash' => '210c28b4d93c439a499f5814f5e05772', - 'uri' => '/res/210c28b4/rsrc/image/icon/fatcow/flag_red.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_red.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/flag_yellow.png' => - array( - 'hash' => 'bdfd73744a80bb80329ae50bc8a5f962', - 'uri' => '/res/bdfd7374/rsrc/image/icon/fatcow/flag_yellow.png', - 'disk' => '/rsrc/image/icon/fatcow/flag_yellow.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/folder.png' => - array( - 'hash' => '25e46cf9d210dde2242332296f79938c', - 'uri' => '/res/25e46cf9/rsrc/image/icon/fatcow/folder.png', - 'disk' => '/rsrc/image/icon/fatcow/folder.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/folder_go.png' => - array( - 'hash' => 'ba922ff7959309f51a14cb7ed5124d8b', - 'uri' => '/res/ba922ff7/rsrc/image/icon/fatcow/folder_go.png', - 'disk' => '/rsrc/image/icon/fatcow/folder_go.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/key_question.png' => - array( - 'hash' => '530a6448a4b91edec091a9292ccfd3d9', - 'uri' => '/res/530a6448/rsrc/image/icon/fatcow/key_question.png', - 'disk' => '/rsrc/image/icon/fatcow/key_question.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/link.png' => - array( - 'hash' => 'be1bea49b216548433014f3324902928', - 'uri' => '/res/be1bea49/rsrc/image/icon/fatcow/link.png', - 'disk' => '/rsrc/image/icon/fatcow/link.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/page_white_link.png' => - array( - 'hash' => '1cfbad14412bda6c6f132dcc7c8725fd', - 'uri' => '/res/1cfbad14/rsrc/image/icon/fatcow/page_white_link.png', - 'disk' => '/rsrc/image/icon/fatcow/page_white_link.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/page_white_put.png' => - array( - 'hash' => 'bb7308aa5ac40137a8262da395a267fd', - 'uri' => '/res/bb7308aa/rsrc/image/icon/fatcow/page_white_put.png', - 'disk' => '/rsrc/image/icon/fatcow/page_white_put.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/page_white_text.png' => - array( - 'hash' => 'e47d590b626f617fb7d1d44e96e8fd11', - 'uri' => '/res/e47d590b/rsrc/image/icon/fatcow/page_white_text.png', - 'disk' => '/rsrc/image/icon/fatcow/page_white_text.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/conduit.png' => - array( - 'hash' => '1cae0656580aa3cd0b54b9d98306b1b9', - 'uri' => '/res/1cae0656/rsrc/image/icon/fatcow/source/conduit.png', - 'disk' => '/rsrc/image/icon/fatcow/source/conduit.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/email.png' => - array( - 'hash' => '93bdb3e168da1ed68f50c42125729d4e', - 'uri' => '/res/93bdb3e1/rsrc/image/icon/fatcow/source/email.png', - 'disk' => '/rsrc/image/icon/fatcow/source/email.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/fax.png' => - array( - 'hash' => 'd7dedf229841f2d041b347afd881596f', - 'uri' => '/res/d7dedf22/rsrc/image/icon/fatcow/source/fax.png', - 'disk' => '/rsrc/image/icon/fatcow/source/fax.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/mobile.png' => - array( - 'hash' => '786e7146d1e7d7318baf76c9d2baad97', - 'uri' => '/res/786e7146/rsrc/image/icon/fatcow/source/mobile.png', - 'disk' => '/rsrc/image/icon/fatcow/source/mobile.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/tablet.png' => - array( - 'hash' => '374cd40e4965be6b2fbdef4059d0ca05', - 'uri' => '/res/374cd40e/rsrc/image/icon/fatcow/source/tablet.png', - 'disk' => '/rsrc/image/icon/fatcow/source/tablet.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/source/web.png' => - array( - 'hash' => 'f4882a8f5619ba505ca033f72a340635', - 'uri' => '/res/f4882a8f/rsrc/image/icon/fatcow/source/web.png', - 'disk' => '/rsrc/image/icon/fatcow/source/web.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/default160x120.png' => - array( - 'hash' => '1b52ebd1fe0eee3ed0abfc382991b265', - 'uri' => '/res/1b52ebd1/rsrc/image/icon/fatcow/thumbnails/default160x120.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/default160x120.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/default60x45.png' => - array( - 'hash' => '048d851d8d1daad4754e891e734c1899', - 'uri' => '/res/048d851d/rsrc/image/icon/fatcow/thumbnails/default60x45.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/default60x45.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/image160x120.png' => - array( - 'hash' => '434acbd8dbbc2da9f09f6205a396eba1', - 'uri' => '/res/434acbd8/rsrc/image/icon/fatcow/thumbnails/image160x120.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/image160x120.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/image60x45.png' => - array( - 'hash' => '29f7872dc53588fe0b8f0b330c7ee23a', - 'uri' => '/res/29f7872d/rsrc/image/icon/fatcow/thumbnails/image60x45.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/image60x45.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png' => - array( - 'hash' => '39d2e22541658a3472ba41ae2fa548e5', - 'uri' => '/res/39d2e225/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf160x120.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png' => - array( - 'hash' => 'b3572e9317cbed5184d12bdfabed2727', - 'uri' => '/res/b3572e93/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/pdf60x45.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png' => - array( - 'hash' => 'e505108688a903b5cfb674707a289bcc', - 'uri' => '/res/e5051086/rsrc/image/icon/fatcow/thumbnails/zip160x120.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip160x120.png', - 'type' => 'png', - ), - '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png' => - array( - 'hash' => 'f00716f4e8f7a95e70d43504f06be0a6', - 'uri' => '/res/f00716f4/rsrc/image/icon/fatcow/thumbnails/zip60x45.png', - 'disk' => '/rsrc/image/icon/fatcow/thumbnails/zip60x45.png', - 'type' => 'png', - ), - '/rsrc/image/icon/subscribe.png' => - array( - 'hash' => '5f47a4b17de245af39a4e7a097e40623', - 'uri' => '/res/5f47a4b1/rsrc/image/icon/subscribe.png', - 'disk' => '/rsrc/image/icon/subscribe.png', - 'type' => 'png', - ), - '/rsrc/image/icon/tango/attachment.png' => - array( - 'hash' => '776fed2de89803fd8a0ba4b9deede230', - 'uri' => '/res/776fed2d/rsrc/image/icon/tango/attachment.png', - 'disk' => '/rsrc/image/icon/tango/attachment.png', - 'type' => 'png', - ), - '/rsrc/image/icon/tango/edit.png' => - array( - 'hash' => 'c0028d99dcf4e9559bbf3c88ce2d8a8d', - 'uri' => '/res/c0028d99/rsrc/image/icon/tango/edit.png', - 'disk' => '/rsrc/image/icon/tango/edit.png', - 'type' => 'png', - ), - '/rsrc/image/icon/tango/go-down.png' => - array( - 'hash' => '96862812cbb0445573c264dc057b8300', - 'uri' => '/res/96862812/rsrc/image/icon/tango/go-down.png', - 'disk' => '/rsrc/image/icon/tango/go-down.png', - 'type' => 'png', - ), - '/rsrc/image/icon/tango/log.png' => - array( - 'hash' => 'a6f72499bef279ff6807a7dbc5148f1e', - 'uri' => '/res/a6f72499/rsrc/image/icon/tango/log.png', - 'disk' => '/rsrc/image/icon/tango/log.png', - 'type' => 'png', - ), - '/rsrc/image/icon/tango/upload.png' => - array( - 'hash' => '8c11b63d6d99db3d7159c5d9a94e3062', - 'uri' => '/res/8c11b63d/rsrc/image/icon/tango/upload.png', - 'disk' => '/rsrc/image/icon/tango/upload.png', - 'type' => 'png', - ), - '/rsrc/image/icon/unsubscribe.png' => - array( - 'hash' => '29429ad65aa3af50b072b32087057361', - 'uri' => '/res/29429ad6/rsrc/image/icon/unsubscribe.png', - 'disk' => '/rsrc/image/icon/unsubscribe.png', - 'type' => 'png', - ), - '/rsrc/image/notification_menu.png' => - array( - 'hash' => 'f3834ad08a16fc631cd46ceb5db4fb0e', - 'uri' => '/res/f3834ad0/rsrc/image/notification_menu.png', - 'disk' => '/rsrc/image/notification_menu.png', - 'type' => 'png', - ), - '/rsrc/image/phabricator_logo.png' => - array( - 'hash' => '7e62ff4001914cb3c87893a228f400c4', - 'uri' => '/res/7e62ff40/rsrc/image/phabricator_logo.png', - 'disk' => '/rsrc/image/phabricator_logo.png', - 'type' => 'png', - ), - '/rsrc/image/phabricator_logo_admin.png' => - array( - 'hash' => '98c8fd922b8ccf21c268b3451393a28f', - 'uri' => '/res/98c8fd92/rsrc/image/phabricator_logo_admin.png', - 'disk' => '/rsrc/image/phabricator_logo_admin.png', - 'type' => 'png', - ), - '/rsrc/image/sprite.png' => - array( - 'hash' => '8c6200d3191c0deea30f22e7b8166b15', - 'uri' => '/res/8c6200d3/rsrc/image/sprite.png', - 'disk' => '/rsrc/image/sprite.png', - 'type' => 'png', - ), - '/rsrc/swf/aphlict.swf' => - array( - 'hash' => '4b9a9d83bebaf254f3790e87b45c1f92', - 'uri' => '/res/4b9a9d83/rsrc/swf/aphlict.swf', - 'disk' => '/rsrc/swf/aphlict.swf', - 'type' => 'swf', - ), - 'aphront-attached-file-view-css' => - array( - 'uri' => '/res/a6ca5487/rsrc/css/aphront/attached-file-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/attached-file-view.css', - ), - 'aphront-calendar-view-css' => - array( - 'uri' => '/res/b200376d/rsrc/css/aphront/calendar-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/calendar-view.css', - ), - 'aphront-contextbar-view-css' => - array( - 'uri' => '/res/9e0c2ed7/rsrc/css/aphront/context-bar.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/context-bar.css', - ), - 'aphront-crumbs-view-css' => - array( - 'uri' => '/res/9009e6bd/rsrc/css/aphront/crumbs-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/crumbs-view.css', - ), - 'aphront-dark-console-css' => - array( - 'uri' => '/res/d9715ffb/rsrc/css/aphront/dark-console.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/dark-console.css', - ), - 'aphront-dialog-view-css' => - array( - 'uri' => '/res/eedc489d/rsrc/css/aphront/dialog-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/dialog-view.css', - ), - 'aphront-error-view-css' => - array( - 'uri' => '/res/369e35eb/rsrc/css/aphront/error-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/error-view.css', - ), - 'aphront-form-view-css' => - array( - 'uri' => '/res/3e7be7b8/rsrc/css/aphront/form-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/form-view.css', - ), - 'aphront-headsup-action-list-view-css' => - array( - 'uri' => '/res/1dce0ad7/rsrc/css/aphront/headsup-action-list-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/headsup-action-list-view.css', - ), - 'aphront-headsup-view-css' => - array( - 'uri' => '/res/cf759e39/rsrc/css/aphront/headsup.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/headsup.css', - ), - 'aphront-list-filter-view-css' => - array( - 'uri' => '/res/0f5ddaba/rsrc/css/aphront/list-filter-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/list-filter-view.css', - ), - 'aphront-pager-view-css' => - array( - 'uri' => '/res/43fb79f0/rsrc/css/aphront/pager-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/pager-view.css', - ), - 'aphront-panel-view-css' => - array( - 'uri' => '/res/9f08d754/rsrc/css/aphront/panel-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/panel-view.css', - ), - 'aphront-request-failure-view-css' => - array( - 'uri' => '/res/c9a43002/rsrc/css/aphront/request-failure-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/request-failure-view.css', - ), - 'aphront-side-nav-view-css' => - array( - 'uri' => '/res/ba0e18dd/rsrc/css/aphront/side-nav-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/side-nav-view.css', - ), - 'aphront-table-view-css' => - array( - 'uri' => '/res/3237398a/rsrc/css/aphront/table-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/table-view.css', - ), - 'aphront-tokenizer-control-css' => - array( - 'uri' => '/res/f530af47/rsrc/css/aphront/tokenizer.css', - 'type' => 'css', - 'requires' => - array( - 0 => 'aphront-typeahead-control-css', - ), - 'disk' => '/rsrc/css/aphront/tokenizer.css', - ), - 'aphront-tooltip-css' => - array( - 'uri' => '/res/b46170b3/rsrc/css/aphront/tooltip.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/tooltip.css', - ), - 'aphront-typeahead-control-css' => - array( - 'uri' => '/res/311e8830/rsrc/css/aphront/typeahead.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/typeahead.css', - ), - 'differential-changeset-view-css' => - array( - 'uri' => '/res/8e2ace51/rsrc/css/application/differential/changeset-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/changeset-view.css', - ), - 'differential-core-view-css' => - array( - 'uri' => '/res/2303c309/rsrc/css/application/differential/core.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/core.css', - ), - 'differential-inline-comment-editor' => - array( - 'uri' => '/res/c3be229c/rsrc/js/application/differential/DifferentialInlineCommentEditor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-dom', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - 3 => 'javelin-install', - 4 => 'javelin-request', - 5 => 'javelin-workflow', - ), - 'disk' => '/rsrc/js/application/differential/DifferentialInlineCommentEditor.js', - ), - 'differential-local-commits-view-css' => - array( - 'uri' => '/res/8cdacd82/rsrc/css/application/differential/local-commits-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/local-commits-view.css', - ), - 'differential-results-table-css' => - array( - 'uri' => '/res/470b474d/rsrc/css/application/differential/results-table.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/results-table.css', - ), - 'differential-revision-add-comment-css' => - array( - 'uri' => '/res/849748d3/rsrc/css/application/differential/add-comment.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/add-comment.css', - ), - 'differential-revision-comment-css' => - array( - 'uri' => '/res/a4bad297/rsrc/css/application/differential/revision-comment.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/revision-comment.css', - ), - 'differential-revision-comment-list-css' => - array( - 'uri' => '/res/3b31faa3/rsrc/css/application/differential/revision-comment-list.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/revision-comment-list.css', - ), - 'differential-revision-history-css' => - array( - 'uri' => '/res/0d7d515d/rsrc/css/application/differential/revision-history.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/revision-history.css', - ), - 'differential-table-of-contents-css' => - array( - 'uri' => '/res/0ac99a19/rsrc/css/application/differential/table-of-contents.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/differential/table-of-contents.css', - ), - 'diffusion-commit-view-css' => - array( - 'uri' => '/res/b445944e/rsrc/css/application/diffusion/commit-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/diffusion/commit-view.css', - ), - 'diffusion-icons-css' => - array( - 'uri' => '/res/b93e32c9/rsrc/css/application/diffusion/diffusion-icons.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/diffusion/diffusion-icons.css', - ), - 'diffusion-source-css' => - array( - 'uri' => '/res/501fcd3a/rsrc/css/application/diffusion/diffusion-source.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/diffusion/diffusion-source.css', - ), - 'files-css' => - array( - 'uri' => '/res/a265a77d/rsrc/css/application/files/files.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/files/files.css', - ), - 'herald-css' => - array( - 'uri' => '/res/5051f3ab/rsrc/css/application/herald/herald.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/herald/herald.css', - ), - 'herald-rule-editor' => - array( - 'uri' => '/res/3a2979de/rsrc/js/application/herald/HeraldRuleEditor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'multirow-row-manager', - 1 => 'javelin-install', - 2 => 'javelin-typeahead', - 3 => 'javelin-util', - 4 => 'javelin-dom', - 5 => 'javelin-tokenizer', - 6 => 'javelin-typeahead-preloaded-source', - 7 => 'javelin-stratcom', - 8 => 'javelin-json', - 9 => 'phabricator-prefab', - ), - 'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js', - ), - 'herald-test-css' => - array( - 'uri' => '/res/c0cd6bdb/rsrc/css/application/herald/herald-test.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/herald/herald-test.css', - ), - 'inline-comment-summary-css' => - array( - 'uri' => '/res/338704f7/rsrc/css/application/diff/inline-comment-summary.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/diff/inline-comment-summary.css', - ), - 'javelin-aphlict' => - array( - 'uri' => '/res/c0b9e53f/rsrc/js/application/aphlict/Aphlict.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/aphlict/Aphlict.js', - ), - 'javelin-behavior' => - array( - 'uri' => '/res/ef4eda09/rsrc/js/javelin/lib/behavior.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-magical-init', - ), - 'disk' => '/rsrc/js/javelin/lib/behavior.js', - ), - 'javelin-behavior-aphlict-dropdown' => - array( - 'uri' => '/res/425c08fd/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-request', - 2 => 'javelin-stratcom', - 3 => 'javelin-vector', - 4 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-dropdown.js', - ), - 'javelin-behavior-aphlict-listen' => - array( - 'uri' => '/res/da96a861/rsrc/js/application/aphlict/behavior-aphlict-listen.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-aphlict', - 2 => 'javelin-stratcom', - 3 => 'javelin-request', - 4 => 'javelin-uri', - 5 => 'javelin-dom', - 6 => 'phabricator-notification', - ), - 'disk' => '/rsrc/js/application/aphlict/behavior-aphlict-listen.js', - ), - 'javelin-behavior-aphront-basic-tokenizer' => - array( - 'uri' => '/res/cf049052/rsrc/js/application/core/behavior-tokenizer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'phabricator-prefab', - ), - 'disk' => '/rsrc/js/application/core/behavior-tokenizer.js', - ), - 'javelin-behavior-aphront-drag-and-drop' => - array( - 'uri' => '/res/ac21045a/rsrc/js/application/core/behavior-drag-and-drop.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-drag-and-drop-file-upload', - ), - 'disk' => '/rsrc/js/application/core/behavior-drag-and-drop.js', - ), - 'javelin-behavior-aphront-drag-and-drop-textarea' => - array( - 'uri' => '/res/76a52ae3/rsrc/js/application/core/behavior-drag-and-drop-textarea.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'phabricator-drag-and-drop-file-upload', - 3 => 'phabricator-paste-file-upload', - ), - 'disk' => '/rsrc/js/application/core/behavior-drag-and-drop-textarea.js', - ), - 'javelin-behavior-aphront-form-disable-on-submit' => - array( - 'uri' => '/res/ca54e8b9/rsrc/js/application/core/behavior-form.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-form.js', - ), - 'javelin-behavior-aphront-more' => - array( - 'uri' => '/res/9ad83c3c/rsrc/js/application/core/behavior-more.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-more.js', - ), - 'javelin-behavior-audit-preview' => - array( - 'uri' => '/res/3048b073/rsrc/js/application/diffusion/behavior-audit-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/diffusion/behavior-audit-preview.js', - ), - 'javelin-behavior-buoyant' => - array( - 'uri' => '/res/e7581db1/rsrc/js/application/core/behavior-buoyant.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-vector', - 3 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-buoyant.js', - ), - 'javelin-behavior-burn-chart' => - array( - 'uri' => '/res/0bc23e4d/rsrc/js/application/maniphest/behavior-burn-chart.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-vector', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-burn-chart.js', - ), - 'javelin-behavior-countdown-timer' => - array( - 'uri' => '/res/5ee9cb13/rsrc/js/application/countdown/timer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/countdown/timer.js', - ), - 'javelin-behavior-dark-console' => - array( - 'uri' => '/res/3269c0bb/rsrc/js/application/core/behavior-dark-console.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-request', - 5 => 'phabricator-keyboard-shortcut', - 6 => 'javelin-behavior-dark-console-ajax', - ), - 'disk' => '/rsrc/js/application/core/behavior-dark-console.js', - ), - 'javelin-behavior-dark-console-ajax' => - array( - 'uri' => '/res/ac3ab63a/rsrc/js/application/core/behavior-dark-console-ajax.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-dark-console-ajax.js', - ), - 'javelin-behavior-differential-accept-with-errors' => - array( - 'uri' => '/res/ba5144c5/rsrc/js/application/differential/behavior-accept-with-errors.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-accept-with-errors.js', - ), - 'javelin-behavior-differential-add-reviewers-and-ccs' => - array( - 'uri' => '/res/27be3f81/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'phabricator-prefab', - ), - 'disk' => '/rsrc/js/application/differential/behavior-add-reviewers-and-ccs.js', - ), - 'javelin-behavior-differential-comment-jump' => - array( - 'uri' => '/res/b580229b/rsrc/js/application/differential/behavior-comment-jump.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-util', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-comment-jump.js', - ), - 'javelin-behavior-differential-diff-radios' => - array( - 'uri' => '/res/004cb66f/rsrc/js/application/differential/behavior-diff-radios.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js', - ), - 'javelin-behavior-differential-dropdown-menus' => - array( - 'uri' => '/res/32190c24/rsrc/js/application/differential/behavior-dropdown-menus.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'javelin-stratcom', - 4 => 'phabricator-dropdown-menu', - 5 => 'phabricator-menu-item', - ), - 'disk' => '/rsrc/js/application/differential/behavior-dropdown-menus.js', - ), - 'javelin-behavior-differential-edit-inline-comments' => - array( - 'uri' => '/res/a8c804d4/rsrc/js/application/differential/behavior-edit-inline-comments.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - 3 => 'javelin-util', - 4 => 'javelin-vector', - 5 => 'differential-inline-comment-editor', - ), - 'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js', - ), - 'javelin-behavior-differential-feedback-preview' => - array( - 'uri' => '/res/f27f3f49/rsrc/js/application/differential/behavior-comment-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - 3 => 'javelin-request', - 4 => 'javelin-util', - 5 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js', - ), - 'javelin-behavior-differential-keyboard-navigation' => - array( - 'uri' => '/res/be43b320/rsrc/js/application/differential/behavior-keyboard-nav.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - 3 => 'phabricator-keyboard-shortcut', - ), - 'disk' => '/rsrc/js/application/differential/behavior-keyboard-nav.js', - ), - 'javelin-behavior-differential-populate' => - array( - 'uri' => '/res/a955bf2c/rsrc/js/application/differential/behavior-populate.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-workflow', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-stratcom', - 5 => 'phabricator-tooltip', - ), - 'disk' => '/rsrc/js/application/differential/behavior-populate.js', - ), - 'javelin-behavior-differential-show-all-comments' => - array( - 'uri' => '/res/eaa12efc/rsrc/js/application/differential/behavior-show-all-comments.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js', - ), - 'javelin-behavior-differential-show-field-details' => - array( - 'uri' => '/res/8d57f459/rsrc/js/application/differential/behavior-show-field-details.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-show-field-details.js', - ), - 'javelin-behavior-differential-show-more' => - array( - 'uri' => '/res/e92c5272/rsrc/js/application/differential/behavior-show-more.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-workflow', - 3 => 'javelin-util', - 4 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-show-more.js', - ), - 'javelin-behavior-differential-toggle-files' => - array( - 'uri' => '/res/21bf6d48/rsrc/js/application/differential/behavior-toggle-files.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - 3 => 'phabricator-keyboard-shortcut', - ), - 'disk' => '/rsrc/js/application/differential/behavior-toggle-files.js', - ), - 'javelin-behavior-differential-user-select' => - array( - 'uri' => '/res/f0e3b555/rsrc/js/application/differential/behavior-user-select.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/application/differential/behavior-user-select.js', - ), - 'javelin-behavior-diffusion-commit-graph' => - array( - 'uri' => '/res/cfe336e8/rsrc/js/application/diffusion/behavior-commit-graph.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/application/diffusion/behavior-commit-graph.js', - ), - 'javelin-behavior-diffusion-jump-to' => - array( - 'uri' => '/res/7c42e1ba/rsrc/js/application/diffusion/behavior-jump-to.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-util', - 2 => 'javelin-vector', - 3 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js', - ), - 'javelin-behavior-diffusion-pull-lastmodified' => - array( - 'uri' => '/res/29fe2790/rsrc/js/application/diffusion/behavior-pull-lastmodified.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'javelin-request', - ), - 'disk' => '/rsrc/js/application/diffusion/behavior-pull-lastmodified.js', - ), - 'javelin-behavior-error-log' => - array( - 'uri' => '/res/f46289e9/rsrc/js/application/core/behavior-error-log.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-error-log.js', - ), - 'javelin-behavior-fancy-datepicker' => - array( - 'uri' => '/res/b2d89e4c/rsrc/js/application/core/behavior-fancy-datepicker.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-util', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-fancy-datepicker.js', - ), - 'javelin-behavior-files-drag-and-drop' => - array( - 'uri' => '/res/3a7a2a8a/rsrc/js/application/core/behavior-files-drag-and-drop.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-uri', - 3 => 'phabricator-drag-and-drop-file-upload', - ), - 'disk' => '/rsrc/js/application/core/behavior-files-drag-and-drop.js', - ), - 'javelin-behavior-herald-rule-editor' => - array( - 'uri' => '/res/77a0c945/rsrc/js/application/herald/herald-rule-editor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'herald-rule-editor', - 1 => 'javelin-behavior', - ), - 'disk' => '/rsrc/js/application/herald/herald-rule-editor.js', - ), - 'javelin-behavior-maniphest-batch-editor' => - array( - 'uri' => '/res/d22661be/rsrc/js/application/maniphest/behavior-batch-editor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-prefab', - 4 => 'multirow-row-manager', - 5 => 'javelin-json', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-batch-editor.js', - ), - 'javelin-behavior-maniphest-batch-selector' => - array( - 'uri' => '/res/398cf8d7/rsrc/js/application/maniphest/behavior-batch-selector.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-batch-selector.js', - ), - 'javelin-behavior-maniphest-description-preview' => - array( - 'uri' => '/res/8acd6f07/rsrc/js/application/maniphest/behavior-task-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-task-preview.js', - ), - 'javelin-behavior-maniphest-project-create' => - array( - 'uri' => '/res/85a0eaf9/rsrc/js/application/maniphest/behavior-project-create.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - 3 => 'javelin-workflow', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-project-create.js', - ), - 'javelin-behavior-maniphest-subpriority-editor' => - array( - 'uri' => '/res/5e02f19a/rsrc/js/application/maniphest/behavior-subpriorityeditor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-magical-init', - 2 => 'javelin-dom', - 3 => 'javelin-vector', - 4 => 'javelin-stratcom', - 5 => 'javelin-workflow', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-subpriorityeditor.js', - ), - 'javelin-behavior-maniphest-transaction-controls' => - array( - 'uri' => '/res/62465554/rsrc/js/application/maniphest/behavior-transaction-controls.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'phabricator-prefab', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js', - ), - 'javelin-behavior-maniphest-transaction-expand' => - array( - 'uri' => '/res/966410de/rsrc/js/application/maniphest/behavior-transaction-expand.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-workflow', - 3 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-expand.js', - ), - 'javelin-behavior-maniphest-transaction-preview' => - array( - 'uri' => '/res/855c9f0c/rsrc/js/application/maniphest/behavior-transaction-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'javelin-json', - 4 => 'javelin-stratcom', - 5 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/maniphest/behavior-transaction-preview.js', - ), - 'javelin-behavior-owners-path-editor' => - array( - 'uri' => '/res/9cf78ffc/rsrc/js/application/owners/owners-path-editor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'owners-path-editor', - 1 => 'javelin-behavior', - ), - 'disk' => '/rsrc/js/application/owners/owners-path-editor.js', - ), - 'javelin-behavior-phabricator-autofocus' => - array( - 'uri' => '/res/2946bb89/rsrc/js/application/core/behavior-autofocus.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-autofocus.js', - ), - 'javelin-behavior-phabricator-keyboard-pager' => - array( - 'uri' => '/res/56d64eff/rsrc/js/application/core/behavior-keyboard-pager.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-uri', - 2 => 'phabricator-keyboard-shortcut', - ), - 'disk' => '/rsrc/js/application/core/behavior-keyboard-pager.js', - ), - 'javelin-behavior-phabricator-keyboard-shortcuts' => - array( - 'uri' => '/res/06a151d8/rsrc/js/application/core/behavior-keyboard-shortcuts.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-workflow', - 2 => 'javelin-json', - 3 => 'javelin-dom', - 4 => 'phabricator-keyboard-shortcut', - ), - 'disk' => '/rsrc/js/application/core/behavior-keyboard-shortcuts.js', - ), - 'javelin-behavior-phabricator-notification-example' => - array( - 'uri' => '/res/df97e4b3/rsrc/js/application/uiexample/notification-example.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'phabricator-notification', - 1 => 'javelin-stratcom', - 2 => 'javelin-behavior', - 3 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/application/uiexample/notification-example.js', - ), - 'javelin-behavior-phabricator-object-selector' => - array( - 'uri' => '/res/0c4b0d82/rsrc/js/application/core/behavior-object-selector.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-request', - 3 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/core/behavior-object-selector.js', - ), - 'javelin-behavior-phabricator-oncopy' => - array( - 'uri' => '/res/f490b8d1/rsrc/js/application/core/behavior-oncopy.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-oncopy.js', - ), - 'javelin-behavior-phabricator-tooltips' => - array( - 'uri' => '/res/49f92a92/rsrc/js/application/core/behavior-tooltip.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'phabricator-tooltip', - ), - 'disk' => '/rsrc/js/application/core/behavior-tooltip.js', - ), - 'javelin-behavior-phabricator-watch-anchor' => - array( - 'uri' => '/res/880e3de4/rsrc/js/application/core/behavior-watch-anchor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - 3 => 'javelin-vector', - ), - 'disk' => '/rsrc/js/application/core/behavior-watch-anchor.js', - ), - 'javelin-behavior-phame-post-preview' => - array( - 'uri' => '/res/ac4c503a/rsrc/js/application/phame/phame-post-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/phame/phame-post-preview.js', - ), - 'javelin-behavior-phriction-document-preview' => - array( - 'uri' => '/res/f1665ecd/rsrc/js/application/phriction/phriction-document-preview.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-util', - 3 => 'phabricator-shaped-request', - ), - 'disk' => '/rsrc/js/application/phriction/phriction-document-preview.js', - ), - 'javelin-behavior-projects-resource-editor' => - array( - 'uri' => '/res/ffdde7d9/rsrc/js/application/projects/projects-resource-editor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'phabricator-prefab', - 2 => 'multirow-row-manager', - 3 => 'javelin-tokenizer', - 4 => 'javelin-typeahead-preloaded-source', - 5 => 'javelin-typeahead', - 6 => 'javelin-dom', - 7 => 'javelin-json', - 8 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/projects/projects-resource-editor.js', - ), - 'javelin-behavior-refresh-csrf' => - array( - 'uri' => '/res/88beba4c/rsrc/js/application/core/behavior-refresh-csrf.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-request', - 1 => 'javelin-behavior', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/behavior-refresh-csrf.js', - ), - 'javelin-behavior-repository-crossreference' => - array( - 'uri' => '/res/8e4bbed2/rsrc/js/application/repository/repository-crossreference.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/application/repository/repository-crossreference.js', - ), - 'javelin-behavior-stripe-payment-form' => - array( - 'uri' => '/res/87c7b043/rsrc/js/application/phortune/behavior-stripe-payment-form.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-json', - 3 => 'stripe-core', - ), - 'disk' => '/rsrc/js/application/phortune/behavior-stripe-payment-form.js', - ), - 'javelin-behavior-view-placeholder' => - array( - 'uri' => '/res/5b89bdf5/rsrc/js/javelin/ext/view/ViewPlaceholder.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-dom', - 2 => 'javelin-view-renderer', - ), - 'disk' => '/rsrc/js/javelin/ext/view/ViewPlaceholder.js', - ), - 'javelin-behavior-workflow' => - array( - 'uri' => '/res/ce154288/rsrc/js/application/core/behavior-workflow.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-behavior', - 1 => 'javelin-stratcom', - 2 => 'javelin-workflow', - ), - 'disk' => '/rsrc/js/application/core/behavior-workflow.js', - ), - 'javelin-color' => - array( - 'uri' => '/res/b0439fc9/rsrc/js/javelin/ext/fx/Color.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/ext/fx/Color.js', - ), - 'javelin-cookie' => - array( - 'uri' => '/res/a9cddab0/rsrc/js/javelin/lib/Cookie.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/lib/Cookie.js', - ), - 'javelin-dom' => - array( - 'uri' => '/res/6d62f42d/rsrc/js/javelin/lib/DOM.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-magical-init', - 1 => 'javelin-install', - 2 => 'javelin-util', - 3 => 'javelin-vector', - 4 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/javelin/lib/DOM.js', - ), - 'javelin-dynval' => - array( - 'uri' => '/res/d89c6f88/rsrc/js/javelin/ext/reactor/core/DynVal.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-reactornode', - 2 => 'javelin-util', - 3 => 'javelin-reactor', - ), - 'disk' => '/rsrc/js/javelin/ext/reactor/core/DynVal.js', - ), - 'javelin-event' => - array( - 'uri' => '/res/f42fa6ea/rsrc/js/javelin/core/Event.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/core/Event.js', - ), - 'javelin-fx' => - array( - 'uri' => '/res/97e25a7f/rsrc/js/javelin/ext/fx/FX.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-color', - 1 => 'javelin-install', - 2 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/fx/FX.js', - ), - 'javelin-history' => - array( - 'uri' => '/res/9bb36651/rsrc/js/javelin/lib/History.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-stratcom', - 1 => 'javelin-install', - 2 => 'javelin-uri', - 3 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/lib/History.js', - ), - 'javelin-install' => - array( - 'uri' => '/res/cab679ff/rsrc/js/javelin/core/install.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-util', - 1 => 'javelin-magical-init', - ), - 'disk' => '/rsrc/js/javelin/core/install.js', - ), - 'javelin-json' => - array( - 'uri' => '/res/561b8056/rsrc/js/javelin/lib/JSON.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/lib/JSON.js', - ), - 'javelin-magical-init' => - array( - 'uri' => '/res/caa86a45/rsrc/js/javelin/core/init.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/javelin/core/init.js', - ), - 'javelin-mask' => - array( - 'uri' => '/res/03ef78b8/rsrc/js/javelin/lib/Mask.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-vector', - 2 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/javelin/lib/Mask.js', - ), - 'javelin-reactor' => - array( - 'uri' => '/res/dfd87f3c/rsrc/js/javelin/ext/reactor/core/Reactor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/reactor/core/Reactor.js', - ), - 'javelin-reactor-dom' => - array( - 'uri' => '/res/701b6f39/rsrc/js/javelin/ext/reactor/dom/RDOM.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-dom', - 1 => 'javelin-dynval', - 2 => 'javelin-reactornode', - 3 => 'javelin-install', - 4 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/reactor/dom/RDOM.js', - ), - 'javelin-reactor-node-calmer' => - array( - 'uri' => '/res/5a35920a/rsrc/js/javelin/ext/reactor/core/ReactorNodeCalmer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-reactor', - 2 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/reactor/core/ReactorNodeCalmer.js', - ), - 'javelin-reactornode' => - array( - 'uri' => '/res/f278cc27/rsrc/js/javelin/ext/reactor/core/ReactorNode.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-reactor', - 2 => 'javelin-util', - 3 => 'javelin-reactor-node-calmer', - ), - 'disk' => '/rsrc/js/javelin/ext/reactor/core/ReactorNode.js', - ), - 'javelin-request' => - array( - 'uri' => '/res/f256e263/rsrc/js/javelin/lib/Request.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-stratcom', - 2 => 'javelin-util', - 3 => 'javelin-behavior', - 4 => 'javelin-json', - 5 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/javelin/lib/Request.js', - ), - 'javelin-resource' => - array( - 'uri' => '/res/0058cd36/rsrc/js/javelin/lib/Resource.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-magical-init', - 1 => 'javelin-stratcom', - 2 => 'javelin-util', - 3 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/javelin/lib/Resource.js', - ), - 'javelin-stratcom' => - array( - 'uri' => '/res/d1888d8e/rsrc/js/javelin/core/Stratcom.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-event', - 2 => 'javelin-util', - 3 => 'javelin-magical-init', - ), - 'disk' => '/rsrc/js/javelin/core/Stratcom.js', - ), - 'javelin-tokenizer' => - array( - 'uri' => '/res/a8275d0d/rsrc/js/javelin/lib/control/tokenizer/Tokenizer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-dom', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - 3 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/lib/control/tokenizer/Tokenizer.js', - ), - 'javelin-typeahead' => - array( - 'uri' => '/res/2f694700/rsrc/js/javelin/lib/control/typeahead/Typeahead.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-dom', - 2 => 'javelin-vector', - 3 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/Typeahead.js', - ), - 'javelin-typeahead-composite-source' => - array( - 'uri' => '/res/7c0d631f/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-typeahead-source', - 2 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadCompositeSource.js', - ), - 'javelin-typeahead-normalizer' => - array( - 'uri' => '/res/a9e97c0d/rsrc/js/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/normalizer/TypeaheadNormalizer.js', - ), - 'javelin-typeahead-ondemand-source' => - array( - 'uri' => '/res/81e531aa/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - 3 => 'javelin-request', - 4 => 'javelin-typeahead-source', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadOnDemandSource.js', - ), - 'javelin-typeahead-preloaded-source' => - array( - 'uri' => '/res/d464efd2/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - 3 => 'javelin-request', - 4 => 'javelin-typeahead-source', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadPreloadedSource.js', - ), - 'javelin-typeahead-source' => - array( - 'uri' => '/res/83bf292a/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadSource.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-dom', - 3 => 'javelin-typeahead-normalizer', - ), - 'disk' => '/rsrc/js/javelin/lib/control/typeahead/source/TypeaheadSource.js', - ), - 'javelin-uri' => - array( - 'uri' => '/res/393ace00/rsrc/js/javelin/lib/URI.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - ), - 'disk' => '/rsrc/js/javelin/lib/URI.js', - ), - 'javelin-util' => - array( - 'uri' => '/res/2180bc95/rsrc/js/javelin/core/util.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/javelin/core/util.js', - ), - 'javelin-vector' => - array( - 'uri' => '/res/f240bdb3/rsrc/js/javelin/lib/Vector.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-event', - ), - 'disk' => '/rsrc/js/javelin/lib/Vector.js', - ), - 'javelin-view' => - array( - 'uri' => '/res/b98657a7/rsrc/js/javelin/ext/view/View.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/view/View.js', - ), - 'javelin-view-html' => - array( - 'uri' => '/res/7e5a2122/rsrc/js/javelin/ext/view/HTMLView.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - ), - 'disk' => '/rsrc/js/javelin/ext/view/HTMLView.js', - ), - 'javelin-view-interpreter' => - array( - 'uri' => '/res/17e911ca/rsrc/js/javelin/ext/view/ViewInterpreter.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-view', - 1 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/ext/view/ViewInterpreter.js', - ), - 'javelin-view-renderer' => - array( - 'uri' => '/res/db4ed5a2/rsrc/js/javelin/ext/view/ViewRenderer.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - ), - 'disk' => '/rsrc/js/javelin/ext/view/ViewRenderer.js', - ), - 'javelin-view-visitor' => - array( - 'uri' => '/res/0ef9dc43/rsrc/js/javelin/ext/view/ViewVisitor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - ), - 'disk' => '/rsrc/js/javelin/ext/view/ViewVisitor.js', - ), - 'javelin-workflow' => - array( - 'uri' => '/res/519c4e1a/rsrc/js/javelin/lib/Workflow.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-stratcom', - 1 => 'javelin-request', - 2 => 'javelin-dom', - 3 => 'javelin-vector', - 4 => 'javelin-install', - 5 => 'javelin-util', - 6 => 'javelin-mask', - 7 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/javelin/lib/Workflow.js', - ), - 'maniphest-batch-editor' => - array( - 'uri' => '/res/fb15d744/rsrc/css/application/maniphest/batch-editor.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/maniphest/batch-editor.css', - ), - 'maniphest-report-css' => - array( - 'uri' => '/res/2e633fcf/rsrc/css/application/maniphest/report.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/maniphest/report.css', - ), - 'maniphest-task-edit-css' => - array( - 'uri' => '/res/68c7863e/rsrc/css/application/maniphest/task-edit.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/maniphest/task-edit.css', - ), - 'maniphest-task-summary-css' => - array( - 'uri' => '/res/6e67cb30/rsrc/css/application/maniphest/task-summary.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/maniphest/task-summary.css', - ), - 'maniphest-transaction-detail-css' => - array( - 'uri' => '/res/24e5862f/rsrc/css/application/maniphest/transaction-detail.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/maniphest/transaction-detail.css', - ), - 'multirow-row-manager' => - array( - 'uri' => '/res/0a9b3dee/rsrc/js/application/core/MultirowRowManager.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-stratcom', - 2 => 'javelin-dom', - 3 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/core/MultirowRowManager.js', - ), - 'owners-path-editor' => - array( - 'uri' => '/res/e6c51eb6/rsrc/js/application/owners/OwnersPathEditor.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'multirow-row-manager', - 1 => 'javelin-install', - 2 => 'path-typeahead', - 3 => 'javelin-dom', - 4 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/owners/OwnersPathEditor.js', - ), - 'owners-path-editor-css' => - array( - 'uri' => '/res/9bc5332c/rsrc/css/application/owners/owners-path-editor.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/owners/owners-path-editor.css', - ), - 'path-typeahead' => - array( - 'uri' => '/res/50246fb6/rsrc/js/application/herald/PathTypeahead.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-typeahead', - 2 => 'javelin-dom', - 3 => 'javelin-request', - 4 => 'javelin-typeahead-ondemand-source', - 5 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/herald/PathTypeahead.js', - ), - 'phabricator-app-buttons-css' => - array( - 'uri' => '/res/1e153463/rsrc/css/application/directory/phabricator-app-buttons.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/directory/phabricator-app-buttons.css', - ), - 'phabricator-chatlog-css' => - array( - 'uri' => '/res/f6631adc/rsrc/css/application/chatlog/chatlog.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/chatlog/chatlog.css', - ), - 'phabricator-content-source-view-css' => - array( - 'uri' => '/res/8c738a93/rsrc/css/application/contentsource/content-source-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/contentsource/content-source-view.css', - ), - 'phabricator-core-buttons-css' => - array( - 'uri' => '/res/fc57a0c7/rsrc/css/core/buttons.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/core/buttons.css', - ), - 'phabricator-core-css' => - array( - 'uri' => '/res/f912ffab/rsrc/css/core/core.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/core/core.css', - ), - 'phabricator-countdown-css' => - array( - 'uri' => '/res/0f646281/rsrc/css/application/countdown/timer.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/countdown/timer.css', - ), - 'phabricator-directory-css' => - array( - 'uri' => '/res/61afca2b/rsrc/css/application/directory/phabricator-directory.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/directory/phabricator-directory.css', - ), - 'phabricator-drag-and-drop-file-upload' => - array( - 'uri' => '/res/63a06ad9/rsrc/js/application/core/DragAndDropFileUpload.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-request', - 3 => 'javelin-dom', - 4 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/application/core/DragAndDropFileUpload.js', - ), - 'phabricator-dropdown-menu' => - array( - 'uri' => '/res/d55c3771/rsrc/js/application/core/DropdownMenu.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-dom', - 3 => 'javelin-vector', - 4 => 'javelin-stratcom', - 5 => 'phabricator-menu-item', - ), - 'disk' => '/rsrc/js/application/core/DropdownMenu.js', - ), - 'phabricator-feed-css' => - array( - 'uri' => '/res/8ddc1d44/rsrc/css/application/feed/feed.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/feed/feed.css', - ), - 'phabricator-flag-css' => - array( - 'uri' => '/res/36d4af36/rsrc/css/application/flag/flag.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/flag/flag.css', - ), - 'phabricator-jump-nav' => - array( - 'uri' => '/res/8bdc0fc3/rsrc/css/application/directory/phabricator-jump-nav.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/directory/phabricator-jump-nav.css', - ), - 'phabricator-keyboard-shortcut' => - array( - 'uri' => '/res/beed38cd/rsrc/js/application/core/KeyboardShortcut.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'phabricator-keyboard-shortcut-manager', - ), - 'disk' => '/rsrc/js/application/core/KeyboardShortcut.js', - ), - 'phabricator-keyboard-shortcut-manager' => - array( - 'uri' => '/res/0be80136/rsrc/js/application/core/KeyboardShortcutManager.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-stratcom', - 3 => 'javelin-dom', - 4 => 'javelin-vector', - ), - 'disk' => '/rsrc/js/application/core/KeyboardShortcutManager.js', - ), - 'phabricator-menu-item' => - array( - 'uri' => '/res/32fc2325/rsrc/js/application/core/DropdownMenuItem.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/core/DropdownMenuItem.js', - ), - 'phabricator-notification' => - array( - 'uri' => '/res/cacd79f1/rsrc/js/application/core/Notification.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-dom', - 2 => 'javelin-stratcom', - 3 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/core/Notification.js', - ), - 'phabricator-notification-css' => - array( - 'uri' => '/res/7452322a/rsrc/css/aphront/notification.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/notification.css', - ), - 'phabricator-object-selector-css' => - array( - 'uri' => '/res/7eb4c705/rsrc/css/application/objectselector/object-selector.css', - 'type' => 'css', - 'requires' => - array( - 0 => 'aphront-dialog-view-css', - ), - 'disk' => '/rsrc/css/application/objectselector/object-selector.css', - ), - 'phabricator-paste-file-upload' => - array( - 'uri' => '/res/cdc939bd/rsrc/js/application/core/PasteFileUpload.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-request', - 3 => 'javelin-dom', - 4 => 'javelin-uri', - ), - 'disk' => '/rsrc/js/application/core/PasteFileUpload.js', - ), - 'phabricator-prefab' => - array( - 'uri' => '/res/2734e45f/rsrc/js/application/core/Prefab.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-dom', - 3 => 'javelin-typeahead', - 4 => 'javelin-tokenizer', - 5 => 'javelin-typeahead-preloaded-source', - 6 => 'javelin-typeahead-ondemand-source', - 7 => 'javelin-dom', - 8 => 'javelin-stratcom', - 9 => 'javelin-util', - ), - 'disk' => '/rsrc/js/application/core/Prefab.js', - ), - 'phabricator-profile-css' => - array( - 'uri' => '/res/9869d10b/rsrc/css/application/profile/profile-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/profile/profile-view.css', - ), - 'phabricator-profile-header-css' => - array( - 'uri' => '/res/4b1cb23b/rsrc/css/application/profile/profile-header-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/profile/profile-header-view.css', - ), - 'phabricator-project-tag-css' => - array( - 'uri' => '/res/6b0a5223/rsrc/css/application/projects/project-tag.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/projects/project-tag.css', - ), - 'phabricator-remarkup-css' => - array( - 'uri' => '/res/f6d48479/rsrc/css/core/remarkup.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/core/remarkup.css', - ), - 'phabricator-search-results-css' => - array( - 'uri' => '/res/f8a86e27/rsrc/css/application/search/search-results.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/search/search-results.css', - ), - 'phabricator-shaped-request' => - array( - 'uri' => '/res/59029fa9/rsrc/js/application/core/ShapedRequest.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-request', - ), - 'disk' => '/rsrc/js/application/core/ShapedRequest.js', - ), - 'phabricator-slowvote-css' => - array( - 'uri' => '/res/94d20443/rsrc/css/application/slowvote/slowvote.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/slowvote/slowvote.css', - ), - 'phabricator-standard-page-view' => - array( - 'uri' => '/res/b9c03b7b/rsrc/css/application/base/standard-page-view.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/base/standard-page-view.css', - ), - 'phabricator-tooltip' => - array( - 'uri' => '/res/bcddf5de/rsrc/js/application/core/ToolTip.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-util', - 2 => 'javelin-dom', - 3 => 'javelin-vector', - ), - 'disk' => '/rsrc/js/application/core/ToolTip.js', - ), - 'phabricator-transaction-view-css' => - array( - 'uri' => '/res/731959fb/rsrc/css/aphront/transaction.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/aphront/transaction.css', - ), - 'phabricator-ui-example-css' => - array( - 'uri' => '/res/0cef078b/rsrc/css/application/uiexample/example.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/uiexample/example.css', - ), - 'phabricator-uiexample-javelin-view' => - array( - 'uri' => '/res/a2ce2cfc/rsrc/js/application/uiexample/JavelinViewExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/JavelinViewExample.js', - ), - 'phabricator-uiexample-reactor-button' => - array( - 'uri' => '/res/142127f6/rsrc/js/application/uiexample/ReactorButtonExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorButtonExample.js', - ), - 'phabricator-uiexample-reactor-checkbox' => - array( - 'uri' => '/res/c75cb9e9/rsrc/js/application/uiexample/ReactorCheckboxExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorCheckboxExample.js', - ), - 'phabricator-uiexample-reactor-focus' => - array( - 'uri' => '/res/3cc992eb/rsrc/js/application/uiexample/ReactorFocusExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorFocusExample.js', - ), - 'phabricator-uiexample-reactor-input' => - array( - 'uri' => '/res/4953da16/rsrc/js/application/uiexample/ReactorInputExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - 5 => 'javelin-view-html', - 6 => 'javelin-view-interpreter', - 7 => 'javelin-view-renderer', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorInputExample.js', - ), - 'phabricator-uiexample-reactor-mouseover' => - array( - 'uri' => '/res/52a355b6/rsrc/js/application/uiexample/ReactorMouseoverExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorMouseoverExample.js', - ), - 'phabricator-uiexample-reactor-radio' => - array( - 'uri' => '/res/ae87f3af/rsrc/js/application/uiexample/ReactorRadioExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorRadioExample.js', - ), - 'phabricator-uiexample-reactor-select' => - array( - 'uri' => '/res/23cb448a/rsrc/js/application/uiexample/ReactorSelectExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorSelectExample.js', - ), - 'phabricator-uiexample-reactor-sendclass' => - array( - 'uri' => '/res/8cd34264/rsrc/js/application/uiexample/ReactorSendClassExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorSendClassExample.js', - ), - 'phabricator-uiexample-reactor-sendproperties' => - array( - 'uri' => '/res/18af54aa/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js', - 'type' => 'js', - 'requires' => - array( - 0 => 'javelin-install', - 1 => 'javelin-view', - 2 => 'javelin-util', - 3 => 'javelin-dom', - 4 => 'javelin-reactor-dom', - ), - 'disk' => '/rsrc/js/application/uiexample/ReactorSendPropertiesExample.js', - ), - 'phriction-document-css' => - array( - 'uri' => '/res/8d09bd7f/rsrc/css/application/phriction/phriction-document-css.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/phriction/phriction-document-css.css', - ), - 'project-edit-css' => - array( - 'uri' => '/res/c192b5f9/rsrc/css/application/projects/project-edit.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/projects/project-edit.css', - ), - 'raphael-core' => - array( - 'uri' => '/res/3f48575a/rsrc/js/raphael/raphael.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/raphael/raphael.js', - ), - 'raphael-g' => - array( - 'uri' => '/res/b07e5245/rsrc/js/raphael/g.raphael.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/raphael/g.raphael.js', - ), - 'raphael-g-line' => - array( - 'uri' => '/res/a59c8556/rsrc/js/raphael/g.raphael.line.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/raphael/g.raphael.line.js', - ), - 'stripe-core' => - array( - 'uri' => '/res/3b0f0ad4/rsrc/js/stripe/stripe_core.js', - 'type' => 'js', - 'requires' => - array( - ), - 'disk' => '/rsrc/js/stripe/stripe_core.js', - ), - 'stripe-payment-form-css' => - array( - 'uri' => '/res/634a6371/rsrc/css/application/phortune/stripe-payment-form.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/application/phortune/stripe-payment-form.css', - ), - 'syntax-highlighting-css' => - array( - 'uri' => '/res/5669beb6/rsrc/css/core/syntax.css', - 'type' => 'css', - 'requires' => - array( - ), - 'disk' => '/rsrc/css/core/syntax.css', - ), -), array( - 'packages' => - array( - 'e6c01476' => - array( - 'name' => 'core.pkg.css', - 'symbols' => - array( - 0 => 'phabricator-core-css', - 1 => 'phabricator-core-buttons-css', - 2 => 'phabricator-standard-page-view', - 3 => 'aphront-dialog-view-css', - 4 => 'aphront-form-view-css', - 5 => 'aphront-panel-view-css', - 6 => 'aphront-side-nav-view-css', - 7 => 'aphront-table-view-css', - 8 => 'aphront-crumbs-view-css', - 9 => 'aphront-tokenizer-control-css', - 10 => 'aphront-typeahead-control-css', - 11 => 'aphront-list-filter-view-css', - 12 => 'phabricator-directory-css', - 13 => 'phabricator-jump-nav', - 14 => 'phabricator-app-buttons-css', - 15 => 'phabricator-remarkup-css', - 16 => 'syntax-highlighting-css', - 17 => 'aphront-pager-view-css', - 18 => 'phabricator-transaction-view-css', - 19 => 'aphront-tooltip-css', - 20 => 'aphront-headsup-view-css', - 21 => 'phabricator-flag-css', - 22 => 'aphront-error-view-css', - ), - 'uri' => '/res/pkg/e6c01476/core.pkg.css', - 'type' => 'css', - ), - '0c96375e' => - array( - 'name' => 'core.pkg.js', - 'symbols' => - array( - 0 => 'javelin-mask', - 1 => 'javelin-workflow', - 2 => 'javelin-behavior-workflow', - 3 => 'javelin-behavior-aphront-form-disable-on-submit', - 4 => 'phabricator-keyboard-shortcut-manager', - 5 => 'phabricator-keyboard-shortcut', - 6 => 'javelin-behavior-phabricator-keyboard-shortcuts', - 7 => 'javelin-behavior-refresh-csrf', - 8 => 'javelin-behavior-phabricator-watch-anchor', - 9 => 'javelin-behavior-phabricator-autofocus', - 10 => 'phabricator-paste-file-upload', - 11 => 'phabricator-menu-item', - 12 => 'phabricator-dropdown-menu', - 13 => 'javelin-behavior-phabricator-oncopy', - 14 => 'phabricator-tooltip', - 15 => 'javelin-behavior-phabricator-tooltips', - 16 => 'phabricator-prefab', - ), - 'uri' => '/res/pkg/0c96375e/core.pkg.js', - 'type' => 'js', - ), - '32f461a4' => - array( - 'name' => 'differential.pkg.css', - 'symbols' => - array( - 0 => 'differential-core-view-css', - 1 => 'differential-changeset-view-css', - 2 => 'differential-results-table-css', - 3 => 'differential-revision-history-css', - 4 => 'differential-table-of-contents-css', - 5 => 'differential-revision-comment-css', - 6 => 'differential-revision-add-comment-css', - 7 => 'differential-revision-comment-list-css', - 8 => 'phabricator-object-selector-css', - 9 => 'aphront-headsup-action-list-view-css', - 10 => 'phabricator-content-source-view-css', - 11 => 'differential-local-commits-view-css', - 12 => 'inline-comment-summary-css', - ), - 'uri' => '/res/pkg/32f461a4/differential.pkg.css', - 'type' => 'css', - ), - '1662d764' => - array( - 'name' => 'differential.pkg.js', - 'symbols' => - array( - 0 => 'phabricator-drag-and-drop-file-upload', - 1 => 'phabricator-shaped-request', - 2 => 'javelin-behavior-differential-feedback-preview', - 3 => 'javelin-behavior-differential-edit-inline-comments', - 4 => 'javelin-behavior-differential-populate', - 5 => 'javelin-behavior-differential-show-more', - 6 => 'javelin-behavior-differential-diff-radios', - 7 => 'javelin-behavior-differential-accept-with-errors', - 8 => 'javelin-behavior-differential-comment-jump', - 9 => 'javelin-behavior-differential-add-reviewers-and-ccs', - 10 => 'javelin-behavior-differential-keyboard-navigation', - 11 => 'javelin-behavior-aphront-drag-and-drop', - 12 => 'javelin-behavior-aphront-drag-and-drop-textarea', - 13 => 'javelin-behavior-phabricator-object-selector', - 14 => 'javelin-behavior-repository-crossreference', - 15 => 'differential-inline-comment-editor', - 16 => 'javelin-behavior-differential-dropdown-menus', - 17 => 'javelin-behavior-buoyant', - ), - 'uri' => '/res/pkg/1662d764/differential.pkg.js', - 'type' => 'js', - ), - 'c8ce2d88' => - array( - 'name' => 'diffusion.pkg.css', - 'symbols' => - array( - 0 => 'diffusion-commit-view-css', - 1 => 'diffusion-icons-css', - ), - 'uri' => '/res/pkg/c8ce2d88/diffusion.pkg.css', - 'type' => 'css', - ), - '5e68be89' => - array( - 'name' => 'diffusion.pkg.js', - 'symbols' => - array( - 0 => 'javelin-behavior-diffusion-pull-lastmodified', - 1 => 'javelin-behavior-diffusion-commit-graph', - 2 => 'javelin-behavior-audit-preview', - ), - 'uri' => '/res/pkg/5e68be89/diffusion.pkg.js', - 'type' => 'js', - ), - '6fb20113' => - array( - 'name' => 'javelin.pkg.js', - 'symbols' => - array( - 0 => 'javelin-util', - 1 => 'javelin-install', - 2 => 'javelin-event', - 3 => 'javelin-stratcom', - 4 => 'javelin-behavior', - 5 => 'javelin-request', - 6 => 'javelin-vector', - 7 => 'javelin-dom', - 8 => 'javelin-json', - 9 => 'javelin-uri', - ), - 'uri' => '/res/pkg/6fb20113/javelin.pkg.js', - 'type' => 'js', - ), - '7839ae2d' => - array( - 'name' => 'maniphest.pkg.css', - 'symbols' => - array( - 0 => 'maniphest-task-summary-css', - 1 => 'maniphest-transaction-detail-css', - 2 => 'aphront-attached-file-view-css', - 3 => 'phabricator-project-tag-css', - ), - 'uri' => '/res/pkg/7839ae2d/maniphest.pkg.css', - 'type' => 'css', - ), - '7707de41' => - array( - 'name' => 'maniphest.pkg.js', - 'symbols' => - array( - 0 => 'javelin-behavior-maniphest-batch-selector', - 1 => 'javelin-behavior-maniphest-transaction-controls', - 2 => 'javelin-behavior-maniphest-transaction-preview', - 3 => 'javelin-behavior-maniphest-transaction-expand', - 4 => 'javelin-behavior-maniphest-subpriority-editor', - ), - 'uri' => '/res/pkg/7707de41/maniphest.pkg.js', - 'type' => 'js', - ), - '97f65640' => - array( - 'name' => 'typeahead.pkg.js', - 'symbols' => - array( - 0 => 'javelin-typeahead', - 1 => 'javelin-typeahead-normalizer', - 2 => 'javelin-typeahead-source', - 3 => 'javelin-typeahead-preloaded-source', - 4 => 'javelin-typeahead-ondemand-source', - 5 => 'javelin-tokenizer', - 6 => 'javelin-behavior-aphront-basic-tokenizer', - ), - 'uri' => '/res/pkg/97f65640/typeahead.pkg.js', - 'type' => 'js', - ), - ), - 'reverse' => - array( - 'aphront-attached-file-view-css' => '7839ae2d', - 'aphront-crumbs-view-css' => 'e6c01476', - 'aphront-dialog-view-css' => 'e6c01476', - 'aphront-error-view-css' => 'e6c01476', - 'aphront-form-view-css' => 'e6c01476', - 'aphront-headsup-action-list-view-css' => '32f461a4', - 'aphront-headsup-view-css' => 'e6c01476', - 'aphront-list-filter-view-css' => 'e6c01476', - 'aphront-pager-view-css' => 'e6c01476', - 'aphront-panel-view-css' => 'e6c01476', - 'aphront-side-nav-view-css' => 'e6c01476', - 'aphront-table-view-css' => 'e6c01476', - 'aphront-tokenizer-control-css' => 'e6c01476', - 'aphront-tooltip-css' => 'e6c01476', - 'aphront-typeahead-control-css' => 'e6c01476', - 'differential-changeset-view-css' => '32f461a4', - 'differential-core-view-css' => '32f461a4', - 'differential-inline-comment-editor' => '1662d764', - 'differential-local-commits-view-css' => '32f461a4', - 'differential-results-table-css' => '32f461a4', - 'differential-revision-add-comment-css' => '32f461a4', - 'differential-revision-comment-css' => '32f461a4', - 'differential-revision-comment-list-css' => '32f461a4', - 'differential-revision-history-css' => '32f461a4', - 'differential-table-of-contents-css' => '32f461a4', - 'diffusion-commit-view-css' => 'c8ce2d88', - 'diffusion-icons-css' => 'c8ce2d88', - 'inline-comment-summary-css' => '32f461a4', - 'javelin-behavior' => '6fb20113', - 'javelin-behavior-aphront-basic-tokenizer' => '97f65640', - 'javelin-behavior-aphront-drag-and-drop' => '1662d764', - 'javelin-behavior-aphront-drag-and-drop-textarea' => '1662d764', - 'javelin-behavior-aphront-form-disable-on-submit' => '0c96375e', - 'javelin-behavior-audit-preview' => '5e68be89', - 'javelin-behavior-buoyant' => '1662d764', - 'javelin-behavior-differential-accept-with-errors' => '1662d764', - 'javelin-behavior-differential-add-reviewers-and-ccs' => '1662d764', - 'javelin-behavior-differential-comment-jump' => '1662d764', - 'javelin-behavior-differential-diff-radios' => '1662d764', - 'javelin-behavior-differential-dropdown-menus' => '1662d764', - 'javelin-behavior-differential-edit-inline-comments' => '1662d764', - 'javelin-behavior-differential-feedback-preview' => '1662d764', - 'javelin-behavior-differential-keyboard-navigation' => '1662d764', - 'javelin-behavior-differential-populate' => '1662d764', - 'javelin-behavior-differential-show-more' => '1662d764', - 'javelin-behavior-diffusion-commit-graph' => '5e68be89', - 'javelin-behavior-diffusion-pull-lastmodified' => '5e68be89', - 'javelin-behavior-maniphest-batch-selector' => '7707de41', - 'javelin-behavior-maniphest-subpriority-editor' => '7707de41', - 'javelin-behavior-maniphest-transaction-controls' => '7707de41', - 'javelin-behavior-maniphest-transaction-expand' => '7707de41', - 'javelin-behavior-maniphest-transaction-preview' => '7707de41', - 'javelin-behavior-phabricator-autofocus' => '0c96375e', - 'javelin-behavior-phabricator-keyboard-shortcuts' => '0c96375e', - 'javelin-behavior-phabricator-object-selector' => '1662d764', - 'javelin-behavior-phabricator-oncopy' => '0c96375e', - 'javelin-behavior-phabricator-tooltips' => '0c96375e', - 'javelin-behavior-phabricator-watch-anchor' => '0c96375e', - 'javelin-behavior-refresh-csrf' => '0c96375e', - 'javelin-behavior-repository-crossreference' => '1662d764', - 'javelin-behavior-workflow' => '0c96375e', - 'javelin-dom' => '6fb20113', - 'javelin-event' => '6fb20113', - 'javelin-install' => '6fb20113', - 'javelin-json' => '6fb20113', - 'javelin-mask' => '0c96375e', - 'javelin-request' => '6fb20113', - 'javelin-stratcom' => '6fb20113', - 'javelin-tokenizer' => '97f65640', - 'javelin-typeahead' => '97f65640', - 'javelin-typeahead-normalizer' => '97f65640', - 'javelin-typeahead-ondemand-source' => '97f65640', - 'javelin-typeahead-preloaded-source' => '97f65640', - 'javelin-typeahead-source' => '97f65640', - 'javelin-uri' => '6fb20113', - 'javelin-util' => '6fb20113', - 'javelin-vector' => '6fb20113', - 'javelin-workflow' => '0c96375e', - 'maniphest-task-summary-css' => '7839ae2d', - 'maniphest-transaction-detail-css' => '7839ae2d', - 'phabricator-app-buttons-css' => 'e6c01476', - 'phabricator-content-source-view-css' => '32f461a4', - 'phabricator-core-buttons-css' => 'e6c01476', - 'phabricator-core-css' => 'e6c01476', - 'phabricator-directory-css' => 'e6c01476', - 'phabricator-drag-and-drop-file-upload' => '1662d764', - 'phabricator-dropdown-menu' => '0c96375e', - 'phabricator-flag-css' => 'e6c01476', - 'phabricator-jump-nav' => 'e6c01476', - 'phabricator-keyboard-shortcut' => '0c96375e', - 'phabricator-keyboard-shortcut-manager' => '0c96375e', - 'phabricator-menu-item' => '0c96375e', - 'phabricator-object-selector-css' => '32f461a4', - 'phabricator-paste-file-upload' => '0c96375e', - 'phabricator-prefab' => '0c96375e', - 'phabricator-project-tag-css' => '7839ae2d', - 'phabricator-remarkup-css' => 'e6c01476', - 'phabricator-shaped-request' => '1662d764', - 'phabricator-standard-page-view' => 'e6c01476', - 'phabricator-tooltip' => '0c96375e', - 'phabricator-transaction-view-css' => 'e6c01476', - 'syntax-highlighting-css' => 'e6c01476', - ), -)); diff --git a/src/__phutil_library_init__.php b/src/__phutil_library_init__.php index a01941f7e1..f150c1f94f 100644 --- a/src/__phutil_library_init__.php +++ b/src/__phutil_library_init__.php @@ -1,19 +1,3 @@ 2, - 'class' => - array( + 'class' => array( + 'AlmanacAddress' => 'applications/almanac/util/AlmanacAddress.php', + 'AlmanacBinding' => 'applications/almanac/storage/AlmanacBinding.php', + 'AlmanacBindingDeletePropertyTransaction' => 'applications/almanac/xaction/AlmanacBindingDeletePropertyTransaction.php', + 'AlmanacBindingDisableController' => 'applications/almanac/controller/AlmanacBindingDisableController.php', + 'AlmanacBindingDisableTransaction' => 'applications/almanac/xaction/AlmanacBindingDisableTransaction.php', + 'AlmanacBindingEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacBindingEditConduitAPIMethod.php', + 'AlmanacBindingEditController' => 'applications/almanac/controller/AlmanacBindingEditController.php', + 'AlmanacBindingEditEngine' => 'applications/almanac/editor/AlmanacBindingEditEngine.php', + 'AlmanacBindingEditor' => 'applications/almanac/editor/AlmanacBindingEditor.php', + 'AlmanacBindingInterfaceTransaction' => 'applications/almanac/xaction/AlmanacBindingInterfaceTransaction.php', + 'AlmanacBindingPHIDType' => 'applications/almanac/phid/AlmanacBindingPHIDType.php', + 'AlmanacBindingPropertyEditEngine' => 'applications/almanac/editor/AlmanacBindingPropertyEditEngine.php', + 'AlmanacBindingQuery' => 'applications/almanac/query/AlmanacBindingQuery.php', + 'AlmanacBindingSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacBindingSearchConduitAPIMethod.php', + 'AlmanacBindingSearchEngine' => 'applications/almanac/query/AlmanacBindingSearchEngine.php', + 'AlmanacBindingServiceTransaction' => 'applications/almanac/xaction/AlmanacBindingServiceTransaction.php', + 'AlmanacBindingSetPropertyTransaction' => 'applications/almanac/xaction/AlmanacBindingSetPropertyTransaction.php', + 'AlmanacBindingTableView' => 'applications/almanac/view/AlmanacBindingTableView.php', + 'AlmanacBindingTransaction' => 'applications/almanac/storage/AlmanacBindingTransaction.php', + 'AlmanacBindingTransactionQuery' => 'applications/almanac/query/AlmanacBindingTransactionQuery.php', + 'AlmanacBindingTransactionType' => 'applications/almanac/xaction/AlmanacBindingTransactionType.php', + 'AlmanacBindingViewController' => 'applications/almanac/controller/AlmanacBindingViewController.php', + 'AlmanacBindingsSearchEngineAttachment' => 'applications/almanac/engineextension/AlmanacBindingsSearchEngineAttachment.php', + 'AlmanacCacheEngineExtension' => 'applications/almanac/engineextension/AlmanacCacheEngineExtension.php', + 'AlmanacClusterDatabaseServiceType' => 'applications/almanac/servicetype/AlmanacClusterDatabaseServiceType.php', + 'AlmanacClusterRepositoryServiceType' => 'applications/almanac/servicetype/AlmanacClusterRepositoryServiceType.php', + 'AlmanacClusterServiceType' => 'applications/almanac/servicetype/AlmanacClusterServiceType.php', + 'AlmanacConsoleController' => 'applications/almanac/controller/AlmanacConsoleController.php', + 'AlmanacController' => 'applications/almanac/controller/AlmanacController.php', + 'AlmanacCreateDevicesCapability' => 'applications/almanac/capability/AlmanacCreateDevicesCapability.php', + 'AlmanacCreateNamespacesCapability' => 'applications/almanac/capability/AlmanacCreateNamespacesCapability.php', + 'AlmanacCreateNetworksCapability' => 'applications/almanac/capability/AlmanacCreateNetworksCapability.php', + 'AlmanacCreateServicesCapability' => 'applications/almanac/capability/AlmanacCreateServicesCapability.php', + 'AlmanacCustomServiceType' => 'applications/almanac/servicetype/AlmanacCustomServiceType.php', + 'AlmanacDAO' => 'applications/almanac/storage/AlmanacDAO.php', + 'AlmanacDeletePropertyEditField' => 'applications/almanac/engineextension/AlmanacDeletePropertyEditField.php', + 'AlmanacDeletePropertyEditType' => 'applications/almanac/engineextension/AlmanacDeletePropertyEditType.php', + 'AlmanacDevice' => 'applications/almanac/storage/AlmanacDevice.php', + 'AlmanacDeviceController' => 'applications/almanac/controller/AlmanacDeviceController.php', + 'AlmanacDeviceDeletePropertyTransaction' => 'applications/almanac/xaction/AlmanacDeviceDeletePropertyTransaction.php', + 'AlmanacDeviceEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacDeviceEditConduitAPIMethod.php', + 'AlmanacDeviceEditController' => 'applications/almanac/controller/AlmanacDeviceEditController.php', + 'AlmanacDeviceEditEngine' => 'applications/almanac/editor/AlmanacDeviceEditEngine.php', + 'AlmanacDeviceEditor' => 'applications/almanac/editor/AlmanacDeviceEditor.php', + 'AlmanacDeviceListController' => 'applications/almanac/controller/AlmanacDeviceListController.php', + 'AlmanacDeviceNameNgrams' => 'applications/almanac/storage/AlmanacDeviceNameNgrams.php', + 'AlmanacDeviceNameTransaction' => 'applications/almanac/xaction/AlmanacDeviceNameTransaction.php', + 'AlmanacDevicePHIDType' => 'applications/almanac/phid/AlmanacDevicePHIDType.php', + 'AlmanacDevicePropertyEditEngine' => 'applications/almanac/editor/AlmanacDevicePropertyEditEngine.php', + 'AlmanacDeviceQuery' => 'applications/almanac/query/AlmanacDeviceQuery.php', + 'AlmanacDeviceSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacDeviceSearchConduitAPIMethod.php', + 'AlmanacDeviceSearchEngine' => 'applications/almanac/query/AlmanacDeviceSearchEngine.php', + 'AlmanacDeviceSetPropertyTransaction' => 'applications/almanac/xaction/AlmanacDeviceSetPropertyTransaction.php', + 'AlmanacDeviceStatus' => 'applications/almanac/constants/AlmanacDeviceStatus.php', + 'AlmanacDeviceStatusTransaction' => 'applications/almanac/xaction/AlmanacDeviceStatusTransaction.php', + 'AlmanacDeviceTransaction' => 'applications/almanac/storage/AlmanacDeviceTransaction.php', + 'AlmanacDeviceTransactionQuery' => 'applications/almanac/query/AlmanacDeviceTransactionQuery.php', + 'AlmanacDeviceTransactionType' => 'applications/almanac/xaction/AlmanacDeviceTransactionType.php', + 'AlmanacDeviceViewController' => 'applications/almanac/controller/AlmanacDeviceViewController.php', + 'AlmanacDrydockPoolServiceType' => 'applications/almanac/servicetype/AlmanacDrydockPoolServiceType.php', + 'AlmanacEditor' => 'applications/almanac/editor/AlmanacEditor.php', + 'AlmanacInterface' => 'applications/almanac/storage/AlmanacInterface.php', + 'AlmanacInterfaceAddressTransaction' => 'applications/almanac/xaction/AlmanacInterfaceAddressTransaction.php', + 'AlmanacInterfaceDatasource' => 'applications/almanac/typeahead/AlmanacInterfaceDatasource.php', + 'AlmanacInterfaceDeleteController' => 'applications/almanac/controller/AlmanacInterfaceDeleteController.php', + 'AlmanacInterfaceDestroyTransaction' => 'applications/almanac/xaction/AlmanacInterfaceDestroyTransaction.php', + 'AlmanacInterfaceDeviceTransaction' => 'applications/almanac/xaction/AlmanacInterfaceDeviceTransaction.php', + 'AlmanacInterfaceEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacInterfaceEditConduitAPIMethod.php', + 'AlmanacInterfaceEditController' => 'applications/almanac/controller/AlmanacInterfaceEditController.php', + 'AlmanacInterfaceEditEngine' => 'applications/almanac/editor/AlmanacInterfaceEditEngine.php', + 'AlmanacInterfaceEditor' => 'applications/almanac/editor/AlmanacInterfaceEditor.php', + 'AlmanacInterfaceNetworkTransaction' => 'applications/almanac/xaction/AlmanacInterfaceNetworkTransaction.php', + 'AlmanacInterfacePHIDType' => 'applications/almanac/phid/AlmanacInterfacePHIDType.php', + 'AlmanacInterfacePortTransaction' => 'applications/almanac/xaction/AlmanacInterfacePortTransaction.php', + 'AlmanacInterfaceQuery' => 'applications/almanac/query/AlmanacInterfaceQuery.php', + 'AlmanacInterfaceSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacInterfaceSearchConduitAPIMethod.php', + 'AlmanacInterfaceSearchEngine' => 'applications/almanac/query/AlmanacInterfaceSearchEngine.php', + 'AlmanacInterfaceTableView' => 'applications/almanac/view/AlmanacInterfaceTableView.php', + 'AlmanacInterfaceTransaction' => 'applications/almanac/storage/AlmanacInterfaceTransaction.php', + 'AlmanacInterfaceTransactionQuery' => 'applications/almanac/query/AlmanacInterfaceTransactionQuery.php', + 'AlmanacInterfaceTransactionType' => 'applications/almanac/xaction/AlmanacInterfaceTransactionType.php', + 'AlmanacKeys' => 'applications/almanac/util/AlmanacKeys.php', + 'AlmanacManageClusterServicesCapability' => 'applications/almanac/capability/AlmanacManageClusterServicesCapability.php', + 'AlmanacManagementRegisterWorkflow' => 'applications/almanac/management/AlmanacManagementRegisterWorkflow.php', + 'AlmanacManagementTrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementTrustKeyWorkflow.php', + 'AlmanacManagementUntrustKeyWorkflow' => 'applications/almanac/management/AlmanacManagementUntrustKeyWorkflow.php', + 'AlmanacManagementWorkflow' => 'applications/almanac/management/AlmanacManagementWorkflow.php', + 'AlmanacModularTransaction' => 'applications/almanac/storage/AlmanacModularTransaction.php', + 'AlmanacNames' => 'applications/almanac/util/AlmanacNames.php', + 'AlmanacNamesTestCase' => 'applications/almanac/util/__tests__/AlmanacNamesTestCase.php', + 'AlmanacNamespace' => 'applications/almanac/storage/AlmanacNamespace.php', + 'AlmanacNamespaceController' => 'applications/almanac/controller/AlmanacNamespaceController.php', + 'AlmanacNamespaceEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacNamespaceEditConduitAPIMethod.php', + 'AlmanacNamespaceEditController' => 'applications/almanac/controller/AlmanacNamespaceEditController.php', + 'AlmanacNamespaceEditEngine' => 'applications/almanac/editor/AlmanacNamespaceEditEngine.php', + 'AlmanacNamespaceEditor' => 'applications/almanac/editor/AlmanacNamespaceEditor.php', + 'AlmanacNamespaceListController' => 'applications/almanac/controller/AlmanacNamespaceListController.php', + 'AlmanacNamespaceNameNgrams' => 'applications/almanac/storage/AlmanacNamespaceNameNgrams.php', + 'AlmanacNamespaceNameTransaction' => 'applications/almanac/xaction/AlmanacNamespaceNameTransaction.php', + 'AlmanacNamespacePHIDType' => 'applications/almanac/phid/AlmanacNamespacePHIDType.php', + 'AlmanacNamespaceQuery' => 'applications/almanac/query/AlmanacNamespaceQuery.php', + 'AlmanacNamespaceSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacNamespaceSearchConduitAPIMethod.php', + 'AlmanacNamespaceSearchEngine' => 'applications/almanac/query/AlmanacNamespaceSearchEngine.php', + 'AlmanacNamespaceTransaction' => 'applications/almanac/storage/AlmanacNamespaceTransaction.php', + 'AlmanacNamespaceTransactionQuery' => 'applications/almanac/query/AlmanacNamespaceTransactionQuery.php', + 'AlmanacNamespaceTransactionType' => 'applications/almanac/xaction/AlmanacNamespaceTransactionType.php', + 'AlmanacNamespaceViewController' => 'applications/almanac/controller/AlmanacNamespaceViewController.php', + 'AlmanacNetwork' => 'applications/almanac/storage/AlmanacNetwork.php', + 'AlmanacNetworkController' => 'applications/almanac/controller/AlmanacNetworkController.php', + 'AlmanacNetworkEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacNetworkEditConduitAPIMethod.php', + 'AlmanacNetworkEditController' => 'applications/almanac/controller/AlmanacNetworkEditController.php', + 'AlmanacNetworkEditEngine' => 'applications/almanac/editor/AlmanacNetworkEditEngine.php', + 'AlmanacNetworkEditor' => 'applications/almanac/editor/AlmanacNetworkEditor.php', + 'AlmanacNetworkListController' => 'applications/almanac/controller/AlmanacNetworkListController.php', + 'AlmanacNetworkNameNgrams' => 'applications/almanac/storage/AlmanacNetworkNameNgrams.php', + 'AlmanacNetworkNameTransaction' => 'applications/almanac/xaction/AlmanacNetworkNameTransaction.php', + 'AlmanacNetworkPHIDType' => 'applications/almanac/phid/AlmanacNetworkPHIDType.php', + 'AlmanacNetworkQuery' => 'applications/almanac/query/AlmanacNetworkQuery.php', + 'AlmanacNetworkSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacNetworkSearchConduitAPIMethod.php', + 'AlmanacNetworkSearchEngine' => 'applications/almanac/query/AlmanacNetworkSearchEngine.php', + 'AlmanacNetworkTransaction' => 'applications/almanac/storage/AlmanacNetworkTransaction.php', + 'AlmanacNetworkTransactionQuery' => 'applications/almanac/query/AlmanacNetworkTransactionQuery.php', + 'AlmanacNetworkTransactionType' => 'applications/almanac/xaction/AlmanacNetworkTransactionType.php', + 'AlmanacNetworkViewController' => 'applications/almanac/controller/AlmanacNetworkViewController.php', + 'AlmanacPropertiesDestructionEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesDestructionEngineExtension.php', + 'AlmanacPropertiesEditEngineExtension' => 'applications/almanac/engineextension/AlmanacPropertiesEditEngineExtension.php', + 'AlmanacPropertiesSearchEngineAttachment' => 'applications/almanac/engineextension/AlmanacPropertiesSearchEngineAttachment.php', + 'AlmanacProperty' => 'applications/almanac/storage/AlmanacProperty.php', + 'AlmanacPropertyController' => 'applications/almanac/controller/AlmanacPropertyController.php', + 'AlmanacPropertyDeleteController' => 'applications/almanac/controller/AlmanacPropertyDeleteController.php', + 'AlmanacPropertyEditController' => 'applications/almanac/controller/AlmanacPropertyEditController.php', + 'AlmanacPropertyEditEngine' => 'applications/almanac/editor/AlmanacPropertyEditEngine.php', + 'AlmanacPropertyInterface' => 'applications/almanac/property/AlmanacPropertyInterface.php', + 'AlmanacPropertyQuery' => 'applications/almanac/query/AlmanacPropertyQuery.php', + 'AlmanacQuery' => 'applications/almanac/query/AlmanacQuery.php', + 'AlmanacSchemaSpec' => 'applications/almanac/storage/AlmanacSchemaSpec.php', + 'AlmanacSearchEngineAttachment' => 'applications/almanac/engineextension/AlmanacSearchEngineAttachment.php', + 'AlmanacService' => 'applications/almanac/storage/AlmanacService.php', + 'AlmanacServiceController' => 'applications/almanac/controller/AlmanacServiceController.php', + 'AlmanacServiceDatasource' => 'applications/almanac/typeahead/AlmanacServiceDatasource.php', + 'AlmanacServiceDeletePropertyTransaction' => 'applications/almanac/xaction/AlmanacServiceDeletePropertyTransaction.php', + 'AlmanacServiceEditConduitAPIMethod' => 'applications/almanac/conduit/AlmanacServiceEditConduitAPIMethod.php', + 'AlmanacServiceEditController' => 'applications/almanac/controller/AlmanacServiceEditController.php', + 'AlmanacServiceEditEngine' => 'applications/almanac/editor/AlmanacServiceEditEngine.php', + 'AlmanacServiceEditor' => 'applications/almanac/editor/AlmanacServiceEditor.php', + 'AlmanacServiceListController' => 'applications/almanac/controller/AlmanacServiceListController.php', + 'AlmanacServiceNameNgrams' => 'applications/almanac/storage/AlmanacServiceNameNgrams.php', + 'AlmanacServiceNameTransaction' => 'applications/almanac/xaction/AlmanacServiceNameTransaction.php', + 'AlmanacServicePHIDType' => 'applications/almanac/phid/AlmanacServicePHIDType.php', + 'AlmanacServicePropertyEditEngine' => 'applications/almanac/editor/AlmanacServicePropertyEditEngine.php', + 'AlmanacServiceQuery' => 'applications/almanac/query/AlmanacServiceQuery.php', + 'AlmanacServiceSearchConduitAPIMethod' => 'applications/almanac/conduit/AlmanacServiceSearchConduitAPIMethod.php', + 'AlmanacServiceSearchEngine' => 'applications/almanac/query/AlmanacServiceSearchEngine.php', + 'AlmanacServiceSetPropertyTransaction' => 'applications/almanac/xaction/AlmanacServiceSetPropertyTransaction.php', + 'AlmanacServiceTransaction' => 'applications/almanac/storage/AlmanacServiceTransaction.php', + 'AlmanacServiceTransactionQuery' => 'applications/almanac/query/AlmanacServiceTransactionQuery.php', + 'AlmanacServiceTransactionType' => 'applications/almanac/xaction/AlmanacServiceTransactionType.php', + 'AlmanacServiceType' => 'applications/almanac/servicetype/AlmanacServiceType.php', + 'AlmanacServiceTypeDatasource' => 'applications/almanac/typeahead/AlmanacServiceTypeDatasource.php', + 'AlmanacServiceTypeTestCase' => 'applications/almanac/servicetype/__tests__/AlmanacServiceTypeTestCase.php', + 'AlmanacServiceTypeTransaction' => 'applications/almanac/xaction/AlmanacServiceTypeTransaction.php', + 'AlmanacServiceViewController' => 'applications/almanac/controller/AlmanacServiceViewController.php', + 'AlmanacSetPropertyEditField' => 'applications/almanac/engineextension/AlmanacSetPropertyEditField.php', + 'AlmanacSetPropertyEditType' => 'applications/almanac/engineextension/AlmanacSetPropertyEditType.php', + 'AlmanacTransactionType' => 'applications/almanac/xaction/AlmanacTransactionType.php', + 'AphlictDropdownDataQuery' => 'applications/aphlict/query/AphlictDropdownDataQuery.php', 'Aphront304Response' => 'aphront/response/Aphront304Response.php', 'Aphront400Response' => 'aphront/response/Aphront400Response.php', 'Aphront403Response' => 'aphront/response/Aphront403Response.php', 'Aphront404Response' => 'aphront/response/Aphront404Response.php', + 'AphrontAccessDeniedQueryException' => 'infrastructure/storage/exception/AphrontAccessDeniedQueryException.php', 'AphrontAjaxResponse' => 'aphront/response/AphrontAjaxResponse.php', 'AphrontApplicationConfiguration' => 'aphront/configuration/AphrontApplicationConfiguration.php', - 'AphrontAttachedFileView' => 'view/control/AphrontAttachedFileView.php', - 'AphrontCSRFException' => 'aphront/exception/AphrontCSRFException.php', + 'AphrontAutoIDView' => 'view/AphrontAutoIDView.php', + 'AphrontBarView' => 'view/widget/bars/AphrontBarView.php', + 'AphrontBaseMySQLDatabaseConnection' => 'infrastructure/storage/connection/mysql/AphrontBaseMySQLDatabaseConnection.php', + 'AphrontBoolHTTPParameterType' => 'aphront/httpparametertype/AphrontBoolHTTPParameterType.php', 'AphrontCalendarEventView' => 'applications/calendar/view/AphrontCalendarEventView.php', - 'AphrontCalendarMonthView' => 'applications/calendar/view/AphrontCalendarMonthView.php', - 'AphrontContextBarView' => 'view/layout/AphrontContextBarView.php', + 'AphrontCharacterSetQueryException' => 'infrastructure/storage/exception/AphrontCharacterSetQueryException.php', + 'AphrontConnectionLostQueryException' => 'infrastructure/storage/exception/AphrontConnectionLostQueryException.php', + 'AphrontConnectionQueryException' => 'infrastructure/storage/exception/AphrontConnectionQueryException.php', 'AphrontController' => 'aphront/AphrontController.php', - 'AphrontCrumbsView' => 'view/layout/AphrontCrumbsView.php', - 'AphrontDatabaseConnection' => 'storage/connection/AphrontDatabaseConnection.php', - 'AphrontDatabaseTransactionState' => 'storage/AphrontDatabaseTransactionState.php', - 'AphrontDefaultApplicationConfiguration' => 'aphront/configuration/AphrontDefaultApplicationConfiguration.php', + 'AphrontCountQueryException' => 'infrastructure/storage/exception/AphrontCountQueryException.php', + 'AphrontCursorPagerView' => 'view/control/AphrontCursorPagerView.php', + 'AphrontDatabaseConnection' => 'infrastructure/storage/connection/AphrontDatabaseConnection.php', + 'AphrontDatabaseTableRef' => 'infrastructure/storage/xsprintf/AphrontDatabaseTableRef.php', + 'AphrontDatabaseTableRefInterface' => 'infrastructure/storage/xsprintf/AphrontDatabaseTableRefInterface.php', + 'AphrontDatabaseTransactionState' => 'infrastructure/storage/connection/AphrontDatabaseTransactionState.php', + 'AphrontDeadlockQueryException' => 'infrastructure/storage/exception/AphrontDeadlockQueryException.php', 'AphrontDialogResponse' => 'aphront/response/AphrontDialogResponse.php', 'AphrontDialogView' => 'view/AphrontDialogView.php', - 'AphrontErrorView' => 'view/form/AphrontErrorView.php', + 'AphrontDuplicateKeyQueryException' => 'infrastructure/storage/exception/AphrontDuplicateKeyQueryException.php', + 'AphrontEpochHTTPParameterType' => 'aphront/httpparametertype/AphrontEpochHTTPParameterType.php', 'AphrontException' => 'aphront/exception/AphrontException.php', - 'AphrontFilePreviewView' => 'view/layout/AphrontFilePreviewView.php', + 'AphrontFileHTTPParameterType' => 'aphront/httpparametertype/AphrontFileHTTPParameterType.php', 'AphrontFileResponse' => 'aphront/response/AphrontFileResponse.php', 'AphrontFormCheckboxControl' => 'view/form/control/AphrontFormCheckboxControl.php', 'AphrontFormControl' => 'view/form/control/AphrontFormControl.php', 'AphrontFormDateControl' => 'view/form/control/AphrontFormDateControl.php', + 'AphrontFormDateControlValue' => 'view/form/control/AphrontFormDateControlValue.php', 'AphrontFormDividerControl' => 'view/form/control/AphrontFormDividerControl.php', - 'AphrontFormDragAndDropUploadControl' => 'view/form/control/AphrontFormDragAndDropUploadControl.php', 'AphrontFormFileControl' => 'view/form/control/AphrontFormFileControl.php', - 'AphrontFormInsetView' => 'view/form/AphrontFormInsetView.php', - 'AphrontFormLayoutView' => 'view/form/AphrontFormLayoutView.php', + 'AphrontFormHandlesControl' => 'view/form/control/AphrontFormHandlesControl.php', 'AphrontFormMarkupControl' => 'view/form/control/AphrontFormMarkupControl.php', 'AphrontFormPasswordControl' => 'view/form/control/AphrontFormPasswordControl.php', 'AphrontFormPolicyControl' => 'view/form/control/AphrontFormPolicyControl.php', @@ -50,1073 +222,5975 @@ 'AphrontFormSubmitControl' => 'view/form/control/AphrontFormSubmitControl.php', 'AphrontFormTextAreaControl' => 'view/form/control/AphrontFormTextAreaControl.php', 'AphrontFormTextControl' => 'view/form/control/AphrontFormTextControl.php', - 'AphrontFormToggleButtonsControl' => 'view/form/control/AphrontFormToggleButtonsControl.php', + 'AphrontFormTextWithSubmitControl' => 'view/form/control/AphrontFormTextWithSubmitControl.php', 'AphrontFormTokenizerControl' => 'view/form/control/AphrontFormTokenizerControl.php', + 'AphrontFormTypeaheadControl' => 'view/form/control/AphrontFormTypeaheadControl.php', 'AphrontFormView' => 'view/form/AphrontFormView.php', + 'AphrontGlyphBarView' => 'view/widget/bars/AphrontGlyphBarView.php', + 'AphrontHTMLResponse' => 'aphront/response/AphrontHTMLResponse.php', + 'AphrontHTTPHeaderParser' => 'aphront/headerparser/AphrontHTTPHeaderParser.php', + 'AphrontHTTPHeaderParserTestCase' => 'aphront/headerparser/__tests__/AphrontHTTPHeaderParserTestCase.php', + 'AphrontHTTPParameterType' => 'aphront/httpparametertype/AphrontHTTPParameterType.php', + 'AphrontHTTPProxyResponse' => 'aphront/response/AphrontHTTPProxyResponse.php', 'AphrontHTTPSink' => 'aphront/sink/AphrontHTTPSink.php', 'AphrontHTTPSinkTestCase' => 'aphront/sink/__tests__/AphrontHTTPSinkTestCase.php', - 'AphrontHeadsupActionListView' => 'view/layout/headsup/AphrontHeadsupActionListView.php', - 'AphrontHeadsupActionView' => 'view/layout/headsup/AphrontHeadsupActionView.php', - 'AphrontHeadsupView' => 'view/layout/headsup/AphrontHeadsupView.php', - 'AphrontIDPagerView' => 'view/control/AphrontIDPagerView.php', - 'AphrontIsolatedDatabaseConnection' => 'storage/connection/AphrontIsolatedDatabaseConnection.php', - 'AphrontIsolatedDatabaseConnectionTestCase' => 'storage/connection/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php', + 'AphrontIntHTTPParameterType' => 'aphront/httpparametertype/AphrontIntHTTPParameterType.php', + 'AphrontInvalidCredentialsQueryException' => 'infrastructure/storage/exception/AphrontInvalidCredentialsQueryException.php', + 'AphrontIsolatedDatabaseConnection' => 'infrastructure/storage/connection/AphrontIsolatedDatabaseConnection.php', + 'AphrontIsolatedDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontIsolatedDatabaseConnectionTestCase.php', 'AphrontIsolatedHTTPSink' => 'aphront/sink/AphrontIsolatedHTTPSink.php', + 'AphrontJSONHTTPParameterType' => 'aphront/httpparametertype/AphrontJSONHTTPParameterType.php', 'AphrontJSONResponse' => 'aphront/response/AphrontJSONResponse.php', 'AphrontJavelinView' => 'view/AphrontJavelinView.php', 'AphrontKeyboardShortcutsAvailableView' => 'view/widget/AphrontKeyboardShortcutsAvailableView.php', 'AphrontListFilterView' => 'view/layout/AphrontListFilterView.php', - 'AphrontMiniPanelView' => 'view/layout/AphrontMiniPanelView.php', + 'AphrontListHTTPParameterType' => 'aphront/httpparametertype/AphrontListHTTPParameterType.php', + 'AphrontLockTimeoutQueryException' => 'infrastructure/storage/exception/AphrontLockTimeoutQueryException.php', + 'AphrontMalformedRequestException' => 'aphront/exception/AphrontMalformedRequestException.php', 'AphrontMoreView' => 'view/layout/AphrontMoreView.php', - 'AphrontMySQLDatabaseConnection' => 'storage/connection/mysql/AphrontMySQLDatabaseConnection.php', - 'AphrontMySQLDatabaseConnectionBase' => 'storage/connection/mysql/AphrontMySQLDatabaseConnectionBase.php', - 'AphrontMySQLDatabaseConnectionTestCase' => 'storage/connection/__tests__/AphrontMySQLDatabaseConnectionTestCase.php', - 'AphrontMySQLiDatabaseConnection' => 'storage/connection/mysql/AphrontMySQLiDatabaseConnection.php', + 'AphrontMultiColumnView' => 'view/layout/AphrontMultiColumnView.php', + 'AphrontMultipartParser' => 'aphront/multipartparser/AphrontMultipartParser.php', + 'AphrontMultipartParserTestCase' => 'aphront/multipartparser/__tests__/AphrontMultipartParserTestCase.php', + 'AphrontMultipartPart' => 'aphront/multipartparser/AphrontMultipartPart.php', + 'AphrontMySQLDatabaseConnection' => 'infrastructure/storage/connection/mysql/AphrontMySQLDatabaseConnection.php', + 'AphrontMySQLDatabaseConnectionTestCase' => 'infrastructure/storage/__tests__/AphrontMySQLDatabaseConnectionTestCase.php', + 'AphrontMySQLiDatabaseConnection' => 'infrastructure/storage/connection/mysql/AphrontMySQLiDatabaseConnection.php', + 'AphrontNotSupportedQueryException' => 'infrastructure/storage/exception/AphrontNotSupportedQueryException.php', 'AphrontNullView' => 'view/AphrontNullView.php', + 'AphrontObjectMissingQueryException' => 'infrastructure/storage/exception/AphrontObjectMissingQueryException.php', + 'AphrontPHIDHTTPParameterType' => 'aphront/httpparametertype/AphrontPHIDHTTPParameterType.php', + 'AphrontPHIDListHTTPParameterType' => 'aphront/httpparametertype/AphrontPHIDListHTTPParameterType.php', 'AphrontPHPHTTPSink' => 'aphront/sink/AphrontPHPHTTPSink.php', 'AphrontPageView' => 'view/page/AphrontPageView.php', - 'AphrontPagerView' => 'view/control/AphrontPagerView.php', - 'AphrontPanelView' => 'view/layout/AphrontPanelView.php', + 'AphrontParameterQueryException' => 'infrastructure/storage/exception/AphrontParameterQueryException.php', 'AphrontPlainTextResponse' => 'aphront/response/AphrontPlainTextResponse.php', + 'AphrontProgressBarView' => 'view/widget/bars/AphrontProgressBarView.php', + 'AphrontProjectListHTTPParameterType' => 'aphront/httpparametertype/AphrontProjectListHTTPParameterType.php', 'AphrontProxyResponse' => 'aphront/response/AphrontProxyResponse.php', - 'AphrontQueryAccessDeniedException' => 'storage/exception/AphrontQueryAccessDeniedException.php', - 'AphrontQueryConnectionException' => 'storage/exception/AphrontQueryConnectionException.php', - 'AphrontQueryConnectionLostException' => 'storage/exception/AphrontQueryConnectionLostException.php', - 'AphrontQueryCountException' => 'storage/exception/AphrontQueryCountException.php', - 'AphrontQueryDeadlockException' => 'storage/exception/AphrontQueryDeadlockException.php', - 'AphrontQueryDuplicateKeyException' => 'storage/exception/AphrontQueryDuplicateKeyException.php', - 'AphrontQueryException' => 'storage/exception/AphrontQueryException.php', - 'AphrontQueryObjectMissingException' => 'storage/exception/AphrontQueryObjectMissingException.php', - 'AphrontQueryParameterException' => 'storage/exception/AphrontQueryParameterException.php', - 'AphrontQueryRecoverableException' => 'storage/exception/AphrontQueryRecoverableException.php', - 'AphrontQuerySchemaException' => 'storage/exception/AphrontQuerySchemaException.php', - 'AphrontRedirectException' => 'aphront/exception/AphrontRedirectException.php', + 'AphrontQueryException' => 'infrastructure/storage/exception/AphrontQueryException.php', + 'AphrontQueryTimeoutQueryException' => 'infrastructure/storage/exception/AphrontQueryTimeoutQueryException.php', + 'AphrontRecoverableQueryException' => 'infrastructure/storage/exception/AphrontRecoverableQueryException.php', 'AphrontRedirectResponse' => 'aphront/response/AphrontRedirectResponse.php', + 'AphrontRedirectResponseTestCase' => 'aphront/response/__tests__/AphrontRedirectResponseTestCase.php', 'AphrontReloadResponse' => 'aphront/response/AphrontReloadResponse.php', + 'AphrontRemarkupHTTPParameterType' => 'aphront/httpparametertype/AphrontRemarkupHTTPParameterType.php', 'AphrontRequest' => 'aphront/AphrontRequest.php', - 'AphrontRequestFailureView' => 'view/page/AphrontRequestFailureView.php', + 'AphrontRequestExceptionHandler' => 'aphront/handler/AphrontRequestExceptionHandler.php', + 'AphrontRequestStream' => 'aphront/requeststream/AphrontRequestStream.php', 'AphrontRequestTestCase' => 'aphront/__tests__/AphrontRequestTestCase.php', 'AphrontResponse' => 'aphront/response/AphrontResponse.php', + 'AphrontResponseProducerInterface' => 'aphront/interface/AphrontResponseProducerInterface.php', + 'AphrontRoutingMap' => 'aphront/site/AphrontRoutingMap.php', + 'AphrontRoutingMapTestCase' => 'aphront/__tests__/AphrontRoutingMapTestCase.php', + 'AphrontRoutingResult' => 'aphront/site/AphrontRoutingResult.php', + 'AphrontSchemaQueryException' => 'infrastructure/storage/exception/AphrontSchemaQueryException.php', 'AphrontScopedUnguardedWriteCapability' => 'aphront/writeguard/AphrontScopedUnguardedWriteCapability.php', + 'AphrontSelectHTTPParameterType' => 'aphront/httpparametertype/AphrontSelectHTTPParameterType.php', 'AphrontSideNavFilterView' => 'view/layout/AphrontSideNavFilterView.php', - 'AphrontSideNavView' => 'view/layout/AphrontSideNavView.php', + 'AphrontSite' => 'aphront/site/AphrontSite.php', + 'AphrontStackTraceView' => 'view/widget/AphrontStackTraceView.php', + 'AphrontStandaloneHTMLResponse' => 'aphront/response/AphrontStandaloneHTMLResponse.php', + 'AphrontStringHTTPParameterType' => 'aphront/httpparametertype/AphrontStringHTTPParameterType.php', + 'AphrontStringListHTTPParameterType' => 'aphront/httpparametertype/AphrontStringListHTTPParameterType.php', 'AphrontTableView' => 'view/control/AphrontTableView.php', + 'AphrontTagView' => 'view/AphrontTagView.php', 'AphrontTokenizerTemplateView' => 'view/control/AphrontTokenizerTemplateView.php', 'AphrontTypeaheadTemplateView' => 'view/control/AphrontTypeaheadTemplateView.php', - 'AphrontURIMapper' => 'aphront/AphrontURIMapper.php', - 'AphrontUsageException' => 'aphront/exception/AphrontUsageException.php', + 'AphrontUnhandledExceptionResponse' => 'aphront/response/AphrontUnhandledExceptionResponse.php', + 'AphrontUserListHTTPParameterType' => 'aphront/httpparametertype/AphrontUserListHTTPParameterType.php', 'AphrontView' => 'view/AphrontView.php', 'AphrontWebpageResponse' => 'aphront/response/AphrontWebpageResponse.php', 'AphrontWriteGuard' => 'aphront/writeguard/AphrontWriteGuard.php', - 'CelerityAPI' => 'infrastructure/celerity/CelerityAPI.php', - 'CelerityResourceController' => 'infrastructure/celerity/CelerityResourceController.php', - 'CelerityResourceGraph' => 'infrastructure/celerity/CelerityResourceGraph.php', - 'CelerityResourceMap' => 'infrastructure/celerity/CelerityResourceMap.php', - 'CelerityResourceTransformer' => 'infrastructure/celerity/CelerityResourceTransformer.php', - 'CelerityResourceTransformerTestCase' => 'infrastructure/celerity/__tests__/CelerityResourceTransformerTestCase.php', - 'CelerityStaticResourceResponse' => 'infrastructure/celerity/CelerityStaticResourceResponse.php', + 'ArcanistConduitAPIMethod' => 'applications/arcanist/conduit/ArcanistConduitAPIMethod.php', + 'AuditConduitAPIMethod' => 'applications/audit/conduit/AuditConduitAPIMethod.php', + 'AuditQueryConduitAPIMethod' => 'applications/audit/conduit/AuditQueryConduitAPIMethod.php', + 'AuthManageProvidersCapability' => 'applications/auth/capability/AuthManageProvidersCapability.php', + 'BulkParameterType' => 'applications/transactions/bulk/type/BulkParameterType.php', + 'BulkPointsParameterType' => 'applications/transactions/bulk/type/BulkPointsParameterType.php', + 'BulkRemarkupParameterType' => 'applications/transactions/bulk/type/BulkRemarkupParameterType.php', + 'BulkSelectParameterType' => 'applications/transactions/bulk/type/BulkSelectParameterType.php', + 'BulkStringParameterType' => 'applications/transactions/bulk/type/BulkStringParameterType.php', + 'BulkTokenizerParameterType' => 'applications/transactions/bulk/type/BulkTokenizerParameterType.php', + 'CalendarTimeUtil' => 'applications/calendar/util/CalendarTimeUtil.php', + 'CalendarTimeUtilTestCase' => 'applications/calendar/__tests__/CalendarTimeUtilTestCase.php', + 'CelerityAPI' => 'applications/celerity/CelerityAPI.php', + 'CelerityDarkModePostprocessor' => 'applications/celerity/postprocessor/CelerityDarkModePostprocessor.php', + 'CelerityDefaultPostprocessor' => 'applications/celerity/postprocessor/CelerityDefaultPostprocessor.php', + 'CelerityHighContrastPostprocessor' => 'applications/celerity/postprocessor/CelerityHighContrastPostprocessor.php', + 'CelerityLargeFontPostprocessor' => 'applications/celerity/postprocessor/CelerityLargeFontPostprocessor.php', + 'CelerityManagementMapWorkflow' => 'applications/celerity/management/CelerityManagementMapWorkflow.php', + 'CelerityManagementSyntaxWorkflow' => 'applications/celerity/management/CelerityManagementSyntaxWorkflow.php', + 'CelerityManagementWorkflow' => 'applications/celerity/management/CelerityManagementWorkflow.php', + 'CelerityPhabricatorResourceController' => 'applications/celerity/controller/CelerityPhabricatorResourceController.php', + 'CelerityPhabricatorResources' => 'applications/celerity/resources/CelerityPhabricatorResources.php', + 'CelerityPhysicalResources' => 'applications/celerity/resources/CelerityPhysicalResources.php', + 'CelerityPhysicalResourcesTestCase' => 'applications/celerity/resources/__tests__/CelerityPhysicalResourcesTestCase.php', + 'CelerityPostprocessor' => 'applications/celerity/postprocessor/CelerityPostprocessor.php', + 'CelerityPostprocessorTestCase' => 'applications/celerity/__tests__/CelerityPostprocessorTestCase.php', + 'CelerityRedGreenPostprocessor' => 'applications/celerity/postprocessor/CelerityRedGreenPostprocessor.php', + 'CelerityResourceController' => 'applications/celerity/controller/CelerityResourceController.php', + 'CelerityResourceGraph' => 'applications/celerity/CelerityResourceGraph.php', + 'CelerityResourceMap' => 'applications/celerity/CelerityResourceMap.php', + 'CelerityResourceMapGenerator' => 'applications/celerity/CelerityResourceMapGenerator.php', + 'CelerityResourceTransformer' => 'applications/celerity/CelerityResourceTransformer.php', + 'CelerityResourceTransformerTestCase' => 'applications/celerity/__tests__/CelerityResourceTransformerTestCase.php', + 'CelerityResources' => 'applications/celerity/resources/CelerityResources.php', + 'CelerityResourcesOnDisk' => 'applications/celerity/resources/CelerityResourcesOnDisk.php', + 'CeleritySpriteGenerator' => 'applications/celerity/CeleritySpriteGenerator.php', + 'CelerityStaticResourceResponse' => 'applications/celerity/CelerityStaticResourceResponse.php', + 'ChatLogConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogConduitAPIMethod.php', + 'ChatLogQueryConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogQueryConduitAPIMethod.php', + 'ChatLogRecordConduitAPIMethod' => 'applications/chatlog/conduit/ChatLogRecordConduitAPIMethod.php', + 'ConduitAPIDocumentationPage' => 'applications/conduit/data/ConduitAPIDocumentationPage.php', 'ConduitAPIMethod' => 'applications/conduit/method/ConduitAPIMethod.php', + 'ConduitAPIMethodTestCase' => 'applications/conduit/method/__tests__/ConduitAPIMethodTestCase.php', 'ConduitAPIRequest' => 'applications/conduit/protocol/ConduitAPIRequest.php', 'ConduitAPIResponse' => 'applications/conduit/protocol/ConduitAPIResponse.php', - 'ConduitAPI_arcanist_Method' => 'applications/conduit/method/arcanist/ConduitAPI_arcanist_Method.php', - 'ConduitAPI_arcanist_projectinfo_Method' => 'applications/conduit/method/arcanist/ConduitAPI_arcanist_projectinfo_Method.php', - 'ConduitAPI_audit_Method' => 'applications/conduit/method/audit/ConduitAPI_audit_Method.php', - 'ConduitAPI_audit_query_Method' => 'applications/conduit/method/audit/ConduitAPI_audit_query_Method.php', - 'ConduitAPI_chatlog_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_Method.php', - 'ConduitAPI_chatlog_query_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_query_Method.php', - 'ConduitAPI_chatlog_record_Method' => 'applications/conduit/method/chatlog/ConduitAPI_chatlog_record_Method.php', - 'ConduitAPI_conduit_connect_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_connect_Method.php', - 'ConduitAPI_conduit_getcertificate_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_getcertificate_Method.php', - 'ConduitAPI_conduit_ping_Method' => 'applications/conduit/method/conduit/ConduitAPI_conduit_ping_Method.php', - 'ConduitAPI_daemon_launched_Method' => 'applications/conduit/method/daemon/ConduitAPI_daemon_launched_Method.php', - 'ConduitAPI_daemon_log_Method' => 'applications/conduit/method/daemon/ConduitAPI_daemon_log_Method.php', - 'ConduitAPI_differential_close_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_close_Method.php', - 'ConduitAPI_differential_createcomment_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createcomment_Method.php', - 'ConduitAPI_differential_creatediff_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_creatediff_Method.php', - 'ConduitAPI_differential_createrevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_createrevision_Method.php', - 'ConduitAPI_differential_find_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_find_Method.php', - 'ConduitAPI_differential_getalldiffs_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getalldiffs_Method.php', - 'ConduitAPI_differential_getcommitmessage_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getcommitmessage_Method.php', - 'ConduitAPI_differential_getcommitpaths_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getcommitpaths_Method.php', - 'ConduitAPI_differential_getdiff_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getdiff_Method.php', - 'ConduitAPI_differential_getrevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevision_Method.php', - 'ConduitAPI_differential_getrevisioncomments_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevisioncomments_Method.php', - 'ConduitAPI_differential_getrevisionfeedback_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_getrevisionfeedback_Method.php', - 'ConduitAPI_differential_markcommitted_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_markcommitted_Method.php', - 'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_parsecommitmessage_Method.php', - 'ConduitAPI_differential_query_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_query_Method.php', - 'ConduitAPI_differential_setdiffproperty_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_setdiffproperty_Method.php', - 'ConduitAPI_differential_updaterevision_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updaterevision_Method.php', - 'ConduitAPI_differential_updatetaskrevisionassoc_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updatetaskrevisionassoc_Method.php', - 'ConduitAPI_differential_updateunitresults_Method' => 'applications/conduit/method/differential/ConduitAPI_differential_updateunitresults_Method.php', - 'ConduitAPI_diffusion_findsymbols_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_findsymbols_Method.php', - 'ConduitAPI_diffusion_getcommits_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_getcommits_Method.php', - 'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'applications/conduit/method/diffusion/ConduitAPI_diffusion_getrecentcommitsbypath_Method.php', - 'ConduitAPI_feed_publish_Method' => 'applications/conduit/method/feed/ConduitAPI_feed_publish_Method.php', - 'ConduitAPI_feed_query_Method' => 'applications/conduit/method/feed/ConduitAPI_feed_query_Method.php', - 'ConduitAPI_file_download_Method' => 'applications/conduit/method/file/ConduitAPI_file_download_Method.php', - 'ConduitAPI_file_info_Method' => 'applications/conduit/method/file/ConduitAPI_file_info_Method.php', - 'ConduitAPI_file_upload_Method' => 'applications/conduit/method/file/ConduitAPI_file_upload_Method.php', - 'ConduitAPI_flag_Method' => 'applications/conduit/method/flag/ConduitAPI_flag_Method.php', - 'ConduitAPI_flag_query_Method' => 'applications/conduit/method/flag/ConduitAPI_flag_query_Method.php', - 'ConduitAPI_macro_Method' => 'applications/conduit/method/macro/ConduitAPI_macro_Method.php', - 'ConduitAPI_macro_query_Method' => 'applications/conduit/method/macro/ConduitAPI_macro_query_Method.php', - 'ConduitAPI_maniphest_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_Method.php', - 'ConduitAPI_maniphest_createtask_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_createtask_Method.php', - 'ConduitAPI_maniphest_find_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_find_Method.php', - 'ConduitAPI_maniphest_gettasktransactions_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_gettasktransactions_Method.php', - 'ConduitAPI_maniphest_info_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_info_Method.php', - 'ConduitAPI_maniphest_update_Method' => 'applications/conduit/method/maniphest/ConduitAPI_maniphest_update_Method.php', - 'ConduitAPI_owners_query_Method' => 'applications/conduit/method/owners/ConduitAPI_owners_query_Method.php', - 'ConduitAPI_paste_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_Method.php', - 'ConduitAPI_paste_create_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_create_Method.php', - 'ConduitAPI_paste_info_Method' => 'applications/conduit/method/paste/ConduitAPI_paste_info_Method.php', - 'ConduitAPI_path_getowners_Method' => 'applications/conduit/method/path/ConduitAPI_path_getowners_Method.php', - 'ConduitAPI_phid_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_Method.php', - 'ConduitAPI_phid_info_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_info_Method.php', - 'ConduitAPI_phid_query_Method' => 'applications/conduit/method/phid/ConduitAPI_phid_query_Method.php', - 'ConduitAPI_phriction_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_Method.php', - 'ConduitAPI_phriction_edit_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_edit_Method.php', - 'ConduitAPI_phriction_history_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_history_Method.php', - 'ConduitAPI_phriction_info_Method' => 'applications/conduit/method/phriction/ConduitAPI_phriction_info_Method.php', - 'ConduitAPI_project_Method' => 'applications/conduit/method/project/ConduitAPI_project_Method.php', - 'ConduitAPI_project_query_Method' => 'applications/conduit/method/project/ConduitAPI_project_query_Method.php', - 'ConduitAPI_remarkup_process_Method' => 'applications/conduit/method/remarkup/ConduitAPI_remarkup_process_Method.php', - 'ConduitAPI_repository_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_Method.php', - 'ConduitAPI_repository_create_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_create_Method.php', - 'ConduitAPI_repository_query_Method' => 'applications/conduit/method/repository/ConduitAPI_repository_query_Method.php', - 'ConduitAPI_slowvote_info_Method' => 'applications/conduit/method/slowvote/ConduitAPI_slowvote_info_Method.php', - 'ConduitAPI_user_Method' => 'applications/conduit/method/user/ConduitAPI_user_Method.php', - 'ConduitAPI_user_addstatus_Method' => 'applications/conduit/method/user/ConduitAPI_user_addstatus_Method.php', - 'ConduitAPI_user_disable_Method' => 'applications/conduit/method/user/ConduitAPI_user_disable_Method.php', - 'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/ConduitAPI_user_find_Method.php', - 'ConduitAPI_user_info_Method' => 'applications/conduit/method/user/ConduitAPI_user_info_Method.php', - 'ConduitAPI_user_query_Method' => 'applications/conduit/method/user/ConduitAPI_user_query_Method.php', - 'ConduitAPI_user_removestatus_Method' => 'applications/conduit/method/user/ConduitAPI_user_removestatus_Method.php', - 'ConduitAPI_user_whoami_Method' => 'applications/conduit/method/user/ConduitAPI_user_whoami_Method.php', + 'ConduitApplicationNotInstalledException' => 'applications/conduit/protocol/exception/ConduitApplicationNotInstalledException.php', + 'ConduitBoolParameterType' => 'applications/conduit/parametertype/ConduitBoolParameterType.php', 'ConduitCall' => 'applications/conduit/call/ConduitCall.php', 'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php', - 'ConduitException' => 'applications/conduit/protocol/ConduitException.php', - 'DarkConsoleConfigPlugin' => 'aphront/console/plugin/DarkConsoleConfigPlugin.php', - 'DarkConsoleController' => 'aphront/console/DarkConsoleController.php', - 'DarkConsoleCore' => 'aphront/console/DarkConsoleCore.php', - 'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/DarkConsoleErrorLogPlugin.php', - 'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php', - 'DarkConsoleEventPlugin' => 'aphront/console/plugin/DarkConsoleEventPlugin.php', - 'DarkConsoleEventPluginAPI' => 'aphront/console/plugin/event/DarkConsoleEventPluginAPI.php', - 'DarkConsolePlugin' => 'aphront/console/plugin/DarkConsolePlugin.php', - 'DarkConsoleRequestPlugin' => 'aphront/console/plugin/DarkConsoleRequestPlugin.php', - 'DarkConsoleServicesPlugin' => 'aphront/console/plugin/DarkConsoleServicesPlugin.php', - 'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/DarkConsoleXHProfPlugin.php', - 'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php', - 'DatabaseConfigurationProvider' => 'applications/base/storage/configuration/DatabaseConfigurationProvider.php', - 'DefaultDatabaseConfigurationProvider' => 'applications/base/storage/configuration/DefaultDatabaseConfigurationProvider.php', + 'ConduitColumnsParameterType' => 'applications/conduit/parametertype/ConduitColumnsParameterType.php', + 'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php', + 'ConduitConstantDescription' => 'applications/conduit/data/ConduitConstantDescription.php', + 'ConduitEpochParameterType' => 'applications/conduit/parametertype/ConduitEpochParameterType.php', + 'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php', + 'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php', + 'ConduitGetCertificateConduitAPIMethod' => 'applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php', + 'ConduitIntListParameterType' => 'applications/conduit/parametertype/ConduitIntListParameterType.php', + 'ConduitIntParameterType' => 'applications/conduit/parametertype/ConduitIntParameterType.php', + 'ConduitListParameterType' => 'applications/conduit/parametertype/ConduitListParameterType.php', + 'ConduitLogGarbageCollector' => 'applications/conduit/garbagecollector/ConduitLogGarbageCollector.php', + 'ConduitMethodDoesNotExistException' => 'applications/conduit/protocol/exception/ConduitMethodDoesNotExistException.php', + 'ConduitMethodNotFoundException' => 'applications/conduit/protocol/exception/ConduitMethodNotFoundException.php', + 'ConduitPHIDListParameterType' => 'applications/conduit/parametertype/ConduitPHIDListParameterType.php', + 'ConduitPHIDParameterType' => 'applications/conduit/parametertype/ConduitPHIDParameterType.php', + 'ConduitParameterType' => 'applications/conduit/parametertype/ConduitParameterType.php', + 'ConduitPingConduitAPIMethod' => 'applications/conduit/method/ConduitPingConduitAPIMethod.php', + 'ConduitPointsParameterType' => 'applications/conduit/parametertype/ConduitPointsParameterType.php', + 'ConduitProjectListParameterType' => 'applications/conduit/parametertype/ConduitProjectListParameterType.php', + 'ConduitQueryConduitAPIMethod' => 'applications/conduit/method/ConduitQueryConduitAPIMethod.php', + 'ConduitResultSearchEngineExtension' => 'applications/conduit/query/ConduitResultSearchEngineExtension.php', + 'ConduitSSHWorkflow' => 'applications/conduit/ssh/ConduitSSHWorkflow.php', + 'ConduitStringListParameterType' => 'applications/conduit/parametertype/ConduitStringListParameterType.php', + 'ConduitStringParameterType' => 'applications/conduit/parametertype/ConduitStringParameterType.php', + 'ConduitTokenGarbageCollector' => 'applications/conduit/garbagecollector/ConduitTokenGarbageCollector.php', + 'ConduitUserListParameterType' => 'applications/conduit/parametertype/ConduitUserListParameterType.php', + 'ConduitUserParameterType' => 'applications/conduit/parametertype/ConduitUserParameterType.php', + 'ConduitWildParameterType' => 'applications/conduit/parametertype/ConduitWildParameterType.php', + 'ConpherenceColumnViewController' => 'applications/conpherence/controller/ConpherenceColumnViewController.php', + 'ConpherenceConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceConduitAPIMethod.php', + 'ConpherenceConstants' => 'applications/conpherence/constants/ConpherenceConstants.php', + 'ConpherenceController' => 'applications/conpherence/controller/ConpherenceController.php', + 'ConpherenceCreateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceCreateThreadConduitAPIMethod.php', + 'ConpherenceDAO' => 'applications/conpherence/storage/ConpherenceDAO.php', + 'ConpherenceDurableColumnView' => 'applications/conpherence/view/ConpherenceDurableColumnView.php', + 'ConpherenceEditConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceEditConduitAPIMethod.php', + 'ConpherenceEditEngine' => 'applications/conpherence/editor/ConpherenceEditEngine.php', + 'ConpherenceEditor' => 'applications/conpherence/editor/ConpherenceEditor.php', + 'ConpherenceFulltextQuery' => 'applications/conpherence/query/ConpherenceFulltextQuery.php', + 'ConpherenceIndex' => 'applications/conpherence/storage/ConpherenceIndex.php', + 'ConpherenceLayoutView' => 'applications/conpherence/view/ConpherenceLayoutView.php', + 'ConpherenceListController' => 'applications/conpherence/controller/ConpherenceListController.php', + 'ConpherenceMenuItemView' => 'applications/conpherence/view/ConpherenceMenuItemView.php', + 'ConpherenceNotificationPanelController' => 'applications/conpherence/controller/ConpherenceNotificationPanelController.php', + 'ConpherenceParticipant' => 'applications/conpherence/storage/ConpherenceParticipant.php', + 'ConpherenceParticipantController' => 'applications/conpherence/controller/ConpherenceParticipantController.php', + 'ConpherenceParticipantCountQuery' => 'applications/conpherence/query/ConpherenceParticipantCountQuery.php', + 'ConpherenceParticipantQuery' => 'applications/conpherence/query/ConpherenceParticipantQuery.php', + 'ConpherenceParticipantView' => 'applications/conpherence/view/ConpherenceParticipantView.php', + 'ConpherenceQueryThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryThreadConduitAPIMethod.php', + 'ConpherenceQueryTransactionConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceQueryTransactionConduitAPIMethod.php', + 'ConpherenceReplyHandler' => 'applications/conpherence/mail/ConpherenceReplyHandler.php', + 'ConpherenceRoomEditController' => 'applications/conpherence/controller/ConpherenceRoomEditController.php', + 'ConpherenceRoomListController' => 'applications/conpherence/controller/ConpherenceRoomListController.php', + 'ConpherenceRoomPictureController' => 'applications/conpherence/controller/ConpherenceRoomPictureController.php', + 'ConpherenceRoomPreferencesController' => 'applications/conpherence/controller/ConpherenceRoomPreferencesController.php', + 'ConpherenceRoomSettings' => 'applications/conpherence/constants/ConpherenceRoomSettings.php', + 'ConpherenceRoomTestCase' => 'applications/conpherence/__tests__/ConpherenceRoomTestCase.php', + 'ConpherenceSchemaSpec' => 'applications/conpherence/storage/ConpherenceSchemaSpec.php', + 'ConpherenceTestCase' => 'applications/conpherence/__tests__/ConpherenceTestCase.php', + 'ConpherenceThread' => 'applications/conpherence/storage/ConpherenceThread.php', + 'ConpherenceThreadDatasource' => 'applications/conpherence/typeahead/ConpherenceThreadDatasource.php', + 'ConpherenceThreadDateMarkerTransaction' => 'applications/conpherence/xaction/ConpherenceThreadDateMarkerTransaction.php', + 'ConpherenceThreadIndexEngineExtension' => 'applications/conpherence/engineextension/ConpherenceThreadIndexEngineExtension.php', + 'ConpherenceThreadListView' => 'applications/conpherence/view/ConpherenceThreadListView.php', + 'ConpherenceThreadMailReceiver' => 'applications/conpherence/mail/ConpherenceThreadMailReceiver.php', + 'ConpherenceThreadMembersPolicyRule' => 'applications/conpherence/policyrule/ConpherenceThreadMembersPolicyRule.php', + 'ConpherenceThreadParticipantsTransaction' => 'applications/conpherence/xaction/ConpherenceThreadParticipantsTransaction.php', + 'ConpherenceThreadPictureTransaction' => 'applications/conpherence/xaction/ConpherenceThreadPictureTransaction.php', + 'ConpherenceThreadQuery' => 'applications/conpherence/query/ConpherenceThreadQuery.php', + 'ConpherenceThreadRemarkupRule' => 'applications/conpherence/remarkup/ConpherenceThreadRemarkupRule.php', + 'ConpherenceThreadSearchController' => 'applications/conpherence/controller/ConpherenceThreadSearchController.php', + 'ConpherenceThreadSearchEngine' => 'applications/conpherence/query/ConpherenceThreadSearchEngine.php', + 'ConpherenceThreadTitleNgrams' => 'applications/conpherence/storage/ConpherenceThreadTitleNgrams.php', + 'ConpherenceThreadTitleTransaction' => 'applications/conpherence/xaction/ConpherenceThreadTitleTransaction.php', + 'ConpherenceThreadTopicTransaction' => 'applications/conpherence/xaction/ConpherenceThreadTopicTransaction.php', + 'ConpherenceThreadTransactionType' => 'applications/conpherence/xaction/ConpherenceThreadTransactionType.php', + 'ConpherenceTransaction' => 'applications/conpherence/storage/ConpherenceTransaction.php', + 'ConpherenceTransactionComment' => 'applications/conpherence/storage/ConpherenceTransactionComment.php', + 'ConpherenceTransactionQuery' => 'applications/conpherence/query/ConpherenceTransactionQuery.php', + 'ConpherenceTransactionRenderer' => 'applications/conpherence/ConpherenceTransactionRenderer.php', + 'ConpherenceTransactionView' => 'applications/conpherence/view/ConpherenceTransactionView.php', + 'ConpherenceUpdateActions' => 'applications/conpherence/constants/ConpherenceUpdateActions.php', + 'ConpherenceUpdateController' => 'applications/conpherence/controller/ConpherenceUpdateController.php', + 'ConpherenceUpdateThreadConduitAPIMethod' => 'applications/conpherence/conduit/ConpherenceUpdateThreadConduitAPIMethod.php', + 'ConpherenceViewController' => 'applications/conpherence/controller/ConpherenceViewController.php', + 'CountdownEditConduitAPIMethod' => 'applications/countdown/conduit/CountdownEditConduitAPIMethod.php', + 'CountdownSearchConduitAPIMethod' => 'applications/countdown/conduit/CountdownSearchConduitAPIMethod.php', + 'DarkConsoleController' => 'applications/console/controller/DarkConsoleController.php', + 'DarkConsoleCore' => 'applications/console/core/DarkConsoleCore.php', + 'DarkConsoleDataController' => 'applications/console/controller/DarkConsoleDataController.php', + 'DarkConsoleErrorLogPlugin' => 'applications/console/plugin/DarkConsoleErrorLogPlugin.php', + 'DarkConsoleErrorLogPluginAPI' => 'applications/console/plugin/errorlog/DarkConsoleErrorLogPluginAPI.php', + 'DarkConsoleEventPlugin' => 'applications/console/plugin/DarkConsoleEventPlugin.php', + 'DarkConsoleEventPluginAPI' => 'applications/console/plugin/event/DarkConsoleEventPluginAPI.php', + 'DarkConsolePlugin' => 'applications/console/plugin/DarkConsolePlugin.php', + 'DarkConsoleRealtimePlugin' => 'applications/console/plugin/DarkConsoleRealtimePlugin.php', + 'DarkConsoleRequestPlugin' => 'applications/console/plugin/DarkConsoleRequestPlugin.php', + 'DarkConsoleServicesPlugin' => 'applications/console/plugin/DarkConsoleServicesPlugin.php', + 'DarkConsoleStartupPlugin' => 'applications/console/plugin/DarkConsoleStartupPlugin.php', + 'DarkConsoleXHProfPlugin' => 'applications/console/plugin/DarkConsoleXHProfPlugin.php', + 'DarkConsoleXHProfPluginAPI' => 'applications/console/plugin/xhprof/DarkConsoleXHProfPluginAPI.php', 'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php', - 'DifferentialActionHasNoEffectException' => 'applications/differential/exception/DifferentialActionHasNoEffectException.php', - 'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php', + 'DifferentialActionEmailCommand' => 'applications/differential/command/DifferentialActionEmailCommand.php', + 'DifferentialAdjustmentMapTestCase' => 'applications/differential/storage/__tests__/DifferentialAdjustmentMapTestCase.php', 'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php', - 'DifferentialApplyPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialApplyPatchFieldSpecification.php', - 'DifferentialArcanistProjectFieldSpecification' => 'applications/differential/field/specification/DifferentialArcanistProjectFieldSpecification.php', - 'DifferentialAuditorsFieldSpecification' => 'applications/differential/field/specification/DifferentialAuditorsFieldSpecification.php', - 'DifferentialAuthorFieldSpecification' => 'applications/differential/field/specification/DifferentialAuthorFieldSpecification.php', - 'DifferentialAuxiliaryField' => 'applications/differential/storage/DifferentialAuxiliaryField.php', - 'DifferentialBlameRevisionFieldSpecification' => 'applications/differential/field/specification/DifferentialBlameRevisionFieldSpecification.php', - 'DifferentialBranchFieldSpecification' => 'applications/differential/field/specification/DifferentialBranchFieldSpecification.php', - 'DifferentialCCWelcomeMail' => 'applications/differential/mail/DifferentialCCWelcomeMail.php', - 'DifferentialCCsFieldSpecification' => 'applications/differential/field/specification/DifferentialCCsFieldSpecification.php', + 'DifferentialAffectedPathEngine' => 'applications/differential/engine/DifferentialAffectedPathEngine.php', + 'DifferentialAsanaRepresentationField' => 'applications/differential/customfield/DifferentialAsanaRepresentationField.php', + 'DifferentialAuditorsCommitMessageField' => 'applications/differential/field/DifferentialAuditorsCommitMessageField.php', + 'DifferentialAuditorsField' => 'applications/differential/customfield/DifferentialAuditorsField.php', + 'DifferentialBlameRevisionCommitMessageField' => 'applications/differential/field/DifferentialBlameRevisionCommitMessageField.php', + 'DifferentialBlameRevisionField' => 'applications/differential/customfield/DifferentialBlameRevisionField.php', + 'DifferentialBlockHeraldAction' => 'applications/differential/herald/DifferentialBlockHeraldAction.php', + 'DifferentialBlockingReviewerDatasource' => 'applications/differential/typeahead/DifferentialBlockingReviewerDatasource.php', + 'DifferentialBranchField' => 'applications/differential/customfield/DifferentialBranchField.php', + 'DifferentialBuildableEngine' => 'applications/differential/harbormaster/DifferentialBuildableEngine.php', + 'DifferentialChangeDetailMailView' => 'applications/differential/mail/DifferentialChangeDetailMailView.php', + 'DifferentialChangeHeraldFieldGroup' => 'applications/differential/herald/DifferentialChangeHeraldFieldGroup.php', 'DifferentialChangeType' => 'applications/differential/constants/DifferentialChangeType.php', + 'DifferentialChangesSinceLastUpdateField' => 'applications/differential/customfield/DifferentialChangesSinceLastUpdateField.php', 'DifferentialChangeset' => 'applications/differential/storage/DifferentialChangeset.php', 'DifferentialChangesetDetailView' => 'applications/differential/view/DifferentialChangesetDetailView.php', + 'DifferentialChangesetEngine' => 'applications/differential/engine/DifferentialChangesetEngine.php', + 'DifferentialChangesetHTMLRenderer' => 'applications/differential/render/DifferentialChangesetHTMLRenderer.php', + 'DifferentialChangesetListController' => 'applications/differential/controller/DifferentialChangesetListController.php', 'DifferentialChangesetListView' => 'applications/differential/view/DifferentialChangesetListView.php', + 'DifferentialChangesetOneUpMailRenderer' => 'applications/differential/render/DifferentialChangesetOneUpMailRenderer.php', + 'DifferentialChangesetOneUpRenderer' => 'applications/differential/render/DifferentialChangesetOneUpRenderer.php', + 'DifferentialChangesetOneUpTestRenderer' => 'applications/differential/render/DifferentialChangesetOneUpTestRenderer.php', + 'DifferentialChangesetPHIDType' => 'applications/differential/phid/DifferentialChangesetPHIDType.php', 'DifferentialChangesetParser' => 'applications/differential/parser/DifferentialChangesetParser.php', + 'DifferentialChangesetParserTestCase' => 'applications/differential/parser/__tests__/DifferentialChangesetParserTestCase.php', + 'DifferentialChangesetQuery' => 'applications/differential/query/DifferentialChangesetQuery.php', + 'DifferentialChangesetRenderer' => 'applications/differential/render/DifferentialChangesetRenderer.php', + 'DifferentialChangesetSearchConduitAPIMethod' => 'applications/differential/conduit/DifferentialChangesetSearchConduitAPIMethod.php', + 'DifferentialChangesetSearchEngine' => 'applications/differential/query/DifferentialChangesetSearchEngine.php', + 'DifferentialChangesetTestRenderer' => 'applications/differential/render/DifferentialChangesetTestRenderer.php', + 'DifferentialChangesetTwoUpRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpRenderer.php', + 'DifferentialChangesetTwoUpTestRenderer' => 'applications/differential/render/DifferentialChangesetTwoUpTestRenderer.php', 'DifferentialChangesetViewController' => 'applications/differential/controller/DifferentialChangesetViewController.php', - 'DifferentialComment' => 'applications/differential/storage/DifferentialComment.php', - 'DifferentialCommentEditor' => 'applications/differential/editor/DifferentialCommentEditor.php', - 'DifferentialCommentMail' => 'applications/differential/mail/DifferentialCommentMail.php', - 'DifferentialCommentPreviewController' => 'applications/differential/controller/DifferentialCommentPreviewController.php', - 'DifferentialCommentSaveController' => 'applications/differential/controller/DifferentialCommentSaveController.php', - 'DifferentialCommitsFieldSpecification' => 'applications/differential/field/specification/DifferentialCommitsFieldSpecification.php', + 'DifferentialCloseConduitAPIMethod' => 'applications/differential/conduit/DifferentialCloseConduitAPIMethod.php', + 'DifferentialCommitMessageCustomField' => 'applications/differential/field/DifferentialCommitMessageCustomField.php', + 'DifferentialCommitMessageField' => 'applications/differential/field/DifferentialCommitMessageField.php', + 'DifferentialCommitMessageFieldTestCase' => 'applications/differential/field/__tests__/DifferentialCommitMessageFieldTestCase.php', + 'DifferentialCommitMessageParser' => 'applications/differential/parser/DifferentialCommitMessageParser.php', + 'DifferentialCommitMessageParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCommitMessageParserTestCase.php', + 'DifferentialCommitsField' => 'applications/differential/customfield/DifferentialCommitsField.php', + 'DifferentialCommitsSearchEngineAttachment' => 'applications/differential/engineextension/DifferentialCommitsSearchEngineAttachment.php', + 'DifferentialConduitAPIMethod' => 'applications/differential/conduit/DifferentialConduitAPIMethod.php', + 'DifferentialConflictsCommitMessageField' => 'applications/differential/field/DifferentialConflictsCommitMessageField.php', + 'DifferentialConstantsModule' => 'applications/differential/constants/DifferentialConstantsModule.php', 'DifferentialController' => 'applications/differential/controller/DifferentialController.php', + 'DifferentialCoreCustomField' => 'applications/differential/customfield/DifferentialCoreCustomField.php', + 'DifferentialCreateCommentConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateCommentConduitAPIMethod.php', + 'DifferentialCreateDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateDiffConduitAPIMethod.php', + 'DifferentialCreateInlineConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateInlineConduitAPIMethod.php', + 'DifferentialCreateMailReceiver' => 'applications/differential/mail/DifferentialCreateMailReceiver.php', + 'DifferentialCreateRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRawDiffConduitAPIMethod.php', + 'DifferentialCreateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialCreateRevisionConduitAPIMethod.php', + 'DifferentialCustomField' => 'applications/differential/customfield/DifferentialCustomField.php', + 'DifferentialCustomFieldDependsOnParser' => 'applications/differential/parser/DifferentialCustomFieldDependsOnParser.php', + 'DifferentialCustomFieldDependsOnParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldDependsOnParserTestCase.php', + 'DifferentialCustomFieldNumericIndex' => 'applications/differential/storage/DifferentialCustomFieldNumericIndex.php', + 'DifferentialCustomFieldRevertsParser' => 'applications/differential/parser/DifferentialCustomFieldRevertsParser.php', + 'DifferentialCustomFieldRevertsParserTestCase' => 'applications/differential/parser/__tests__/DifferentialCustomFieldRevertsParserTestCase.php', + 'DifferentialCustomFieldStorage' => 'applications/differential/storage/DifferentialCustomFieldStorage.php', + 'DifferentialCustomFieldStringIndex' => 'applications/differential/storage/DifferentialCustomFieldStringIndex.php', 'DifferentialDAO' => 'applications/differential/storage/DifferentialDAO.php', - 'DifferentialDateCreatedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateCreatedFieldSpecification.php', - 'DifferentialDateModifiedFieldSpecification' => 'applications/differential/field/specification/DifferentialDateModifiedFieldSpecification.php', - 'DifferentialDefaultFieldSelector' => 'applications/differential/field/selector/DifferentialDefaultFieldSelector.php', - 'DifferentialDependenciesFieldSpecification' => 'applications/differential/field/specification/DifferentialDependenciesFieldSpecification.php', + 'DifferentialDefaultViewCapability' => 'applications/differential/capability/DifferentialDefaultViewCapability.php', 'DifferentialDiff' => 'applications/differential/storage/DifferentialDiff.php', - 'DifferentialDiffContentMail' => 'applications/differential/mail/DifferentialDiffContentMail.php', + 'DifferentialDiffAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialDiffAffectedFilesHeraldField.php', + 'DifferentialDiffAuthorHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorHeraldField.php', + 'DifferentialDiffAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffAuthorProjectsHeraldField.php', + 'DifferentialDiffContentAddedHeraldField' => 'applications/differential/herald/DifferentialDiffContentAddedHeraldField.php', + 'DifferentialDiffContentHeraldField' => 'applications/differential/herald/DifferentialDiffContentHeraldField.php', + 'DifferentialDiffContentRemovedHeraldField' => 'applications/differential/herald/DifferentialDiffContentRemovedHeraldField.php', 'DifferentialDiffCreateController' => 'applications/differential/controller/DifferentialDiffCreateController.php', + 'DifferentialDiffEditor' => 'applications/differential/editor/DifferentialDiffEditor.php', + 'DifferentialDiffExtractionEngine' => 'applications/differential/engine/DifferentialDiffExtractionEngine.php', + 'DifferentialDiffHeraldField' => 'applications/differential/herald/DifferentialDiffHeraldField.php', + 'DifferentialDiffHeraldFieldGroup' => 'applications/differential/herald/DifferentialDiffHeraldFieldGroup.php', + 'DifferentialDiffInlineCommentQuery' => 'applications/differential/query/DifferentialDiffInlineCommentQuery.php', + 'DifferentialDiffPHIDType' => 'applications/differential/phid/DifferentialDiffPHIDType.php', 'DifferentialDiffProperty' => 'applications/differential/storage/DifferentialDiffProperty.php', - 'DifferentialDiffTableOfContentsView' => 'applications/differential/view/DifferentialDiffTableOfContentsView.php', + 'DifferentialDiffQuery' => 'applications/differential/query/DifferentialDiffQuery.php', + 'DifferentialDiffRepositoryHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryHeraldField.php', + 'DifferentialDiffRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialDiffRepositoryProjectsHeraldField.php', + 'DifferentialDiffSearchConduitAPIMethod' => 'applications/differential/conduit/DifferentialDiffSearchConduitAPIMethod.php', + 'DifferentialDiffSearchEngine' => 'applications/differential/query/DifferentialDiffSearchEngine.php', + 'DifferentialDiffTestCase' => 'applications/differential/storage/__tests__/DifferentialDiffTestCase.php', + 'DifferentialDiffTransaction' => 'applications/differential/storage/DifferentialDiffTransaction.php', + 'DifferentialDiffTransactionQuery' => 'applications/differential/query/DifferentialDiffTransactionQuery.php', 'DifferentialDiffViewController' => 'applications/differential/controller/DifferentialDiffViewController.php', - 'DifferentialException' => 'applications/differential/exception/DifferentialException.php', - 'DifferentialExceptionMail' => 'applications/differential/mail/DifferentialExceptionMail.php', - 'DifferentialExportPatchFieldSpecification' => 'applications/differential/field/specification/DifferentialExportPatchFieldSpecification.php', - 'DifferentialFieldDataNotAvailableException' => 'applications/differential/field/exception/DifferentialFieldDataNotAvailableException.php', - 'DifferentialFieldParseException' => 'applications/differential/field/exception/DifferentialFieldParseException.php', - 'DifferentialFieldSelector' => 'applications/differential/field/selector/DifferentialFieldSelector.php', - 'DifferentialFieldSpecification' => 'applications/differential/field/specification/DifferentialFieldSpecification.php', - 'DifferentialFieldSpecificationIncompleteException' => 'applications/differential/field/exception/DifferentialFieldSpecificationIncompleteException.php', - 'DifferentialFieldValidationException' => 'applications/differential/field/exception/DifferentialFieldValidationException.php', - 'DifferentialGitSVNIDFieldSpecification' => 'applications/differential/field/specification/DifferentialGitSVNIDFieldSpecification.php', - 'DifferentialHostFieldSpecification' => 'applications/differential/field/specification/DifferentialHostFieldSpecification.php', + 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'applications/differential/doorkeeper/DifferentialDoorkeeperRevisionFeedStoryPublisher.php', + 'DifferentialDraftField' => 'applications/differential/customfield/DifferentialDraftField.php', + 'DifferentialExactUserFunctionDatasource' => 'applications/differential/typeahead/DifferentialExactUserFunctionDatasource.php', + 'DifferentialFieldParseException' => 'applications/differential/exception/DifferentialFieldParseException.php', + 'DifferentialFieldValidationException' => 'applications/differential/exception/DifferentialFieldValidationException.php', + 'DifferentialFileTreeEngine' => 'applications/differential/engine/DifferentialFileTreeEngine.php', + 'DifferentialGetAllDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetAllDiffsConduitAPIMethod.php', + 'DifferentialGetCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitMessageConduitAPIMethod.php', + 'DifferentialGetCommitPathsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetCommitPathsConduitAPIMethod.php', + 'DifferentialGetDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetDiffConduitAPIMethod.php', + 'DifferentialGetRawDiffConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRawDiffConduitAPIMethod.php', + 'DifferentialGetRevisionCommentsConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionCommentsConduitAPIMethod.php', + 'DifferentialGetRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialGetRevisionConduitAPIMethod.php', + 'DifferentialGetWorkingCopy' => 'applications/differential/DifferentialGetWorkingCopy.php', + 'DifferentialGitSVNIDCommitMessageField' => 'applications/differential/field/DifferentialGitSVNIDCommitMessageField.php', + 'DifferentialHarbormasterField' => 'applications/differential/customfield/DifferentialHarbormasterField.php', + 'DifferentialHeraldStateReasons' => 'applications/differential/herald/DifferentialHeraldStateReasons.php', + 'DifferentialHiddenComment' => 'applications/differential/storage/DifferentialHiddenComment.php', + 'DifferentialHostField' => 'applications/differential/customfield/DifferentialHostField.php', + 'DifferentialHovercardEngineExtension' => 'applications/differential/engineextension/DifferentialHovercardEngineExtension.php', 'DifferentialHunk' => 'applications/differential/storage/DifferentialHunk.php', + 'DifferentialHunkParser' => 'applications/differential/parser/DifferentialHunkParser.php', + 'DifferentialHunkParserTestCase' => 'applications/differential/parser/__tests__/DifferentialHunkParserTestCase.php', + 'DifferentialHunkQuery' => 'applications/differential/query/DifferentialHunkQuery.php', + 'DifferentialHunkTestCase' => 'applications/differential/storage/__tests__/DifferentialHunkTestCase.php', 'DifferentialInlineComment' => 'applications/differential/storage/DifferentialInlineComment.php', 'DifferentialInlineCommentEditController' => 'applications/differential/controller/DifferentialInlineCommentEditController.php', - 'DifferentialInlineCommentEditView' => 'applications/differential/view/DifferentialInlineCommentEditView.php', - 'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/DifferentialInlineCommentPreviewController.php', - 'DifferentialInlineCommentView' => 'applications/differential/view/DifferentialInlineCommentView.php', - 'DifferentialLinesFieldSpecification' => 'applications/differential/field/specification/DifferentialLinesFieldSpecification.php', - 'DifferentialLintFieldSpecification' => 'applications/differential/field/specification/DifferentialLintFieldSpecification.php', + 'DifferentialInlineCommentMailView' => 'applications/differential/mail/DifferentialInlineCommentMailView.php', + 'DifferentialJIRAIssuesCommitMessageField' => 'applications/differential/field/DifferentialJIRAIssuesCommitMessageField.php', + 'DifferentialJIRAIssuesField' => 'applications/differential/customfield/DifferentialJIRAIssuesField.php', + 'DifferentialLegacyQuery' => 'applications/differential/constants/DifferentialLegacyQuery.php', + 'DifferentialLineAdjustmentMap' => 'applications/differential/parser/DifferentialLineAdjustmentMap.php', + 'DifferentialLintField' => 'applications/differential/customfield/DifferentialLintField.php', 'DifferentialLintStatus' => 'applications/differential/constants/DifferentialLintStatus.php', 'DifferentialLocalCommitsView' => 'applications/differential/view/DifferentialLocalCommitsView.php', - 'DifferentialMail' => 'applications/differential/mail/DifferentialMail.php', - 'DifferentialMailPhase' => 'applications/differential/constants/DifferentialMailPhase.php', - 'DifferentialManiphestTasksFieldSpecification' => 'applications/differential/field/specification/DifferentialManiphestTasksFieldSpecification.php', - 'DifferentialNewDiffMail' => 'applications/differential/mail/DifferentialNewDiffMail.php', - 'DifferentialPathFieldSpecification' => 'applications/differential/field/specification/DifferentialPathFieldSpecification.php', - 'DifferentialPrimaryPaneView' => 'applications/differential/view/DifferentialPrimaryPaneView.php', - 'DifferentialReplyHandler' => 'applications/differential/DifferentialReplyHandler.php', - 'DifferentialResultsTableView' => 'applications/differential/view/DifferentialResultsTableView.php', - 'DifferentialRevertPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialRevertPlanFieldSpecification.php', - 'DifferentialReviewRequestMail' => 'applications/differential/mail/DifferentialReviewRequestMail.php', - 'DifferentialReviewedByFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewedByFieldSpecification.php', - 'DifferentialReviewersFieldSpecification' => 'applications/differential/field/specification/DifferentialReviewersFieldSpecification.php', + 'DifferentialMailEngineExtension' => 'applications/differential/engineextension/DifferentialMailEngineExtension.php', + 'DifferentialMailView' => 'applications/differential/mail/DifferentialMailView.php', + 'DifferentialManiphestTasksField' => 'applications/differential/customfield/DifferentialManiphestTasksField.php', + 'DifferentialNoReviewersDatasource' => 'applications/differential/typeahead/DifferentialNoReviewersDatasource.php', + 'DifferentialParseCacheGarbageCollector' => 'applications/differential/garbagecollector/DifferentialParseCacheGarbageCollector.php', + 'DifferentialParseCommitMessageConduitAPIMethod' => 'applications/differential/conduit/DifferentialParseCommitMessageConduitAPIMethod.php', + 'DifferentialParseRenderTestCase' => 'applications/differential/__tests__/DifferentialParseRenderTestCase.php', + 'DifferentialPathField' => 'applications/differential/customfield/DifferentialPathField.php', + 'DifferentialProjectReviewersField' => 'applications/differential/customfield/DifferentialProjectReviewersField.php', + 'DifferentialQueryConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryConduitAPIMethod.php', + 'DifferentialQueryDiffsConduitAPIMethod' => 'applications/differential/conduit/DifferentialQueryDiffsConduitAPIMethod.php', + 'DifferentialRawDiffRenderer' => 'applications/differential/render/DifferentialRawDiffRenderer.php', + 'DifferentialRemarkupRule' => 'applications/differential/remarkup/DifferentialRemarkupRule.php', + 'DifferentialReplyHandler' => 'applications/differential/mail/DifferentialReplyHandler.php', + 'DifferentialRepositoryField' => 'applications/differential/customfield/DifferentialRepositoryField.php', + 'DifferentialRepositoryLookup' => 'applications/differential/query/DifferentialRepositoryLookup.php', + 'DifferentialRequiredSignaturesField' => 'applications/differential/customfield/DifferentialRequiredSignaturesField.php', + 'DifferentialResponsibleDatasource' => 'applications/differential/typeahead/DifferentialResponsibleDatasource.php', + 'DifferentialResponsibleUserDatasource' => 'applications/differential/typeahead/DifferentialResponsibleUserDatasource.php', + 'DifferentialResponsibleViewerFunctionDatasource' => 'applications/differential/typeahead/DifferentialResponsibleViewerFunctionDatasource.php', + 'DifferentialRevertPlanCommitMessageField' => 'applications/differential/field/DifferentialRevertPlanCommitMessageField.php', + 'DifferentialRevertPlanField' => 'applications/differential/customfield/DifferentialRevertPlanField.php', + 'DifferentialReviewedByCommitMessageField' => 'applications/differential/field/DifferentialReviewedByCommitMessageField.php', + 'DifferentialReviewer' => 'applications/differential/storage/DifferentialReviewer.php', + 'DifferentialReviewerDatasource' => 'applications/differential/typeahead/DifferentialReviewerDatasource.php', + 'DifferentialReviewerForRevisionEdgeType' => 'applications/differential/edge/DifferentialReviewerForRevisionEdgeType.php', + 'DifferentialReviewerFunctionDatasource' => 'applications/differential/typeahead/DifferentialReviewerFunctionDatasource.php', + 'DifferentialReviewerStatus' => 'applications/differential/constants/DifferentialReviewerStatus.php', + 'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingReviewersHeraldAction.php', + 'DifferentialReviewersAddBlockingSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddBlockingSelfHeraldAction.php', + 'DifferentialReviewersAddReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddReviewersHeraldAction.php', + 'DifferentialReviewersAddSelfHeraldAction' => 'applications/differential/herald/DifferentialReviewersAddSelfHeraldAction.php', + 'DifferentialReviewersCommitMessageField' => 'applications/differential/field/DifferentialReviewersCommitMessageField.php', + 'DifferentialReviewersField' => 'applications/differential/customfield/DifferentialReviewersField.php', + 'DifferentialReviewersHeraldAction' => 'applications/differential/herald/DifferentialReviewersHeraldAction.php', + 'DifferentialReviewersSearchEngineAttachment' => 'applications/differential/engineextension/DifferentialReviewersSearchEngineAttachment.php', + 'DifferentialReviewersView' => 'applications/differential/view/DifferentialReviewersView.php', 'DifferentialRevision' => 'applications/differential/storage/DifferentialRevision.php', - 'DifferentialRevisionCommentListView' => 'applications/differential/view/DifferentialRevisionCommentListView.php', - 'DifferentialRevisionCommentView' => 'applications/differential/view/DifferentialRevisionCommentView.php', + 'DifferentialRevisionAbandonTransaction' => 'applications/differential/xaction/DifferentialRevisionAbandonTransaction.php', + 'DifferentialRevisionAcceptTransaction' => 'applications/differential/xaction/DifferentialRevisionAcceptTransaction.php', + 'DifferentialRevisionActionTransaction' => 'applications/differential/xaction/DifferentialRevisionActionTransaction.php', + 'DifferentialRevisionAffectedFilesHeraldField' => 'applications/differential/herald/DifferentialRevisionAffectedFilesHeraldField.php', + 'DifferentialRevisionAffectedPathsController' => 'applications/differential/controller/DifferentialRevisionAffectedPathsController.php', + 'DifferentialRevisionAuthorHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorHeraldField.php', + 'DifferentialRevisionAuthorPackagesHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorPackagesHeraldField.php', + 'DifferentialRevisionAuthorProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionAuthorProjectsHeraldField.php', + 'DifferentialRevisionAuthorTransaction' => 'applications/differential/xaction/DifferentialRevisionAuthorTransaction.php', + 'DifferentialRevisionBuildableTransaction' => 'applications/differential/xaction/DifferentialRevisionBuildableTransaction.php', + 'DifferentialRevisionCloseDetailsController' => 'applications/differential/controller/DifferentialRevisionCloseDetailsController.php', + 'DifferentialRevisionCloseTransaction' => 'applications/differential/xaction/DifferentialRevisionCloseTransaction.php', + 'DifferentialRevisionClosedStatusDatasource' => 'applications/differential/typeahead/DifferentialRevisionClosedStatusDatasource.php', + 'DifferentialRevisionCommandeerTransaction' => 'applications/differential/xaction/DifferentialRevisionCommandeerTransaction.php', + 'DifferentialRevisionContentAddedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentAddedHeraldField.php', + 'DifferentialRevisionContentHeraldField' => 'applications/differential/herald/DifferentialRevisionContentHeraldField.php', + 'DifferentialRevisionContentRemovedHeraldField' => 'applications/differential/herald/DifferentialRevisionContentRemovedHeraldField.php', 'DifferentialRevisionControlSystem' => 'applications/differential/constants/DifferentialRevisionControlSystem.php', - 'DifferentialRevisionDetailRenderer' => 'applications/differential/controller/DifferentialRevisionDetailRenderer.php', - 'DifferentialRevisionDetailView' => 'applications/differential/view/DifferentialRevisionDetailView.php', + 'DifferentialRevisionDependedOnByRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependedOnByRevisionEdgeType.php', + 'DifferentialRevisionDependsOnRevisionEdgeType' => 'applications/differential/edge/DifferentialRevisionDependsOnRevisionEdgeType.php', + 'DifferentialRevisionDraftEngine' => 'applications/differential/engine/DifferentialRevisionDraftEngine.php', + 'DifferentialRevisionEditConduitAPIMethod' => 'applications/differential/conduit/DifferentialRevisionEditConduitAPIMethod.php', 'DifferentialRevisionEditController' => 'applications/differential/controller/DifferentialRevisionEditController.php', - 'DifferentialRevisionEditor' => 'applications/differential/editor/DifferentialRevisionEditor.php', - 'DifferentialRevisionIDFieldParserTestCase' => 'applications/differential/field/specification/__tests__/DifferentialRevisionIDFieldParserTestCase.php', - 'DifferentialRevisionIDFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionIDFieldSpecification.php', + 'DifferentialRevisionEditEngine' => 'applications/differential/editor/DifferentialRevisionEditEngine.php', + 'DifferentialRevisionFerretEngine' => 'applications/differential/search/DifferentialRevisionFerretEngine.php', + 'DifferentialRevisionFulltextEngine' => 'applications/differential/search/DifferentialRevisionFulltextEngine.php', + 'DifferentialRevisionGraph' => 'infrastructure/graph/DifferentialRevisionGraph.php', + 'DifferentialRevisionHasChildRelationship' => 'applications/differential/relationships/DifferentialRevisionHasChildRelationship.php', + 'DifferentialRevisionHasCommitEdgeType' => 'applications/differential/edge/DifferentialRevisionHasCommitEdgeType.php', + 'DifferentialRevisionHasCommitRelationship' => 'applications/differential/relationships/DifferentialRevisionHasCommitRelationship.php', + 'DifferentialRevisionHasParentRelationship' => 'applications/differential/relationships/DifferentialRevisionHasParentRelationship.php', + 'DifferentialRevisionHasReviewerEdgeType' => 'applications/differential/edge/DifferentialRevisionHasReviewerEdgeType.php', + 'DifferentialRevisionHasTaskEdgeType' => 'applications/differential/edge/DifferentialRevisionHasTaskEdgeType.php', + 'DifferentialRevisionHasTaskRelationship' => 'applications/differential/relationships/DifferentialRevisionHasTaskRelationship.php', + 'DifferentialRevisionHeraldField' => 'applications/differential/herald/DifferentialRevisionHeraldField.php', + 'DifferentialRevisionHeraldFieldGroup' => 'applications/differential/herald/DifferentialRevisionHeraldFieldGroup.php', + 'DifferentialRevisionHoldDraftTransaction' => 'applications/differential/xaction/DifferentialRevisionHoldDraftTransaction.php', + 'DifferentialRevisionIDCommitMessageField' => 'applications/differential/field/DifferentialRevisionIDCommitMessageField.php', + 'DifferentialRevisionInlineTransaction' => 'applications/differential/xaction/DifferentialRevisionInlineTransaction.php', + 'DifferentialRevisionInlinesController' => 'applications/differential/controller/DifferentialRevisionInlinesController.php', + 'DifferentialRevisionJIRAIssueURIsHeraldField' => 'applications/differential/herald/DifferentialRevisionJIRAIssueURIsHeraldField.php', 'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php', - 'DifferentialRevisionListData' => 'applications/differential/data/DifferentialRevisionListData.php', 'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php', + 'DifferentialRevisionMailReceiver' => 'applications/differential/mail/DifferentialRevisionMailReceiver.php', + 'DifferentialRevisionOpenStatusDatasource' => 'applications/differential/typeahead/DifferentialRevisionOpenStatusDatasource.php', + 'DifferentialRevisionOperationController' => 'applications/differential/controller/DifferentialRevisionOperationController.php', + 'DifferentialRevisionPHIDType' => 'applications/differential/phid/DifferentialRevisionPHIDType.php', + 'DifferentialRevisionPackageHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageHeraldField.php', + 'DifferentialRevisionPackageOwnerHeraldField' => 'applications/differential/herald/DifferentialRevisionPackageOwnerHeraldField.php', + 'DifferentialRevisionPlanChangesTransaction' => 'applications/differential/xaction/DifferentialRevisionPlanChangesTransaction.php', 'DifferentialRevisionQuery' => 'applications/differential/query/DifferentialRevisionQuery.php', - 'DifferentialRevisionStatsController' => 'applications/differential/controller/DifferentialRevisionStatsController.php', - 'DifferentialRevisionStatsView' => 'applications/differential/view/DifferentialRevisionStatsView.php', - 'DifferentialRevisionStatusFieldSpecification' => 'applications/differential/field/specification/DifferentialRevisionStatusFieldSpecification.php', + 'DifferentialRevisionReclaimTransaction' => 'applications/differential/xaction/DifferentialRevisionReclaimTransaction.php', + 'DifferentialRevisionRejectTransaction' => 'applications/differential/xaction/DifferentialRevisionRejectTransaction.php', + 'DifferentialRevisionRelationship' => 'applications/differential/relationships/DifferentialRevisionRelationship.php', + 'DifferentialRevisionRelationshipSource' => 'applications/search/relationship/DifferentialRevisionRelationshipSource.php', + 'DifferentialRevisionReopenTransaction' => 'applications/differential/xaction/DifferentialRevisionReopenTransaction.php', + 'DifferentialRevisionRepositoryHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryHeraldField.php', + 'DifferentialRevisionRepositoryProjectsHeraldField' => 'applications/differential/herald/DifferentialRevisionRepositoryProjectsHeraldField.php', + 'DifferentialRevisionRepositoryTransaction' => 'applications/differential/xaction/DifferentialRevisionRepositoryTransaction.php', + 'DifferentialRevisionRequestReviewTransaction' => 'applications/differential/xaction/DifferentialRevisionRequestReviewTransaction.php', + 'DifferentialRevisionRequiredActionResultBucket' => 'applications/differential/query/DifferentialRevisionRequiredActionResultBucket.php', + 'DifferentialRevisionResignTransaction' => 'applications/differential/xaction/DifferentialRevisionResignTransaction.php', + 'DifferentialRevisionResultBucket' => 'applications/differential/query/DifferentialRevisionResultBucket.php', + 'DifferentialRevisionReviewTransaction' => 'applications/differential/xaction/DifferentialRevisionReviewTransaction.php', + 'DifferentialRevisionReviewersHeraldField' => 'applications/differential/herald/DifferentialRevisionReviewersHeraldField.php', + 'DifferentialRevisionReviewersTransaction' => 'applications/differential/xaction/DifferentialRevisionReviewersTransaction.php', + 'DifferentialRevisionSearchConduitAPIMethod' => 'applications/differential/conduit/DifferentialRevisionSearchConduitAPIMethod.php', + 'DifferentialRevisionSearchEngine' => 'applications/differential/query/DifferentialRevisionSearchEngine.php', + 'DifferentialRevisionStatus' => 'applications/differential/constants/DifferentialRevisionStatus.php', + 'DifferentialRevisionStatusDatasource' => 'applications/differential/typeahead/DifferentialRevisionStatusDatasource.php', + 'DifferentialRevisionStatusFunctionDatasource' => 'applications/differential/typeahead/DifferentialRevisionStatusFunctionDatasource.php', + 'DifferentialRevisionStatusHeraldField' => 'applications/differential/herald/DifferentialRevisionStatusHeraldField.php', + 'DifferentialRevisionStatusTransaction' => 'applications/differential/xaction/DifferentialRevisionStatusTransaction.php', + 'DifferentialRevisionSummaryHeraldField' => 'applications/differential/herald/DifferentialRevisionSummaryHeraldField.php', + 'DifferentialRevisionSummaryTransaction' => 'applications/differential/xaction/DifferentialRevisionSummaryTransaction.php', + 'DifferentialRevisionTestPlanHeraldField' => 'applications/differential/herald/DifferentialRevisionTestPlanHeraldField.php', + 'DifferentialRevisionTestPlanTransaction' => 'applications/differential/xaction/DifferentialRevisionTestPlanTransaction.php', + 'DifferentialRevisionTimelineEngine' => 'applications/differential/engine/DifferentialRevisionTimelineEngine.php', + 'DifferentialRevisionTitleHeraldField' => 'applications/differential/herald/DifferentialRevisionTitleHeraldField.php', + 'DifferentialRevisionTitleTransaction' => 'applications/differential/xaction/DifferentialRevisionTitleTransaction.php', + 'DifferentialRevisionTransactionType' => 'applications/differential/xaction/DifferentialRevisionTransactionType.php', 'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/DifferentialRevisionUpdateHistoryView.php', + 'DifferentialRevisionUpdateTransaction' => 'applications/differential/xaction/DifferentialRevisionUpdateTransaction.php', 'DifferentialRevisionViewController' => 'applications/differential/controller/DifferentialRevisionViewController.php', - 'DifferentialSubscribeController' => 'applications/differential/controller/DifferentialSubscribeController.php', - 'DifferentialSummaryFieldSpecification' => 'applications/differential/field/specification/DifferentialSummaryFieldSpecification.php', - 'DifferentialTasksAttacher' => 'applications/differential/DifferentialTasksAttacher.php', - 'DifferentialTestPlanFieldSpecification' => 'applications/differential/field/specification/DifferentialTestPlanFieldSpecification.php', - 'DifferentialTitleFieldSpecification' => 'applications/differential/field/specification/DifferentialTitleFieldSpecification.php', - 'DifferentialUnitFieldSpecification' => 'applications/differential/field/specification/DifferentialUnitFieldSpecification.php', + 'DifferentialRevisionVoidTransaction' => 'applications/differential/xaction/DifferentialRevisionVoidTransaction.php', + 'DifferentialRevisionWrongBuildsTransaction' => 'applications/differential/xaction/DifferentialRevisionWrongBuildsTransaction.php', + 'DifferentialRevisionWrongStateTransaction' => 'applications/differential/xaction/DifferentialRevisionWrongStateTransaction.php', + 'DifferentialSchemaSpec' => 'applications/differential/storage/DifferentialSchemaSpec.php', + 'DifferentialSetDiffPropertyConduitAPIMethod' => 'applications/differential/conduit/DifferentialSetDiffPropertyConduitAPIMethod.php', + 'DifferentialStoredCustomField' => 'applications/differential/customfield/DifferentialStoredCustomField.php', + 'DifferentialSubscribersCommitMessageField' => 'applications/differential/field/DifferentialSubscribersCommitMessageField.php', + 'DifferentialSummaryCommitMessageField' => 'applications/differential/field/DifferentialSummaryCommitMessageField.php', + 'DifferentialSummaryField' => 'applications/differential/customfield/DifferentialSummaryField.php', + 'DifferentialTabReplacementTestCase' => 'applications/differential/parser/__tests__/DifferentialTabReplacementTestCase.php', + 'DifferentialTagsCommitMessageField' => 'applications/differential/field/DifferentialTagsCommitMessageField.php', + 'DifferentialTasksCommitMessageField' => 'applications/differential/field/DifferentialTasksCommitMessageField.php', + 'DifferentialTestPlanCommitMessageField' => 'applications/differential/field/DifferentialTestPlanCommitMessageField.php', + 'DifferentialTestPlanField' => 'applications/differential/customfield/DifferentialTestPlanField.php', + 'DifferentialTitleCommitMessageField' => 'applications/differential/field/DifferentialTitleCommitMessageField.php', + 'DifferentialTransaction' => 'applications/differential/storage/DifferentialTransaction.php', + 'DifferentialTransactionComment' => 'applications/differential/storage/DifferentialTransactionComment.php', + 'DifferentialTransactionEditor' => 'applications/differential/editor/DifferentialTransactionEditor.php', + 'DifferentialTransactionQuery' => 'applications/differential/query/DifferentialTransactionQuery.php', + 'DifferentialTransactionView' => 'applications/differential/view/DifferentialTransactionView.php', + 'DifferentialUnitField' => 'applications/differential/customfield/DifferentialUnitField.php', 'DifferentialUnitStatus' => 'applications/differential/constants/DifferentialUnitStatus.php', 'DifferentialUnitTestResult' => 'applications/differential/constants/DifferentialUnitTestResult.php', - 'DiffusionBranchInformation' => 'applications/diffusion/data/DiffusionBranchInformation.php', - 'DiffusionBranchQuery' => 'applications/diffusion/query/branch/DiffusionBranchQuery.php', + 'DifferentialUpdateRevisionConduitAPIMethod' => 'applications/differential/conduit/DifferentialUpdateRevisionConduitAPIMethod.php', + 'DifferentialViewState' => 'applications/differential/storage/DifferentialViewState.php', + 'DifferentialViewStateGarbageCollector' => 'applications/differential/garbagecollector/DifferentialViewStateGarbageCollector.php', + 'DifferentialViewStateQuery' => 'applications/differential/query/DifferentialViewStateQuery.php', + 'DiffusionAuditorDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorDatasource.php', + 'DiffusionAuditorFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionAuditorFunctionDatasource.php', + 'DiffusionAuditorsAddAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddAuditorsHeraldAction.php', + 'DiffusionAuditorsAddSelfHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsAddSelfHeraldAction.php', + 'DiffusionAuditorsHeraldAction' => 'applications/diffusion/herald/DiffusionAuditorsHeraldAction.php', + 'DiffusionAuditorsSearchEngineAttachment' => 'applications/diffusion/engineextension/DiffusionAuditorsSearchEngineAttachment.php', + 'DiffusionBlameConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBlameConduitAPIMethod.php', + 'DiffusionBlameController' => 'applications/diffusion/controller/DiffusionBlameController.php', + 'DiffusionBlameQuery' => 'applications/diffusion/query/blame/DiffusionBlameQuery.php', + 'DiffusionBlockHeraldAction' => 'applications/diffusion/herald/DiffusionBlockHeraldAction.php', + 'DiffusionBranchListView' => 'applications/diffusion/view/DiffusionBranchListView.php', + 'DiffusionBranchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBranchQueryConduitAPIMethod.php', 'DiffusionBranchTableController' => 'applications/diffusion/controller/DiffusionBranchTableController.php', - 'DiffusionBranchTableView' => 'applications/diffusion/view/DiffusionBranchTableView.php', 'DiffusionBrowseController' => 'applications/diffusion/controller/DiffusionBrowseController.php', - 'DiffusionBrowseFileController' => 'applications/diffusion/controller/DiffusionBrowseFileController.php', - 'DiffusionBrowseQuery' => 'applications/diffusion/query/browse/DiffusionBrowseQuery.php', + 'DiffusionBrowseQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionBrowseQueryConduitAPIMethod.php', + 'DiffusionBrowseResultSet' => 'applications/diffusion/data/DiffusionBrowseResultSet.php', 'DiffusionBrowseTableView' => 'applications/diffusion/view/DiffusionBrowseTableView.php', + 'DiffusionBuildableEngine' => 'applications/diffusion/harbormaster/DiffusionBuildableEngine.php', + 'DiffusionCacheEngineExtension' => 'applications/diffusion/engineextension/DiffusionCacheEngineExtension.php', + 'DiffusionCachedResolveRefsQuery' => 'applications/diffusion/query/DiffusionCachedResolveRefsQuery.php', 'DiffusionChangeController' => 'applications/diffusion/controller/DiffusionChangeController.php', - 'DiffusionCommentListView' => 'applications/diffusion/view/DiffusionCommentListView.php', - 'DiffusionCommentView' => 'applications/diffusion/view/DiffusionCommentView.php', - 'DiffusionCommitChangeTableView' => 'applications/diffusion/view/DiffusionCommitChangeTableView.php', + 'DiffusionChangeHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionChangeHeraldFieldGroup.php', + 'DiffusionCloneController' => 'applications/diffusion/controller/DiffusionCloneController.php', + 'DiffusionCloneURIView' => 'applications/diffusion/view/DiffusionCloneURIView.php', + 'DiffusionCommandEngine' => 'applications/diffusion/protocol/DiffusionCommandEngine.php', + 'DiffusionCommandEngineTestCase' => 'applications/diffusion/protocol/__tests__/DiffusionCommandEngineTestCase.php', + 'DiffusionCommitAcceptTransaction' => 'applications/diffusion/xaction/DiffusionCommitAcceptTransaction.php', + 'DiffusionCommitActionTransaction' => 'applications/diffusion/xaction/DiffusionCommitActionTransaction.php', + 'DiffusionCommitAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAffectedFilesHeraldField.php', + 'DiffusionCommitAuditStatus' => 'applications/diffusion/DiffusionCommitAuditStatus.php', + 'DiffusionCommitAuditTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditTransaction.php', + 'DiffusionCommitAuditorsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuditorsHeraldField.php', + 'DiffusionCommitAuditorsTransaction' => 'applications/diffusion/xaction/DiffusionCommitAuditorsTransaction.php', + 'DiffusionCommitAuthorHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorHeraldField.php', + 'DiffusionCommitAuthorPackagesHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorPackagesHeraldField.php', + 'DiffusionCommitAuthorProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitAuthorProjectsHeraldField.php', + 'DiffusionCommitAutocloseHeraldField' => 'applications/diffusion/herald/DiffusionCommitAutocloseHeraldField.php', + 'DiffusionCommitBranchesController' => 'applications/diffusion/controller/DiffusionCommitBranchesController.php', + 'DiffusionCommitBranchesHeraldField' => 'applications/diffusion/herald/DiffusionCommitBranchesHeraldField.php', + 'DiffusionCommitBuildableTransaction' => 'applications/diffusion/xaction/DiffusionCommitBuildableTransaction.php', + 'DiffusionCommitCommitterHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterHeraldField.php', + 'DiffusionCommitCommitterPackagesHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterPackagesHeraldField.php', + 'DiffusionCommitCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitCommitterProjectsHeraldField.php', + 'DiffusionCommitConcernTransaction' => 'applications/diffusion/xaction/DiffusionCommitConcernTransaction.php', 'DiffusionCommitController' => 'applications/diffusion/controller/DiffusionCommitController.php', - 'DiffusionCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionCommitParentsQuery.php', - 'DiffusionCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionCommitTagsQuery.php', - 'DiffusionContainsQuery' => 'applications/diffusion/query/contains/DiffusionContainsQuery.php', + 'DiffusionCommitDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentAddedHeraldField.php', + 'DiffusionCommitDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentHeraldField.php', + 'DiffusionCommitDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffContentRemovedHeraldField.php', + 'DiffusionCommitDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionCommitDiffEnormousHeraldField.php', + 'DiffusionCommitDraftEngine' => 'applications/diffusion/engine/DiffusionCommitDraftEngine.php', + 'DiffusionCommitEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitEditConduitAPIMethod.php', + 'DiffusionCommitEditController' => 'applications/diffusion/controller/DiffusionCommitEditController.php', + 'DiffusionCommitEditEngine' => 'applications/diffusion/editor/DiffusionCommitEditEngine.php', + 'DiffusionCommitFerretEngine' => 'applications/repository/search/DiffusionCommitFerretEngine.php', + 'DiffusionCommitFulltextEngine' => 'applications/repository/search/DiffusionCommitFulltextEngine.php', + 'DiffusionCommitGraphView' => 'applications/diffusion/view/DiffusionCommitGraphView.php', + 'DiffusionCommitHasPackageEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasPackageEdgeType.php', + 'DiffusionCommitHasRevisionEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasRevisionEdgeType.php', + 'DiffusionCommitHasRevisionRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasRevisionRelationship.php', + 'DiffusionCommitHasTaskEdgeType' => 'applications/diffusion/edge/DiffusionCommitHasTaskEdgeType.php', + 'DiffusionCommitHasTaskRelationship' => 'applications/diffusion/relationships/DiffusionCommitHasTaskRelationship.php', + 'DiffusionCommitHash' => 'applications/diffusion/data/DiffusionCommitHash.php', + 'DiffusionCommitHeraldField' => 'applications/diffusion/herald/DiffusionCommitHeraldField.php', + 'DiffusionCommitHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionCommitHeraldFieldGroup.php', + 'DiffusionCommitHintQuery' => 'applications/diffusion/query/DiffusionCommitHintQuery.php', + 'DiffusionCommitHookEngine' => 'applications/diffusion/engine/DiffusionCommitHookEngine.php', + 'DiffusionCommitHookRejectException' => 'applications/diffusion/exception/DiffusionCommitHookRejectException.php', + 'DiffusionCommitListController' => 'applications/diffusion/controller/DiffusionCommitListController.php', + 'DiffusionCommitMergeHeraldField' => 'applications/diffusion/herald/DiffusionCommitMergeHeraldField.php', + 'DiffusionCommitMessageHeraldField' => 'applications/diffusion/herald/DiffusionCommitMessageHeraldField.php', + 'DiffusionCommitPackageAuditHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageAuditHeraldField.php', + 'DiffusionCommitPackageHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageHeraldField.php', + 'DiffusionCommitPackageOwnerHeraldField' => 'applications/diffusion/herald/DiffusionCommitPackageOwnerHeraldField.php', + 'DiffusionCommitParentsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitParentsQueryConduitAPIMethod.php', + 'DiffusionCommitQuery' => 'applications/diffusion/query/DiffusionCommitQuery.php', + 'DiffusionCommitRef' => 'applications/diffusion/data/DiffusionCommitRef.php', + 'DiffusionCommitRelationship' => 'applications/diffusion/relationships/DiffusionCommitRelationship.php', + 'DiffusionCommitRelationshipSource' => 'applications/search/relationship/DiffusionCommitRelationshipSource.php', + 'DiffusionCommitRemarkupRule' => 'applications/diffusion/remarkup/DiffusionCommitRemarkupRule.php', + 'DiffusionCommitRemarkupRuleTestCase' => 'applications/diffusion/remarkup/__tests__/DiffusionCommitRemarkupRuleTestCase.php', + 'DiffusionCommitRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryHeraldField.php', + 'DiffusionCommitRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionCommitRepositoryProjectsHeraldField.php', + 'DiffusionCommitRequiredActionResultBucket' => 'applications/diffusion/query/DiffusionCommitRequiredActionResultBucket.php', + 'DiffusionCommitResignTransaction' => 'applications/diffusion/xaction/DiffusionCommitResignTransaction.php', + 'DiffusionCommitResultBucket' => 'applications/diffusion/query/DiffusionCommitResultBucket.php', + 'DiffusionCommitRevertedByCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertedByCommitEdgeType.php', + 'DiffusionCommitRevertsCommitEdgeType' => 'applications/diffusion/edge/DiffusionCommitRevertsCommitEdgeType.php', + 'DiffusionCommitReviewerHeraldField' => 'applications/diffusion/herald/DiffusionCommitReviewerHeraldField.php', + 'DiffusionCommitRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptedHeraldField.php', + 'DiffusionCommitRevisionAcceptingReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionAcceptingReviewersHeraldField.php', + 'DiffusionCommitRevisionHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionHeraldField.php', + 'DiffusionCommitRevisionQuery' => 'applications/diffusion/query/DiffusionCommitRevisionQuery.php', + 'DiffusionCommitRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionReviewersHeraldField.php', + 'DiffusionCommitRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionCommitRevisionSubscribersHeraldField.php', + 'DiffusionCommitSearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionCommitSearchConduitAPIMethod.php', + 'DiffusionCommitStateTransaction' => 'applications/diffusion/xaction/DiffusionCommitStateTransaction.php', + 'DiffusionCommitTagsController' => 'applications/diffusion/controller/DiffusionCommitTagsController.php', + 'DiffusionCommitTimelineEngine' => 'applications/diffusion/engine/DiffusionCommitTimelineEngine.php', + 'DiffusionCommitTransactionType' => 'applications/diffusion/xaction/DiffusionCommitTransactionType.php', + 'DiffusionCommitVerifyTransaction' => 'applications/diffusion/xaction/DiffusionCommitVerifyTransaction.php', + 'DiffusionCommitWrongBuildsHeraldField' => 'applications/diffusion/herald/DiffusionCommitWrongBuildsHeraldField.php', + 'DiffusionCompareController' => 'applications/diffusion/controller/DiffusionCompareController.php', + 'DiffusionConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionConduitAPIMethod.php', 'DiffusionController' => 'applications/diffusion/controller/DiffusionController.php', + 'DiffusionCreateRepositoriesCapability' => 'applications/diffusion/capability/DiffusionCreateRepositoriesCapability.php', + 'DiffusionDaemonLockException' => 'applications/diffusion/exception/DiffusionDaemonLockException.php', + 'DiffusionDatasourceEngineExtension' => 'applications/diffusion/engineextension/DiffusionDatasourceEngineExtension.php', + 'DiffusionDefaultEditCapability' => 'applications/diffusion/capability/DiffusionDefaultEditCapability.php', + 'DiffusionDefaultPushCapability' => 'applications/diffusion/capability/DiffusionDefaultPushCapability.php', + 'DiffusionDefaultViewCapability' => 'applications/diffusion/capability/DiffusionDefaultViewCapability.php', 'DiffusionDiffController' => 'applications/diffusion/controller/DiffusionDiffController.php', - 'DiffusionDiffQuery' => 'applications/diffusion/query/diff/DiffusionDiffQuery.php', + 'DiffusionDiffInlineCommentQuery' => 'applications/diffusion/query/DiffusionDiffInlineCommentQuery.php', + 'DiffusionDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionDiffQueryConduitAPIMethod.php', + 'DiffusionDocumentController' => 'applications/diffusion/controller/DiffusionDocumentController.php', + 'DiffusionDocumentRenderingEngine' => 'applications/diffusion/document/DiffusionDocumentRenderingEngine.php', + 'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'applications/diffusion/doorkeeper/DiffusionDoorkeeperCommitFeedStoryPublisher.php', 'DiffusionEmptyResultView' => 'applications/diffusion/view/DiffusionEmptyResultView.php', + 'DiffusionExistsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionExistsQueryConduitAPIMethod.php', 'DiffusionExternalController' => 'applications/diffusion/controller/DiffusionExternalController.php', - 'DiffusionFileContent' => 'applications/diffusion/data/DiffusionFileContent.php', + 'DiffusionExternalSymbolQuery' => 'applications/diffusion/symbol/DiffusionExternalSymbolQuery.php', + 'DiffusionExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionExternalSymbolsSource.php', 'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionFileContentQuery.php', - 'DiffusionGitBranchQuery' => 'applications/diffusion/query/branch/DiffusionGitBranchQuery.php', - 'DiffusionGitBranchQueryTestCase' => 'applications/diffusion/query/branch/__tests__/DiffusionGitBranchQueryTestCase.php', - 'DiffusionGitBrowseQuery' => 'applications/diffusion/query/browse/DiffusionGitBrowseQuery.php', - 'DiffusionGitCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionGitCommitParentsQuery.php', - 'DiffusionGitCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionGitCommitTagsQuery.php', - 'DiffusionGitContainsQuery' => 'applications/diffusion/query/contains/DiffusionGitContainsQuery.php', - 'DiffusionGitDiffQuery' => 'applications/diffusion/query/diff/DiffusionGitDiffQuery.php', + 'DiffusionFileContentQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFileContentQueryConduitAPIMethod.php', + 'DiffusionFileFutureQuery' => 'applications/diffusion/query/DiffusionFileFutureQuery.php', + 'DiffusionFindSymbolsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionFindSymbolsConduitAPIMethod.php', + 'DiffusionGetLintMessagesConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetLintMessagesConduitAPIMethod.php', + 'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionGetRecentCommitsByPathConduitAPIMethod.php', + 'DiffusionGitBlameQuery' => 'applications/diffusion/query/blame/DiffusionGitBlameQuery.php', + 'DiffusionGitBranch' => 'applications/diffusion/data/DiffusionGitBranch.php', + 'DiffusionGitBranchTestCase' => 'applications/diffusion/data/__tests__/DiffusionGitBranchTestCase.php', + 'DiffusionGitCommandEngine' => 'applications/diffusion/protocol/DiffusionGitCommandEngine.php', 'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionGitFileContentQuery.php', - 'DiffusionGitHistoryQuery' => 'applications/diffusion/query/history/DiffusionGitHistoryQuery.php', - 'DiffusionGitLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionGitLastModifiedQuery.php', - 'DiffusionGitMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionGitMergedCommitsQuery.php', + 'DiffusionGitLFSAuthenticateWorkflow' => 'applications/diffusion/gitlfs/DiffusionGitLFSAuthenticateWorkflow.php', + 'DiffusionGitLFSResponse' => 'applications/diffusion/response/DiffusionGitLFSResponse.php', + 'DiffusionGitLFSTemporaryTokenType' => 'applications/diffusion/gitlfs/DiffusionGitLFSTemporaryTokenType.php', 'DiffusionGitRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionGitRawDiffQuery.php', - 'DiffusionGitRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionGitRenameHistoryQuery.php', + 'DiffusionGitReceivePackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitReceivePackSSHWorkflow.php', 'DiffusionGitRequest' => 'applications/diffusion/request/DiffusionGitRequest.php', - 'DiffusionGitTagListQuery' => 'applications/diffusion/query/taglist/DiffusionGitTagListQuery.php', + 'DiffusionGitResponse' => 'applications/diffusion/response/DiffusionGitResponse.php', + 'DiffusionGitSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitSSHWorkflow.php', + 'DiffusionGitUploadPackSSHWorkflow' => 'applications/diffusion/ssh/DiffusionGitUploadPackSSHWorkflow.php', + 'DiffusionGitUploadPackWireProtocol' => 'applications/diffusion/protocol/DiffusionGitUploadPackWireProtocol.php', + 'DiffusionGitWireProtocol' => 'applications/diffusion/protocol/DiffusionGitWireProtocol.php', + 'DiffusionGitWireProtocolCapabilities' => 'applications/diffusion/protocol/DiffusionGitWireProtocolCapabilities.php', + 'DiffusionGitWireProtocolRef' => 'applications/diffusion/protocol/DiffusionGitWireProtocolRef.php', + 'DiffusionGitWireProtocolRefList' => 'applications/diffusion/protocol/DiffusionGitWireProtocolRefList.php', 'DiffusionHistoryController' => 'applications/diffusion/controller/DiffusionHistoryController.php', - 'DiffusionHistoryQuery' => 'applications/diffusion/query/history/DiffusionHistoryQuery.php', - 'DiffusionHistoryTableView' => 'applications/diffusion/view/DiffusionHistoryTableView.php', - 'DiffusionHomeController' => 'applications/diffusion/controller/DiffusionHomeController.php', + 'DiffusionHistoryQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionHistoryQueryConduitAPIMethod.php', + 'DiffusionHovercardEngineExtension' => 'applications/diffusion/engineextension/DiffusionHovercardEngineExtension.php', + 'DiffusionIdentityAssigneeDatasource' => 'applications/diffusion/typeahead/DiffusionIdentityAssigneeDatasource.php', + 'DiffusionIdentityAssigneeEditField' => 'applications/diffusion/editfield/DiffusionIdentityAssigneeEditField.php', + 'DiffusionIdentityAssigneeSearchField' => 'applications/diffusion/searchfield/DiffusionIdentityAssigneeSearchField.php', + 'DiffusionIdentityEditController' => 'applications/diffusion/controller/DiffusionIdentityEditController.php', + 'DiffusionIdentityListController' => 'applications/diffusion/controller/DiffusionIdentityListController.php', + 'DiffusionIdentityUnassignedDatasource' => 'applications/diffusion/typeahead/DiffusionIdentityUnassignedDatasource.php', + 'DiffusionIdentityViewController' => 'applications/diffusion/controller/DiffusionIdentityViewController.php', 'DiffusionInlineCommentController' => 'applications/diffusion/controller/DiffusionInlineCommentController.php', + 'DiffusionInternalAncestorsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionInternalAncestorsConduitAPIMethod.php', + 'DiffusionInternalCommitSearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionInternalCommitSearchConduitAPIMethod.php', + 'DiffusionInternalCommitSearchEngine' => 'applications/audit/query/DiffusionInternalCommitSearchEngine.php', + 'DiffusionInternalGitRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionInternalGitRawDiffQueryConduitAPIMethod.php', 'DiffusionLastModifiedController' => 'applications/diffusion/controller/DiffusionLastModifiedController.php', - 'DiffusionLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionLastModifiedQuery.php', - 'DiffusionMercurialBranchQuery' => 'applications/diffusion/query/branch/DiffusionMercurialBranchQuery.php', - 'DiffusionMercurialBrowseQuery' => 'applications/diffusion/query/browse/DiffusionMercurialBrowseQuery.php', - 'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php', - 'DiffusionMercurialCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionMercurialCommitTagsQuery.php', - 'DiffusionMercurialContainsQuery' => 'applications/diffusion/query/contains/DiffusionMercurialContainsQuery.php', - 'DiffusionMercurialDiffQuery' => 'applications/diffusion/query/diff/DiffusionMercurialDiffQuery.php', + 'DiffusionLastModifiedQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLastModifiedQueryConduitAPIMethod.php', + 'DiffusionLintController' => 'applications/diffusion/controller/DiffusionLintController.php', + 'DiffusionLintCountQuery' => 'applications/diffusion/query/DiffusionLintCountQuery.php', + 'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php', + 'DiffusionLocalRepositoryFilter' => 'applications/diffusion/data/DiffusionLocalRepositoryFilter.php', + 'DiffusionLogController' => 'applications/diffusion/controller/DiffusionLogController.php', + 'DiffusionLookSoonConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionLookSoonConduitAPIMethod.php', + 'DiffusionLowLevelCommitFieldsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitFieldsQuery.php', + 'DiffusionLowLevelCommitQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelCommitQuery.php', + 'DiffusionLowLevelFilesizeQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelFilesizeQuery.php', + 'DiffusionLowLevelGitRefQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php', + 'DiffusionLowLevelMercurialBranchesQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php', + 'DiffusionLowLevelMercurialPathsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialPathsQuery.php', + 'DiffusionLowLevelParentsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelParentsQuery.php', + 'DiffusionLowLevelQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelQuery.php', + 'DiffusionLowLevelResolveRefsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php', + 'DiffusionMercurialBlameQuery' => 'applications/diffusion/query/blame/DiffusionMercurialBlameQuery.php', + 'DiffusionMercurialCommandEngine' => 'applications/diffusion/protocol/DiffusionMercurialCommandEngine.php', + 'DiffusionMercurialCommandEngineTests' => 'applications/diffusion/protocol/__tests__/DiffusionMercurialCommandEngineTests.php', 'DiffusionMercurialFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionMercurialFileContentQuery.php', - 'DiffusionMercurialHistoryQuery' => 'applications/diffusion/query/history/DiffusionMercurialHistoryQuery.php', - 'DiffusionMercurialLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionMercurialLastModifiedQuery.php', - 'DiffusionMercurialMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMercurialMergedCommitsQuery.php', + 'DiffusionMercurialFlagInjectionException' => 'applications/diffusion/exception/DiffusionMercurialFlagInjectionException.php', 'DiffusionMercurialRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionMercurialRawDiffQuery.php', - 'DiffusionMercurialRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionMercurialRenameHistoryQuery.php', 'DiffusionMercurialRequest' => 'applications/diffusion/request/DiffusionMercurialRequest.php', - 'DiffusionMercurialTagListQuery' => 'applications/diffusion/query/taglist/DiffusionMercurialTagListQuery.php', - 'DiffusionMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionMergedCommitsQuery.php', + 'DiffusionMercurialResponse' => 'applications/diffusion/response/DiffusionMercurialResponse.php', + 'DiffusionMercurialSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialSSHWorkflow.php', + 'DiffusionMercurialServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionMercurialServeSSHWorkflow.php', + 'DiffusionMercurialWireClientSSHProtocolChannel' => 'applications/diffusion/ssh/DiffusionMercurialWireClientSSHProtocolChannel.php', + 'DiffusionMercurialWireProtocol' => 'applications/diffusion/protocol/DiffusionMercurialWireProtocol.php', + 'DiffusionMercurialWireProtocolTests' => 'applications/diffusion/protocol/__tests__/DiffusionMercurialWireProtocolTests.php', + 'DiffusionMercurialWireSSHTestCase' => 'applications/diffusion/ssh/__tests__/DiffusionMercurialWireSSHTestCase.php', + 'DiffusionMergedCommitsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionMergedCommitsQueryConduitAPIMethod.php', 'DiffusionPathChange' => 'applications/diffusion/data/DiffusionPathChange.php', 'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/DiffusionPathChangeQuery.php', 'DiffusionPathCompleteController' => 'applications/diffusion/controller/DiffusionPathCompleteController.php', 'DiffusionPathIDQuery' => 'applications/diffusion/query/pathid/DiffusionPathIDQuery.php', 'DiffusionPathQuery' => 'applications/diffusion/query/DiffusionPathQuery.php', 'DiffusionPathQueryTestCase' => 'applications/diffusion/query/pathid/__tests__/DiffusionPathQueryTestCase.php', + 'DiffusionPathTreeController' => 'applications/diffusion/controller/DiffusionPathTreeController.php', 'DiffusionPathValidateController' => 'applications/diffusion/controller/DiffusionPathValidateController.php', + 'DiffusionPatternSearchView' => 'applications/diffusion/view/DiffusionPatternSearchView.php', + 'DiffusionPhpExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPhpExternalSymbolsSource.php', + 'DiffusionPreCommitContentAffectedFilesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAffectedFilesHeraldField.php', + 'DiffusionPreCommitContentAuthorHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorHeraldField.php', + 'DiffusionPreCommitContentAuthorPackagesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorPackagesHeraldField.php', + 'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorProjectsHeraldField.php', + 'DiffusionPreCommitContentAuthorRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentAuthorRawHeraldField.php', + 'DiffusionPreCommitContentBranchesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentBranchesHeraldField.php', + 'DiffusionPreCommitContentCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterHeraldField.php', + 'DiffusionPreCommitContentCommitterPackagesHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterPackagesHeraldField.php', + 'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterProjectsHeraldField.php', + 'DiffusionPreCommitContentCommitterRawHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentCommitterRawHeraldField.php', + 'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentAddedHeraldField.php', + 'DiffusionPreCommitContentDiffContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentHeraldField.php', + 'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffContentRemovedHeraldField.php', + 'DiffusionPreCommitContentDiffEnormousHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentDiffEnormousHeraldField.php', + 'DiffusionPreCommitContentHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentHeraldField.php', + 'DiffusionPreCommitContentMergeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMergeHeraldField.php', + 'DiffusionPreCommitContentMessageHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentMessageHeraldField.php', + 'DiffusionPreCommitContentPackageHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPackageHeraldField.php', + 'DiffusionPreCommitContentPackageOwnerHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPackageOwnerHeraldField.php', + 'DiffusionPreCommitContentPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherHeraldField.php', + 'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherIsCommitterHeraldField.php', + 'DiffusionPreCommitContentPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentPusherProjectsHeraldField.php', + 'DiffusionPreCommitContentRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryHeraldField.php', + 'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRepositoryProjectsHeraldField.php', + 'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptedHeraldField.php', + 'DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField.php', + 'DiffusionPreCommitContentRevisionHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionHeraldField.php', + 'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionReviewersHeraldField.php', + 'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentRevisionSubscribersHeraldField.php', + 'DiffusionPreCommitContentWrongBuildsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitContentWrongBuildsHeraldField.php', + 'DiffusionPreCommitRefChangeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefChangeHeraldField.php', + 'DiffusionPreCommitRefHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldField.php', + 'DiffusionPreCommitRefHeraldFieldGroup' => 'applications/diffusion/herald/DiffusionPreCommitRefHeraldFieldGroup.php', + 'DiffusionPreCommitRefNameHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefNameHeraldField.php', + 'DiffusionPreCommitRefPusherHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherHeraldField.php', + 'DiffusionPreCommitRefPusherProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefPusherProjectsHeraldField.php', + 'DiffusionPreCommitRefRepositoryHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryHeraldField.php', + 'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefRepositoryProjectsHeraldField.php', + 'DiffusionPreCommitRefTypeHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitRefTypeHeraldField.php', + 'DiffusionPreCommitUsesGitLFSHeraldField' => 'applications/diffusion/herald/DiffusionPreCommitUsesGitLFSHeraldField.php', + 'DiffusionPullEventGarbageCollector' => 'applications/diffusion/garbagecollector/DiffusionPullEventGarbageCollector.php', + 'DiffusionPullLogListController' => 'applications/diffusion/controller/DiffusionPullLogListController.php', + 'DiffusionPullLogListView' => 'applications/diffusion/view/DiffusionPullLogListView.php', + 'DiffusionPullLogSearchEngine' => 'applications/diffusion/query/DiffusionPullLogSearchEngine.php', + 'DiffusionPushCapability' => 'applications/diffusion/capability/DiffusionPushCapability.php', + 'DiffusionPushEventViewController' => 'applications/diffusion/controller/DiffusionPushEventViewController.php', + 'DiffusionPushLogListController' => 'applications/diffusion/controller/DiffusionPushLogListController.php', + 'DiffusionPushLogListView' => 'applications/diffusion/view/DiffusionPushLogListView.php', + 'DiffusionPythonExternalSymbolsSource' => 'applications/diffusion/symbol/DiffusionPythonExternalSymbolsSource.php', 'DiffusionQuery' => 'applications/diffusion/query/DiffusionQuery.php', + 'DiffusionQueryCommitsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryCommitsConduitAPIMethod.php', + 'DiffusionQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryConduitAPIMethod.php', + 'DiffusionQueryPathsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionQueryPathsConduitAPIMethod.php', 'DiffusionRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionRawDiffQuery.php', - 'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionRenameHistoryQuery.php', + 'DiffusionRawDiffQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRawDiffQueryConduitAPIMethod.php', + 'DiffusionReadmeView' => 'applications/diffusion/view/DiffusionReadmeView.php', + 'DiffusionRefDatasource' => 'applications/diffusion/typeahead/DiffusionRefDatasource.php', + 'DiffusionRefNotFoundException' => 'applications/diffusion/exception/DiffusionRefNotFoundException.php', + 'DiffusionRefTableController' => 'applications/diffusion/controller/DiffusionRefTableController.php', + 'DiffusionRefsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRefsQueryConduitAPIMethod.php', + 'DiffusionRenameHistoryQuery' => 'applications/diffusion/query/DiffusionRenameHistoryQuery.php', + 'DiffusionRepositoryAutomationManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryAutomationManagementPanel.php', + 'DiffusionRepositoryBasicsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryBasicsManagementPanel.php', + 'DiffusionRepositoryBranchesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryBranchesManagementPanel.php', + 'DiffusionRepositoryByIDRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryByIDRemarkupRule.php', + 'DiffusionRepositoryClusterEngine' => 'applications/diffusion/protocol/DiffusionRepositoryClusterEngine.php', + 'DiffusionRepositoryClusterEngineLogInterface' => 'applications/diffusion/protocol/DiffusionRepositoryClusterEngineLogInterface.php', 'DiffusionRepositoryController' => 'applications/diffusion/controller/DiffusionRepositoryController.php', + 'DiffusionRepositoryDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryDatasource.php', + 'DiffusionRepositoryDefaultController' => 'applications/diffusion/controller/DiffusionRepositoryDefaultController.php', + 'DiffusionRepositoryEditActivateController' => 'applications/diffusion/controller/DiffusionRepositoryEditActivateController.php', + 'DiffusionRepositoryEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositoryEditConduitAPIMethod.php', + 'DiffusionRepositoryEditController' => 'applications/diffusion/controller/DiffusionRepositoryEditController.php', + 'DiffusionRepositoryEditDangerousController' => 'applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php', + 'DiffusionRepositoryEditDeleteController' => 'applications/diffusion/controller/DiffusionRepositoryEditDeleteController.php', + 'DiffusionRepositoryEditEngine' => 'applications/diffusion/editor/DiffusionRepositoryEditEngine.php', + 'DiffusionRepositoryEditEnormousController' => 'applications/diffusion/controller/DiffusionRepositoryEditEnormousController.php', + 'DiffusionRepositoryEditPublishingController' => 'applications/diffusion/controller/DiffusionRepositoryEditPublishingController.php', + 'DiffusionRepositoryEditUpdateController' => 'applications/diffusion/controller/DiffusionRepositoryEditUpdateController.php', + 'DiffusionRepositoryFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionRepositoryFunctionDatasource.php', + 'DiffusionRepositoryHistoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryHistoryManagementPanel.php', + 'DiffusionRepositoryIdentityDestructionEngineExtension' => 'applications/diffusion/identity/DiffusionRepositoryIdentityDestructionEngineExtension.php', + 'DiffusionRepositoryIdentityEditor' => 'applications/diffusion/editor/DiffusionRepositoryIdentityEditor.php', + 'DiffusionRepositoryIdentityEngine' => 'applications/diffusion/identity/DiffusionRepositoryIdentityEngine.php', + 'DiffusionRepositoryIdentitySearchEngine' => 'applications/diffusion/query/DiffusionRepositoryIdentitySearchEngine.php', + 'DiffusionRepositoryLimitsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryLimitsManagementPanel.php', + 'DiffusionRepositoryListController' => 'applications/diffusion/controller/DiffusionRepositoryListController.php', + 'DiffusionRepositoryManageController' => 'applications/diffusion/controller/DiffusionRepositoryManageController.php', + 'DiffusionRepositoryManagePanelsController' => 'applications/diffusion/controller/DiffusionRepositoryManagePanelsController.php', + 'DiffusionRepositoryManagementBuildsPanelGroup' => 'applications/diffusion/management/DiffusionRepositoryManagementBuildsPanelGroup.php', + 'DiffusionRepositoryManagementIntegrationsPanelGroup' => 'applications/diffusion/management/DiffusionRepositoryManagementIntegrationsPanelGroup.php', + 'DiffusionRepositoryManagementMainPanelGroup' => 'applications/diffusion/management/DiffusionRepositoryManagementMainPanelGroup.php', + 'DiffusionRepositoryManagementOtherPanelGroup' => 'applications/diffusion/management/DiffusionRepositoryManagementOtherPanelGroup.php', + 'DiffusionRepositoryManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryManagementPanel.php', + 'DiffusionRepositoryManagementPanelGroup' => 'applications/diffusion/management/DiffusionRepositoryManagementPanelGroup.php', + 'DiffusionRepositoryMetricsSearchEngineAttachment' => 'applications/diffusion/engineextension/DiffusionRepositoryMetricsSearchEngineAttachment.php', 'DiffusionRepositoryPath' => 'applications/diffusion/data/DiffusionRepositoryPath.php', - 'DiffusionRepositoryTag' => 'applications/diffusion/DiffusionRepositoryTag.php', + 'DiffusionRepositoryPoliciesManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryPoliciesManagementPanel.php', + 'DiffusionRepositoryProfilePictureController' => 'applications/diffusion/controller/DiffusionRepositoryProfilePictureController.php', + 'DiffusionRepositoryRef' => 'applications/diffusion/data/DiffusionRepositoryRef.php', + 'DiffusionRepositoryRemarkupRule' => 'applications/diffusion/remarkup/DiffusionRepositoryRemarkupRule.php', + 'DiffusionRepositorySearchConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionRepositorySearchConduitAPIMethod.php', + 'DiffusionRepositoryStagingManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryStagingManagementPanel.php', + 'DiffusionRepositoryStorageManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryStorageManagementPanel.php', + 'DiffusionRepositorySubversionManagementPanel' => 'applications/diffusion/management/DiffusionRepositorySubversionManagementPanel.php', + 'DiffusionRepositorySymbolsManagementPanel' => 'applications/diffusion/management/DiffusionRepositorySymbolsManagementPanel.php', + 'DiffusionRepositoryTag' => 'applications/diffusion/data/DiffusionRepositoryTag.php', + 'DiffusionRepositoryTestAutomationController' => 'applications/diffusion/controller/DiffusionRepositoryTestAutomationController.php', + 'DiffusionRepositoryURICredentialController' => 'applications/diffusion/controller/DiffusionRepositoryURICredentialController.php', + 'DiffusionRepositoryURIDisableController' => 'applications/diffusion/controller/DiffusionRepositoryURIDisableController.php', + 'DiffusionRepositoryURIEditController' => 'applications/diffusion/controller/DiffusionRepositoryURIEditController.php', + 'DiffusionRepositoryURIViewController' => 'applications/diffusion/controller/DiffusionRepositoryURIViewController.php', + 'DiffusionRepositoryURIsIndexEngineExtension' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsIndexEngineExtension.php', + 'DiffusionRepositoryURIsManagementPanel' => 'applications/diffusion/management/DiffusionRepositoryURIsManagementPanel.php', + 'DiffusionRepositoryURIsSearchEngineAttachment' => 'applications/diffusion/engineextension/DiffusionRepositoryURIsSearchEngineAttachment.php', 'DiffusionRequest' => 'applications/diffusion/request/DiffusionRequest.php', + 'DiffusionResolveRefsConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionResolveRefsConduitAPIMethod.php', + 'DiffusionResolveUserQuery' => 'applications/diffusion/query/DiffusionResolveUserQuery.php', + 'DiffusionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSSHWorkflow.php', + 'DiffusionSearchQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionSearchQueryConduitAPIMethod.php', + 'DiffusionServeController' => 'applications/diffusion/controller/DiffusionServeController.php', + 'DiffusionServiceRef' => 'applications/diffusion/ref/DiffusionServiceRef.php', + 'DiffusionSetPasswordSettingsPanel' => 'applications/diffusion/panel/DiffusionSetPasswordSettingsPanel.php', 'DiffusionSetupException' => 'applications/diffusion/exception/DiffusionSetupException.php', - 'DiffusionSvnBrowseQuery' => 'applications/diffusion/query/browse/DiffusionSvnBrowseQuery.php', - 'DiffusionSvnCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionSvnCommitParentsQuery.php', - 'DiffusionSvnCommitTagsQuery' => 'applications/diffusion/query/committags/DiffusionSvnCommitTagsQuery.php', - 'DiffusionSvnContainsQuery' => 'applications/diffusion/query/contains/DiffusionSvnContainsQuery.php', - 'DiffusionSvnDiffQuery' => 'applications/diffusion/query/diff/DiffusionSvnDiffQuery.php', + 'DiffusionSourceHyperlinkEngineExtension' => 'applications/diffusion/engineextension/DiffusionSourceHyperlinkEngineExtension.php', + 'DiffusionSourceLinkRemarkupRule' => 'applications/diffusion/remarkup/DiffusionSourceLinkRemarkupRule.php', + 'DiffusionSourceLinkView' => 'applications/diffusion/view/DiffusionSourceLinkView.php', + 'DiffusionSubversionCommandEngine' => 'applications/diffusion/protocol/DiffusionSubversionCommandEngine.php', + 'DiffusionSubversionSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionSSHWorkflow.php', + 'DiffusionSubversionServeSSHWorkflow' => 'applications/diffusion/ssh/DiffusionSubversionServeSSHWorkflow.php', + 'DiffusionSubversionWireProtocol' => 'applications/diffusion/protocol/DiffusionSubversionWireProtocol.php', + 'DiffusionSubversionWireProtocolTestCase' => 'applications/diffusion/protocol/__tests__/DiffusionSubversionWireProtocolTestCase.php', + 'DiffusionSvnBlameQuery' => 'applications/diffusion/query/blame/DiffusionSvnBlameQuery.php', 'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/DiffusionSvnFileContentQuery.php', - 'DiffusionSvnHistoryQuery' => 'applications/diffusion/query/history/DiffusionSvnHistoryQuery.php', - 'DiffusionSvnLastModifiedQuery' => 'applications/diffusion/query/lastmodified/DiffusionSvnLastModifiedQuery.php', - 'DiffusionSvnMergedCommitsQuery' => 'applications/diffusion/query/mergedcommits/DiffusionSvnMergedCommitsQuery.php', 'DiffusionSvnRawDiffQuery' => 'applications/diffusion/query/rawdiff/DiffusionSvnRawDiffQuery.php', - 'DiffusionSvnRenameHistoryQuery' => 'applications/diffusion/query/renamehistory/DiffusionSvnRenameHistoryQuery.php', 'DiffusionSvnRequest' => 'applications/diffusion/request/DiffusionSvnRequest.php', - 'DiffusionSvnTagListQuery' => 'applications/diffusion/query/taglist/DiffusionSvnTagListQuery.php', 'DiffusionSymbolController' => 'applications/diffusion/controller/DiffusionSymbolController.php', + 'DiffusionSymbolDatasource' => 'applications/diffusion/typeahead/DiffusionSymbolDatasource.php', 'DiffusionSymbolQuery' => 'applications/diffusion/query/DiffusionSymbolQuery.php', + 'DiffusionSyncLogListController' => 'applications/diffusion/controller/DiffusionSyncLogListController.php', + 'DiffusionSyncLogListView' => 'applications/diffusion/view/DiffusionSyncLogListView.php', + 'DiffusionSyncLogSearchEngine' => 'applications/diffusion/query/DiffusionSyncLogSearchEngine.php', 'DiffusionTagListController' => 'applications/diffusion/controller/DiffusionTagListController.php', - 'DiffusionTagListQuery' => 'applications/diffusion/query/taglist/DiffusionTagListQuery.php', 'DiffusionTagListView' => 'applications/diffusion/view/DiffusionTagListView.php', + 'DiffusionTaggedRepositoriesFunctionDatasource' => 'applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php', + 'DiffusionTagsQueryConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionTagsQueryConduitAPIMethod.php', + 'DiffusionURIEditConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionURIEditConduitAPIMethod.php', + 'DiffusionURIEditEngine' => 'applications/diffusion/editor/DiffusionURIEditEngine.php', + 'DiffusionURIEditor' => 'applications/diffusion/editor/DiffusionURIEditor.php', 'DiffusionURITestCase' => 'applications/diffusion/request/__tests__/DiffusionURITestCase.php', + 'DiffusionUpdateCoverageConduitAPIMethod' => 'applications/diffusion/conduit/DiffusionUpdateCoverageConduitAPIMethod.php', + 'DiffusionUpdateObjectAfterCommitWorker' => 'applications/diffusion/worker/DiffusionUpdateObjectAfterCommitWorker.php', 'DiffusionView' => 'applications/diffusion/view/DiffusionView.php', - 'DrydockAllocator' => 'applications/drydock/allocator/DrydockAllocator.php', - 'DrydockAllocatorWorker' => 'applications/drydock/allocator/DrydockAllocatorWorker.php', - 'DrydockApacheWebrootBlueprint' => 'applications/drydock/blueprint/webroot/DrydockApacheWebrootBlueprint.php', + 'DivinerArticleAtomizer' => 'applications/diviner/atomizer/DivinerArticleAtomizer.php', + 'DivinerAtom' => 'applications/diviner/atom/DivinerAtom.php', + 'DivinerAtomCache' => 'applications/diviner/cache/DivinerAtomCache.php', + 'DivinerAtomController' => 'applications/diviner/controller/DivinerAtomController.php', + 'DivinerAtomListController' => 'applications/diviner/controller/DivinerAtomListController.php', + 'DivinerAtomPHIDType' => 'applications/diviner/phid/DivinerAtomPHIDType.php', + 'DivinerAtomQuery' => 'applications/diviner/query/DivinerAtomQuery.php', + 'DivinerAtomRef' => 'applications/diviner/atom/DivinerAtomRef.php', + 'DivinerAtomSearchEngine' => 'applications/diviner/query/DivinerAtomSearchEngine.php', + 'DivinerAtomizeWorkflow' => 'applications/diviner/workflow/DivinerAtomizeWorkflow.php', + 'DivinerAtomizer' => 'applications/diviner/atomizer/DivinerAtomizer.php', + 'DivinerBookController' => 'applications/diviner/controller/DivinerBookController.php', + 'DivinerBookDatasource' => 'applications/diviner/typeahead/DivinerBookDatasource.php', + 'DivinerBookEditController' => 'applications/diviner/controller/DivinerBookEditController.php', + 'DivinerBookItemView' => 'applications/diviner/view/DivinerBookItemView.php', + 'DivinerBookPHIDType' => 'applications/diviner/phid/DivinerBookPHIDType.php', + 'DivinerBookQuery' => 'applications/diviner/query/DivinerBookQuery.php', + 'DivinerController' => 'applications/diviner/controller/DivinerController.php', + 'DivinerDAO' => 'applications/diviner/storage/DivinerDAO.php', + 'DivinerDefaultEditCapability' => 'applications/diviner/capability/DivinerDefaultEditCapability.php', + 'DivinerDefaultRenderer' => 'applications/diviner/renderer/DivinerDefaultRenderer.php', + 'DivinerDefaultViewCapability' => 'applications/diviner/capability/DivinerDefaultViewCapability.php', + 'DivinerDiskCache' => 'applications/diviner/cache/DivinerDiskCache.php', + 'DivinerFileAtomizer' => 'applications/diviner/atomizer/DivinerFileAtomizer.php', + 'DivinerFindController' => 'applications/diviner/controller/DivinerFindController.php', + 'DivinerGenerateWorkflow' => 'applications/diviner/workflow/DivinerGenerateWorkflow.php', + 'DivinerLiveAtom' => 'applications/diviner/storage/DivinerLiveAtom.php', + 'DivinerLiveBook' => 'applications/diviner/storage/DivinerLiveBook.php', + 'DivinerLiveBookEditor' => 'applications/diviner/editor/DivinerLiveBookEditor.php', + 'DivinerLiveBookFulltextEngine' => 'applications/diviner/search/DivinerLiveBookFulltextEngine.php', + 'DivinerLiveBookTransaction' => 'applications/diviner/storage/DivinerLiveBookTransaction.php', + 'DivinerLiveBookTransactionQuery' => 'applications/diviner/query/DivinerLiveBookTransactionQuery.php', + 'DivinerLivePublisher' => 'applications/diviner/publisher/DivinerLivePublisher.php', + 'DivinerLiveSymbol' => 'applications/diviner/storage/DivinerLiveSymbol.php', + 'DivinerLiveSymbolFulltextEngine' => 'applications/diviner/search/DivinerLiveSymbolFulltextEngine.php', + 'DivinerMainController' => 'applications/diviner/controller/DivinerMainController.php', + 'DivinerPHPAtomizer' => 'applications/diviner/atomizer/DivinerPHPAtomizer.php', + 'DivinerParameterTableView' => 'applications/diviner/view/DivinerParameterTableView.php', + 'DivinerPublishCache' => 'applications/diviner/cache/DivinerPublishCache.php', + 'DivinerPublisher' => 'applications/diviner/publisher/DivinerPublisher.php', + 'DivinerRenderer' => 'applications/diviner/renderer/DivinerRenderer.php', + 'DivinerReturnTableView' => 'applications/diviner/view/DivinerReturnTableView.php', + 'DivinerSchemaSpec' => 'applications/diviner/storage/DivinerSchemaSpec.php', + 'DivinerSectionView' => 'applications/diviner/view/DivinerSectionView.php', + 'DivinerStaticPublisher' => 'applications/diviner/publisher/DivinerStaticPublisher.php', + 'DivinerSymbolRemarkupRule' => 'applications/diviner/markup/DivinerSymbolRemarkupRule.php', + 'DivinerWorkflow' => 'applications/diviner/workflow/DivinerWorkflow.php', + 'DoorkeeperAsanaFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperAsanaFeedWorker.php', + 'DoorkeeperBridge' => 'applications/doorkeeper/bridge/DoorkeeperBridge.php', + 'DoorkeeperBridgeAsana' => 'applications/doorkeeper/bridge/DoorkeeperBridgeAsana.php', + 'DoorkeeperBridgeGitHub' => 'applications/doorkeeper/bridge/DoorkeeperBridgeGitHub.php', + 'DoorkeeperBridgeGitHubIssue' => 'applications/doorkeeper/bridge/DoorkeeperBridgeGitHubIssue.php', + 'DoorkeeperBridgeGitHubUser' => 'applications/doorkeeper/bridge/DoorkeeperBridgeGitHubUser.php', + 'DoorkeeperBridgeJIRA' => 'applications/doorkeeper/bridge/DoorkeeperBridgeJIRA.php', + 'DoorkeeperBridgeJIRATestCase' => 'applications/doorkeeper/bridge/__tests__/DoorkeeperBridgeJIRATestCase.php', + 'DoorkeeperBridgedObjectCurtainExtension' => 'applications/doorkeeper/engineextension/DoorkeeperBridgedObjectCurtainExtension.php', + 'DoorkeeperBridgedObjectInterface' => 'applications/doorkeeper/bridge/DoorkeeperBridgedObjectInterface.php', + 'DoorkeeperDAO' => 'applications/doorkeeper/storage/DoorkeeperDAO.php', + 'DoorkeeperExternalObject' => 'applications/doorkeeper/storage/DoorkeeperExternalObject.php', + 'DoorkeeperExternalObjectPHIDType' => 'applications/doorkeeper/phid/DoorkeeperExternalObjectPHIDType.php', + 'DoorkeeperExternalObjectQuery' => 'applications/doorkeeper/query/DoorkeeperExternalObjectQuery.php', + 'DoorkeeperFeedStoryPublisher' => 'applications/doorkeeper/engine/DoorkeeperFeedStoryPublisher.php', + 'DoorkeeperFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperFeedWorker.php', + 'DoorkeeperHyperlinkEngineExtension' => 'applications/doorkeeper/engineextension/DoorkeeperHyperlinkEngineExtension.php', + 'DoorkeeperImportEngine' => 'applications/doorkeeper/engine/DoorkeeperImportEngine.php', + 'DoorkeeperJIRAFeedWorker' => 'applications/doorkeeper/worker/DoorkeeperJIRAFeedWorker.php', + 'DoorkeeperMissingLinkException' => 'applications/doorkeeper/exception/DoorkeeperMissingLinkException.php', + 'DoorkeeperObjectRef' => 'applications/doorkeeper/engine/DoorkeeperObjectRef.php', + 'DoorkeeperRemarkupURIInterface' => 'applications/doorkeeper/interface/DoorkeeperRemarkupURIInterface.php', + 'DoorkeeperSchemaSpec' => 'applications/doorkeeper/storage/DoorkeeperSchemaSpec.php', + 'DoorkeeperTagView' => 'applications/doorkeeper/view/DoorkeeperTagView.php', + 'DoorkeeperTagsController' => 'applications/doorkeeper/controller/DoorkeeperTagsController.php', + 'DoorkeeperURIRef' => 'applications/doorkeeper/engine/DoorkeeperURIRef.php', + 'DrydockAcquiredBrokenResourceException' => 'applications/drydock/exception/DrydockAcquiredBrokenResourceException.php', + 'DrydockAlmanacServiceHostBlueprintImplementation' => 'applications/drydock/blueprint/DrydockAlmanacServiceHostBlueprintImplementation.php', 'DrydockApacheWebrootInterface' => 'applications/drydock/interface/webroot/DrydockApacheWebrootInterface.php', - 'DrydockBlueprint' => 'applications/drydock/blueprint/DrydockBlueprint.php', + 'DrydockAuthorization' => 'applications/drydock/storage/DrydockAuthorization.php', + 'DrydockAuthorizationAuthorizeController' => 'applications/drydock/controller/DrydockAuthorizationAuthorizeController.php', + 'DrydockAuthorizationListController' => 'applications/drydock/controller/DrydockAuthorizationListController.php', + 'DrydockAuthorizationListView' => 'applications/drydock/view/DrydockAuthorizationListView.php', + 'DrydockAuthorizationPHIDType' => 'applications/drydock/phid/DrydockAuthorizationPHIDType.php', + 'DrydockAuthorizationQuery' => 'applications/drydock/query/DrydockAuthorizationQuery.php', + 'DrydockAuthorizationSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockAuthorizationSearchConduitAPIMethod.php', + 'DrydockAuthorizationSearchEngine' => 'applications/drydock/query/DrydockAuthorizationSearchEngine.php', + 'DrydockAuthorizationViewController' => 'applications/drydock/controller/DrydockAuthorizationViewController.php', + 'DrydockBlueprint' => 'applications/drydock/storage/DrydockBlueprint.php', + 'DrydockBlueprintController' => 'applications/drydock/controller/DrydockBlueprintController.php', + 'DrydockBlueprintCoreCustomField' => 'applications/drydock/customfield/DrydockBlueprintCoreCustomField.php', + 'DrydockBlueprintCustomField' => 'applications/drydock/customfield/DrydockBlueprintCustomField.php', + 'DrydockBlueprintDatasource' => 'applications/drydock/typeahead/DrydockBlueprintDatasource.php', + 'DrydockBlueprintDisableController' => 'applications/drydock/controller/DrydockBlueprintDisableController.php', + 'DrydockBlueprintDisableTransaction' => 'applications/drydock/xaction/DrydockBlueprintDisableTransaction.php', + 'DrydockBlueprintEditConduitAPIMethod' => 'applications/drydock/conduit/DrydockBlueprintEditConduitAPIMethod.php', + 'DrydockBlueprintEditController' => 'applications/drydock/controller/DrydockBlueprintEditController.php', + 'DrydockBlueprintEditEngine' => 'applications/drydock/editor/DrydockBlueprintEditEngine.php', + 'DrydockBlueprintEditor' => 'applications/drydock/editor/DrydockBlueprintEditor.php', + 'DrydockBlueprintImplementation' => 'applications/drydock/blueprint/DrydockBlueprintImplementation.php', + 'DrydockBlueprintImplementationTestCase' => 'applications/drydock/blueprint/__tests__/DrydockBlueprintImplementationTestCase.php', + 'DrydockBlueprintListController' => 'applications/drydock/controller/DrydockBlueprintListController.php', + 'DrydockBlueprintNameNgrams' => 'applications/drydock/storage/DrydockBlueprintNameNgrams.php', + 'DrydockBlueprintNameTransaction' => 'applications/drydock/xaction/DrydockBlueprintNameTransaction.php', + 'DrydockBlueprintPHIDType' => 'applications/drydock/phid/DrydockBlueprintPHIDType.php', + 'DrydockBlueprintQuery' => 'applications/drydock/query/DrydockBlueprintQuery.php', + 'DrydockBlueprintSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockBlueprintSearchConduitAPIMethod.php', + 'DrydockBlueprintSearchEngine' => 'applications/drydock/query/DrydockBlueprintSearchEngine.php', + 'DrydockBlueprintTransaction' => 'applications/drydock/storage/DrydockBlueprintTransaction.php', + 'DrydockBlueprintTransactionQuery' => 'applications/drydock/query/DrydockBlueprintTransactionQuery.php', + 'DrydockBlueprintTransactionType' => 'applications/drydock/xaction/DrydockBlueprintTransactionType.php', + 'DrydockBlueprintTypeTransaction' => 'applications/drydock/xaction/DrydockBlueprintTypeTransaction.php', + 'DrydockBlueprintViewController' => 'applications/drydock/controller/DrydockBlueprintViewController.php', + 'DrydockCommand' => 'applications/drydock/storage/DrydockCommand.php', + 'DrydockCommandError' => 'applications/drydock/exception/DrydockCommandError.php', 'DrydockCommandInterface' => 'applications/drydock/interface/command/DrydockCommandInterface.php', - 'DrydockConstants' => 'applications/drydock/constants/DrydockConstants.php', + 'DrydockCommandQuery' => 'applications/drydock/query/DrydockCommandQuery.php', + 'DrydockConsoleController' => 'applications/drydock/controller/DrydockConsoleController.php', 'DrydockController' => 'applications/drydock/controller/DrydockController.php', + 'DrydockCreateBlueprintsCapability' => 'applications/drydock/capability/DrydockCreateBlueprintsCapability.php', 'DrydockDAO' => 'applications/drydock/storage/DrydockDAO.php', - 'DrydockEC2HostBlueprint' => 'applications/drydock/blueprint/DrydockEC2HostBlueprint.php', + 'DrydockDefaultEditCapability' => 'applications/drydock/capability/DrydockDefaultEditCapability.php', + 'DrydockDefaultViewCapability' => 'applications/drydock/capability/DrydockDefaultViewCapability.php', + 'DrydockFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockFilesystemInterface.php', 'DrydockInterface' => 'applications/drydock/interface/DrydockInterface.php', + 'DrydockLandRepositoryOperation' => 'applications/drydock/operation/DrydockLandRepositoryOperation.php', 'DrydockLease' => 'applications/drydock/storage/DrydockLease.php', + 'DrydockLeaseAcquiredLogType' => 'applications/drydock/logtype/DrydockLeaseAcquiredLogType.php', + 'DrydockLeaseActivatedLogType' => 'applications/drydock/logtype/DrydockLeaseActivatedLogType.php', + 'DrydockLeaseActivationFailureLogType' => 'applications/drydock/logtype/DrydockLeaseActivationFailureLogType.php', + 'DrydockLeaseActivationYieldLogType' => 'applications/drydock/logtype/DrydockLeaseActivationYieldLogType.php', + 'DrydockLeaseAllocationFailureLogType' => 'applications/drydock/logtype/DrydockLeaseAllocationFailureLogType.php', + 'DrydockLeaseController' => 'applications/drydock/controller/DrydockLeaseController.php', + 'DrydockLeaseDatasource' => 'applications/drydock/typeahead/DrydockLeaseDatasource.php', + 'DrydockLeaseDestroyedLogType' => 'applications/drydock/logtype/DrydockLeaseDestroyedLogType.php', 'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php', + 'DrydockLeaseListView' => 'applications/drydock/view/DrydockLeaseListView.php', + 'DrydockLeaseNoAuthorizationsLogType' => 'applications/drydock/logtype/DrydockLeaseNoAuthorizationsLogType.php', + 'DrydockLeaseNoBlueprintsLogType' => 'applications/drydock/logtype/DrydockLeaseNoBlueprintsLogType.php', + 'DrydockLeasePHIDType' => 'applications/drydock/phid/DrydockLeasePHIDType.php', + 'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php', + 'DrydockLeaseQueuedLogType' => 'applications/drydock/logtype/DrydockLeaseQueuedLogType.php', + 'DrydockLeaseReacquireLogType' => 'applications/drydock/logtype/DrydockLeaseReacquireLogType.php', + 'DrydockLeaseReclaimLogType' => 'applications/drydock/logtype/DrydockLeaseReclaimLogType.php', + 'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php', + 'DrydockLeaseReleasedLogType' => 'applications/drydock/logtype/DrydockLeaseReleasedLogType.php', + 'DrydockLeaseSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockLeaseSearchConduitAPIMethod.php', + 'DrydockLeaseSearchEngine' => 'applications/drydock/query/DrydockLeaseSearchEngine.php', 'DrydockLeaseStatus' => 'applications/drydock/constants/DrydockLeaseStatus.php', - 'DrydockLocalCommandInterface' => 'applications/drydock/interface/command/DrydockLocalCommandInterface.php', - 'DrydockLocalHostBlueprint' => 'applications/drydock/blueprint/DrydockLocalHostBlueprint.php', + 'DrydockLeaseUpdateWorker' => 'applications/drydock/worker/DrydockLeaseUpdateWorker.php', + 'DrydockLeaseViewController' => 'applications/drydock/controller/DrydockLeaseViewController.php', + 'DrydockLeaseWaitingForActivationLogType' => 'applications/drydock/logtype/DrydockLeaseWaitingForActivationLogType.php', + 'DrydockLeaseWaitingForReclamationLogType' => 'applications/drydock/logtype/DrydockLeaseWaitingForReclamationLogType.php', + 'DrydockLeaseWaitingForResourcesLogType' => 'applications/drydock/logtype/DrydockLeaseWaitingForResourcesLogType.php', 'DrydockLog' => 'applications/drydock/storage/DrydockLog.php', 'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php', + 'DrydockLogGarbageCollector' => 'applications/drydock/garbagecollector/DrydockLogGarbageCollector.php', + 'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php', + 'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php', 'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php', - 'DrydockPhabricatorApplicationBlueprint' => 'applications/drydock/blueprint/application/DrydockPhabricatorApplicationBlueprint.php', - 'DrydockRemoteHostBlueprint' => 'applications/drydock/blueprint/DrydockRemoteHostBlueprint.php', + 'DrydockLogSearchEngine' => 'applications/drydock/query/DrydockLogSearchEngine.php', + 'DrydockLogType' => 'applications/drydock/logtype/DrydockLogType.php', + 'DrydockManagementCommandWorkflow' => 'applications/drydock/management/DrydockManagementCommandWorkflow.php', + 'DrydockManagementLeaseWorkflow' => 'applications/drydock/management/DrydockManagementLeaseWorkflow.php', + 'DrydockManagementReclaimWorkflow' => 'applications/drydock/management/DrydockManagementReclaimWorkflow.php', + 'DrydockManagementReleaseLeaseWorkflow' => 'applications/drydock/management/DrydockManagementReleaseLeaseWorkflow.php', + 'DrydockManagementReleaseResourceWorkflow' => 'applications/drydock/management/DrydockManagementReleaseResourceWorkflow.php', + 'DrydockManagementUpdateLeaseWorkflow' => 'applications/drydock/management/DrydockManagementUpdateLeaseWorkflow.php', + 'DrydockManagementUpdateResourceWorkflow' => 'applications/drydock/management/DrydockManagementUpdateResourceWorkflow.php', + 'DrydockManagementWorkflow' => 'applications/drydock/management/DrydockManagementWorkflow.php', + 'DrydockObjectAuthorizationView' => 'applications/drydock/view/DrydockObjectAuthorizationView.php', + 'DrydockOperationWorkLogType' => 'applications/drydock/logtype/DrydockOperationWorkLogType.php', + 'DrydockQuery' => 'applications/drydock/query/DrydockQuery.php', + 'DrydockRepositoryOperation' => 'applications/drydock/storage/DrydockRepositoryOperation.php', + 'DrydockRepositoryOperationController' => 'applications/drydock/controller/DrydockRepositoryOperationController.php', + 'DrydockRepositoryOperationDismissController' => 'applications/drydock/controller/DrydockRepositoryOperationDismissController.php', + 'DrydockRepositoryOperationListController' => 'applications/drydock/controller/DrydockRepositoryOperationListController.php', + 'DrydockRepositoryOperationPHIDType' => 'applications/drydock/phid/DrydockRepositoryOperationPHIDType.php', + 'DrydockRepositoryOperationQuery' => 'applications/drydock/query/DrydockRepositoryOperationQuery.php', + 'DrydockRepositoryOperationSearchEngine' => 'applications/drydock/query/DrydockRepositoryOperationSearchEngine.php', + 'DrydockRepositoryOperationStatusController' => 'applications/drydock/controller/DrydockRepositoryOperationStatusController.php', + 'DrydockRepositoryOperationStatusView' => 'applications/drydock/view/DrydockRepositoryOperationStatusView.php', + 'DrydockRepositoryOperationType' => 'applications/drydock/operation/DrydockRepositoryOperationType.php', + 'DrydockRepositoryOperationUpdateWorker' => 'applications/drydock/worker/DrydockRepositoryOperationUpdateWorker.php', + 'DrydockRepositoryOperationViewController' => 'applications/drydock/controller/DrydockRepositoryOperationViewController.php', 'DrydockResource' => 'applications/drydock/storage/DrydockResource.php', - 'DrydockResourceAllocateController' => 'applications/drydock/controller/DrydockResourceAllocateController.php', + 'DrydockResourceActivationFailureLogType' => 'applications/drydock/logtype/DrydockResourceActivationFailureLogType.php', + 'DrydockResourceActivationYieldLogType' => 'applications/drydock/logtype/DrydockResourceActivationYieldLogType.php', + 'DrydockResourceAllocationFailureLogType' => 'applications/drydock/logtype/DrydockResourceAllocationFailureLogType.php', + 'DrydockResourceController' => 'applications/drydock/controller/DrydockResourceController.php', + 'DrydockResourceDatasource' => 'applications/drydock/typeahead/DrydockResourceDatasource.php', 'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php', + 'DrydockResourceListView' => 'applications/drydock/view/DrydockResourceListView.php', + 'DrydockResourceLockException' => 'applications/drydock/exception/DrydockResourceLockException.php', + 'DrydockResourcePHIDType' => 'applications/drydock/phid/DrydockResourcePHIDType.php', + 'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php', + 'DrydockResourceReclaimLogType' => 'applications/drydock/logtype/DrydockResourceReclaimLogType.php', + 'DrydockResourceReleaseController' => 'applications/drydock/controller/DrydockResourceReleaseController.php', + 'DrydockResourceSearchConduitAPIMethod' => 'applications/drydock/conduit/DrydockResourceSearchConduitAPIMethod.php', + 'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php', 'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php', + 'DrydockResourceUpdateWorker' => 'applications/drydock/worker/DrydockResourceUpdateWorker.php', + 'DrydockResourceViewController' => 'applications/drydock/controller/DrydockResourceViewController.php', + 'DrydockSFTPFilesystemInterface' => 'applications/drydock/interface/filesystem/DrydockSFTPFilesystemInterface.php', 'DrydockSSHCommandInterface' => 'applications/drydock/interface/command/DrydockSSHCommandInterface.php', + 'DrydockSchemaSpec' => 'applications/drydock/storage/DrydockSchemaSpec.php', + 'DrydockSlotLock' => 'applications/drydock/storage/DrydockSlotLock.php', + 'DrydockSlotLockException' => 'applications/drydock/exception/DrydockSlotLockException.php', + 'DrydockSlotLockFailureLogType' => 'applications/drydock/logtype/DrydockSlotLockFailureLogType.php', + 'DrydockTestRepositoryOperation' => 'applications/drydock/operation/DrydockTestRepositoryOperation.php', + 'DrydockTextLogType' => 'applications/drydock/logtype/DrydockTextLogType.php', 'DrydockWebrootInterface' => 'applications/drydock/interface/webroot/DrydockWebrootInterface.php', + 'DrydockWorker' => 'applications/drydock/worker/DrydockWorker.php', + 'DrydockWorkingCopyBlueprintImplementation' => 'applications/drydock/blueprint/DrydockWorkingCopyBlueprintImplementation.php', + 'EdgeSearchConduitAPIMethod' => 'infrastructure/edges/conduit/EdgeSearchConduitAPIMethod.php', + 'FeedConduitAPIMethod' => 'applications/feed/conduit/FeedConduitAPIMethod.php', + 'FeedPublisherHTTPWorker' => 'applications/feed/worker/FeedPublisherHTTPWorker.php', + 'FeedPublisherWorker' => 'applications/feed/worker/FeedPublisherWorker.php', + 'FeedPushWorker' => 'applications/feed/worker/FeedPushWorker.php', + 'FeedQueryConduitAPIMethod' => 'applications/feed/conduit/FeedQueryConduitAPIMethod.php', + 'FeedStoryNotificationGarbageCollector' => 'applications/notification/garbagecollector/FeedStoryNotificationGarbageCollector.php', + 'FerretConfigurableSearchFunction' => 'applications/search/ferret/function/FerretConfigurableSearchFunction.php', + 'FerretSearchFunction' => 'applications/search/ferret/function/FerretSearchFunction.php', + 'FileAllocateConduitAPIMethod' => 'applications/files/conduit/FileAllocateConduitAPIMethod.php', + 'FileConduitAPIMethod' => 'applications/files/conduit/FileConduitAPIMethod.php', + 'FileCreateMailReceiver' => 'applications/files/mail/FileCreateMailReceiver.php', + 'FileDeletionWorker' => 'applications/files/worker/FileDeletionWorker.php', + 'FileDownloadConduitAPIMethod' => 'applications/files/conduit/FileDownloadConduitAPIMethod.php', + 'FileInfoConduitAPIMethod' => 'applications/files/conduit/FileInfoConduitAPIMethod.php', + 'FileMailReceiver' => 'applications/files/mail/FileMailReceiver.php', + 'FileQueryChunksConduitAPIMethod' => 'applications/files/conduit/FileQueryChunksConduitAPIMethod.php', + 'FileReplyHandler' => 'applications/files/mail/FileReplyHandler.php', + 'FileTypeIcon' => 'applications/files/constants/FileTypeIcon.php', + 'FileUploadChunkConduitAPIMethod' => 'applications/files/conduit/FileUploadChunkConduitAPIMethod.php', + 'FileUploadConduitAPIMethod' => 'applications/files/conduit/FileUploadConduitAPIMethod.php', + 'FileUploadHashConduitAPIMethod' => 'applications/files/conduit/FileUploadHashConduitAPIMethod.php', + 'FilesDefaultViewCapability' => 'applications/files/capability/FilesDefaultViewCapability.php', + 'FlagConduitAPIMethod' => 'applications/flag/conduit/FlagConduitAPIMethod.php', + 'FlagDeleteConduitAPIMethod' => 'applications/flag/conduit/FlagDeleteConduitAPIMethod.php', + 'FlagEditConduitAPIMethod' => 'applications/flag/conduit/FlagEditConduitAPIMethod.php', + 'FlagQueryConduitAPIMethod' => 'applications/flag/conduit/FlagQueryConduitAPIMethod.php', + 'FuelComponentView' => 'view/fuel/FuelComponentView.php', + 'FuelGridCellView' => 'view/fuel/FuelGridCellView.php', + 'FuelGridRowView' => 'view/fuel/FuelGridRowView.php', + 'FuelGridView' => 'view/fuel/FuelGridView.php', + 'FuelHandleListItemView' => 'view/fuel/FuelHandleListItemView.php', + 'FuelHandleListView' => 'view/fuel/FuelHandleListView.php', + 'FuelMapItemView' => 'view/fuel/FuelMapItemView.php', + 'FuelMapView' => 'view/fuel/FuelMapView.php', + 'FuelMenuItemView' => 'view/fuel/FuelMenuItemView.php', + 'FuelMenuView' => 'view/fuel/FuelMenuView.php', + 'FuelView' => 'view/fuel/FuelView.php', + 'FundBacker' => 'applications/fund/storage/FundBacker.php', + 'FundBackerCart' => 'applications/fund/phortune/FundBackerCart.php', + 'FundBackerEditor' => 'applications/fund/editor/FundBackerEditor.php', + 'FundBackerListController' => 'applications/fund/controller/FundBackerListController.php', + 'FundBackerPHIDType' => 'applications/fund/phid/FundBackerPHIDType.php', + 'FundBackerProduct' => 'applications/fund/phortune/FundBackerProduct.php', + 'FundBackerQuery' => 'applications/fund/query/FundBackerQuery.php', + 'FundBackerRefundTransaction' => 'applications/fund/xaction/FundBackerRefundTransaction.php', + 'FundBackerSearchEngine' => 'applications/fund/query/FundBackerSearchEngine.php', + 'FundBackerStatusTransaction' => 'applications/fund/xaction/FundBackerStatusTransaction.php', + 'FundBackerTransaction' => 'applications/fund/storage/FundBackerTransaction.php', + 'FundBackerTransactionQuery' => 'applications/fund/query/FundBackerTransactionQuery.php', + 'FundBackerTransactionType' => 'applications/fund/xaction/FundBackerTransactionType.php', + 'FundController' => 'applications/fund/controller/FundController.php', + 'FundCreateInitiativesCapability' => 'applications/fund/capability/FundCreateInitiativesCapability.php', + 'FundDAO' => 'applications/fund/storage/FundDAO.php', + 'FundDefaultViewCapability' => 'applications/fund/capability/FundDefaultViewCapability.php', + 'FundInitiative' => 'applications/fund/storage/FundInitiative.php', + 'FundInitiativeBackController' => 'applications/fund/controller/FundInitiativeBackController.php', + 'FundInitiativeBackerTransaction' => 'applications/fund/xaction/FundInitiativeBackerTransaction.php', + 'FundInitiativeCloseController' => 'applications/fund/controller/FundInitiativeCloseController.php', + 'FundInitiativeDescriptionTransaction' => 'applications/fund/xaction/FundInitiativeDescriptionTransaction.php', + 'FundInitiativeEditController' => 'applications/fund/controller/FundInitiativeEditController.php', + 'FundInitiativeEditEngine' => 'applications/fund/editor/FundInitiativeEditEngine.php', + 'FundInitiativeEditor' => 'applications/fund/editor/FundInitiativeEditor.php', + 'FundInitiativeFerretEngine' => 'applications/fund/search/FundInitiativeFerretEngine.php', + 'FundInitiativeFulltextEngine' => 'applications/fund/search/FundInitiativeFulltextEngine.php', + 'FundInitiativeListController' => 'applications/fund/controller/FundInitiativeListController.php', + 'FundInitiativeMerchantTransaction' => 'applications/fund/xaction/FundInitiativeMerchantTransaction.php', + 'FundInitiativeNameTransaction' => 'applications/fund/xaction/FundInitiativeNameTransaction.php', + 'FundInitiativePHIDType' => 'applications/fund/phid/FundInitiativePHIDType.php', + 'FundInitiativeQuery' => 'applications/fund/query/FundInitiativeQuery.php', + 'FundInitiativeRefundTransaction' => 'applications/fund/xaction/FundInitiativeRefundTransaction.php', + 'FundInitiativeRemarkupRule' => 'applications/fund/remarkup/FundInitiativeRemarkupRule.php', + 'FundInitiativeReplyHandler' => 'applications/fund/mail/FundInitiativeReplyHandler.php', + 'FundInitiativeRisksTransaction' => 'applications/fund/xaction/FundInitiativeRisksTransaction.php', + 'FundInitiativeSearchEngine' => 'applications/fund/query/FundInitiativeSearchEngine.php', + 'FundInitiativeStatusTransaction' => 'applications/fund/xaction/FundInitiativeStatusTransaction.php', + 'FundInitiativeTransaction' => 'applications/fund/storage/FundInitiativeTransaction.php', + 'FundInitiativeTransactionComment' => 'applications/fund/storage/FundInitiativeTransactionComment.php', + 'FundInitiativeTransactionQuery' => 'applications/fund/query/FundInitiativeTransactionQuery.php', + 'FundInitiativeTransactionType' => 'applications/fund/xaction/FundInitiativeTransactionType.php', + 'FundInitiativeViewController' => 'applications/fund/controller/FundInitiativeViewController.php', + 'FundSchemaSpec' => 'applications/fund/storage/FundSchemaSpec.php', + 'HarbormasterAbortOlderBuildsBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterAbortOlderBuildsBuildStepImplementation.php', + 'HarbormasterArcLintBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcLintBuildStepImplementation.php', + 'HarbormasterArcUnitBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterArcUnitBuildStepImplementation.php', + 'HarbormasterArtifact' => 'applications/harbormaster/artifact/HarbormasterArtifact.php', + 'HarbormasterArtifactSearchConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterArtifactSearchConduitAPIMethod.php', + 'HarbormasterArtifactSearchEngine' => 'applications/harbormaster/query/HarbormasterArtifactSearchEngine.php', + 'HarbormasterAutotargetsTestCase' => 'applications/harbormaster/__tests__/HarbormasterAutotargetsTestCase.php', + 'HarbormasterBuild' => 'applications/harbormaster/storage/build/HarbormasterBuild.php', + 'HarbormasterBuildAbortedException' => 'applications/harbormaster/exception/HarbormasterBuildAbortedException.php', + 'HarbormasterBuildActionController' => 'applications/harbormaster/controller/HarbormasterBuildActionController.php', + 'HarbormasterBuildArcanistAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildArcanistAutoplan.php', + 'HarbormasterBuildArtifact' => 'applications/harbormaster/storage/build/HarbormasterBuildArtifact.php', + 'HarbormasterBuildArtifactPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildArtifactPHIDType.php', + 'HarbormasterBuildArtifactQuery' => 'applications/harbormaster/query/HarbormasterBuildArtifactQuery.php', + 'HarbormasterBuildAutoplan' => 'applications/harbormaster/autoplan/HarbormasterBuildAutoplan.php', + 'HarbormasterBuildDependencyDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildDependencyDatasource.php', + 'HarbormasterBuildEditAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildEditAPIMethod.php', + 'HarbormasterBuildEditEngine' => 'applications/harbormaster/editor/HarbormasterBuildEditEngine.php', + 'HarbormasterBuildEngine' => 'applications/harbormaster/engine/HarbormasterBuildEngine.php', + 'HarbormasterBuildFailureException' => 'applications/harbormaster/exception/HarbormasterBuildFailureException.php', + 'HarbormasterBuildGraph' => 'applications/harbormaster/engine/HarbormasterBuildGraph.php', + 'HarbormasterBuildInitiatorDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildInitiatorDatasource.php', + 'HarbormasterBuildLintMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildLintMessage.php', + 'HarbormasterBuildListController' => 'applications/harbormaster/controller/HarbormasterBuildListController.php', + 'HarbormasterBuildLog' => 'applications/harbormaster/storage/build/HarbormasterBuildLog.php', + 'HarbormasterBuildLogChunk' => 'applications/harbormaster/storage/build/HarbormasterBuildLogChunk.php', + 'HarbormasterBuildLogChunkIterator' => 'applications/harbormaster/storage/build/HarbormasterBuildLogChunkIterator.php', + 'HarbormasterBuildLogDownloadController' => 'applications/harbormaster/controller/HarbormasterBuildLogDownloadController.php', + 'HarbormasterBuildLogPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildLogPHIDType.php', + 'HarbormasterBuildLogQuery' => 'applications/harbormaster/query/HarbormasterBuildLogQuery.php', + 'HarbormasterBuildLogRenderController' => 'applications/harbormaster/controller/HarbormasterBuildLogRenderController.php', + 'HarbormasterBuildLogSearchConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildLogSearchConduitAPIMethod.php', + 'HarbormasterBuildLogSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildLogSearchEngine.php', + 'HarbormasterBuildLogTestCase' => 'applications/harbormaster/__tests__/HarbormasterBuildLogTestCase.php', + 'HarbormasterBuildLogView' => 'applications/harbormaster/view/HarbormasterBuildLogView.php', + 'HarbormasterBuildLogViewController' => 'applications/harbormaster/controller/HarbormasterBuildLogViewController.php', + 'HarbormasterBuildMessage' => 'applications/harbormaster/storage/HarbormasterBuildMessage.php', + 'HarbormasterBuildMessageAbortTransaction' => 'applications/harbormaster/xaction/build/HarbormasterBuildMessageAbortTransaction.php', + 'HarbormasterBuildMessagePauseTransaction' => 'applications/harbormaster/xaction/build/HarbormasterBuildMessagePauseTransaction.php', + 'HarbormasterBuildMessageQuery' => 'applications/harbormaster/query/HarbormasterBuildMessageQuery.php', + 'HarbormasterBuildMessageRestartTransaction' => 'applications/harbormaster/xaction/build/HarbormasterBuildMessageRestartTransaction.php', + 'HarbormasterBuildMessageResumeTransaction' => 'applications/harbormaster/xaction/build/HarbormasterBuildMessageResumeTransaction.php', + 'HarbormasterBuildMessageTransaction' => 'applications/harbormaster/xaction/build/HarbormasterBuildMessageTransaction.php', + 'HarbormasterBuildPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPHIDType.php', + 'HarbormasterBuildPlan' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlan.php', + 'HarbormasterBuildPlanBehavior' => 'applications/harbormaster/plan/HarbormasterBuildPlanBehavior.php', + 'HarbormasterBuildPlanBehaviorOption' => 'applications/harbormaster/plan/HarbormasterBuildPlanBehaviorOption.php', + 'HarbormasterBuildPlanBehaviorTransaction' => 'applications/harbormaster/xaction/plan/HarbormasterBuildPlanBehaviorTransaction.php', + 'HarbormasterBuildPlanDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildPlanDatasource.php', + 'HarbormasterBuildPlanDefaultEditCapability' => 'applications/harbormaster/capability/HarbormasterBuildPlanDefaultEditCapability.php', + 'HarbormasterBuildPlanDefaultViewCapability' => 'applications/harbormaster/capability/HarbormasterBuildPlanDefaultViewCapability.php', + 'HarbormasterBuildPlanEditAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildPlanEditAPIMethod.php', + 'HarbormasterBuildPlanEditEngine' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditEngine.php', + 'HarbormasterBuildPlanEditor' => 'applications/harbormaster/editor/HarbormasterBuildPlanEditor.php', + 'HarbormasterBuildPlanNameNgrams' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlanNameNgrams.php', + 'HarbormasterBuildPlanNameTransaction' => 'applications/harbormaster/xaction/plan/HarbormasterBuildPlanNameTransaction.php', + 'HarbormasterBuildPlanPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildPlanPHIDType.php', + 'HarbormasterBuildPlanPolicyCodex' => 'applications/harbormaster/codex/HarbormasterBuildPlanPolicyCodex.php', + 'HarbormasterBuildPlanQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanQuery.php', + 'HarbormasterBuildPlanSearchAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildPlanSearchAPIMethod.php', + 'HarbormasterBuildPlanSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildPlanSearchEngine.php', + 'HarbormasterBuildPlanStatusTransaction' => 'applications/harbormaster/xaction/plan/HarbormasterBuildPlanStatusTransaction.php', + 'HarbormasterBuildPlanTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildPlanTransaction.php', + 'HarbormasterBuildPlanTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildPlanTransactionQuery.php', + 'HarbormasterBuildPlanTransactionType' => 'applications/harbormaster/xaction/plan/HarbormasterBuildPlanTransactionType.php', + 'HarbormasterBuildQuery' => 'applications/harbormaster/query/HarbormasterBuildQuery.php', + 'HarbormasterBuildRequest' => 'applications/harbormaster/engine/HarbormasterBuildRequest.php', + 'HarbormasterBuildSearchConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildSearchConduitAPIMethod.php', + 'HarbormasterBuildSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildSearchEngine.php', + 'HarbormasterBuildStatus' => 'applications/harbormaster/constants/HarbormasterBuildStatus.php', + 'HarbormasterBuildStatusDatasource' => 'applications/harbormaster/typeahead/HarbormasterBuildStatusDatasource.php', + 'HarbormasterBuildStep' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStep.php', + 'HarbormasterBuildStepCoreCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCoreCustomField.php', + 'HarbormasterBuildStepCustomField' => 'applications/harbormaster/customfield/HarbormasterBuildStepCustomField.php', + 'HarbormasterBuildStepEditAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildStepEditAPIMethod.php', + 'HarbormasterBuildStepEditEngine' => 'applications/harbormaster/editor/HarbormasterBuildStepEditEngine.php', + 'HarbormasterBuildStepEditor' => 'applications/harbormaster/editor/HarbormasterBuildStepEditor.php', + 'HarbormasterBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuildStepGroup.php', + 'HarbormasterBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildStepImplementation.php', + 'HarbormasterBuildStepImplementationTestCase' => 'applications/harbormaster/step/__tests__/HarbormasterBuildStepImplementationTestCase.php', + 'HarbormasterBuildStepPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildStepPHIDType.php', + 'HarbormasterBuildStepQuery' => 'applications/harbormaster/query/HarbormasterBuildStepQuery.php', + 'HarbormasterBuildStepSearchAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildStepSearchAPIMethod.php', + 'HarbormasterBuildStepSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildStepSearchEngine.php', + 'HarbormasterBuildStepTransaction' => 'applications/harbormaster/storage/configuration/HarbormasterBuildStepTransaction.php', + 'HarbormasterBuildStepTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildStepTransactionQuery.php', + 'HarbormasterBuildTarget' => 'applications/harbormaster/storage/build/HarbormasterBuildTarget.php', + 'HarbormasterBuildTargetPHIDType' => 'applications/harbormaster/phid/HarbormasterBuildTargetPHIDType.php', + 'HarbormasterBuildTargetQuery' => 'applications/harbormaster/query/HarbormasterBuildTargetQuery.php', + 'HarbormasterBuildTargetSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildTargetSearchEngine.php', + 'HarbormasterBuildTransaction' => 'applications/harbormaster/storage/HarbormasterBuildTransaction.php', + 'HarbormasterBuildTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildTransactionEditor.php', + 'HarbormasterBuildTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildTransactionQuery.php', + 'HarbormasterBuildTransactionType' => 'applications/harbormaster/xaction/build/HarbormasterBuildTransactionType.php', + 'HarbormasterBuildUnitMessage' => 'applications/harbormaster/storage/build/HarbormasterBuildUnitMessage.php', + 'HarbormasterBuildUnitMessageQuery' => 'applications/harbormaster/query/HarbormasterBuildUnitMessageQuery.php', + 'HarbormasterBuildView' => 'applications/harbormaster/view/HarbormasterBuildView.php', + 'HarbormasterBuildViewController' => 'applications/harbormaster/controller/HarbormasterBuildViewController.php', + 'HarbormasterBuildWorker' => 'applications/harbormaster/worker/HarbormasterBuildWorker.php', + 'HarbormasterBuildable' => 'applications/harbormaster/storage/HarbormasterBuildable.php', + 'HarbormasterBuildableActionController' => 'applications/harbormaster/controller/HarbormasterBuildableActionController.php', + 'HarbormasterBuildableAdapterInterface' => 'applications/harbormaster/herald/HarbormasterBuildableAdapterInterface.php', + 'HarbormasterBuildableEditAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildableEditAPIMethod.php', + 'HarbormasterBuildableEditEngine' => 'applications/harbormaster/editor/HarbormasterBuildableEditEngine.php', + 'HarbormasterBuildableEngine' => 'applications/harbormaster/engine/HarbormasterBuildableEngine.php', + 'HarbormasterBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildableInterface.php', + 'HarbormasterBuildableListController' => 'applications/harbormaster/controller/HarbormasterBuildableListController.php', + 'HarbormasterBuildableMessageTransaction' => 'applications/harbormaster/xaction/buildable/HarbormasterBuildableMessageTransaction.php', + 'HarbormasterBuildablePHIDType' => 'applications/harbormaster/phid/HarbormasterBuildablePHIDType.php', + 'HarbormasterBuildableQuery' => 'applications/harbormaster/query/HarbormasterBuildableQuery.php', + 'HarbormasterBuildableSearchAPIMethod' => 'applications/harbormaster/conduit/HarbormasterBuildableSearchAPIMethod.php', + 'HarbormasterBuildableSearchEngine' => 'applications/harbormaster/query/HarbormasterBuildableSearchEngine.php', + 'HarbormasterBuildableStatus' => 'applications/harbormaster/constants/HarbormasterBuildableStatus.php', + 'HarbormasterBuildableTransaction' => 'applications/harbormaster/storage/HarbormasterBuildableTransaction.php', + 'HarbormasterBuildableTransactionEditor' => 'applications/harbormaster/editor/HarbormasterBuildableTransactionEditor.php', + 'HarbormasterBuildableTransactionQuery' => 'applications/harbormaster/query/HarbormasterBuildableTransactionQuery.php', + 'HarbormasterBuildableTransactionType' => 'applications/harbormaster/xaction/buildable/HarbormasterBuildableTransactionType.php', + 'HarbormasterBuildableViewController' => 'applications/harbormaster/controller/HarbormasterBuildableViewController.php', + 'HarbormasterBuildkiteBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterBuildkiteBuildStepImplementation.php', + 'HarbormasterBuildkiteBuildableInterface' => 'applications/harbormaster/interface/HarbormasterBuildkiteBuildableInterface.php', + 'HarbormasterBuildkiteHookController' => 'applications/harbormaster/controller/HarbormasterBuildkiteHookController.php', + 'HarbormasterBuiltinBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterBuiltinBuildStepGroup.php', + 'HarbormasterCircleCIBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterCircleCIBuildStepImplementation.php', + 'HarbormasterCircleCIBuildableInterface' => 'applications/harbormaster/interface/HarbormasterCircleCIBuildableInterface.php', + 'HarbormasterCircleCIHookController' => 'applications/harbormaster/controller/HarbormasterCircleCIHookController.php', + 'HarbormasterConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterConduitAPIMethod.php', + 'HarbormasterControlBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterControlBuildStepGroup.php', + 'HarbormasterController' => 'applications/harbormaster/controller/HarbormasterController.php', + 'HarbormasterCreateArtifactConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterCreateArtifactConduitAPIMethod.php', + 'HarbormasterCreatePlansCapability' => 'applications/harbormaster/capability/HarbormasterCreatePlansCapability.php', 'HarbormasterDAO' => 'applications/harbormaster/storage/HarbormasterDAO.php', + 'HarbormasterDrydockBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterDrydockBuildStepGroup.php', + 'HarbormasterDrydockCommandBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterDrydockCommandBuildStepImplementation.php', + 'HarbormasterDrydockLeaseArtifact' => 'applications/harbormaster/artifact/HarbormasterDrydockLeaseArtifact.php', + 'HarbormasterExecFuture' => 'applications/harbormaster/future/HarbormasterExecFuture.php', + 'HarbormasterExternalBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterExternalBuildStepGroup.php', + 'HarbormasterFileArtifact' => 'applications/harbormaster/artifact/HarbormasterFileArtifact.php', + 'HarbormasterHTTPRequestBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterHTTPRequestBuildStepImplementation.php', + 'HarbormasterHostArtifact' => 'applications/harbormaster/artifact/HarbormasterHostArtifact.php', + 'HarbormasterLeaseWorkingCopyBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterLeaseWorkingCopyBuildStepImplementation.php', + 'HarbormasterLintMessagesController' => 'applications/harbormaster/controller/HarbormasterLintMessagesController.php', + 'HarbormasterLintPropertyView' => 'applications/harbormaster/view/HarbormasterLintPropertyView.php', + 'HarbormasterLogWorker' => 'applications/harbormaster/worker/HarbormasterLogWorker.php', + 'HarbormasterManagementArchiveLogsWorkflow' => 'applications/harbormaster/management/HarbormasterManagementArchiveLogsWorkflow.php', + 'HarbormasterManagementBuildWorkflow' => 'applications/harbormaster/management/HarbormasterManagementBuildWorkflow.php', + 'HarbormasterManagementPublishWorkflow' => 'applications/harbormaster/management/HarbormasterManagementPublishWorkflow.php', + 'HarbormasterManagementRebuildLogWorkflow' => 'applications/harbormaster/management/HarbormasterManagementRebuildLogWorkflow.php', + 'HarbormasterManagementRestartWorkflow' => 'applications/harbormaster/management/HarbormasterManagementRestartWorkflow.php', + 'HarbormasterManagementUpdateWorkflow' => 'applications/harbormaster/management/HarbormasterManagementUpdateWorkflow.php', + 'HarbormasterManagementWorkflow' => 'applications/harbormaster/management/HarbormasterManagementWorkflow.php', + 'HarbormasterManagementWriteLogWorkflow' => 'applications/harbormaster/management/HarbormasterManagementWriteLogWorkflow.php', + 'HarbormasterMessageException' => 'applications/harbormaster/exception/HarbormasterMessageException.php', + 'HarbormasterMessageType' => 'applications/harbormaster/engine/HarbormasterMessageType.php', + 'HarbormasterObject' => 'applications/harbormaster/storage/HarbormasterObject.php', + 'HarbormasterOtherBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterOtherBuildStepGroup.php', + 'HarbormasterPlanBehaviorController' => 'applications/harbormaster/controller/HarbormasterPlanBehaviorController.php', + 'HarbormasterPlanController' => 'applications/harbormaster/controller/HarbormasterPlanController.php', + 'HarbormasterPlanDisableController' => 'applications/harbormaster/controller/HarbormasterPlanDisableController.php', + 'HarbormasterPlanEditController' => 'applications/harbormaster/controller/HarbormasterPlanEditController.php', + 'HarbormasterPlanListController' => 'applications/harbormaster/controller/HarbormasterPlanListController.php', + 'HarbormasterPlanRunController' => 'applications/harbormaster/controller/HarbormasterPlanRunController.php', + 'HarbormasterPlanViewController' => 'applications/harbormaster/controller/HarbormasterPlanViewController.php', + 'HarbormasterPrototypeBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterPrototypeBuildStepGroup.php', + 'HarbormasterQueryAutotargetsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryAutotargetsConduitAPIMethod.php', + 'HarbormasterQueryBuildablesConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildablesConduitAPIMethod.php', + 'HarbormasterQueryBuildsConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterQueryBuildsConduitAPIMethod.php', + 'HarbormasterQueryBuildsSearchEngineAttachment' => 'applications/harbormaster/engineextension/HarbormasterQueryBuildsSearchEngineAttachment.php', + 'HarbormasterRemarkupRule' => 'applications/harbormaster/remarkup/HarbormasterRemarkupRule.php', + 'HarbormasterRunBuildPlansHeraldAction' => 'applications/harbormaster/herald/HarbormasterRunBuildPlansHeraldAction.php', + 'HarbormasterSchemaSpec' => 'applications/harbormaster/storage/HarbormasterSchemaSpec.php', 'HarbormasterScratchTable' => 'applications/harbormaster/storage/HarbormasterScratchTable.php', - 'HeraldAction' => 'applications/herald/storage/HeraldAction.php', - 'HeraldActionConfig' => 'applications/herald/config/HeraldActionConfig.php', + 'HarbormasterSendMessageConduitAPIMethod' => 'applications/harbormaster/conduit/HarbormasterSendMessageConduitAPIMethod.php', + 'HarbormasterSleepBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterSleepBuildStepImplementation.php', + 'HarbormasterStepAddController' => 'applications/harbormaster/controller/HarbormasterStepAddController.php', + 'HarbormasterStepDeleteController' => 'applications/harbormaster/controller/HarbormasterStepDeleteController.php', + 'HarbormasterStepEditController' => 'applications/harbormaster/controller/HarbormasterStepEditController.php', + 'HarbormasterStepViewController' => 'applications/harbormaster/controller/HarbormasterStepViewController.php', + 'HarbormasterString' => 'applications/harbormaster/storage/HarbormasterString.php', + 'HarbormasterTargetEngine' => 'applications/harbormaster/engine/HarbormasterTargetEngine.php', + 'HarbormasterTargetSearchAPIMethod' => 'applications/harbormaster/conduit/HarbormasterTargetSearchAPIMethod.php', + 'HarbormasterTargetWorker' => 'applications/harbormaster/worker/HarbormasterTargetWorker.php', + 'HarbormasterTestBuildStepGroup' => 'applications/harbormaster/stepgroup/HarbormasterTestBuildStepGroup.php', + 'HarbormasterThrowExceptionBuildStep' => 'applications/harbormaster/step/HarbormasterThrowExceptionBuildStep.php', + 'HarbormasterUIEventListener' => 'applications/harbormaster/event/HarbormasterUIEventListener.php', + 'HarbormasterURIArtifact' => 'applications/harbormaster/artifact/HarbormasterURIArtifact.php', + 'HarbormasterUnitMessageListController' => 'applications/harbormaster/controller/HarbormasterUnitMessageListController.php', + 'HarbormasterUnitMessageViewController' => 'applications/harbormaster/controller/HarbormasterUnitMessageViewController.php', + 'HarbormasterUnitPropertyView' => 'applications/harbormaster/view/HarbormasterUnitPropertyView.php', + 'HarbormasterUnitStatus' => 'applications/harbormaster/constants/HarbormasterUnitStatus.php', + 'HarbormasterUnitSummaryView' => 'applications/harbormaster/view/HarbormasterUnitSummaryView.php', + 'HarbormasterUploadArtifactBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterUploadArtifactBuildStepImplementation.php', + 'HarbormasterWaitForPreviousBuildStepImplementation' => 'applications/harbormaster/step/HarbormasterWaitForPreviousBuildStepImplementation.php', + 'HarbormasterWorker' => 'applications/harbormaster/worker/HarbormasterWorker.php', + 'HarbormasterWorkingCopyArtifact' => 'applications/harbormaster/artifact/HarbormasterWorkingCopyArtifact.php', + 'HeraldActingUserField' => 'applications/herald/field/HeraldActingUserField.php', + 'HeraldAction' => 'applications/herald/action/HeraldAction.php', + 'HeraldActionGroup' => 'applications/herald/action/HeraldActionGroup.php', + 'HeraldActionRecord' => 'applications/herald/storage/HeraldActionRecord.php', + 'HeraldAdapter' => 'applications/herald/adapter/HeraldAdapter.php', + 'HeraldAdapterDatasource' => 'applications/herald/typeahead/HeraldAdapterDatasource.php', + 'HeraldAlwaysField' => 'applications/herald/field/HeraldAlwaysField.php', + 'HeraldAnotherRuleField' => 'applications/herald/field/HeraldAnotherRuleField.php', + 'HeraldApplicationActionGroup' => 'applications/herald/action/HeraldApplicationActionGroup.php', 'HeraldApplyTranscript' => 'applications/herald/storage/transcript/HeraldApplyTranscript.php', - 'HeraldCommitAdapter' => 'applications/herald/adapter/HeraldCommitAdapter.php', + 'HeraldBasicFieldGroup' => 'applications/herald/field/HeraldBasicFieldGroup.php', + 'HeraldBoolFieldValue' => 'applications/herald/value/HeraldBoolFieldValue.php', + 'HeraldBuildableState' => 'applications/herald/state/HeraldBuildableState.php', + 'HeraldCallWebhookAction' => 'applications/herald/action/HeraldCallWebhookAction.php', + 'HeraldCommentAction' => 'applications/herald/action/HeraldCommentAction.php', + 'HeraldCommentContentField' => 'applications/herald/field/HeraldCommentContentField.php', + 'HeraldCommitAdapter' => 'applications/diffusion/herald/HeraldCommitAdapter.php', 'HeraldCondition' => 'applications/herald/storage/HeraldCondition.php', - 'HeraldConditionConfig' => 'applications/herald/config/HeraldConditionConfig.php', + 'HeraldConditionResult' => 'applications/herald/storage/transcript/HeraldConditionResult.php', 'HeraldConditionTranscript' => 'applications/herald/storage/transcript/HeraldConditionTranscript.php', - 'HeraldContentTypeConfig' => 'applications/herald/config/HeraldContentTypeConfig.php', + 'HeraldContentSourceField' => 'applications/herald/field/HeraldContentSourceField.php', 'HeraldController' => 'applications/herald/controller/HeraldController.php', + 'HeraldCoreStateReasons' => 'applications/herald/state/HeraldCoreStateReasons.php', + 'HeraldCreateWebhooksCapability' => 'applications/herald/capability/HeraldCreateWebhooksCapability.php', 'HeraldDAO' => 'applications/herald/storage/HeraldDAO.php', - 'HeraldDeleteController' => 'applications/herald/controller/HeraldDeleteController.php', - 'HeraldDifferentialRevisionAdapter' => 'applications/herald/adapter/HeraldDifferentialRevisionAdapter.php', - 'HeraldDryRunAdapter' => 'applications/herald/adapter/HeraldDryRunAdapter.php', - 'HeraldEditLogQuery' => 'applications/herald/query/HeraldEditLogQuery.php', + 'HeraldDeprecatedFieldGroup' => 'applications/herald/field/HeraldDeprecatedFieldGroup.php', + 'HeraldDifferentialAdapter' => 'applications/differential/herald/HeraldDifferentialAdapter.php', + 'HeraldDifferentialDiffAdapter' => 'applications/differential/herald/HeraldDifferentialDiffAdapter.php', + 'HeraldDifferentialRevisionAdapter' => 'applications/differential/herald/HeraldDifferentialRevisionAdapter.php', + 'HeraldDisableController' => 'applications/herald/controller/HeraldDisableController.php', + 'HeraldDoNothingAction' => 'applications/herald/action/HeraldDoNothingAction.php', + 'HeraldEditFieldGroup' => 'applications/herald/field/HeraldEditFieldGroup.php', 'HeraldEffect' => 'applications/herald/engine/HeraldEffect.php', + 'HeraldEmptyFieldValue' => 'applications/herald/value/HeraldEmptyFieldValue.php', 'HeraldEngine' => 'applications/herald/engine/HeraldEngine.php', - 'HeraldFieldConfig' => 'applications/herald/config/HeraldFieldConfig.php', - 'HeraldHomeController' => 'applications/herald/controller/HeraldHomeController.php', - 'HeraldInvalidConditionException' => 'applications/herald/engine/engine/HeraldInvalidConditionException.php', - 'HeraldInvalidFieldException' => 'applications/herald/engine/engine/HeraldInvalidFieldException.php', + 'HeraldExactProjectsField' => 'applications/project/herald/HeraldExactProjectsField.php', + 'HeraldField' => 'applications/herald/field/HeraldField.php', + 'HeraldFieldGroup' => 'applications/herald/field/HeraldFieldGroup.php', + 'HeraldFieldTestCase' => 'applications/herald/field/__tests__/HeraldFieldTestCase.php', + 'HeraldFieldValue' => 'applications/herald/value/HeraldFieldValue.php', + 'HeraldGroup' => 'applications/herald/group/HeraldGroup.php', + 'HeraldInvalidActionException' => 'applications/herald/engine/exception/HeraldInvalidActionException.php', + 'HeraldInvalidConditionException' => 'applications/herald/engine/exception/HeraldInvalidConditionException.php', + 'HeraldMailableState' => 'applications/herald/state/HeraldMailableState.php', + 'HeraldManageGlobalRulesCapability' => 'applications/herald/capability/HeraldManageGlobalRulesCapability.php', + 'HeraldManagementWorkflow' => 'applications/herald/management/HeraldManagementWorkflow.php', + 'HeraldManiphestTaskAdapter' => 'applications/maniphest/herald/HeraldManiphestTaskAdapter.php', 'HeraldNewController' => 'applications/herald/controller/HeraldNewController.php', - 'HeraldObjectAdapter' => 'applications/herald/adapter/HeraldObjectAdapter.php', + 'HeraldNewObjectField' => 'applications/herald/field/HeraldNewObjectField.php', + 'HeraldNotifyActionGroup' => 'applications/herald/action/HeraldNotifyActionGroup.php', 'HeraldObjectTranscript' => 'applications/herald/storage/transcript/HeraldObjectTranscript.php', - 'HeraldRecursiveConditionsException' => 'applications/herald/engine/engine/HeraldRecursiveConditionsException.php', - 'HeraldRepetitionPolicyConfig' => 'applications/herald/config/HeraldRepetitionPolicyConfig.php', + 'HeraldPhameBlogAdapter' => 'applications/phame/herald/HeraldPhameBlogAdapter.php', + 'HeraldPhamePostAdapter' => 'applications/phame/herald/HeraldPhamePostAdapter.php', + 'HeraldPholioMockAdapter' => 'applications/pholio/herald/HeraldPholioMockAdapter.php', + 'HeraldPonderQuestionAdapter' => 'applications/ponder/herald/HeraldPonderQuestionAdapter.php', + 'HeraldPreCommitAdapter' => 'applications/diffusion/herald/HeraldPreCommitAdapter.php', + 'HeraldPreCommitContentAdapter' => 'applications/diffusion/herald/HeraldPreCommitContentAdapter.php', + 'HeraldPreCommitRefAdapter' => 'applications/diffusion/herald/HeraldPreCommitRefAdapter.php', + 'HeraldPreventActionGroup' => 'applications/herald/action/HeraldPreventActionGroup.php', + 'HeraldProjectsField' => 'applications/project/herald/HeraldProjectsField.php', + 'HeraldRecursiveConditionsException' => 'applications/herald/engine/exception/HeraldRecursiveConditionsException.php', + 'HeraldRelatedFieldGroup' => 'applications/herald/field/HeraldRelatedFieldGroup.php', + 'HeraldRemarkupFieldValue' => 'applications/herald/value/HeraldRemarkupFieldValue.php', + 'HeraldRemarkupRule' => 'applications/herald/remarkup/HeraldRemarkupRule.php', 'HeraldRule' => 'applications/herald/storage/HeraldRule.php', + 'HeraldRuleActionAffectsObjectEdgeType' => 'applications/herald/edge/HeraldRuleActionAffectsObjectEdgeType.php', + 'HeraldRuleAdapter' => 'applications/herald/adapter/HeraldRuleAdapter.php', + 'HeraldRuleAdapterField' => 'applications/herald/field/rule/HeraldRuleAdapterField.php', 'HeraldRuleController' => 'applications/herald/controller/HeraldRuleController.php', - 'HeraldRuleEdit' => 'applications/herald/storage/HeraldRuleEdit.php', - 'HeraldRuleEditHistoryController' => 'applications/herald/controller/HeraldRuleEditHistoryController.php', - 'HeraldRuleEditHistoryView' => 'applications/herald/view/HeraldRuleEditHistoryView.php', + 'HeraldRuleDatasource' => 'applications/herald/typeahead/HeraldRuleDatasource.php', + 'HeraldRuleDisableTransaction' => 'applications/herald/xaction/HeraldRuleDisableTransaction.php', + 'HeraldRuleEditTransaction' => 'applications/herald/xaction/HeraldRuleEditTransaction.php', + 'HeraldRuleEditor' => 'applications/herald/editor/HeraldRuleEditor.php', + 'HeraldRuleEvaluationException' => 'applications/herald/engine/exception/HeraldRuleEvaluationException.php', + 'HeraldRuleField' => 'applications/herald/field/rule/HeraldRuleField.php', + 'HeraldRuleFieldGroup' => 'applications/herald/field/rule/HeraldRuleFieldGroup.php', + 'HeraldRuleIndexEngineExtension' => 'applications/herald/engineextension/HeraldRuleIndexEngineExtension.php', + 'HeraldRuleListController' => 'applications/herald/controller/HeraldRuleListController.php', 'HeraldRuleListView' => 'applications/herald/view/HeraldRuleListView.php', + 'HeraldRuleManagementWorkflow' => 'applications/herald/management/HeraldRuleManagementWorkflow.php', + 'HeraldRuleNameTransaction' => 'applications/herald/xaction/HeraldRuleNameTransaction.php', + 'HeraldRulePHIDType' => 'applications/herald/phid/HeraldRulePHIDType.php', 'HeraldRuleQuery' => 'applications/herald/query/HeraldRuleQuery.php', + 'HeraldRuleReplyHandler' => 'applications/herald/mail/HeraldRuleReplyHandler.php', + 'HeraldRuleResult' => 'applications/herald/storage/transcript/HeraldRuleResult.php', + 'HeraldRuleSearchEngine' => 'applications/herald/query/HeraldRuleSearchEngine.php', + 'HeraldRuleSerializer' => 'applications/herald/editor/HeraldRuleSerializer.php', + 'HeraldRuleTestCase' => 'applications/herald/storage/__tests__/HeraldRuleTestCase.php', + 'HeraldRuleTransaction' => 'applications/herald/storage/HeraldRuleTransaction.php', + 'HeraldRuleTransactionType' => 'applications/herald/xaction/HeraldRuleTransactionType.php', 'HeraldRuleTranscript' => 'applications/herald/storage/transcript/HeraldRuleTranscript.php', 'HeraldRuleTypeConfig' => 'applications/herald/config/HeraldRuleTypeConfig.php', + 'HeraldRuleTypeDatasource' => 'applications/herald/typeahead/HeraldRuleTypeDatasource.php', + 'HeraldRuleTypeField' => 'applications/herald/field/rule/HeraldRuleTypeField.php', + 'HeraldRuleViewController' => 'applications/herald/controller/HeraldRuleViewController.php', + 'HeraldSchemaSpec' => 'applications/herald/storage/HeraldSchemaSpec.php', + 'HeraldSelectFieldValue' => 'applications/herald/value/HeraldSelectFieldValue.php', + 'HeraldSpaceField' => 'applications/spaces/herald/HeraldSpaceField.php', + 'HeraldState' => 'applications/herald/state/HeraldState.php', + 'HeraldStateReasons' => 'applications/herald/state/HeraldStateReasons.php', + 'HeraldSubscribersField' => 'applications/subscriptions/herald/HeraldSubscribersField.php', + 'HeraldSupportActionGroup' => 'applications/herald/action/HeraldSupportActionGroup.php', + 'HeraldSupportFieldGroup' => 'applications/herald/field/HeraldSupportFieldGroup.php', 'HeraldTestConsoleController' => 'applications/herald/controller/HeraldTestConsoleController.php', + 'HeraldTestManagementWorkflow' => 'applications/herald/management/HeraldTestManagementWorkflow.php', + 'HeraldTextFieldValue' => 'applications/herald/value/HeraldTextFieldValue.php', + 'HeraldTokenizerFieldValue' => 'applications/herald/value/HeraldTokenizerFieldValue.php', + 'HeraldTransactionQuery' => 'applications/herald/query/HeraldTransactionQuery.php', + 'HeraldTransactionsFieldGroup' => 'applications/herald/field/HeraldTransactionsFieldGroup.php', 'HeraldTranscript' => 'applications/herald/storage/transcript/HeraldTranscript.php', 'HeraldTranscriptController' => 'applications/herald/controller/HeraldTranscriptController.php', + 'HeraldTranscriptDestructionEngineExtension' => 'applications/herald/engineextension/HeraldTranscriptDestructionEngineExtension.php', + 'HeraldTranscriptGarbageCollector' => 'applications/herald/garbagecollector/HeraldTranscriptGarbageCollector.php', 'HeraldTranscriptListController' => 'applications/herald/controller/HeraldTranscriptListController.php', - 'HeraldValueTypeConfig' => 'applications/herald/config/HeraldValueTypeConfig.php', + 'HeraldTranscriptPHIDType' => 'applications/herald/phid/HeraldTranscriptPHIDType.php', + 'HeraldTranscriptQuery' => 'applications/herald/query/HeraldTranscriptQuery.php', + 'HeraldTranscriptResult' => 'applications/herald/storage/transcript/HeraldTranscriptResult.php', + 'HeraldTranscriptSearchEngine' => 'applications/herald/query/HeraldTranscriptSearchEngine.php', + 'HeraldTranscriptTestCase' => 'applications/herald/storage/__tests__/HeraldTranscriptTestCase.php', + 'HeraldUtilityActionGroup' => 'applications/herald/action/HeraldUtilityActionGroup.php', + 'HeraldWebhook' => 'applications/herald/storage/HeraldWebhook.php', + 'HeraldWebhookCallManagementWorkflow' => 'applications/herald/management/HeraldWebhookCallManagementWorkflow.php', + 'HeraldWebhookController' => 'applications/herald/controller/HeraldWebhookController.php', + 'HeraldWebhookDatasource' => 'applications/herald/typeahead/HeraldWebhookDatasource.php', + 'HeraldWebhookEditController' => 'applications/herald/controller/HeraldWebhookEditController.php', + 'HeraldWebhookEditEngine' => 'applications/herald/editor/HeraldWebhookEditEngine.php', + 'HeraldWebhookEditor' => 'applications/herald/editor/HeraldWebhookEditor.php', + 'HeraldWebhookKeyController' => 'applications/herald/controller/HeraldWebhookKeyController.php', + 'HeraldWebhookListController' => 'applications/herald/controller/HeraldWebhookListController.php', + 'HeraldWebhookManagementWorkflow' => 'applications/herald/management/HeraldWebhookManagementWorkflow.php', + 'HeraldWebhookNameTransaction' => 'applications/herald/xaction/HeraldWebhookNameTransaction.php', + 'HeraldWebhookPHIDType' => 'applications/herald/phid/HeraldWebhookPHIDType.php', + 'HeraldWebhookQuery' => 'applications/herald/query/HeraldWebhookQuery.php', + 'HeraldWebhookRequest' => 'applications/herald/storage/HeraldWebhookRequest.php', + 'HeraldWebhookRequestGarbageCollector' => 'applications/herald/garbagecollector/HeraldWebhookRequestGarbageCollector.php', + 'HeraldWebhookRequestListView' => 'applications/herald/view/HeraldWebhookRequestListView.php', + 'HeraldWebhookRequestPHIDType' => 'applications/herald/phid/HeraldWebhookRequestPHIDType.php', + 'HeraldWebhookRequestQuery' => 'applications/herald/query/HeraldWebhookRequestQuery.php', + 'HeraldWebhookSearchEngine' => 'applications/herald/query/HeraldWebhookSearchEngine.php', + 'HeraldWebhookStatusTransaction' => 'applications/herald/xaction/HeraldWebhookStatusTransaction.php', + 'HeraldWebhookTestController' => 'applications/herald/controller/HeraldWebhookTestController.php', + 'HeraldWebhookTransaction' => 'applications/herald/storage/HeraldWebhookTransaction.php', + 'HeraldWebhookTransactionQuery' => 'applications/herald/query/HeraldWebhookTransactionQuery.php', + 'HeraldWebhookTransactionType' => 'applications/herald/xaction/HeraldWebhookTransactionType.php', + 'HeraldWebhookURITransaction' => 'applications/herald/xaction/HeraldWebhookURITransaction.php', + 'HeraldWebhookViewController' => 'applications/herald/controller/HeraldWebhookViewController.php', + 'HeraldWebhookWorker' => 'applications/herald/worker/HeraldWebhookWorker.php', 'Javelin' => 'infrastructure/javelin/Javelin.php', - 'JavelinReactorExample' => 'applications/uiexample/examples/JavelinReactorExample.php', - 'JavelinViewExample' => 'applications/uiexample/examples/JavelinViewExample.php', - 'JavelinViewExampleServerView' => 'applications/uiexample/examples/JavelinViewExampleServerView.php', - 'LiskDAO' => 'storage/lisk/LiskDAO.php', - 'LiskDAOSet' => 'storage/lisk/LiskDAOSet.php', - 'LiskEphemeralObjectException' => 'storage/lisk/LiskEphemeralObjectException.php', - 'LiskFixtureTestCase' => 'storage/lisk/__tests__/LiskFixtureTestCase.php', - 'LiskIsolationTestCase' => 'storage/lisk/__tests__/LiskIsolationTestCase.php', - 'LiskIsolationTestDAO' => 'storage/lisk/__tests__/LiskIsolationTestDAO.php', - 'LiskIsolationTestDAOException' => 'storage/lisk/__tests__/LiskIsolationTestDAOException.php', - 'ManiphestAction' => 'applications/maniphest/constants/ManiphestAction.php', - 'ManiphestAuxiliaryFieldDefaultSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldDefaultSpecification.php', - 'ManiphestAuxiliaryFieldSpecification' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldSpecification.php', - 'ManiphestAuxiliaryFieldTypeException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldTypeException.php', - 'ManiphestAuxiliaryFieldValidationException' => 'applications/maniphest/auxiliaryfield/ManiphestAuxiliaryFieldValidationException.php', - 'ManiphestBatchEditController' => 'applications/maniphest/controller/ManiphestBatchEditController.php', + 'LegalpadController' => 'applications/legalpad/controller/LegalpadController.php', + 'LegalpadCreateDocumentsCapability' => 'applications/legalpad/capability/LegalpadCreateDocumentsCapability.php', + 'LegalpadDAO' => 'applications/legalpad/storage/LegalpadDAO.php', + 'LegalpadDefaultEditCapability' => 'applications/legalpad/capability/LegalpadDefaultEditCapability.php', + 'LegalpadDefaultViewCapability' => 'applications/legalpad/capability/LegalpadDefaultViewCapability.php', + 'LegalpadDocument' => 'applications/legalpad/storage/LegalpadDocument.php', + 'LegalpadDocumentBody' => 'applications/legalpad/storage/LegalpadDocumentBody.php', + 'LegalpadDocumentDatasource' => 'applications/legalpad/typeahead/LegalpadDocumentDatasource.php', + 'LegalpadDocumentDoneController' => 'applications/legalpad/controller/LegalpadDocumentDoneController.php', + 'LegalpadDocumentEditController' => 'applications/legalpad/controller/LegalpadDocumentEditController.php', + 'LegalpadDocumentEditEngine' => 'applications/legalpad/editor/LegalpadDocumentEditEngine.php', + 'LegalpadDocumentEditor' => 'applications/legalpad/editor/LegalpadDocumentEditor.php', + 'LegalpadDocumentListController' => 'applications/legalpad/controller/LegalpadDocumentListController.php', + 'LegalpadDocumentManageController' => 'applications/legalpad/controller/LegalpadDocumentManageController.php', + 'LegalpadDocumentPreambleTransaction' => 'applications/legalpad/xaction/LegalpadDocumentPreambleTransaction.php', + 'LegalpadDocumentQuery' => 'applications/legalpad/query/LegalpadDocumentQuery.php', + 'LegalpadDocumentRemarkupRule' => 'applications/legalpad/remarkup/LegalpadDocumentRemarkupRule.php', + 'LegalpadDocumentRequireSignatureTransaction' => 'applications/legalpad/xaction/LegalpadDocumentRequireSignatureTransaction.php', + 'LegalpadDocumentSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSearchEngine.php', + 'LegalpadDocumentSignController' => 'applications/legalpad/controller/LegalpadDocumentSignController.php', + 'LegalpadDocumentSignature' => 'applications/legalpad/storage/LegalpadDocumentSignature.php', + 'LegalpadDocumentSignatureAddController' => 'applications/legalpad/controller/LegalpadDocumentSignatureAddController.php', + 'LegalpadDocumentSignatureListController' => 'applications/legalpad/controller/LegalpadDocumentSignatureListController.php', + 'LegalpadDocumentSignatureQuery' => 'applications/legalpad/query/LegalpadDocumentSignatureQuery.php', + 'LegalpadDocumentSignatureSearchEngine' => 'applications/legalpad/query/LegalpadDocumentSignatureSearchEngine.php', + 'LegalpadDocumentSignatureTypeTransaction' => 'applications/legalpad/xaction/LegalpadDocumentSignatureTypeTransaction.php', + 'LegalpadDocumentSignatureVerificationController' => 'applications/legalpad/controller/LegalpadDocumentSignatureVerificationController.php', + 'LegalpadDocumentSignatureViewController' => 'applications/legalpad/controller/LegalpadDocumentSignatureViewController.php', + 'LegalpadDocumentTextTransaction' => 'applications/legalpad/xaction/LegalpadDocumentTextTransaction.php', + 'LegalpadDocumentTitleTransaction' => 'applications/legalpad/xaction/LegalpadDocumentTitleTransaction.php', + 'LegalpadDocumentTransactionType' => 'applications/legalpad/xaction/LegalpadDocumentTransactionType.php', + 'LegalpadMailReceiver' => 'applications/legalpad/mail/LegalpadMailReceiver.php', + 'LegalpadObjectNeedsSignatureEdgeType' => 'applications/legalpad/edge/LegalpadObjectNeedsSignatureEdgeType.php', + 'LegalpadReplyHandler' => 'applications/legalpad/mail/LegalpadReplyHandler.php', + 'LegalpadRequireSignatureHeraldAction' => 'applications/legalpad/herald/LegalpadRequireSignatureHeraldAction.php', + 'LegalpadSchemaSpec' => 'applications/legalpad/storage/LegalpadSchemaSpec.php', + 'LegalpadSignatureNeededByObjectEdgeType' => 'applications/legalpad/edge/LegalpadSignatureNeededByObjectEdgeType.php', + 'LegalpadTransaction' => 'applications/legalpad/storage/LegalpadTransaction.php', + 'LegalpadTransactionComment' => 'applications/legalpad/storage/LegalpadTransactionComment.php', + 'LegalpadTransactionQuery' => 'applications/legalpad/query/LegalpadTransactionQuery.php', + 'LiskChunkTestCase' => 'infrastructure/storage/lisk/__tests__/LiskChunkTestCase.php', + 'LiskDAO' => 'infrastructure/storage/lisk/LiskDAO.php', + 'LiskDAOTestCase' => 'infrastructure/storage/lisk/__tests__/LiskDAOTestCase.php', + 'LiskEphemeralObjectException' => 'infrastructure/storage/lisk/LiskEphemeralObjectException.php', + 'LiskFixtureTestCase' => 'infrastructure/storage/lisk/__tests__/LiskFixtureTestCase.php', + 'LiskIsolationTestCase' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestCase.php', + 'LiskIsolationTestDAO' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAO.php', + 'LiskIsolationTestDAOException' => 'infrastructure/storage/lisk/__tests__/LiskIsolationTestDAOException.php', + 'LiskMigrationIterator' => 'infrastructure/storage/lisk/LiskMigrationIterator.php', + 'LiskRawMigrationIterator' => 'infrastructure/storage/lisk/LiskRawMigrationIterator.php', + 'MacroConduitAPIMethod' => 'applications/macro/conduit/MacroConduitAPIMethod.php', + 'MacroCreateMemeConduitAPIMethod' => 'applications/macro/conduit/MacroCreateMemeConduitAPIMethod.php', + 'MacroEditConduitAPIMethod' => 'applications/macro/conduit/MacroEditConduitAPIMethod.php', + 'MacroEmojiExample' => 'applications/uiexample/examples/MacroEmojiExample.php', + 'MacroQueryConduitAPIMethod' => 'applications/macro/conduit/MacroQueryConduitAPIMethod.php', + 'ManiphestAssignEmailCommand' => 'applications/maniphest/command/ManiphestAssignEmailCommand.php', + 'ManiphestAssigneeDatasource' => 'applications/maniphest/typeahead/ManiphestAssigneeDatasource.php', + 'ManiphestBulkEditCapability' => 'applications/maniphest/capability/ManiphestBulkEditCapability.php', + 'ManiphestBulkEditController' => 'applications/maniphest/controller/ManiphestBulkEditController.php', + 'ManiphestClaimEmailCommand' => 'applications/maniphest/command/ManiphestClaimEmailCommand.php', + 'ManiphestCloseEmailCommand' => 'applications/maniphest/command/ManiphestCloseEmailCommand.php', + 'ManiphestConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestConduitAPIMethod.php', + 'ManiphestConfiguredCustomField' => 'applications/maniphest/field/ManiphestConfiguredCustomField.php', 'ManiphestConstants' => 'applications/maniphest/constants/ManiphestConstants.php', 'ManiphestController' => 'applications/maniphest/controller/ManiphestController.php', + 'ManiphestCreateMailReceiver' => 'applications/maniphest/mail/ManiphestCreateMailReceiver.php', + 'ManiphestCreateTaskConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestCreateTaskConduitAPIMethod.php', + 'ManiphestCustomField' => 'applications/maniphest/field/ManiphestCustomField.php', + 'ManiphestCustomFieldNumericIndex' => 'applications/maniphest/storage/ManiphestCustomFieldNumericIndex.php', + 'ManiphestCustomFieldStatusParser' => 'applications/maniphest/field/parser/ManiphestCustomFieldStatusParser.php', + 'ManiphestCustomFieldStatusParserTestCase' => 'applications/maniphest/field/parser/__tests__/ManiphestCustomFieldStatusParserTestCase.php', + 'ManiphestCustomFieldStorage' => 'applications/maniphest/storage/ManiphestCustomFieldStorage.php', + 'ManiphestCustomFieldStringIndex' => 'applications/maniphest/storage/ManiphestCustomFieldStringIndex.php', 'ManiphestDAO' => 'applications/maniphest/storage/ManiphestDAO.php', - 'ManiphestDefaultTaskExtensions' => 'applications/maniphest/extensions/ManiphestDefaultTaskExtensions.php', - 'ManiphestExportController' => 'applications/maniphest/controller/ManiphestExportController.php', - 'ManiphestReplyHandler' => 'applications/maniphest/ManiphestReplyHandler.php', + 'ManiphestDefaultEditCapability' => 'applications/maniphest/capability/ManiphestDefaultEditCapability.php', + 'ManiphestDefaultViewCapability' => 'applications/maniphest/capability/ManiphestDefaultViewCapability.php', + 'ManiphestEditConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestEditConduitAPIMethod.php', + 'ManiphestEditEngine' => 'applications/maniphest/editor/ManiphestEditEngine.php', + 'ManiphestEmailCommand' => 'applications/maniphest/command/ManiphestEmailCommand.php', + 'ManiphestGetTaskTransactionsConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestGetTaskTransactionsConduitAPIMethod.php', + 'ManiphestHovercardEngineExtension' => 'applications/maniphest/engineextension/ManiphestHovercardEngineExtension.php', + 'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php', + 'ManiphestMailEngineExtension' => 'applications/maniphest/engineextension/ManiphestMailEngineExtension.php', + 'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php', + 'ManiphestPointsConfigType' => 'applications/maniphest/config/ManiphestPointsConfigType.php', + 'ManiphestPrioritiesConfigType' => 'applications/maniphest/config/ManiphestPrioritiesConfigType.php', + 'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php', + 'ManiphestPrioritySearchConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestPrioritySearchConduitAPIMethod.php', + 'ManiphestProjectNameFulltextEngineExtension' => 'applications/maniphest/engineextension/ManiphestProjectNameFulltextEngineExtension.php', + 'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php', + 'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php', + 'ManiphestRemarkupRule' => 'applications/maniphest/remarkup/ManiphestRemarkupRule.php', + 'ManiphestReplyHandler' => 'applications/maniphest/mail/ManiphestReplyHandler.php', 'ManiphestReportController' => 'applications/maniphest/controller/ManiphestReportController.php', - 'ManiphestSavedQuery' => 'applications/maniphest/storage/ManiphestSavedQuery.php', - 'ManiphestSavedQueryDeleteController' => 'applications/maniphest/controller/ManiphestSavedQueryDeleteController.php', - 'ManiphestSavedQueryEditController' => 'applications/maniphest/controller/ManiphestSavedQueryEditController.php', - 'ManiphestSavedQueryListController' => 'applications/maniphest/controller/ManiphestSavedQueryListController.php', - 'ManiphestSubpriorityController' => 'applications/maniphest/controller/ManiphestSubpriorityController.php', + 'ManiphestSchemaSpec' => 'applications/maniphest/storage/ManiphestSchemaSpec.php', + 'ManiphestSearchConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestSearchConduitAPIMethod.php', + 'ManiphestStatusEmailCommand' => 'applications/maniphest/command/ManiphestStatusEmailCommand.php', + 'ManiphestStatusSearchConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestStatusSearchConduitAPIMethod.php', + 'ManiphestStatusesConfigType' => 'applications/maniphest/config/ManiphestStatusesConfigType.php', + 'ManiphestSubtypesConfigType' => 'applications/maniphest/config/ManiphestSubtypesConfigType.php', 'ManiphestTask' => 'applications/maniphest/storage/ManiphestTask.php', - 'ManiphestTaskAuxiliaryStorage' => 'applications/maniphest/storage/ManiphestTaskAuxiliaryStorage.php', - 'ManiphestTaskDescriptionChangeController' => 'applications/maniphest/controller/ManiphestTaskDescriptionChangeController.php', - 'ManiphestTaskDescriptionPreviewController' => 'applications/maniphest/controller/ManiphestTaskDescriptionPreviewController.php', + 'ManiphestTaskAssignHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignHeraldAction.php', + 'ManiphestTaskAssignOtherHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignOtherHeraldAction.php', + 'ManiphestTaskAssignSelfHeraldAction' => 'applications/maniphest/herald/ManiphestTaskAssignSelfHeraldAction.php', + 'ManiphestTaskAssigneeHeraldField' => 'applications/maniphest/herald/ManiphestTaskAssigneeHeraldField.php', + 'ManiphestTaskAttachTransaction' => 'applications/maniphest/xaction/ManiphestTaskAttachTransaction.php', + 'ManiphestTaskAuthorHeraldField' => 'applications/maniphest/herald/ManiphestTaskAuthorHeraldField.php', + 'ManiphestTaskAuthorPolicyRule' => 'applications/maniphest/policyrule/ManiphestTaskAuthorPolicyRule.php', + 'ManiphestTaskBulkEngine' => 'applications/maniphest/bulk/ManiphestTaskBulkEngine.php', + 'ManiphestTaskCloseAsDuplicateRelationship' => 'applications/maniphest/relationship/ManiphestTaskCloseAsDuplicateRelationship.php', + 'ManiphestTaskClosedStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php', + 'ManiphestTaskCoverImageTransaction' => 'applications/maniphest/xaction/ManiphestTaskCoverImageTransaction.php', + 'ManiphestTaskDependedOnByTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php', + 'ManiphestTaskDependsOnTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php', + 'ManiphestTaskDescriptionHeraldField' => 'applications/maniphest/herald/ManiphestTaskDescriptionHeraldField.php', + 'ManiphestTaskDescriptionTransaction' => 'applications/maniphest/xaction/ManiphestTaskDescriptionTransaction.php', 'ManiphestTaskDetailController' => 'applications/maniphest/controller/ManiphestTaskDetailController.php', + 'ManiphestTaskEdgeTransaction' => 'applications/maniphest/xaction/ManiphestTaskEdgeTransaction.php', 'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php', - 'ManiphestTaskExtensions' => 'applications/maniphest/extensions/ManiphestTaskExtensions.php', + 'ManiphestTaskEditEngineLock' => 'applications/maniphest/editor/ManiphestTaskEditEngineLock.php', + 'ManiphestTaskFerretEngine' => 'applications/maniphest/search/ManiphestTaskFerretEngine.php', + 'ManiphestTaskFulltextEngine' => 'applications/maniphest/search/ManiphestTaskFulltextEngine.php', + 'ManiphestTaskGraph' => 'infrastructure/graph/ManiphestTaskGraph.php', + 'ManiphestTaskGraphController' => 'applications/maniphest/controller/ManiphestTaskGraphController.php', + 'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php', + 'ManiphestTaskHasCommitRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php', + 'ManiphestTaskHasDuplicateTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasDuplicateTaskEdgeType.php', + 'ManiphestTaskHasMockEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasMockEdgeType.php', + 'ManiphestTaskHasMockRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasMockRelationship.php', + 'ManiphestTaskHasParentRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasParentRelationship.php', + 'ManiphestTaskHasRevisionEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasRevisionEdgeType.php', + 'ManiphestTaskHasRevisionRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasRevisionRelationship.php', + 'ManiphestTaskHasSubtaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasSubtaskRelationship.php', + 'ManiphestTaskHeraldField' => 'applications/maniphest/herald/ManiphestTaskHeraldField.php', + 'ManiphestTaskHeraldFieldGroup' => 'applications/maniphest/herald/ManiphestTaskHeraldFieldGroup.php', + 'ManiphestTaskIsDuplicateOfTaskEdgeType' => 'applications/maniphest/edge/ManiphestTaskIsDuplicateOfTaskEdgeType.php', 'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php', + 'ManiphestTaskListHTTPParameterType' => 'applications/maniphest/httpparametertype/ManiphestTaskListHTTPParameterType.php', 'ManiphestTaskListView' => 'applications/maniphest/view/ManiphestTaskListView.php', - 'ManiphestTaskOwner' => 'applications/maniphest/constants/ManiphestTaskOwner.php', + 'ManiphestTaskMFAEngine' => 'applications/maniphest/engine/ManiphestTaskMFAEngine.php', + 'ManiphestTaskMailReceiver' => 'applications/maniphest/mail/ManiphestTaskMailReceiver.php', + 'ManiphestTaskMergeInRelationship' => 'applications/maniphest/relationship/ManiphestTaskMergeInRelationship.php', + 'ManiphestTaskMergedFromTransaction' => 'applications/maniphest/xaction/ManiphestTaskMergedFromTransaction.php', + 'ManiphestTaskMergedIntoTransaction' => 'applications/maniphest/xaction/ManiphestTaskMergedIntoTransaction.php', + 'ManiphestTaskOpenStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php', + 'ManiphestTaskOwnerTransaction' => 'applications/maniphest/xaction/ManiphestTaskOwnerTransaction.php', + 'ManiphestTaskPHIDResolver' => 'applications/maniphest/httpparametertype/ManiphestTaskPHIDResolver.php', + 'ManiphestTaskPHIDType' => 'applications/maniphest/phid/ManiphestTaskPHIDType.php', + 'ManiphestTaskParentTransaction' => 'applications/maniphest/xaction/ManiphestTaskParentTransaction.php', + 'ManiphestTaskPoints' => 'applications/maniphest/constants/ManiphestTaskPoints.php', + 'ManiphestTaskPointsTransaction' => 'applications/maniphest/xaction/ManiphestTaskPointsTransaction.php', + 'ManiphestTaskPolicyCodex' => 'applications/maniphest/policy/ManiphestTaskPolicyCodex.php', 'ManiphestTaskPriority' => 'applications/maniphest/constants/ManiphestTaskPriority.php', - 'ManiphestTaskProject' => 'applications/maniphest/storage/ManiphestTaskProject.php', - 'ManiphestTaskProjectsView' => 'applications/maniphest/view/ManiphestTaskProjectsView.php', - 'ManiphestTaskQuery' => 'applications/maniphest/ManiphestTaskQuery.php', + 'ManiphestTaskPriorityDatasource' => 'applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php', + 'ManiphestTaskPriorityHeraldAction' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldAction.php', + 'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php', + 'ManiphestTaskPriorityTransaction' => 'applications/maniphest/xaction/ManiphestTaskPriorityTransaction.php', + 'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php', + 'ManiphestTaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskRelationship.php', + 'ManiphestTaskRelationshipSource' => 'applications/search/relationship/ManiphestTaskRelationshipSource.php', + 'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php', + 'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php', 'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php', - 'ManiphestTaskSubscriber' => 'applications/maniphest/storage/ManiphestTaskSubscriber.php', - 'ManiphestTaskSummaryView' => 'applications/maniphest/view/ManiphestTaskSummaryView.php', + 'ManiphestTaskStatusDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php', + 'ManiphestTaskStatusFunctionDatasource' => 'applications/maniphest/typeahead/ManiphestTaskStatusFunctionDatasource.php', + 'ManiphestTaskStatusHeraldAction' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldAction.php', + 'ManiphestTaskStatusHeraldField' => 'applications/maniphest/herald/ManiphestTaskStatusHeraldField.php', + 'ManiphestTaskStatusTestCase' => 'applications/maniphest/constants/__tests__/ManiphestTaskStatusTestCase.php', + 'ManiphestTaskStatusTransaction' => 'applications/maniphest/xaction/ManiphestTaskStatusTransaction.php', + 'ManiphestTaskSubpriorityTransaction' => 'applications/maniphest/xaction/ManiphestTaskSubpriorityTransaction.php', + 'ManiphestTaskSubtaskController' => 'applications/maniphest/controller/ManiphestTaskSubtaskController.php', + 'ManiphestTaskSubtypeDatasource' => 'applications/maniphest/typeahead/ManiphestTaskSubtypeDatasource.php', + 'ManiphestTaskTitleHeraldField' => 'applications/maniphest/herald/ManiphestTaskTitleHeraldField.php', + 'ManiphestTaskTitleTransaction' => 'applications/maniphest/xaction/ManiphestTaskTitleTransaction.php', + 'ManiphestTaskTransactionType' => 'applications/maniphest/xaction/ManiphestTaskTransactionType.php', + 'ManiphestTaskUnblockTransaction' => 'applications/maniphest/xaction/ManiphestTaskUnblockTransaction.php', + 'ManiphestTaskUnlockEngine' => 'applications/maniphest/engine/ManiphestTaskUnlockEngine.php', 'ManiphestTransaction' => 'applications/maniphest/storage/ManiphestTransaction.php', - 'ManiphestTransactionDetailView' => 'applications/maniphest/view/ManiphestTransactionDetailView.php', + 'ManiphestTransactionComment' => 'applications/maniphest/storage/ManiphestTransactionComment.php', 'ManiphestTransactionEditor' => 'applications/maniphest/editor/ManiphestTransactionEditor.php', - 'ManiphestTransactionListView' => 'applications/maniphest/view/ManiphestTransactionListView.php', - 'ManiphestTransactionPreviewController' => 'applications/maniphest/controller/ManiphestTransactionPreviewController.php', - 'ManiphestTransactionSaveController' => 'applications/maniphest/controller/ManiphestTransactionSaveController.php', - 'ManiphestTransactionType' => 'applications/maniphest/constants/ManiphestTransactionType.php', + 'ManiphestTransactionQuery' => 'applications/maniphest/query/ManiphestTransactionQuery.php', + 'ManiphestUpdateConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestUpdateConduitAPIMethod.php', 'ManiphestView' => 'applications/maniphest/view/ManiphestView.php', - 'MetaMTAConstants' => 'applications/metamta/constants/MetaMTAConstants.php', - 'MetaMTANotificationType' => 'applications/metamta/constants/MetaMTANotificationType.php', - 'OwnersPackageReplyHandler' => 'applications/owners/OwnersPackageReplyHandler.php', - 'PackageCreateMail' => 'applications/owners/mail/PackageCreateMail.php', - 'PackageDeleteMail' => 'applications/owners/mail/PackageDeleteMail.php', - 'PackageMail' => 'applications/owners/mail/PackageMail.php', - 'PackageModifyMail' => 'applications/owners/mail/PackageModifyMail.php', + 'MetaMTAEmailTransactionCommand' => 'applications/metamta/command/MetaMTAEmailTransactionCommand.php', + 'MetaMTAEmailTransactionCommandTestCase' => 'applications/metamta/command/__tests__/MetaMTAEmailTransactionCommandTestCase.php', + 'MetaMTAMailReceivedGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailReceivedGarbageCollector.php', + 'MetaMTAMailSentGarbageCollector' => 'applications/metamta/garbagecollector/MetaMTAMailSentGarbageCollector.php', + 'MetaMTAReceivedMailStatus' => 'applications/metamta/constants/MetaMTAReceivedMailStatus.php', + 'MultimeterContext' => 'applications/multimeter/storage/MultimeterContext.php', + 'MultimeterControl' => 'applications/multimeter/data/MultimeterControl.php', + 'MultimeterController' => 'applications/multimeter/controller/MultimeterController.php', + 'MultimeterDAO' => 'applications/multimeter/storage/MultimeterDAO.php', + 'MultimeterDimension' => 'applications/multimeter/storage/MultimeterDimension.php', + 'MultimeterEvent' => 'applications/multimeter/storage/MultimeterEvent.php', + 'MultimeterEventGarbageCollector' => 'applications/multimeter/garbagecollector/MultimeterEventGarbageCollector.php', + 'MultimeterHost' => 'applications/multimeter/storage/MultimeterHost.php', + 'MultimeterLabel' => 'applications/multimeter/storage/MultimeterLabel.php', + 'MultimeterSampleController' => 'applications/multimeter/controller/MultimeterSampleController.php', + 'MultimeterViewer' => 'applications/multimeter/storage/MultimeterViewer.php', + 'NuanceCommandImplementation' => 'applications/nuance/command/NuanceCommandImplementation.php', + 'NuanceConduitAPIMethod' => 'applications/nuance/conduit/NuanceConduitAPIMethod.php', + 'NuanceConsoleController' => 'applications/nuance/controller/NuanceConsoleController.php', + 'NuanceContentSource' => 'applications/nuance/contentsource/NuanceContentSource.php', + 'NuanceController' => 'applications/nuance/controller/NuanceController.php', + 'NuanceDAO' => 'applications/nuance/storage/NuanceDAO.php', + 'NuanceFormItemType' => 'applications/nuance/item/NuanceFormItemType.php', + 'NuanceGitHubEventItemType' => 'applications/nuance/item/NuanceGitHubEventItemType.php', + 'NuanceGitHubImportCursor' => 'applications/nuance/cursor/NuanceGitHubImportCursor.php', + 'NuanceGitHubIssuesImportCursor' => 'applications/nuance/cursor/NuanceGitHubIssuesImportCursor.php', + 'NuanceGitHubRawEvent' => 'applications/nuance/github/NuanceGitHubRawEvent.php', + 'NuanceGitHubRawEventTestCase' => 'applications/nuance/github/__tests__/NuanceGitHubRawEventTestCase.php', + 'NuanceGitHubRepositoryImportCursor' => 'applications/nuance/cursor/NuanceGitHubRepositoryImportCursor.php', + 'NuanceGitHubRepositorySourceDefinition' => 'applications/nuance/source/NuanceGitHubRepositorySourceDefinition.php', + 'NuanceImportCursor' => 'applications/nuance/cursor/NuanceImportCursor.php', + 'NuanceImportCursorData' => 'applications/nuance/storage/NuanceImportCursorData.php', + 'NuanceImportCursorDataQuery' => 'applications/nuance/query/NuanceImportCursorDataQuery.php', + 'NuanceImportCursorPHIDType' => 'applications/nuance/phid/NuanceImportCursorPHIDType.php', + 'NuanceItem' => 'applications/nuance/storage/NuanceItem.php', + 'NuanceItemActionController' => 'applications/nuance/controller/NuanceItemActionController.php', + 'NuanceItemCommand' => 'applications/nuance/storage/NuanceItemCommand.php', + 'NuanceItemCommandQuery' => 'applications/nuance/query/NuanceItemCommandQuery.php', + 'NuanceItemCommandSpec' => 'applications/nuance/command/NuanceItemCommandSpec.php', + 'NuanceItemCommandTransaction' => 'applications/nuance/xaction/NuanceItemCommandTransaction.php', + 'NuanceItemController' => 'applications/nuance/controller/NuanceItemController.php', + 'NuanceItemEditor' => 'applications/nuance/editor/NuanceItemEditor.php', + 'NuanceItemListController' => 'applications/nuance/controller/NuanceItemListController.php', + 'NuanceItemManageController' => 'applications/nuance/controller/NuanceItemManageController.php', + 'NuanceItemOwnerTransaction' => 'applications/nuance/xaction/NuanceItemOwnerTransaction.php', + 'NuanceItemPHIDType' => 'applications/nuance/phid/NuanceItemPHIDType.php', + 'NuanceItemPropertyTransaction' => 'applications/nuance/xaction/NuanceItemPropertyTransaction.php', + 'NuanceItemQuery' => 'applications/nuance/query/NuanceItemQuery.php', + 'NuanceItemQueueTransaction' => 'applications/nuance/xaction/NuanceItemQueueTransaction.php', + 'NuanceItemRequestorTransaction' => 'applications/nuance/xaction/NuanceItemRequestorTransaction.php', + 'NuanceItemSearchEngine' => 'applications/nuance/query/NuanceItemSearchEngine.php', + 'NuanceItemSourceTransaction' => 'applications/nuance/xaction/NuanceItemSourceTransaction.php', + 'NuanceItemStatusTransaction' => 'applications/nuance/xaction/NuanceItemStatusTransaction.php', + 'NuanceItemTransaction' => 'applications/nuance/storage/NuanceItemTransaction.php', + 'NuanceItemTransactionComment' => 'applications/nuance/storage/NuanceItemTransactionComment.php', + 'NuanceItemTransactionQuery' => 'applications/nuance/query/NuanceItemTransactionQuery.php', + 'NuanceItemTransactionType' => 'applications/nuance/xaction/NuanceItemTransactionType.php', + 'NuanceItemType' => 'applications/nuance/item/NuanceItemType.php', + 'NuanceItemUpdateWorker' => 'applications/nuance/worker/NuanceItemUpdateWorker.php', + 'NuanceItemViewController' => 'applications/nuance/controller/NuanceItemViewController.php', + 'NuanceManagementImportWorkflow' => 'applications/nuance/management/NuanceManagementImportWorkflow.php', + 'NuanceManagementUpdateWorkflow' => 'applications/nuance/management/NuanceManagementUpdateWorkflow.php', + 'NuanceManagementWorkflow' => 'applications/nuance/management/NuanceManagementWorkflow.php', + 'NuancePhabricatorFormSourceDefinition' => 'applications/nuance/source/NuancePhabricatorFormSourceDefinition.php', + 'NuanceQuery' => 'applications/nuance/query/NuanceQuery.php', + 'NuanceQueue' => 'applications/nuance/storage/NuanceQueue.php', + 'NuanceQueueController' => 'applications/nuance/controller/NuanceQueueController.php', + 'NuanceQueueDatasource' => 'applications/nuance/typeahead/NuanceQueueDatasource.php', + 'NuanceQueueEditController' => 'applications/nuance/controller/NuanceQueueEditController.php', + 'NuanceQueueEditEngine' => 'applications/nuance/editor/NuanceQueueEditEngine.php', + 'NuanceQueueEditor' => 'applications/nuance/editor/NuanceQueueEditor.php', + 'NuanceQueueListController' => 'applications/nuance/controller/NuanceQueueListController.php', + 'NuanceQueueNameTransaction' => 'applications/nuance/xaction/NuanceQueueNameTransaction.php', + 'NuanceQueuePHIDType' => 'applications/nuance/phid/NuanceQueuePHIDType.php', + 'NuanceQueueQuery' => 'applications/nuance/query/NuanceQueueQuery.php', + 'NuanceQueueSearchEngine' => 'applications/nuance/query/NuanceQueueSearchEngine.php', + 'NuanceQueueTransaction' => 'applications/nuance/storage/NuanceQueueTransaction.php', + 'NuanceQueueTransactionComment' => 'applications/nuance/storage/NuanceQueueTransactionComment.php', + 'NuanceQueueTransactionQuery' => 'applications/nuance/query/NuanceQueueTransactionQuery.php', + 'NuanceQueueTransactionType' => 'applications/nuance/xaction/NuanceQueueTransactionType.php', + 'NuanceQueueViewController' => 'applications/nuance/controller/NuanceQueueViewController.php', + 'NuanceQueueWorkController' => 'applications/nuance/controller/NuanceQueueWorkController.php', + 'NuanceSchemaSpec' => 'applications/nuance/storage/NuanceSchemaSpec.php', + 'NuanceSource' => 'applications/nuance/storage/NuanceSource.php', + 'NuanceSourceActionController' => 'applications/nuance/controller/NuanceSourceActionController.php', + 'NuanceSourceController' => 'applications/nuance/controller/NuanceSourceController.php', + 'NuanceSourceDefaultEditCapability' => 'applications/nuance/capability/NuanceSourceDefaultEditCapability.php', + 'NuanceSourceDefaultQueueTransaction' => 'applications/nuance/xaction/NuanceSourceDefaultQueueTransaction.php', + 'NuanceSourceDefaultViewCapability' => 'applications/nuance/capability/NuanceSourceDefaultViewCapability.php', + 'NuanceSourceDefinition' => 'applications/nuance/source/NuanceSourceDefinition.php', + 'NuanceSourceDefinitionTestCase' => 'applications/nuance/source/__tests__/NuanceSourceDefinitionTestCase.php', + 'NuanceSourceEditController' => 'applications/nuance/controller/NuanceSourceEditController.php', + 'NuanceSourceEditEngine' => 'applications/nuance/editor/NuanceSourceEditEngine.php', + 'NuanceSourceEditor' => 'applications/nuance/editor/NuanceSourceEditor.php', + 'NuanceSourceListController' => 'applications/nuance/controller/NuanceSourceListController.php', + 'NuanceSourceManageCapability' => 'applications/nuance/capability/NuanceSourceManageCapability.php', + 'NuanceSourceNameNgrams' => 'applications/nuance/storage/NuanceSourceNameNgrams.php', + 'NuanceSourceNameTransaction' => 'applications/nuance/xaction/NuanceSourceNameTransaction.php', + 'NuanceSourcePHIDType' => 'applications/nuance/phid/NuanceSourcePHIDType.php', + 'NuanceSourceQuery' => 'applications/nuance/query/NuanceSourceQuery.php', + 'NuanceSourceSearchEngine' => 'applications/nuance/query/NuanceSourceSearchEngine.php', + 'NuanceSourceTransaction' => 'applications/nuance/storage/NuanceSourceTransaction.php', + 'NuanceSourceTransactionComment' => 'applications/nuance/storage/NuanceSourceTransactionComment.php', + 'NuanceSourceTransactionQuery' => 'applications/nuance/query/NuanceSourceTransactionQuery.php', + 'NuanceSourceTransactionType' => 'applications/nuance/xaction/NuanceSourceTransactionType.php', + 'NuanceSourceViewController' => 'applications/nuance/controller/NuanceSourceViewController.php', + 'NuanceTransaction' => 'applications/nuance/storage/NuanceTransaction.php', + 'NuanceTrashCommand' => 'applications/nuance/command/NuanceTrashCommand.php', + 'NuanceWorker' => 'applications/nuance/worker/NuanceWorker.php', + 'OwnersConduitAPIMethod' => 'applications/owners/conduit/OwnersConduitAPIMethod.php', + 'OwnersEditConduitAPIMethod' => 'applications/owners/conduit/OwnersEditConduitAPIMethod.php', + 'OwnersPackageReplyHandler' => 'applications/owners/mail/OwnersPackageReplyHandler.php', + 'OwnersSearchConduitAPIMethod' => 'applications/owners/conduit/OwnersSearchConduitAPIMethod.php', + 'PHIDConduitAPIMethod' => 'applications/phid/conduit/PHIDConduitAPIMethod.php', + 'PHIDInfoConduitAPIMethod' => 'applications/phid/conduit/PHIDInfoConduitAPIMethod.php', + 'PHIDLookupConduitAPIMethod' => 'applications/phid/conduit/PHIDLookupConduitAPIMethod.php', + 'PHIDQueryConduitAPIMethod' => 'applications/phid/conduit/PHIDQueryConduitAPIMethod.php', + 'PHUI' => 'view/phui/PHUI.php', + 'PHUIActionPanelExample' => 'applications/uiexample/examples/PHUIActionPanelExample.php', + 'PHUIActionPanelView' => 'view/phui/PHUIActionPanelView.php', + 'PHUIApplicationMenuView' => 'view/layout/PHUIApplicationMenuView.php', + 'PHUIBadgeBoxView' => 'view/phui/PHUIBadgeBoxView.php', + 'PHUIBadgeExample' => 'applications/uiexample/examples/PHUIBadgeExample.php', + 'PHUIBadgeMiniView' => 'view/phui/PHUIBadgeMiniView.php', + 'PHUIBadgeView' => 'view/phui/PHUIBadgeView.php', + 'PHUIBigInfoExample' => 'applications/uiexample/examples/PHUIBigInfoExample.php', + 'PHUIBigInfoView' => 'view/phui/PHUIBigInfoView.php', + 'PHUIBoxExample' => 'applications/uiexample/examples/PHUIBoxExample.php', + 'PHUIBoxView' => 'view/phui/PHUIBoxView.php', + 'PHUIButtonBarExample' => 'applications/uiexample/examples/PHUIButtonBarExample.php', + 'PHUIButtonBarView' => 'view/phui/PHUIButtonBarView.php', + 'PHUIButtonExample' => 'applications/uiexample/examples/PHUIButtonExample.php', + 'PHUIButtonView' => 'view/phui/PHUIButtonView.php', + 'PHUICMSView' => 'view/phui/PHUICMSView.php', + 'PHUICalendarDayView' => 'view/phui/calendar/PHUICalendarDayView.php', + 'PHUICalendarListView' => 'view/phui/calendar/PHUICalendarListView.php', + 'PHUICalendarMonthView' => 'view/phui/calendar/PHUICalendarMonthView.php', + 'PHUICalendarWeekView' => 'view/phui/calendar/PHUICalendarWeekView.php', + 'PHUICalendarWidgetView' => 'view/phui/calendar/PHUICalendarWidgetView.php', + 'PHUIColor' => 'view/phui/PHUIColor.php', + 'PHUIColorPalletteExample' => 'applications/uiexample/examples/PHUIColorPalletteExample.php', + 'PHUICrumbView' => 'view/phui/PHUICrumbView.php', + 'PHUICrumbsView' => 'view/phui/PHUICrumbsView.php', + 'PHUICurtainExtension' => 'view/extension/PHUICurtainExtension.php', + 'PHUICurtainObjectRefListView' => 'view/phui/PHUICurtainObjectRefListView.php', + 'PHUICurtainObjectRefView' => 'view/phui/PHUICurtainObjectRefView.php', + 'PHUICurtainPanelView' => 'view/layout/PHUICurtainPanelView.php', + 'PHUICurtainView' => 'view/layout/PHUICurtainView.php', + 'PHUIDiffGraphView' => 'infrastructure/diff/view/PHUIDiffGraphView.php', + 'PHUIDiffGraphViewTestCase' => 'infrastructure/diff/view/__tests__/PHUIDiffGraphViewTestCase.php', + 'PHUIDiffInlineCommentDetailView' => 'infrastructure/diff/view/PHUIDiffInlineCommentDetailView.php', + 'PHUIDiffInlineCommentEditView' => 'infrastructure/diff/view/PHUIDiffInlineCommentEditView.php', + 'PHUIDiffInlineCommentPreviewListView' => 'infrastructure/diff/view/PHUIDiffInlineCommentPreviewListView.php', + 'PHUIDiffInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentRowScaffold.php', + 'PHUIDiffInlineCommentTableScaffold' => 'infrastructure/diff/view/PHUIDiffInlineCommentTableScaffold.php', + 'PHUIDiffInlineCommentUndoView' => 'infrastructure/diff/view/PHUIDiffInlineCommentUndoView.php', + 'PHUIDiffInlineCommentView' => 'infrastructure/diff/view/PHUIDiffInlineCommentView.php', + 'PHUIDiffInlineThreader' => 'infrastructure/diff/view/PHUIDiffInlineThreader.php', + 'PHUIDiffOneUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffOneUpInlineCommentRowScaffold.php', + 'PHUIDiffRevealIconView' => 'infrastructure/diff/view/PHUIDiffRevealIconView.php', + 'PHUIDiffTableOfContentsItemView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsItemView.php', + 'PHUIDiffTableOfContentsListView' => 'infrastructure/diff/view/PHUIDiffTableOfContentsListView.php', + 'PHUIDiffTwoUpInlineCommentRowScaffold' => 'infrastructure/diff/view/PHUIDiffTwoUpInlineCommentRowScaffold.php', + 'PHUIDocumentSummaryView' => 'view/phui/PHUIDocumentSummaryView.php', + 'PHUIDocumentView' => 'view/phui/PHUIDocumentView.php', + 'PHUIFeedStoryExample' => 'applications/uiexample/examples/PHUIFeedStoryExample.php', + 'PHUIFeedStoryView' => 'view/phui/PHUIFeedStoryView.php', + 'PHUIFormDividerControl' => 'view/form/control/PHUIFormDividerControl.php', + 'PHUIFormFileControl' => 'view/form/control/PHUIFormFileControl.php', + 'PHUIFormFreeformDateControl' => 'view/form/control/PHUIFormFreeformDateControl.php', + 'PHUIFormIconSetControl' => 'view/form/control/PHUIFormIconSetControl.php', + 'PHUIFormInsetView' => 'view/form/PHUIFormInsetView.php', + 'PHUIFormLayoutView' => 'view/form/PHUIFormLayoutView.php', + 'PHUIFormNumberControl' => 'view/form/control/PHUIFormNumberControl.php', + 'PHUIFormTimerControl' => 'view/form/control/PHUIFormTimerControl.php', + 'PHUIFormationColumnDynamicView' => 'view/formation/PHUIFormationColumnDynamicView.php', + 'PHUIFormationColumnItem' => 'view/formation/PHUIFormationColumnItem.php', + 'PHUIFormationColumnView' => 'view/formation/PHUIFormationColumnView.php', + 'PHUIFormationContentView' => 'view/formation/PHUIFormationContentView.php', + 'PHUIFormationExpanderView' => 'view/formation/PHUIFormationExpanderView.php', + 'PHUIFormationFlankView' => 'view/formation/PHUIFormationFlankView.php', + 'PHUIFormationResizerView' => 'view/formation/PHUIFormationResizerView.php', + 'PHUIFormationView' => 'view/formation/PHUIFormationView.php', + 'PHUIHandleListView' => 'applications/phid/view/PHUIHandleListView.php', + 'PHUIHandleTagListView' => 'applications/phid/view/PHUIHandleTagListView.php', + 'PHUIHandleView' => 'applications/phid/view/PHUIHandleView.php', + 'PHUIHeadThingView' => 'view/phui/PHUIHeadThingView.php', + 'PHUIHeaderView' => 'view/phui/PHUIHeaderView.php', + 'PHUIHomeView' => 'applications/home/view/PHUIHomeView.php', + 'PHUIHovercardUIExample' => 'applications/uiexample/examples/PHUIHovercardUIExample.php', + 'PHUIHovercardView' => 'view/phui/PHUIHovercardView.php', + 'PHUIIconCircleView' => 'view/phui/PHUIIconCircleView.php', + 'PHUIIconExample' => 'applications/uiexample/examples/PHUIIconExample.php', + 'PHUIIconView' => 'view/phui/PHUIIconView.php', + 'PHUIImageMaskExample' => 'applications/uiexample/examples/PHUIImageMaskExample.php', + 'PHUIImageMaskView' => 'view/phui/PHUIImageMaskView.php', + 'PHUIInfoExample' => 'applications/uiexample/examples/PHUIInfoExample.php', + 'PHUIInfoView' => 'view/phui/PHUIInfoView.php', + 'PHUIInvisibleCharacterTestCase' => 'view/phui/__tests__/PHUIInvisibleCharacterTestCase.php', + 'PHUIInvisibleCharacterView' => 'view/phui/PHUIInvisibleCharacterView.php', + 'PHUILauncherView' => 'view/phui/PHUILauncherView.php', + 'PHUILeftRightExample' => 'applications/uiexample/examples/PHUILeftRightExample.php', + 'PHUILeftRightView' => 'view/phui/PHUILeftRightView.php', + 'PHUILinkView' => 'view/phui/PHUILinkView.php', + 'PHUIListExample' => 'applications/uiexample/examples/PHUIListExample.php', + 'PHUIListItemView' => 'view/phui/PHUIListItemView.php', + 'PHUIListView' => 'view/phui/PHUIListView.php', + 'PHUIListViewTestCase' => 'view/layout/__tests__/PHUIListViewTestCase.php', + 'PHUIObjectBoxView' => 'view/phui/PHUIObjectBoxView.php', + 'PHUIObjectItemListExample' => 'applications/uiexample/examples/PHUIObjectItemListExample.php', + 'PHUIObjectItemListView' => 'view/phui/PHUIObjectItemListView.php', + 'PHUIObjectItemView' => 'view/phui/PHUIObjectItemView.php', + 'PHUIPagerView' => 'view/phui/PHUIPagerView.php', + 'PHUIPinboardItemView' => 'view/phui/PHUIPinboardItemView.php', + 'PHUIPinboardView' => 'view/phui/PHUIPinboardView.php', + 'PHUIPolicySectionView' => 'applications/policy/view/PHUIPolicySectionView.php', + 'PHUIPropertyGroupView' => 'view/phui/PHUIPropertyGroupView.php', + 'PHUIPropertyListExample' => 'applications/uiexample/examples/PHUIPropertyListExample.php', + 'PHUIPropertyListView' => 'view/phui/PHUIPropertyListView.php', + 'PHUIRemarkupImageView' => 'infrastructure/markup/view/PHUIRemarkupImageView.php', + 'PHUIRemarkupPreviewPanel' => 'view/phui/PHUIRemarkupPreviewPanel.php', + 'PHUIRemarkupView' => 'infrastructure/markup/view/PHUIRemarkupView.php', + 'PHUISegmentBarSegmentView' => 'view/phui/PHUISegmentBarSegmentView.php', + 'PHUISegmentBarView' => 'view/phui/PHUISegmentBarView.php', + 'PHUISpacesNamespaceContextView' => 'applications/spaces/view/PHUISpacesNamespaceContextView.php', + 'PHUIStatusItemView' => 'view/phui/PHUIStatusItemView.php', + 'PHUIStatusListView' => 'view/phui/PHUIStatusListView.php', + 'PHUITabGroupView' => 'view/phui/PHUITabGroupView.php', + 'PHUITabView' => 'view/phui/PHUITabView.php', + 'PHUITagExample' => 'applications/uiexample/examples/PHUITagExample.php', + 'PHUITagView' => 'view/phui/PHUITagView.php', + 'PHUITimelineEventView' => 'view/phui/PHUITimelineEventView.php', + 'PHUITimelineExample' => 'applications/uiexample/examples/PHUITimelineExample.php', + 'PHUITimelineView' => 'view/phui/PHUITimelineView.php', + 'PHUITwoColumnView' => 'view/phui/PHUITwoColumnView.php', + 'PHUITypeaheadExample' => 'applications/uiexample/examples/PHUITypeaheadExample.php', + 'PHUIUserAvailabilityView' => 'applications/calendar/view/PHUIUserAvailabilityView.php', + 'PHUIWorkboardView' => 'view/phui/PHUIWorkboardView.php', + 'PHUIWorkpanelView' => 'view/phui/PHUIWorkpanelView.php', + 'PHUIXComponentsExample' => 'applications/uiexample/examples/PHUIXComponentsExample.php', + 'PassphraseAbstractKey' => 'applications/passphrase/keys/PassphraseAbstractKey.php', + 'PassphraseConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseConduitAPIMethod.php', + 'PassphraseController' => 'applications/passphrase/controller/PassphraseController.php', + 'PassphraseCredential' => 'applications/passphrase/storage/PassphraseCredential.php', + 'PassphraseCredentialAuthorPolicyRule' => 'applications/passphrase/policyrule/PassphraseCredentialAuthorPolicyRule.php', + 'PassphraseCredentialConduitController' => 'applications/passphrase/controller/PassphraseCredentialConduitController.php', + 'PassphraseCredentialConduitTransaction' => 'applications/passphrase/xaction/PassphraseCredentialConduitTransaction.php', + 'PassphraseCredentialControl' => 'applications/passphrase/view/PassphraseCredentialControl.php', + 'PassphraseCredentialCreateController' => 'applications/passphrase/controller/PassphraseCredentialCreateController.php', + 'PassphraseCredentialDescriptionTransaction' => 'applications/passphrase/xaction/PassphraseCredentialDescriptionTransaction.php', + 'PassphraseCredentialDestroyController' => 'applications/passphrase/controller/PassphraseCredentialDestroyController.php', + 'PassphraseCredentialDestroyTransaction' => 'applications/passphrase/xaction/PassphraseCredentialDestroyTransaction.php', + 'PassphraseCredentialEditController' => 'applications/passphrase/controller/PassphraseCredentialEditController.php', + 'PassphraseCredentialFerretEngine' => 'applications/passphrase/search/PassphraseCredentialFerretEngine.php', + 'PassphraseCredentialFulltextEngine' => 'applications/passphrase/search/PassphraseCredentialFulltextEngine.php', + 'PassphraseCredentialListController' => 'applications/passphrase/controller/PassphraseCredentialListController.php', + 'PassphraseCredentialLockController' => 'applications/passphrase/controller/PassphraseCredentialLockController.php', + 'PassphraseCredentialLockTransaction' => 'applications/passphrase/xaction/PassphraseCredentialLockTransaction.php', + 'PassphraseCredentialLookedAtTransaction' => 'applications/passphrase/xaction/PassphraseCredentialLookedAtTransaction.php', + 'PassphraseCredentialNameTransaction' => 'applications/passphrase/xaction/PassphraseCredentialNameTransaction.php', + 'PassphraseCredentialPHIDType' => 'applications/passphrase/phid/PassphraseCredentialPHIDType.php', + 'PassphraseCredentialPublicController' => 'applications/passphrase/controller/PassphraseCredentialPublicController.php', + 'PassphraseCredentialQuery' => 'applications/passphrase/query/PassphraseCredentialQuery.php', + 'PassphraseCredentialRevealController' => 'applications/passphrase/controller/PassphraseCredentialRevealController.php', + 'PassphraseCredentialSearchEngine' => 'applications/passphrase/query/PassphraseCredentialSearchEngine.php', + 'PassphraseCredentialSecretIDTransaction' => 'applications/passphrase/xaction/PassphraseCredentialSecretIDTransaction.php', + 'PassphraseCredentialTransaction' => 'applications/passphrase/storage/PassphraseCredentialTransaction.php', + 'PassphraseCredentialTransactionEditor' => 'applications/passphrase/editor/PassphraseCredentialTransactionEditor.php', + 'PassphraseCredentialTransactionQuery' => 'applications/passphrase/query/PassphraseCredentialTransactionQuery.php', + 'PassphraseCredentialTransactionType' => 'applications/passphrase/xaction/PassphraseCredentialTransactionType.php', + 'PassphraseCredentialType' => 'applications/passphrase/credentialtype/PassphraseCredentialType.php', + 'PassphraseCredentialTypeTestCase' => 'applications/passphrase/credentialtype/__tests__/PassphraseCredentialTypeTestCase.php', + 'PassphraseCredentialUsernameTransaction' => 'applications/passphrase/xaction/PassphraseCredentialUsernameTransaction.php', + 'PassphraseCredentialViewController' => 'applications/passphrase/controller/PassphraseCredentialViewController.php', + 'PassphraseDAO' => 'applications/passphrase/storage/PassphraseDAO.php', + 'PassphraseDefaultEditCapability' => 'applications/passphrase/capability/PassphraseDefaultEditCapability.php', + 'PassphraseDefaultViewCapability' => 'applications/passphrase/capability/PassphraseDefaultViewCapability.php', + 'PassphraseNoteCredentialType' => 'applications/passphrase/credentialtype/PassphraseNoteCredentialType.php', + 'PassphrasePasswordCredentialType' => 'applications/passphrase/credentialtype/PassphrasePasswordCredentialType.php', + 'PassphrasePasswordKey' => 'applications/passphrase/keys/PassphrasePasswordKey.php', + 'PassphraseQueryConduitAPIMethod' => 'applications/passphrase/conduit/PassphraseQueryConduitAPIMethod.php', + 'PassphraseRemarkupRule' => 'applications/passphrase/remarkup/PassphraseRemarkupRule.php', + 'PassphraseSSHGeneratedKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHGeneratedKeyCredentialType.php', + 'PassphraseSSHKey' => 'applications/passphrase/keys/PassphraseSSHKey.php', + 'PassphraseSSHPrivateKeyCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyCredentialType.php', + 'PassphraseSSHPrivateKeyFileCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyFileCredentialType.php', + 'PassphraseSSHPrivateKeyTextCredentialType' => 'applications/passphrase/credentialtype/PassphraseSSHPrivateKeyTextCredentialType.php', + 'PassphraseSchemaSpec' => 'applications/passphrase/storage/PassphraseSchemaSpec.php', + 'PassphraseSecret' => 'applications/passphrase/storage/PassphraseSecret.php', + 'PassphraseTokenCredentialType' => 'applications/passphrase/credentialtype/PassphraseTokenCredentialType.php', + 'PasteConduitAPIMethod' => 'applications/paste/conduit/PasteConduitAPIMethod.php', + 'PasteCreateConduitAPIMethod' => 'applications/paste/conduit/PasteCreateConduitAPIMethod.php', + 'PasteCreateMailReceiver' => 'applications/paste/mail/PasteCreateMailReceiver.php', + 'PasteDefaultEditCapability' => 'applications/paste/capability/PasteDefaultEditCapability.php', + 'PasteDefaultViewCapability' => 'applications/paste/capability/PasteDefaultViewCapability.php', + 'PasteEditConduitAPIMethod' => 'applications/paste/conduit/PasteEditConduitAPIMethod.php', + 'PasteEmbedView' => 'applications/paste/view/PasteEmbedView.php', + 'PasteInfoConduitAPIMethod' => 'applications/paste/conduit/PasteInfoConduitAPIMethod.php', + 'PasteLanguageSelectDatasource' => 'applications/paste/typeahead/PasteLanguageSelectDatasource.php', + 'PasteMailReceiver' => 'applications/paste/mail/PasteMailReceiver.php', + 'PasteQueryConduitAPIMethod' => 'applications/paste/conduit/PasteQueryConduitAPIMethod.php', + 'PasteReplyHandler' => 'applications/paste/mail/PasteReplyHandler.php', + 'PasteSearchConduitAPIMethod' => 'applications/paste/conduit/PasteSearchConduitAPIMethod.php', + 'PeopleBrowseUserDirectoryCapability' => 'applications/people/capability/PeopleBrowseUserDirectoryCapability.php', + 'PeopleCreateUsersCapability' => 'applications/people/capability/PeopleCreateUsersCapability.php', + 'PeopleDisableUsersCapability' => 'applications/people/capability/PeopleDisableUsersCapability.php', + 'PeopleHovercardEngineExtension' => 'applications/people/engineextension/PeopleHovercardEngineExtension.php', + 'PeopleMainMenuBarExtension' => 'applications/people/engineextension/PeopleMainMenuBarExtension.php', + 'PeopleUserLogGarbageCollector' => 'applications/people/garbagecollector/PeopleUserLogGarbageCollector.php', 'Phabricator404Controller' => 'applications/base/controller/Phabricator404Controller.php', - 'PhabricatorAccessLog' => 'infrastructure/PhabricatorAccessLog.php', + 'PhabricatorAWSConfigOptions' => 'applications/config/option/PhabricatorAWSConfigOptions.php', + 'PhabricatorAWSSESFuture' => 'applications/metamta/future/PhabricatorAWSSESFuture.php', + 'PhabricatorAccessControlTestCase' => 'applications/base/controller/__tests__/PhabricatorAccessControlTestCase.php', + 'PhabricatorAccessLog' => 'infrastructure/log/PhabricatorAccessLog.php', + 'PhabricatorAccessLogConfigOptions' => 'applications/config/option/PhabricatorAccessLogConfigOptions.php', + 'PhabricatorAccessibilitySetting' => 'applications/settings/setting/PhabricatorAccessibilitySetting.php', + 'PhabricatorAccumulateChartFunction' => 'applications/fact/chart/PhabricatorAccumulateChartFunction.php', + 'PhabricatorActionListView' => 'view/layout/PhabricatorActionListView.php', + 'PhabricatorActionView' => 'view/layout/PhabricatorActionView.php', + 'PhabricatorActivitySettingsPanel' => 'applications/settings/panel/PhabricatorActivitySettingsPanel.php', + 'PhabricatorAddEmailUserLogType' => 'applications/people/userlog/PhabricatorAddEmailUserLogType.php', + 'PhabricatorAddMultifactorUserLogType' => 'applications/people/userlog/PhabricatorAddMultifactorUserLogType.php', + 'PhabricatorAdministratorsPolicyRule' => 'applications/people/policyrule/PhabricatorAdministratorsPolicyRule.php', + 'PhabricatorAjaxRequestExceptionHandler' => 'aphront/handler/PhabricatorAjaxRequestExceptionHandler.php', + 'PhabricatorAlmanacApplication' => 'applications/almanac/application/PhabricatorAlmanacApplication.php', + 'PhabricatorAmazonAuthProvider' => 'applications/auth/provider/PhabricatorAmazonAuthProvider.php', + 'PhabricatorAmazonSNSFuture' => 'applications/metamta/future/PhabricatorAmazonSNSFuture.php', + 'PhabricatorAnchorTestCase' => 'infrastructure/markup/__tests__/PhabricatorAnchorTestCase.php', + 'PhabricatorAnchorView' => 'view/layout/PhabricatorAnchorView.php', + 'PhabricatorAphlictManagementDebugWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementDebugWorkflow.php', + 'PhabricatorAphlictManagementNotifyWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementNotifyWorkflow.php', + 'PhabricatorAphlictManagementRestartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementRestartWorkflow.php', + 'PhabricatorAphlictManagementStartWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStartWorkflow.php', + 'PhabricatorAphlictManagementStatusWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStatusWorkflow.php', + 'PhabricatorAphlictManagementStopWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementStopWorkflow.php', + 'PhabricatorAphlictManagementWorkflow' => 'applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php', + 'PhabricatorAphlictSetupCheck' => 'applications/notification/setup/PhabricatorAphlictSetupCheck.php', + 'PhabricatorAphrontBarUIExample' => 'applications/uiexample/examples/PhabricatorAphrontBarUIExample.php', + 'PhabricatorAphrontViewTestCase' => 'view/__tests__/PhabricatorAphrontViewTestCase.php', + 'PhabricatorAppSearchEngine' => 'applications/meta/query/PhabricatorAppSearchEngine.php', + 'PhabricatorApplication' => 'applications/base/PhabricatorApplication.php', + 'PhabricatorApplicationApplicationPHIDType' => 'applications/meta/phid/PhabricatorApplicationApplicationPHIDType.php', + 'PhabricatorApplicationApplicationTransaction' => 'applications/meta/storage/PhabricatorApplicationApplicationTransaction.php', + 'PhabricatorApplicationApplicationTransactionQuery' => 'applications/meta/query/PhabricatorApplicationApplicationTransactionQuery.php', + 'PhabricatorApplicationConfigOptions' => 'applications/config/option/PhabricatorApplicationConfigOptions.php', + 'PhabricatorApplicationConfigurationPanel' => 'applications/meta/panel/PhabricatorApplicationConfigurationPanel.php', + 'PhabricatorApplicationConfigurationPanelTestCase' => 'applications/meta/panel/__tests__/PhabricatorApplicationConfigurationPanelTestCase.php', + 'PhabricatorApplicationDatasource' => 'applications/meta/typeahead/PhabricatorApplicationDatasource.php', + 'PhabricatorApplicationDetailViewController' => 'applications/meta/controller/PhabricatorApplicationDetailViewController.php', + 'PhabricatorApplicationEditController' => 'applications/meta/controller/PhabricatorApplicationEditController.php', + 'PhabricatorApplicationEditEngine' => 'applications/meta/editor/PhabricatorApplicationEditEngine.php', + 'PhabricatorApplicationEditHTTPParameterHelpView' => 'applications/transactions/view/PhabricatorApplicationEditHTTPParameterHelpView.php', + 'PhabricatorApplicationEditor' => 'applications/meta/editor/PhabricatorApplicationEditor.php', + 'PhabricatorApplicationEmailCommandsController' => 'applications/meta/controller/PhabricatorApplicationEmailCommandsController.php', + 'PhabricatorApplicationMailReceiver' => 'applications/metamta/receiver/PhabricatorApplicationMailReceiver.php', + 'PhabricatorApplicationObjectMailEngineExtension' => 'applications/transactions/engineextension/PhabricatorApplicationObjectMailEngineExtension.php', + 'PhabricatorApplicationPanelController' => 'applications/meta/controller/PhabricatorApplicationPanelController.php', + 'PhabricatorApplicationPolicyChangeTransaction' => 'applications/meta/xactions/PhabricatorApplicationPolicyChangeTransaction.php', + 'PhabricatorApplicationProfileMenuItem' => 'applications/search/menuitem/PhabricatorApplicationProfileMenuItem.php', + 'PhabricatorApplicationQuery' => 'applications/meta/query/PhabricatorApplicationQuery.php', + 'PhabricatorApplicationSchemaSpec' => 'applications/meta/storage/PhabricatorApplicationSchemaSpec.php', + 'PhabricatorApplicationSearchController' => 'applications/search/controller/PhabricatorApplicationSearchController.php', + 'PhabricatorApplicationSearchEngine' => 'applications/search/engine/PhabricatorApplicationSearchEngine.php', + 'PhabricatorApplicationSearchEngineTestCase' => 'applications/search/engine/__tests__/PhabricatorApplicationSearchEngineTestCase.php', + 'PhabricatorApplicationSearchResultView' => 'applications/search/view/PhabricatorApplicationSearchResultView.php', + 'PhabricatorApplicationTestCase' => 'applications/base/__tests__/PhabricatorApplicationTestCase.php', + 'PhabricatorApplicationTransaction' => 'applications/transactions/storage/PhabricatorApplicationTransaction.php', + 'PhabricatorApplicationTransactionComment' => 'applications/transactions/storage/PhabricatorApplicationTransactionComment.php', + 'PhabricatorApplicationTransactionCommentEditController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentEditController.php', + 'PhabricatorApplicationTransactionCommentEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionCommentEditor.php', + 'PhabricatorApplicationTransactionCommentHistoryController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentHistoryController.php', + 'PhabricatorApplicationTransactionCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionCommentQuery.php', + 'PhabricatorApplicationTransactionCommentQuoteController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentQuoteController.php', + 'PhabricatorApplicationTransactionCommentRawController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRawController.php', + 'PhabricatorApplicationTransactionCommentRemoveController' => 'applications/transactions/controller/PhabricatorApplicationTransactionCommentRemoveController.php', + 'PhabricatorApplicationTransactionCommentView' => 'applications/transactions/view/PhabricatorApplicationTransactionCommentView.php', + 'PhabricatorApplicationTransactionController' => 'applications/transactions/controller/PhabricatorApplicationTransactionController.php', + 'PhabricatorApplicationTransactionDetailController' => 'applications/transactions/controller/PhabricatorApplicationTransactionDetailController.php', + 'PhabricatorApplicationTransactionDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionDetailView.php', + 'PhabricatorApplicationTransactionEditor' => 'applications/transactions/editor/PhabricatorApplicationTransactionEditor.php', + 'PhabricatorApplicationTransactionFeedStory' => 'applications/transactions/feed/PhabricatorApplicationTransactionFeedStory.php', + 'PhabricatorApplicationTransactionInterface' => 'applications/transactions/interface/PhabricatorApplicationTransactionInterface.php', + 'PhabricatorApplicationTransactionJSONDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionJSONDiffDetailView.php', + 'PhabricatorApplicationTransactionNoEffectException' => 'applications/transactions/exception/PhabricatorApplicationTransactionNoEffectException.php', + 'PhabricatorApplicationTransactionNoEffectResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionNoEffectResponse.php', + 'PhabricatorApplicationTransactionPublishWorker' => 'applications/transactions/worker/PhabricatorApplicationTransactionPublishWorker.php', + 'PhabricatorApplicationTransactionQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionQuery.php', + 'PhabricatorApplicationTransactionRemarkupPreviewController' => 'applications/transactions/controller/PhabricatorApplicationTransactionRemarkupPreviewController.php', + 'PhabricatorApplicationTransactionReplyHandler' => 'applications/transactions/replyhandler/PhabricatorApplicationTransactionReplyHandler.php', + 'PhabricatorApplicationTransactionResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionResponse.php', + 'PhabricatorApplicationTransactionShowOlderController' => 'applications/transactions/controller/PhabricatorApplicationTransactionShowOlderController.php', + 'PhabricatorApplicationTransactionStructureException' => 'applications/transactions/exception/PhabricatorApplicationTransactionStructureException.php', + 'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'applications/transactions/query/PhabricatorApplicationTransactionTemplatedCommentQuery.php', + 'PhabricatorApplicationTransactionTextDiffDetailView' => 'applications/transactions/view/PhabricatorApplicationTransactionTextDiffDetailView.php', + 'PhabricatorApplicationTransactionTransactionPHIDType' => 'applications/transactions/phid/PhabricatorApplicationTransactionTransactionPHIDType.php', + 'PhabricatorApplicationTransactionType' => 'applications/meta/xactions/PhabricatorApplicationTransactionType.php', + 'PhabricatorApplicationTransactionValidationError' => 'applications/transactions/error/PhabricatorApplicationTransactionValidationError.php', + 'PhabricatorApplicationTransactionValidationException' => 'applications/transactions/exception/PhabricatorApplicationTransactionValidationException.php', + 'PhabricatorApplicationTransactionValidationResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionValidationResponse.php', + 'PhabricatorApplicationTransactionValueController' => 'applications/transactions/controller/PhabricatorApplicationTransactionValueController.php', + 'PhabricatorApplicationTransactionView' => 'applications/transactions/view/PhabricatorApplicationTransactionView.php', + 'PhabricatorApplicationTransactionWarningException' => 'applications/transactions/exception/PhabricatorApplicationTransactionWarningException.php', + 'PhabricatorApplicationTransactionWarningResponse' => 'applications/transactions/response/PhabricatorApplicationTransactionWarningResponse.php', + 'PhabricatorApplicationUninstallController' => 'applications/meta/controller/PhabricatorApplicationUninstallController.php', + 'PhabricatorApplicationUninstallTransaction' => 'applications/meta/xactions/PhabricatorApplicationUninstallTransaction.php', + 'PhabricatorApplicationsApplication' => 'applications/meta/application/PhabricatorApplicationsApplication.php', + 'PhabricatorApplicationsController' => 'applications/meta/controller/PhabricatorApplicationsController.php', + 'PhabricatorApplicationsListController' => 'applications/meta/controller/PhabricatorApplicationsListController.php', + 'PhabricatorApplyEditField' => 'applications/transactions/editfield/PhabricatorApplyEditField.php', + 'PhabricatorAsanaAuthProvider' => 'applications/auth/provider/PhabricatorAsanaAuthProvider.php', + 'PhabricatorAsanaConfigOptions' => 'applications/doorkeeper/option/PhabricatorAsanaConfigOptions.php', + 'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaSubtaskHasObjectEdgeType.php', + 'PhabricatorAsanaTaskHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorAsanaTaskHasObjectEdgeType.php', + 'PhabricatorAudioDocumentEngine' => 'applications/files/document/PhabricatorAudioDocumentEngine.php', 'PhabricatorAuditActionConstants' => 'applications/audit/constants/PhabricatorAuditActionConstants.php', - 'PhabricatorAuditAddCommentController' => 'applications/audit/controller/PhabricatorAuditAddCommentController.php', - 'PhabricatorAuditComment' => 'applications/audit/storage/PhabricatorAuditComment.php', + 'PhabricatorAuditApplication' => 'applications/audit/application/PhabricatorAuditApplication.php', 'PhabricatorAuditCommentEditor' => 'applications/audit/editor/PhabricatorAuditCommentEditor.php', - 'PhabricatorAuditCommitListView' => 'applications/audit/view/PhabricatorAuditCommitListView.php', - 'PhabricatorAuditCommitQuery' => 'applications/audit/query/PhabricatorAuditCommitQuery.php', - 'PhabricatorAuditCommitStatusConstants' => 'applications/audit/constants/PhabricatorAuditCommitStatusConstants.php', 'PhabricatorAuditController' => 'applications/audit/controller/PhabricatorAuditController.php', - 'PhabricatorAuditDAO' => 'applications/audit/storage/PhabricatorAuditDAO.php', + 'PhabricatorAuditEditor' => 'applications/audit/editor/PhabricatorAuditEditor.php', 'PhabricatorAuditInlineComment' => 'applications/audit/storage/PhabricatorAuditInlineComment.php', - 'PhabricatorAuditListController' => 'applications/audit/controller/PhabricatorAuditListController.php', - 'PhabricatorAuditListView' => 'applications/audit/view/PhabricatorAuditListView.php', - 'PhabricatorAuditPreviewController' => 'applications/audit/controller/PhabricatorAuditPreviewController.php', - 'PhabricatorAuditQuery' => 'applications/audit/query/PhabricatorAuditQuery.php', - 'PhabricatorAuditReplyHandler' => 'applications/audit/PhabricatorAuditReplyHandler.php', - 'PhabricatorAuditStatusConstants' => 'applications/audit/constants/PhabricatorAuditStatusConstants.php', + 'PhabricatorAuditMailReceiver' => 'applications/audit/mail/PhabricatorAuditMailReceiver.php', + 'PhabricatorAuditManagementDeleteWorkflow' => 'applications/audit/management/PhabricatorAuditManagementDeleteWorkflow.php', + 'PhabricatorAuditManagementWorkflow' => 'applications/audit/management/PhabricatorAuditManagementWorkflow.php', + 'PhabricatorAuditReplyHandler' => 'applications/audit/mail/PhabricatorAuditReplyHandler.php', + 'PhabricatorAuditRequestStatus' => 'applications/audit/constants/PhabricatorAuditRequestStatus.php', + 'PhabricatorAuditSynchronizeManagementWorkflow' => 'applications/audit/management/PhabricatorAuditSynchronizeManagementWorkflow.php', + 'PhabricatorAuditTransaction' => 'applications/audit/storage/PhabricatorAuditTransaction.php', + 'PhabricatorAuditTransactionComment' => 'applications/audit/storage/PhabricatorAuditTransactionComment.php', + 'PhabricatorAuditTransactionQuery' => 'applications/audit/query/PhabricatorAuditTransactionQuery.php', + 'PhabricatorAuditTransactionView' => 'applications/audit/view/PhabricatorAuditTransactionView.php', + 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'applications/audit/management/PhabricatorAuditUpdateOwnersManagementWorkflow.php', + 'PhabricatorAuthAccountView' => 'applications/auth/view/PhabricatorAuthAccountView.php', + 'PhabricatorAuthApplication' => 'applications/auth/application/PhabricatorAuthApplication.php', + 'PhabricatorAuthAuthFactorPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorPHIDType.php', + 'PhabricatorAuthAuthFactorProviderPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthFactorProviderPHIDType.php', + 'PhabricatorAuthAuthProviderPHIDType' => 'applications/auth/phid/PhabricatorAuthAuthProviderPHIDType.php', + 'PhabricatorAuthCSRFEngine' => 'applications/auth/engine/PhabricatorAuthCSRFEngine.php', + 'PhabricatorAuthChallenge' => 'applications/auth/storage/PhabricatorAuthChallenge.php', + 'PhabricatorAuthChallengeGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthChallengeGarbageCollector.php', + 'PhabricatorAuthChallengePHIDType' => 'applications/auth/phid/PhabricatorAuthChallengePHIDType.php', + 'PhabricatorAuthChallengeQuery' => 'applications/auth/query/PhabricatorAuthChallengeQuery.php', + 'PhabricatorAuthChallengeStatusController' => 'applications/auth/controller/mfa/PhabricatorAuthChallengeStatusController.php', + 'PhabricatorAuthChallengeUpdate' => 'applications/auth/view/PhabricatorAuthChallengeUpdate.php', + 'PhabricatorAuthChangePasswordAction' => 'applications/auth/action/PhabricatorAuthChangePasswordAction.php', + 'PhabricatorAuthChangeUsernameMessageType' => 'applications/auth/message/PhabricatorAuthChangeUsernameMessageType.php', + 'PhabricatorAuthConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthConduitAPIMethod.php', + 'PhabricatorAuthConduitTokenRevoker' => 'applications/auth/revoker/PhabricatorAuthConduitTokenRevoker.php', + 'PhabricatorAuthConfirmLinkController' => 'applications/auth/controller/PhabricatorAuthConfirmLinkController.php', + 'PhabricatorAuthContactNumber' => 'applications/auth/storage/PhabricatorAuthContactNumber.php', + 'PhabricatorAuthContactNumberController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberController.php', + 'PhabricatorAuthContactNumberDisableController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberDisableController.php', + 'PhabricatorAuthContactNumberEditController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberEditController.php', + 'PhabricatorAuthContactNumberEditEngine' => 'applications/auth/editor/PhabricatorAuthContactNumberEditEngine.php', + 'PhabricatorAuthContactNumberEditor' => 'applications/auth/editor/PhabricatorAuthContactNumberEditor.php', + 'PhabricatorAuthContactNumberMFAEngine' => 'applications/auth/engine/PhabricatorAuthContactNumberMFAEngine.php', + 'PhabricatorAuthContactNumberNumberTransaction' => 'applications/auth/xaction/PhabricatorAuthContactNumberNumberTransaction.php', + 'PhabricatorAuthContactNumberPHIDType' => 'applications/auth/phid/PhabricatorAuthContactNumberPHIDType.php', + 'PhabricatorAuthContactNumberPrimaryController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberPrimaryController.php', + 'PhabricatorAuthContactNumberPrimaryTransaction' => 'applications/auth/xaction/PhabricatorAuthContactNumberPrimaryTransaction.php', + 'PhabricatorAuthContactNumberQuery' => 'applications/auth/query/PhabricatorAuthContactNumberQuery.php', + 'PhabricatorAuthContactNumberStatusTransaction' => 'applications/auth/xaction/PhabricatorAuthContactNumberStatusTransaction.php', + 'PhabricatorAuthContactNumberTestController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberTestController.php', + 'PhabricatorAuthContactNumberTransaction' => 'applications/auth/storage/PhabricatorAuthContactNumberTransaction.php', + 'PhabricatorAuthContactNumberTransactionQuery' => 'applications/auth/query/PhabricatorAuthContactNumberTransactionQuery.php', + 'PhabricatorAuthContactNumberTransactionType' => 'applications/auth/xaction/PhabricatorAuthContactNumberTransactionType.php', + 'PhabricatorAuthContactNumberViewController' => 'applications/auth/controller/contact/PhabricatorAuthContactNumberViewController.php', 'PhabricatorAuthController' => 'applications/auth/controller/PhabricatorAuthController.php', - 'PhabricatorBaseEnglishTranslation' => 'infrastructure/internationalization/PhabricatorBaseEnglishTranslation.php', - 'PhabricatorBuiltinPatchList' => 'infrastructure/setup/sql/PhabricatorBuiltinPatchList.php', - 'PhabricatorCalendarBrowseController' => 'applications/calendar/controller/PhabricatorCalendarBrowseController.php', + 'PhabricatorAuthDAO' => 'applications/auth/storage/PhabricatorAuthDAO.php', + 'PhabricatorAuthDisableController' => 'applications/auth/controller/config/PhabricatorAuthDisableController.php', + 'PhabricatorAuthDowngradeSessionController' => 'applications/auth/controller/PhabricatorAuthDowngradeSessionController.php', + 'PhabricatorAuthEditController' => 'applications/auth/controller/config/PhabricatorAuthEditController.php', + 'PhabricatorAuthEmailLoginAction' => 'applications/auth/action/PhabricatorAuthEmailLoginAction.php', + 'PhabricatorAuthEmailLoginMessageType' => 'applications/auth/message/PhabricatorAuthEmailLoginMessageType.php', + 'PhabricatorAuthEmailSetPasswordMessageType' => 'applications/auth/message/PhabricatorAuthEmailSetPasswordMessageType.php', + 'PhabricatorAuthFactor' => 'applications/auth/factor/PhabricatorAuthFactor.php', + 'PhabricatorAuthFactorConfig' => 'applications/auth/storage/PhabricatorAuthFactorConfig.php', + 'PhabricatorAuthFactorConfigQuery' => 'applications/auth/query/PhabricatorAuthFactorConfigQuery.php', + 'PhabricatorAuthFactorProvider' => 'applications/auth/storage/PhabricatorAuthFactorProvider.php', + 'PhabricatorAuthFactorProviderController' => 'applications/auth/controller/mfa/PhabricatorAuthFactorProviderController.php', + 'PhabricatorAuthFactorProviderDuoCredentialTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderDuoCredentialTransaction.php', + 'PhabricatorAuthFactorProviderDuoEnrollTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderDuoEnrollTransaction.php', + 'PhabricatorAuthFactorProviderDuoHostnameTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderDuoHostnameTransaction.php', + 'PhabricatorAuthFactorProviderDuoUsernamesTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderDuoUsernamesTransaction.php', + 'PhabricatorAuthFactorProviderEditController' => 'applications/auth/controller/mfa/PhabricatorAuthFactorProviderEditController.php', + 'PhabricatorAuthFactorProviderEditEngine' => 'applications/auth/editor/PhabricatorAuthFactorProviderEditEngine.php', + 'PhabricatorAuthFactorProviderEditor' => 'applications/auth/editor/PhabricatorAuthFactorProviderEditor.php', + 'PhabricatorAuthFactorProviderEnrollMessageTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderEnrollMessageTransaction.php', + 'PhabricatorAuthFactorProviderListController' => 'applications/auth/controller/mfa/PhabricatorAuthFactorProviderListController.php', + 'PhabricatorAuthFactorProviderMFAEngine' => 'applications/auth/engine/PhabricatorAuthFactorProviderMFAEngine.php', + 'PhabricatorAuthFactorProviderMessageController' => 'applications/auth/controller/mfa/PhabricatorAuthFactorProviderMessageController.php', + 'PhabricatorAuthFactorProviderNameTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderNameTransaction.php', + 'PhabricatorAuthFactorProviderQuery' => 'applications/auth/query/PhabricatorAuthFactorProviderQuery.php', + 'PhabricatorAuthFactorProviderStatus' => 'applications/auth/constants/PhabricatorAuthFactorProviderStatus.php', + 'PhabricatorAuthFactorProviderStatusTransaction' => 'applications/auth/xaction/PhabricatorAuthFactorProviderStatusTransaction.php', + 'PhabricatorAuthFactorProviderTransaction' => 'applications/auth/storage/PhabricatorAuthFactorProviderTransaction.php', + 'PhabricatorAuthFactorProviderTransactionQuery' => 'applications/auth/query/PhabricatorAuthFactorProviderTransactionQuery.php', + 'PhabricatorAuthFactorProviderTransactionType' => 'applications/auth/xaction/PhabricatorAuthFactorProviderTransactionType.php', + 'PhabricatorAuthFactorProviderViewController' => 'applications/auth/controller/mfa/PhabricatorAuthFactorProviderViewController.php', + 'PhabricatorAuthFactorResult' => 'applications/auth/factor/PhabricatorAuthFactorResult.php', + 'PhabricatorAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthFactorTestCase.php', + 'PhabricatorAuthFinishController' => 'applications/auth/controller/PhabricatorAuthFinishController.php', + 'PhabricatorAuthHMACKey' => 'applications/auth/storage/PhabricatorAuthHMACKey.php', + 'PhabricatorAuthHighSecurityRequiredException' => 'applications/auth/exception/PhabricatorAuthHighSecurityRequiredException.php', + 'PhabricatorAuthHighSecurityToken' => 'applications/auth/data/PhabricatorAuthHighSecurityToken.php', + 'PhabricatorAuthInvite' => 'applications/auth/storage/PhabricatorAuthInvite.php', + 'PhabricatorAuthInviteAccountException' => 'applications/auth/exception/PhabricatorAuthInviteAccountException.php', + 'PhabricatorAuthInviteAction' => 'applications/auth/data/PhabricatorAuthInviteAction.php', + 'PhabricatorAuthInviteActionTableView' => 'applications/auth/view/PhabricatorAuthInviteActionTableView.php', + 'PhabricatorAuthInviteController' => 'applications/auth/controller/PhabricatorAuthInviteController.php', + 'PhabricatorAuthInviteDialogException' => 'applications/auth/exception/PhabricatorAuthInviteDialogException.php', + 'PhabricatorAuthInviteEngine' => 'applications/auth/engine/PhabricatorAuthInviteEngine.php', + 'PhabricatorAuthInviteException' => 'applications/auth/exception/PhabricatorAuthInviteException.php', + 'PhabricatorAuthInviteInvalidException' => 'applications/auth/exception/PhabricatorAuthInviteInvalidException.php', + 'PhabricatorAuthInviteLoginException' => 'applications/auth/exception/PhabricatorAuthInviteLoginException.php', + 'PhabricatorAuthInvitePHIDType' => 'applications/auth/phid/PhabricatorAuthInvitePHIDType.php', + 'PhabricatorAuthInviteQuery' => 'applications/auth/query/PhabricatorAuthInviteQuery.php', + 'PhabricatorAuthInviteRegisteredException' => 'applications/auth/exception/PhabricatorAuthInviteRegisteredException.php', + 'PhabricatorAuthInviteSearchEngine' => 'applications/auth/query/PhabricatorAuthInviteSearchEngine.php', + 'PhabricatorAuthInviteTestCase' => 'applications/auth/factor/__tests__/PhabricatorAuthInviteTestCase.php', + 'PhabricatorAuthInviteVerifyException' => 'applications/auth/exception/PhabricatorAuthInviteVerifyException.php', + 'PhabricatorAuthInviteWorker' => 'applications/auth/worker/PhabricatorAuthInviteWorker.php', + 'PhabricatorAuthLinkController' => 'applications/auth/controller/PhabricatorAuthLinkController.php', + 'PhabricatorAuthLinkMessageType' => 'applications/auth/message/PhabricatorAuthLinkMessageType.php', + 'PhabricatorAuthListController' => 'applications/auth/controller/config/PhabricatorAuthListController.php', + 'PhabricatorAuthLoginController' => 'applications/auth/controller/PhabricatorAuthLoginController.php', + 'PhabricatorAuthLoginMessageType' => 'applications/auth/message/PhabricatorAuthLoginMessageType.php', + 'PhabricatorAuthLogoutConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthLogoutConduitAPIMethod.php', + 'PhabricatorAuthMFAEditEngineExtension' => 'applications/auth/engineextension/PhabricatorAuthMFAEditEngineExtension.php', + 'PhabricatorAuthMFASyncTemporaryTokenType' => 'applications/auth/factor/PhabricatorAuthMFASyncTemporaryTokenType.php', + 'PhabricatorAuthMainMenuBarExtension' => 'applications/auth/extension/PhabricatorAuthMainMenuBarExtension.php', + 'PhabricatorAuthManagementCachePKCS8Workflow' => 'applications/auth/management/PhabricatorAuthManagementCachePKCS8Workflow.php', + 'PhabricatorAuthManagementLDAPWorkflow' => 'applications/auth/management/PhabricatorAuthManagementLDAPWorkflow.php', + 'PhabricatorAuthManagementListFactorsWorkflow' => 'applications/auth/management/PhabricatorAuthManagementListFactorsWorkflow.php', + 'PhabricatorAuthManagementListMFAProvidersWorkflow' => 'applications/auth/management/PhabricatorAuthManagementListMFAProvidersWorkflow.php', + 'PhabricatorAuthManagementLockWorkflow' => 'applications/auth/management/PhabricatorAuthManagementLockWorkflow.php', + 'PhabricatorAuthManagementRecoverWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRecoverWorkflow.php', + 'PhabricatorAuthManagementRefreshWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRefreshWorkflow.php', + 'PhabricatorAuthManagementRevokeWorkflow' => 'applications/auth/management/PhabricatorAuthManagementRevokeWorkflow.php', + 'PhabricatorAuthManagementStripWorkflow' => 'applications/auth/management/PhabricatorAuthManagementStripWorkflow.php', + 'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementTrustOAuthClientWorkflow.php', + 'PhabricatorAuthManagementUnlimitWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUnlimitWorkflow.php', + 'PhabricatorAuthManagementUnlockWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUnlockWorkflow.php', + 'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'applications/auth/management/PhabricatorAuthManagementUntrustOAuthClientWorkflow.php', + 'PhabricatorAuthManagementVerifyWorkflow' => 'applications/auth/management/PhabricatorAuthManagementVerifyWorkflow.php', + 'PhabricatorAuthManagementWorkflow' => 'applications/auth/management/PhabricatorAuthManagementWorkflow.php', + 'PhabricatorAuthMessage' => 'applications/auth/storage/PhabricatorAuthMessage.php', + 'PhabricatorAuthMessageController' => 'applications/auth/controller/message/PhabricatorAuthMessageController.php', + 'PhabricatorAuthMessageEditController' => 'applications/auth/controller/message/PhabricatorAuthMessageEditController.php', + 'PhabricatorAuthMessageEditEngine' => 'applications/auth/editor/PhabricatorAuthMessageEditEngine.php', + 'PhabricatorAuthMessageEditor' => 'applications/auth/editor/PhabricatorAuthMessageEditor.php', + 'PhabricatorAuthMessageListController' => 'applications/auth/controller/message/PhabricatorAuthMessageListController.php', + 'PhabricatorAuthMessagePHIDType' => 'applications/auth/phid/PhabricatorAuthMessagePHIDType.php', + 'PhabricatorAuthMessageQuery' => 'applications/auth/query/PhabricatorAuthMessageQuery.php', + 'PhabricatorAuthMessageTextTransaction' => 'applications/auth/xaction/PhabricatorAuthMessageTextTransaction.php', + 'PhabricatorAuthMessageTransaction' => 'applications/auth/storage/PhabricatorAuthMessageTransaction.php', + 'PhabricatorAuthMessageTransactionQuery' => 'applications/auth/query/PhabricatorAuthMessageTransactionQuery.php', + 'PhabricatorAuthMessageTransactionType' => 'applications/auth/xaction/PhabricatorAuthMessageTransactionType.php', + 'PhabricatorAuthMessageType' => 'applications/auth/message/PhabricatorAuthMessageType.php', + 'PhabricatorAuthMessageViewController' => 'applications/auth/controller/message/PhabricatorAuthMessageViewController.php', + 'PhabricatorAuthNeedsApprovalController' => 'applications/auth/controller/PhabricatorAuthNeedsApprovalController.php', + 'PhabricatorAuthNeedsMultiFactorController' => 'applications/auth/controller/PhabricatorAuthNeedsMultiFactorController.php', + 'PhabricatorAuthNewController' => 'applications/auth/controller/config/PhabricatorAuthNewController.php', + 'PhabricatorAuthNewFactorAction' => 'applications/auth/action/PhabricatorAuthNewFactorAction.php', + 'PhabricatorAuthOldOAuthRedirectController' => 'applications/auth/controller/PhabricatorAuthOldOAuthRedirectController.php', + 'PhabricatorAuthOneTimeLoginController' => 'applications/auth/controller/PhabricatorAuthOneTimeLoginController.php', + 'PhabricatorAuthOneTimeLoginTemporaryTokenType' => 'applications/auth/tokentype/PhabricatorAuthOneTimeLoginTemporaryTokenType.php', + 'PhabricatorAuthPassword' => 'applications/auth/storage/PhabricatorAuthPassword.php', + 'PhabricatorAuthPasswordEditor' => 'applications/auth/editor/PhabricatorAuthPasswordEditor.php', + 'PhabricatorAuthPasswordEngine' => 'applications/auth/engine/PhabricatorAuthPasswordEngine.php', + 'PhabricatorAuthPasswordException' => 'applications/auth/password/PhabricatorAuthPasswordException.php', + 'PhabricatorAuthPasswordHashInterface' => 'applications/auth/password/PhabricatorAuthPasswordHashInterface.php', + 'PhabricatorAuthPasswordPHIDType' => 'applications/auth/phid/PhabricatorAuthPasswordPHIDType.php', + 'PhabricatorAuthPasswordQuery' => 'applications/auth/query/PhabricatorAuthPasswordQuery.php', + 'PhabricatorAuthPasswordResetTemporaryTokenType' => 'applications/auth/tokentype/PhabricatorAuthPasswordResetTemporaryTokenType.php', + 'PhabricatorAuthPasswordRevokeTransaction' => 'applications/auth/xaction/PhabricatorAuthPasswordRevokeTransaction.php', + 'PhabricatorAuthPasswordRevoker' => 'applications/auth/revoker/PhabricatorAuthPasswordRevoker.php', + 'PhabricatorAuthPasswordTestCase' => 'applications/auth/__tests__/PhabricatorAuthPasswordTestCase.php', + 'PhabricatorAuthPasswordTransaction' => 'applications/auth/storage/PhabricatorAuthPasswordTransaction.php', + 'PhabricatorAuthPasswordTransactionQuery' => 'applications/auth/query/PhabricatorAuthPasswordTransactionQuery.php', + 'PhabricatorAuthPasswordTransactionType' => 'applications/auth/xaction/PhabricatorAuthPasswordTransactionType.php', + 'PhabricatorAuthPasswordUpgradeTransaction' => 'applications/auth/xaction/PhabricatorAuthPasswordUpgradeTransaction.php', + 'PhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorAuthProvider.php', + 'PhabricatorAuthProviderConfig' => 'applications/auth/storage/PhabricatorAuthProviderConfig.php', + 'PhabricatorAuthProviderConfigController' => 'applications/auth/controller/config/PhabricatorAuthProviderConfigController.php', + 'PhabricatorAuthProviderConfigEditor' => 'applications/auth/editor/PhabricatorAuthProviderConfigEditor.php', + 'PhabricatorAuthProviderConfigQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigQuery.php', + 'PhabricatorAuthProviderConfigTransaction' => 'applications/auth/storage/PhabricatorAuthProviderConfigTransaction.php', + 'PhabricatorAuthProviderConfigTransactionQuery' => 'applications/auth/query/PhabricatorAuthProviderConfigTransactionQuery.php', + 'PhabricatorAuthProviderController' => 'applications/auth/controller/config/PhabricatorAuthProviderController.php', + 'PhabricatorAuthProviderViewController' => 'applications/auth/controller/config/PhabricatorAuthProviderViewController.php', + 'PhabricatorAuthProvidersGuidanceContext' => 'applications/auth/guidance/PhabricatorAuthProvidersGuidanceContext.php', + 'PhabricatorAuthProvidersGuidanceEngineExtension' => 'applications/auth/guidance/PhabricatorAuthProvidersGuidanceEngineExtension.php', + 'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'applications/auth/conduit/PhabricatorAuthQueryPublicKeysConduitAPIMethod.php', + 'PhabricatorAuthRegisterController' => 'applications/auth/controller/PhabricatorAuthRegisterController.php', + 'PhabricatorAuthRevokeTokenController' => 'applications/auth/controller/PhabricatorAuthRevokeTokenController.php', + 'PhabricatorAuthRevoker' => 'applications/auth/revoker/PhabricatorAuthRevoker.php', + 'PhabricatorAuthSSHKey' => 'applications/auth/storage/PhabricatorAuthSSHKey.php', + 'PhabricatorAuthSSHKeyController' => 'applications/auth/controller/PhabricatorAuthSSHKeyController.php', + 'PhabricatorAuthSSHKeyEditController' => 'applications/auth/controller/PhabricatorAuthSSHKeyEditController.php', + 'PhabricatorAuthSSHKeyEditor' => 'applications/auth/editor/PhabricatorAuthSSHKeyEditor.php', + 'PhabricatorAuthSSHKeyGenerateController' => 'applications/auth/controller/PhabricatorAuthSSHKeyGenerateController.php', + 'PhabricatorAuthSSHKeyListController' => 'applications/auth/controller/PhabricatorAuthSSHKeyListController.php', + 'PhabricatorAuthSSHKeyPHIDType' => 'applications/auth/phid/PhabricatorAuthSSHKeyPHIDType.php', + 'PhabricatorAuthSSHKeyQuery' => 'applications/auth/query/PhabricatorAuthSSHKeyQuery.php', + 'PhabricatorAuthSSHKeyReplyHandler' => 'applications/auth/mail/PhabricatorAuthSSHKeyReplyHandler.php', + 'PhabricatorAuthSSHKeyRevokeController' => 'applications/auth/controller/PhabricatorAuthSSHKeyRevokeController.php', + 'PhabricatorAuthSSHKeySearchEngine' => 'applications/auth/query/PhabricatorAuthSSHKeySearchEngine.php', + 'PhabricatorAuthSSHKeyTableView' => 'applications/auth/view/PhabricatorAuthSSHKeyTableView.php', + 'PhabricatorAuthSSHKeyTestCase' => 'applications/auth/__tests__/PhabricatorAuthSSHKeyTestCase.php', + 'PhabricatorAuthSSHKeyTransaction' => 'applications/auth/storage/PhabricatorAuthSSHKeyTransaction.php', + 'PhabricatorAuthSSHKeyTransactionQuery' => 'applications/auth/query/PhabricatorAuthSSHKeyTransactionQuery.php', + 'PhabricatorAuthSSHKeyViewController' => 'applications/auth/controller/PhabricatorAuthSSHKeyViewController.php', + 'PhabricatorAuthSSHPrivateKey' => 'applications/auth/sshkey/PhabricatorAuthSSHPrivateKey.php', + 'PhabricatorAuthSSHPrivateKeyException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyException.php', + 'PhabricatorAuthSSHPrivateKeyFormatException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyFormatException.php', + 'PhabricatorAuthSSHPrivateKeyIncorrectPassphraseException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyIncorrectPassphraseException.php', + 'PhabricatorAuthSSHPrivateKeyMissingPassphraseException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyMissingPassphraseException.php', + 'PhabricatorAuthSSHPrivateKeyPassphraseException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyPassphraseException.php', + 'PhabricatorAuthSSHPrivateKeySurplusPassphraseException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeySurplusPassphraseException.php', + 'PhabricatorAuthSSHPrivateKeyUnknownException' => 'applications/auth/exception/privatekey/PhabricatorAuthSSHPrivateKeyUnknownException.php', + 'PhabricatorAuthSSHPublicKey' => 'applications/auth/sshkey/PhabricatorAuthSSHPublicKey.php', + 'PhabricatorAuthSSHRevoker' => 'applications/auth/revoker/PhabricatorAuthSSHRevoker.php', + 'PhabricatorAuthSession' => 'applications/auth/storage/PhabricatorAuthSession.php', + 'PhabricatorAuthSessionEngine' => 'applications/auth/engine/PhabricatorAuthSessionEngine.php', + 'PhabricatorAuthSessionEngineExtension' => 'applications/auth/engine/PhabricatorAuthSessionEngineExtension.php', + 'PhabricatorAuthSessionEngineExtensionModule' => 'applications/auth/engine/PhabricatorAuthSessionEngineExtensionModule.php', + 'PhabricatorAuthSessionGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthSessionGarbageCollector.php', + 'PhabricatorAuthSessionInfo' => 'applications/auth/data/PhabricatorAuthSessionInfo.php', + 'PhabricatorAuthSessionPHIDType' => 'applications/auth/phid/PhabricatorAuthSessionPHIDType.php', + 'PhabricatorAuthSessionQuery' => 'applications/auth/query/PhabricatorAuthSessionQuery.php', + 'PhabricatorAuthSessionRevoker' => 'applications/auth/revoker/PhabricatorAuthSessionRevoker.php', + 'PhabricatorAuthSetExternalController' => 'applications/auth/controller/PhabricatorAuthSetExternalController.php', + 'PhabricatorAuthSetPasswordController' => 'applications/auth/controller/PhabricatorAuthSetPasswordController.php', + 'PhabricatorAuthSetupCheck' => 'applications/config/check/PhabricatorAuthSetupCheck.php', + 'PhabricatorAuthStartController' => 'applications/auth/controller/PhabricatorAuthStartController.php', + 'PhabricatorAuthTemporaryToken' => 'applications/auth/storage/PhabricatorAuthTemporaryToken.php', + 'PhabricatorAuthTemporaryTokenGarbageCollector' => 'applications/auth/garbagecollector/PhabricatorAuthTemporaryTokenGarbageCollector.php', + 'PhabricatorAuthTemporaryTokenQuery' => 'applications/auth/query/PhabricatorAuthTemporaryTokenQuery.php', + 'PhabricatorAuthTemporaryTokenRevoker' => 'applications/auth/revoker/PhabricatorAuthTemporaryTokenRevoker.php', + 'PhabricatorAuthTemporaryTokenType' => 'applications/auth/tokentype/PhabricatorAuthTemporaryTokenType.php', + 'PhabricatorAuthTemporaryTokenTypeModule' => 'applications/auth/tokentype/PhabricatorAuthTemporaryTokenTypeModule.php', + 'PhabricatorAuthTerminateSessionController' => 'applications/auth/controller/PhabricatorAuthTerminateSessionController.php', + 'PhabricatorAuthTestSMSAction' => 'applications/auth/action/PhabricatorAuthTestSMSAction.php', + 'PhabricatorAuthTryEmailLoginAction' => 'applications/auth/action/PhabricatorAuthTryEmailLoginAction.php', + 'PhabricatorAuthTryFactorAction' => 'applications/auth/action/PhabricatorAuthTryFactorAction.php', + 'PhabricatorAuthTryPasswordAction' => 'applications/auth/action/PhabricatorAuthTryPasswordAction.php', + 'PhabricatorAuthTryPasswordWithoutCAPTCHAAction' => 'applications/auth/action/PhabricatorAuthTryPasswordWithoutCAPTCHAAction.php', + 'PhabricatorAuthUnlinkController' => 'applications/auth/controller/PhabricatorAuthUnlinkController.php', + 'PhabricatorAuthValidateController' => 'applications/auth/controller/PhabricatorAuthValidateController.php', + 'PhabricatorAuthWaitForApprovalMessageType' => 'applications/auth/message/PhabricatorAuthWaitForApprovalMessageType.php', + 'PhabricatorAuthWelcomeMailMessageType' => 'applications/auth/message/PhabricatorAuthWelcomeMailMessageType.php', + 'PhabricatorAuthenticationConfigOptions' => 'applications/config/option/PhabricatorAuthenticationConfigOptions.php', + 'PhabricatorAutoEventListener' => 'infrastructure/events/PhabricatorAutoEventListener.php', + 'PhabricatorBadgesApplication' => 'applications/badges/application/PhabricatorBadgesApplication.php', + 'PhabricatorBadgesArchiveController' => 'applications/badges/controller/PhabricatorBadgesArchiveController.php', + 'PhabricatorBadgesAward' => 'applications/badges/storage/PhabricatorBadgesAward.php', + 'PhabricatorBadgesAwardController' => 'applications/badges/controller/PhabricatorBadgesAwardController.php', + 'PhabricatorBadgesAwardQuery' => 'applications/badges/query/PhabricatorBadgesAwardQuery.php', + 'PhabricatorBadgesAwardTestDataGenerator' => 'applications/badges/lipsum/PhabricatorBadgesAwardTestDataGenerator.php', + 'PhabricatorBadgesBadge' => 'applications/badges/storage/PhabricatorBadgesBadge.php', + 'PhabricatorBadgesBadgeAwardTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeAwardTransaction.php', + 'PhabricatorBadgesBadgeDescriptionTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeDescriptionTransaction.php', + 'PhabricatorBadgesBadgeFlavorTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeFlavorTransaction.php', + 'PhabricatorBadgesBadgeIconTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeIconTransaction.php', + 'PhabricatorBadgesBadgeNameNgrams' => 'applications/badges/storage/PhabricatorBadgesBadgeNameNgrams.php', + 'PhabricatorBadgesBadgeNameTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeNameTransaction.php', + 'PhabricatorBadgesBadgeQualityTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeQualityTransaction.php', + 'PhabricatorBadgesBadgeRevokeTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeRevokeTransaction.php', + 'PhabricatorBadgesBadgeStatusTransaction' => 'applications/badges/xaction/PhabricatorBadgesBadgeStatusTransaction.php', + 'PhabricatorBadgesBadgeTestDataGenerator' => 'applications/badges/lipsum/PhabricatorBadgesBadgeTestDataGenerator.php', + 'PhabricatorBadgesBadgeTransactionType' => 'applications/badges/xaction/PhabricatorBadgesBadgeTransactionType.php', + 'PhabricatorBadgesCommentController' => 'applications/badges/controller/PhabricatorBadgesCommentController.php', + 'PhabricatorBadgesController' => 'applications/badges/controller/PhabricatorBadgesController.php', + 'PhabricatorBadgesCreateCapability' => 'applications/badges/capability/PhabricatorBadgesCreateCapability.php', + 'PhabricatorBadgesDAO' => 'applications/badges/storage/PhabricatorBadgesDAO.php', + 'PhabricatorBadgesDatasource' => 'applications/badges/typeahead/PhabricatorBadgesDatasource.php', + 'PhabricatorBadgesDefaultEditCapability' => 'applications/badges/capability/PhabricatorBadgesDefaultEditCapability.php', + 'PhabricatorBadgesEditConduitAPIMethod' => 'applications/badges/conduit/PhabricatorBadgesEditConduitAPIMethod.php', + 'PhabricatorBadgesEditController' => 'applications/badges/controller/PhabricatorBadgesEditController.php', + 'PhabricatorBadgesEditEngine' => 'applications/badges/editor/PhabricatorBadgesEditEngine.php', + 'PhabricatorBadgesEditRecipientsController' => 'applications/badges/controller/PhabricatorBadgesEditRecipientsController.php', + 'PhabricatorBadgesEditor' => 'applications/badges/editor/PhabricatorBadgesEditor.php', + 'PhabricatorBadgesIconSet' => 'applications/badges/icon/PhabricatorBadgesIconSet.php', + 'PhabricatorBadgesListController' => 'applications/badges/controller/PhabricatorBadgesListController.php', + 'PhabricatorBadgesLootContextFreeGrammar' => 'applications/badges/lipsum/PhabricatorBadgesLootContextFreeGrammar.php', + 'PhabricatorBadgesMailReceiver' => 'applications/badges/mail/PhabricatorBadgesMailReceiver.php', + 'PhabricatorBadgesPHIDType' => 'applications/badges/phid/PhabricatorBadgesPHIDType.php', + 'PhabricatorBadgesProfileController' => 'applications/badges/controller/PhabricatorBadgesProfileController.php', + 'PhabricatorBadgesQuality' => 'applications/badges/constants/PhabricatorBadgesQuality.php', + 'PhabricatorBadgesQuery' => 'applications/badges/query/PhabricatorBadgesQuery.php', + 'PhabricatorBadgesRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRecipientsController.php', + 'PhabricatorBadgesRecipientsListView' => 'applications/badges/view/PhabricatorBadgesRecipientsListView.php', + 'PhabricatorBadgesRemoveRecipientsController' => 'applications/badges/controller/PhabricatorBadgesRemoveRecipientsController.php', + 'PhabricatorBadgesReplyHandler' => 'applications/badges/mail/PhabricatorBadgesReplyHandler.php', + 'PhabricatorBadgesSchemaSpec' => 'applications/badges/storage/PhabricatorBadgesSchemaSpec.php', + 'PhabricatorBadgesSearchConduitAPIMethod' => 'applications/badges/conduit/PhabricatorBadgesSearchConduitAPIMethod.php', + 'PhabricatorBadgesSearchEngine' => 'applications/badges/query/PhabricatorBadgesSearchEngine.php', + 'PhabricatorBadgesTransaction' => 'applications/badges/storage/PhabricatorBadgesTransaction.php', + 'PhabricatorBadgesTransactionComment' => 'applications/badges/storage/PhabricatorBadgesTransactionComment.php', + 'PhabricatorBadgesTransactionQuery' => 'applications/badges/query/PhabricatorBadgesTransactionQuery.php', + 'PhabricatorBadgesViewController' => 'applications/badges/controller/PhabricatorBadgesViewController.php', + 'PhabricatorBarePageView' => 'view/page/PhabricatorBarePageView.php', + 'PhabricatorBaseURISetupCheck' => 'applications/config/check/PhabricatorBaseURISetupCheck.php', + 'PhabricatorBcryptPasswordHasher' => 'infrastructure/util/password/PhabricatorBcryptPasswordHasher.php', + 'PhabricatorBinariesSetupCheck' => 'applications/config/check/PhabricatorBinariesSetupCheck.php', + 'PhabricatorBitbucketAuthProvider' => 'applications/auth/provider/PhabricatorBitbucketAuthProvider.php', + 'PhabricatorBoardColumnsSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorBoardColumnsSearchEngineAttachment.php', + 'PhabricatorBoardLayoutEngine' => 'applications/project/engine/PhabricatorBoardLayoutEngine.php', + 'PhabricatorBoardRenderingEngine' => 'applications/project/engine/PhabricatorBoardRenderingEngine.php', + 'PhabricatorBoardResponseEngine' => 'applications/project/engine/PhabricatorBoardResponseEngine.php', + 'PhabricatorBoolConfigType' => 'applications/config/type/PhabricatorBoolConfigType.php', + 'PhabricatorBoolEditField' => 'applications/transactions/editfield/PhabricatorBoolEditField.php', + 'PhabricatorBoolMailStamp' => 'applications/metamta/stamp/PhabricatorBoolMailStamp.php', + 'PhabricatorBritishEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorBritishEnglishTranslation.php', + 'PhabricatorBuiltinDraftEngine' => 'applications/transactions/draft/PhabricatorBuiltinDraftEngine.php', + 'PhabricatorBuiltinFileCachePurger' => 'applications/cache/purger/PhabricatorBuiltinFileCachePurger.php', + 'PhabricatorBuiltinPatchList' => 'infrastructure/storage/patch/PhabricatorBuiltinPatchList.php', + 'PhabricatorBulkContentSource' => 'infrastructure/daemon/contentsource/PhabricatorBulkContentSource.php', + 'PhabricatorBulkEditGroup' => 'applications/transactions/bulk/PhabricatorBulkEditGroup.php', + 'PhabricatorBulkEngine' => 'applications/transactions/bulk/PhabricatorBulkEngine.php', + 'PhabricatorBulkManagementExportWorkflow' => 'applications/transactions/bulk/management/PhabricatorBulkManagementExportWorkflow.php', + 'PhabricatorBulkManagementMakeSilentWorkflow' => 'applications/transactions/bulk/management/PhabricatorBulkManagementMakeSilentWorkflow.php', + 'PhabricatorBulkManagementWorkflow' => 'applications/transactions/bulk/management/PhabricatorBulkManagementWorkflow.php', + 'PhabricatorCSVExportFormat' => 'infrastructure/export/format/PhabricatorCSVExportFormat.php', + 'PhabricatorCacheDAO' => 'applications/cache/storage/PhabricatorCacheDAO.php', + 'PhabricatorCacheEngine' => 'applications/system/engine/PhabricatorCacheEngine.php', + 'PhabricatorCacheEngineExtension' => 'applications/system/engine/PhabricatorCacheEngineExtension.php', + 'PhabricatorCacheGeneralGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheGeneralGarbageCollector.php', + 'PhabricatorCacheManagementPurgeWorkflow' => 'applications/cache/management/PhabricatorCacheManagementPurgeWorkflow.php', + 'PhabricatorCacheManagementWorkflow' => 'applications/cache/management/PhabricatorCacheManagementWorkflow.php', + 'PhabricatorCacheMarkupGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheMarkupGarbageCollector.php', + 'PhabricatorCachePurger' => 'applications/cache/purger/PhabricatorCachePurger.php', + 'PhabricatorCacheSchemaSpec' => 'applications/cache/storage/PhabricatorCacheSchemaSpec.php', + 'PhabricatorCacheSetupCheck' => 'applications/config/check/PhabricatorCacheSetupCheck.php', + 'PhabricatorCacheSpec' => 'applications/cache/spec/PhabricatorCacheSpec.php', + 'PhabricatorCacheTTLGarbageCollector' => 'applications/cache/garbagecollector/PhabricatorCacheTTLGarbageCollector.php', + 'PhabricatorCachedClassMapQuery' => 'applications/cache/PhabricatorCachedClassMapQuery.php', + 'PhabricatorCaches' => 'applications/cache/PhabricatorCaches.php', + 'PhabricatorCachesTestCase' => 'applications/cache/__tests__/PhabricatorCachesTestCase.php', + 'PhabricatorCalendarApplication' => 'applications/calendar/application/PhabricatorCalendarApplication.php', 'PhabricatorCalendarController' => 'applications/calendar/controller/PhabricatorCalendarController.php', 'PhabricatorCalendarDAO' => 'applications/calendar/storage/PhabricatorCalendarDAO.php', - 'PhabricatorCalendarHoliday' => 'applications/calendar/storage/PhabricatorCalendarHoliday.php', - 'PhabricatorCalendarHolidayTestCase' => 'applications/calendar/storage/__tests__/PhabricatorCalendarHolidayTestCase.php', + 'PhabricatorCalendarEvent' => 'applications/calendar/storage/PhabricatorCalendarEvent.php', + 'PhabricatorCalendarEventAcceptTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventAcceptTransaction.php', + 'PhabricatorCalendarEventAllDayTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventAllDayTransaction.php', + 'PhabricatorCalendarEventAvailabilityController' => 'applications/calendar/controller/PhabricatorCalendarEventAvailabilityController.php', + 'PhabricatorCalendarEventCancelController' => 'applications/calendar/controller/PhabricatorCalendarEventCancelController.php', + 'PhabricatorCalendarEventCancelTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventCancelTransaction.php', + 'PhabricatorCalendarEventDateTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventDateTransaction.php', + 'PhabricatorCalendarEventDeclineTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventDeclineTransaction.php', + 'PhabricatorCalendarEventDefaultEditCapability' => 'applications/calendar/capability/PhabricatorCalendarEventDefaultEditCapability.php', + 'PhabricatorCalendarEventDefaultViewCapability' => 'applications/calendar/capability/PhabricatorCalendarEventDefaultViewCapability.php', + 'PhabricatorCalendarEventDescriptionTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventDescriptionTransaction.php', + 'PhabricatorCalendarEventDragController' => 'applications/calendar/controller/PhabricatorCalendarEventDragController.php', + 'PhabricatorCalendarEventEditConduitAPIMethod' => 'applications/calendar/conduit/PhabricatorCalendarEventEditConduitAPIMethod.php', + 'PhabricatorCalendarEventEditController' => 'applications/calendar/controller/PhabricatorCalendarEventEditController.php', + 'PhabricatorCalendarEventEditEngine' => 'applications/calendar/editor/PhabricatorCalendarEventEditEngine.php', + 'PhabricatorCalendarEventEditor' => 'applications/calendar/editor/PhabricatorCalendarEventEditor.php', + 'PhabricatorCalendarEventEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventEmailCommand.php', + 'PhabricatorCalendarEventEndDateTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventEndDateTransaction.php', + 'PhabricatorCalendarEventExportController' => 'applications/calendar/controller/PhabricatorCalendarEventExportController.php', + 'PhabricatorCalendarEventFerretEngine' => 'applications/calendar/search/PhabricatorCalendarEventFerretEngine.php', + 'PhabricatorCalendarEventForkTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventForkTransaction.php', + 'PhabricatorCalendarEventFrequencyTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventFrequencyTransaction.php', + 'PhabricatorCalendarEventFulltextEngine' => 'applications/calendar/search/PhabricatorCalendarEventFulltextEngine.php', + 'PhabricatorCalendarEventHeraldAdapter' => 'applications/calendar/herald/PhabricatorCalendarEventHeraldAdapter.php', + 'PhabricatorCalendarEventHeraldField' => 'applications/calendar/herald/PhabricatorCalendarEventHeraldField.php', + 'PhabricatorCalendarEventHeraldFieldGroup' => 'applications/calendar/herald/PhabricatorCalendarEventHeraldFieldGroup.php', + 'PhabricatorCalendarEventHostPolicyRule' => 'applications/calendar/policyrule/PhabricatorCalendarEventHostPolicyRule.php', + 'PhabricatorCalendarEventHostTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventHostTransaction.php', + 'PhabricatorCalendarEventIconTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventIconTransaction.php', + 'PhabricatorCalendarEventInviteTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventInviteTransaction.php', + 'PhabricatorCalendarEventInvitee' => 'applications/calendar/storage/PhabricatorCalendarEventInvitee.php', + 'PhabricatorCalendarEventInviteeQuery' => 'applications/calendar/query/PhabricatorCalendarEventInviteeQuery.php', + 'PhabricatorCalendarEventInviteesPolicyRule' => 'applications/calendar/policyrule/PhabricatorCalendarEventInviteesPolicyRule.php', + 'PhabricatorCalendarEventJoinController' => 'applications/calendar/controller/PhabricatorCalendarEventJoinController.php', + 'PhabricatorCalendarEventListController' => 'applications/calendar/controller/PhabricatorCalendarEventListController.php', + 'PhabricatorCalendarEventMailReceiver' => 'applications/calendar/mail/PhabricatorCalendarEventMailReceiver.php', + 'PhabricatorCalendarEventNameHeraldField' => 'applications/calendar/herald/PhabricatorCalendarEventNameHeraldField.php', + 'PhabricatorCalendarEventNameTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventNameTransaction.php', + 'PhabricatorCalendarEventNotificationView' => 'applications/calendar/notifications/PhabricatorCalendarEventNotificationView.php', + 'PhabricatorCalendarEventPHIDType' => 'applications/calendar/phid/PhabricatorCalendarEventPHIDType.php', + 'PhabricatorCalendarEventPolicyCodex' => 'applications/calendar/codex/PhabricatorCalendarEventPolicyCodex.php', + 'PhabricatorCalendarEventQuery' => 'applications/calendar/query/PhabricatorCalendarEventQuery.php', + 'PhabricatorCalendarEventRSVPEmailCommand' => 'applications/calendar/command/PhabricatorCalendarEventRSVPEmailCommand.php', + 'PhabricatorCalendarEventRecurringTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventRecurringTransaction.php', + 'PhabricatorCalendarEventReplyTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventReplyTransaction.php', + 'PhabricatorCalendarEventSearchConduitAPIMethod' => 'applications/calendar/conduit/PhabricatorCalendarEventSearchConduitAPIMethod.php', + 'PhabricatorCalendarEventSearchEngine' => 'applications/calendar/query/PhabricatorCalendarEventSearchEngine.php', + 'PhabricatorCalendarEventStartDateTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventStartDateTransaction.php', + 'PhabricatorCalendarEventTransaction' => 'applications/calendar/storage/PhabricatorCalendarEventTransaction.php', + 'PhabricatorCalendarEventTransactionComment' => 'applications/calendar/storage/PhabricatorCalendarEventTransactionComment.php', + 'PhabricatorCalendarEventTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarEventTransactionQuery.php', + 'PhabricatorCalendarEventTransactionType' => 'applications/calendar/xaction/PhabricatorCalendarEventTransactionType.php', + 'PhabricatorCalendarEventUntilDateTransaction' => 'applications/calendar/xaction/PhabricatorCalendarEventUntilDateTransaction.php', + 'PhabricatorCalendarEventViewController' => 'applications/calendar/controller/PhabricatorCalendarEventViewController.php', + 'PhabricatorCalendarExport' => 'applications/calendar/storage/PhabricatorCalendarExport.php', + 'PhabricatorCalendarExportDisableController' => 'applications/calendar/controller/PhabricatorCalendarExportDisableController.php', + 'PhabricatorCalendarExportDisableTransaction' => 'applications/calendar/xaction/PhabricatorCalendarExportDisableTransaction.php', + 'PhabricatorCalendarExportEditController' => 'applications/calendar/controller/PhabricatorCalendarExportEditController.php', + 'PhabricatorCalendarExportEditEngine' => 'applications/calendar/editor/PhabricatorCalendarExportEditEngine.php', + 'PhabricatorCalendarExportEditor' => 'applications/calendar/editor/PhabricatorCalendarExportEditor.php', + 'PhabricatorCalendarExportICSController' => 'applications/calendar/controller/PhabricatorCalendarExportICSController.php', + 'PhabricatorCalendarExportListController' => 'applications/calendar/controller/PhabricatorCalendarExportListController.php', + 'PhabricatorCalendarExportModeTransaction' => 'applications/calendar/xaction/PhabricatorCalendarExportModeTransaction.php', + 'PhabricatorCalendarExportNameTransaction' => 'applications/calendar/xaction/PhabricatorCalendarExportNameTransaction.php', + 'PhabricatorCalendarExportPHIDType' => 'applications/calendar/phid/PhabricatorCalendarExportPHIDType.php', + 'PhabricatorCalendarExportQuery' => 'applications/calendar/query/PhabricatorCalendarExportQuery.php', + 'PhabricatorCalendarExportQueryKeyTransaction' => 'applications/calendar/xaction/PhabricatorCalendarExportQueryKeyTransaction.php', + 'PhabricatorCalendarExportSearchEngine' => 'applications/calendar/query/PhabricatorCalendarExportSearchEngine.php', + 'PhabricatorCalendarExportTransaction' => 'applications/calendar/storage/PhabricatorCalendarExportTransaction.php', + 'PhabricatorCalendarExportTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarExportTransactionQuery.php', + 'PhabricatorCalendarExportTransactionType' => 'applications/calendar/xaction/PhabricatorCalendarExportTransactionType.php', + 'PhabricatorCalendarExportViewController' => 'applications/calendar/controller/PhabricatorCalendarExportViewController.php', + 'PhabricatorCalendarExternalInvitee' => 'applications/calendar/storage/PhabricatorCalendarExternalInvitee.php', + 'PhabricatorCalendarExternalInviteePHIDType' => 'applications/calendar/phid/PhabricatorCalendarExternalInviteePHIDType.php', + 'PhabricatorCalendarExternalInviteeQuery' => 'applications/calendar/query/PhabricatorCalendarExternalInviteeQuery.php', + 'PhabricatorCalendarICSFileImportEngine' => 'applications/calendar/import/PhabricatorCalendarICSFileImportEngine.php', + 'PhabricatorCalendarICSImportEngine' => 'applications/calendar/import/PhabricatorCalendarICSImportEngine.php', + 'PhabricatorCalendarICSURIImportEngine' => 'applications/calendar/import/PhabricatorCalendarICSURIImportEngine.php', + 'PhabricatorCalendarICSWriter' => 'applications/calendar/util/PhabricatorCalendarICSWriter.php', + 'PhabricatorCalendarIconSet' => 'applications/calendar/icon/PhabricatorCalendarIconSet.php', + 'PhabricatorCalendarImport' => 'applications/calendar/storage/PhabricatorCalendarImport.php', + 'PhabricatorCalendarImportDefaultLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportDefaultLogType.php', + 'PhabricatorCalendarImportDeleteController' => 'applications/calendar/controller/PhabricatorCalendarImportDeleteController.php', + 'PhabricatorCalendarImportDeleteLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportDeleteLogType.php', + 'PhabricatorCalendarImportDeleteTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportDeleteTransaction.php', + 'PhabricatorCalendarImportDisableController' => 'applications/calendar/controller/PhabricatorCalendarImportDisableController.php', + 'PhabricatorCalendarImportDisableTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportDisableTransaction.php', + 'PhabricatorCalendarImportDropController' => 'applications/calendar/controller/PhabricatorCalendarImportDropController.php', + 'PhabricatorCalendarImportDuplicateLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportDuplicateLogType.php', + 'PhabricatorCalendarImportEditController' => 'applications/calendar/controller/PhabricatorCalendarImportEditController.php', + 'PhabricatorCalendarImportEditEngine' => 'applications/calendar/editor/PhabricatorCalendarImportEditEngine.php', + 'PhabricatorCalendarImportEditor' => 'applications/calendar/editor/PhabricatorCalendarImportEditor.php', + 'PhabricatorCalendarImportEmptyLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportEmptyLogType.php', + 'PhabricatorCalendarImportEngine' => 'applications/calendar/import/PhabricatorCalendarImportEngine.php', + 'PhabricatorCalendarImportEpochLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportEpochLogType.php', + 'PhabricatorCalendarImportFetchLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportFetchLogType.php', + 'PhabricatorCalendarImportFrequencyLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportFrequencyLogType.php', + 'PhabricatorCalendarImportFrequencyTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportFrequencyTransaction.php', + 'PhabricatorCalendarImportICSFileTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportICSFileTransaction.php', + 'PhabricatorCalendarImportICSLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportICSLogType.php', + 'PhabricatorCalendarImportICSURITransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportICSURITransaction.php', + 'PhabricatorCalendarImportICSWarningLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportICSWarningLogType.php', + 'PhabricatorCalendarImportIgnoredNodeLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportIgnoredNodeLogType.php', + 'PhabricatorCalendarImportListController' => 'applications/calendar/controller/PhabricatorCalendarImportListController.php', + 'PhabricatorCalendarImportLog' => 'applications/calendar/storage/PhabricatorCalendarImportLog.php', + 'PhabricatorCalendarImportLogListController' => 'applications/calendar/controller/PhabricatorCalendarImportLogListController.php', + 'PhabricatorCalendarImportLogQuery' => 'applications/calendar/query/PhabricatorCalendarImportLogQuery.php', + 'PhabricatorCalendarImportLogSearchEngine' => 'applications/calendar/query/PhabricatorCalendarImportLogSearchEngine.php', + 'PhabricatorCalendarImportLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportLogType.php', + 'PhabricatorCalendarImportLogView' => 'applications/calendar/view/PhabricatorCalendarImportLogView.php', + 'PhabricatorCalendarImportNameTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportNameTransaction.php', + 'PhabricatorCalendarImportOriginalLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportOriginalLogType.php', + 'PhabricatorCalendarImportOrphanLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportOrphanLogType.php', + 'PhabricatorCalendarImportPHIDType' => 'applications/calendar/phid/PhabricatorCalendarImportPHIDType.php', + 'PhabricatorCalendarImportQuery' => 'applications/calendar/query/PhabricatorCalendarImportQuery.php', + 'PhabricatorCalendarImportQueueLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportQueueLogType.php', + 'PhabricatorCalendarImportReloadController' => 'applications/calendar/controller/PhabricatorCalendarImportReloadController.php', + 'PhabricatorCalendarImportReloadTransaction' => 'applications/calendar/xaction/PhabricatorCalendarImportReloadTransaction.php', + 'PhabricatorCalendarImportReloadWorker' => 'applications/calendar/worker/PhabricatorCalendarImportReloadWorker.php', + 'PhabricatorCalendarImportSearchEngine' => 'applications/calendar/query/PhabricatorCalendarImportSearchEngine.php', + 'PhabricatorCalendarImportTransaction' => 'applications/calendar/storage/PhabricatorCalendarImportTransaction.php', + 'PhabricatorCalendarImportTransactionQuery' => 'applications/calendar/query/PhabricatorCalendarImportTransactionQuery.php', + 'PhabricatorCalendarImportTransactionType' => 'applications/calendar/xaction/PhabricatorCalendarImportTransactionType.php', + 'PhabricatorCalendarImportTriggerLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportTriggerLogType.php', + 'PhabricatorCalendarImportUpdateLogType' => 'applications/calendar/importlog/PhabricatorCalendarImportUpdateLogType.php', + 'PhabricatorCalendarImportViewController' => 'applications/calendar/controller/PhabricatorCalendarImportViewController.php', + 'PhabricatorCalendarInviteeDatasource' => 'applications/calendar/typeahead/PhabricatorCalendarInviteeDatasource.php', + 'PhabricatorCalendarInviteeUserDatasource' => 'applications/calendar/typeahead/PhabricatorCalendarInviteeUserDatasource.php', + 'PhabricatorCalendarInviteeViewerFunctionDatasource' => 'applications/calendar/typeahead/PhabricatorCalendarInviteeViewerFunctionDatasource.php', + 'PhabricatorCalendarManagementNotifyWorkflow' => 'applications/calendar/management/PhabricatorCalendarManagementNotifyWorkflow.php', + 'PhabricatorCalendarManagementReloadWorkflow' => 'applications/calendar/management/PhabricatorCalendarManagementReloadWorkflow.php', + 'PhabricatorCalendarManagementWorkflow' => 'applications/calendar/management/PhabricatorCalendarManagementWorkflow.php', + 'PhabricatorCalendarNotification' => 'applications/calendar/storage/PhabricatorCalendarNotification.php', + 'PhabricatorCalendarNotificationEngine' => 'applications/calendar/notifications/PhabricatorCalendarNotificationEngine.php', + 'PhabricatorCalendarRemarkupRule' => 'applications/calendar/remarkup/PhabricatorCalendarRemarkupRule.php', + 'PhabricatorCalendarReplyHandler' => 'applications/calendar/mail/PhabricatorCalendarReplyHandler.php', + 'PhabricatorCalendarSchemaSpec' => 'applications/calendar/storage/PhabricatorCalendarSchemaSpec.php', + 'PhabricatorCelerityApplication' => 'applications/celerity/application/PhabricatorCelerityApplication.php', + 'PhabricatorCelerityTestCase' => '__tests__/PhabricatorCelerityTestCase.php', + 'PhabricatorChangeParserTestCase' => 'applications/repository/worker/__tests__/PhabricatorChangeParserTestCase.php', + 'PhabricatorChangePasswordUserLogType' => 'applications/people/userlog/PhabricatorChangePasswordUserLogType.php', + 'PhabricatorChangesetCachePurger' => 'applications/cache/purger/PhabricatorChangesetCachePurger.php', 'PhabricatorChangesetResponse' => 'infrastructure/diff/PhabricatorChangesetResponse.php', + 'PhabricatorChangesetViewState' => 'infrastructure/diff/viewstate/PhabricatorChangesetViewState.php', + 'PhabricatorChangesetViewStateEngine' => 'infrastructure/diff/viewstate/PhabricatorChangesetViewStateEngine.php', + 'PhabricatorChartAxis' => 'applications/fact/chart/PhabricatorChartAxis.php', + 'PhabricatorChartDataQuery' => 'applications/fact/chart/PhabricatorChartDataQuery.php', + 'PhabricatorChartDataset' => 'applications/fact/chart/PhabricatorChartDataset.php', + 'PhabricatorChartDisplayData' => 'applications/fact/chart/PhabricatorChartDisplayData.php', + 'PhabricatorChartEngine' => 'applications/fact/engine/PhabricatorChartEngine.php', + 'PhabricatorChartFunction' => 'applications/fact/chart/PhabricatorChartFunction.php', + 'PhabricatorChartFunctionArgument' => 'applications/fact/chart/PhabricatorChartFunctionArgument.php', + 'PhabricatorChartFunctionArgumentParser' => 'applications/fact/chart/PhabricatorChartFunctionArgumentParser.php', + 'PhabricatorChartFunctionLabel' => 'applications/fact/chart/PhabricatorChartFunctionLabel.php', + 'PhabricatorChartInterval' => 'applications/fact/chart/PhabricatorChartInterval.php', + 'PhabricatorChartRenderingEngine' => 'applications/fact/engine/PhabricatorChartRenderingEngine.php', + 'PhabricatorChartStackedAreaDataset' => 'applications/fact/chart/PhabricatorChartStackedAreaDataset.php', + 'PhabricatorChatLogApplication' => 'applications/chatlog/application/PhabricatorChatLogApplication.php', + 'PhabricatorChatLogChannel' => 'applications/chatlog/storage/PhabricatorChatLogChannel.php', 'PhabricatorChatLogChannelListController' => 'applications/chatlog/controller/PhabricatorChatLogChannelListController.php', 'PhabricatorChatLogChannelLogController' => 'applications/chatlog/controller/PhabricatorChatLogChannelLogController.php', - 'PhabricatorChatLogConstants' => 'applications/chatlog/constants/PhabricatorChatLogConstants.php', + 'PhabricatorChatLogChannelQuery' => 'applications/chatlog/query/PhabricatorChatLogChannelQuery.php', 'PhabricatorChatLogController' => 'applications/chatlog/controller/PhabricatorChatLogController.php', 'PhabricatorChatLogDAO' => 'applications/chatlog/storage/PhabricatorChatLogDAO.php', 'PhabricatorChatLogEvent' => 'applications/chatlog/storage/PhabricatorChatLogEvent.php', - 'PhabricatorChatLogEventType' => 'applications/chatlog/constants/PhabricatorChatLogEventType.php', - 'PhabricatorChatLogQuery' => 'applications/chatlog/PhabricatorChatLogQuery.php', + 'PhabricatorChatLogQuery' => 'applications/chatlog/query/PhabricatorChatLogQuery.php', + 'PhabricatorCheckboxesEditField' => 'applications/transactions/editfield/PhabricatorCheckboxesEditField.php', + 'PhabricatorChunkedFileStorageEngine' => 'applications/files/engine/PhabricatorChunkedFileStorageEngine.php', + 'PhabricatorClassConfigType' => 'applications/config/type/PhabricatorClassConfigType.php', + 'PhabricatorClusterConfigOptions' => 'applications/config/option/PhabricatorClusterConfigOptions.php', + 'PhabricatorClusterDatabasesConfigType' => 'infrastructure/cluster/config/PhabricatorClusterDatabasesConfigType.php', + 'PhabricatorClusterException' => 'infrastructure/cluster/exception/PhabricatorClusterException.php', + 'PhabricatorClusterExceptionHandler' => 'infrastructure/cluster/exception/PhabricatorClusterExceptionHandler.php', + 'PhabricatorClusterImpossibleWriteException' => 'infrastructure/cluster/exception/PhabricatorClusterImpossibleWriteException.php', + 'PhabricatorClusterImproperWriteException' => 'infrastructure/cluster/exception/PhabricatorClusterImproperWriteException.php', + 'PhabricatorClusterMailersConfigType' => 'infrastructure/cluster/config/PhabricatorClusterMailersConfigType.php', + 'PhabricatorClusterNoHostForRoleException' => 'infrastructure/cluster/exception/PhabricatorClusterNoHostForRoleException.php', + 'PhabricatorClusterSearchConfigType' => 'infrastructure/cluster/config/PhabricatorClusterSearchConfigType.php', + 'PhabricatorClusterServiceHealthRecord' => 'infrastructure/cluster/PhabricatorClusterServiceHealthRecord.php', + 'PhabricatorClusterStrandedException' => 'infrastructure/cluster/exception/PhabricatorClusterStrandedException.php', + 'PhabricatorColumnProxyInterface' => 'applications/project/interface/PhabricatorColumnProxyInterface.php', + 'PhabricatorColumnsEditField' => 'applications/transactions/editfield/PhabricatorColumnsEditField.php', + 'PhabricatorCommentEditEngineExtension' => 'applications/transactions/engineextension/PhabricatorCommentEditEngineExtension.php', + 'PhabricatorCommentEditField' => 'applications/transactions/editfield/PhabricatorCommentEditField.php', + 'PhabricatorCommentEditType' => 'applications/transactions/edittype/PhabricatorCommentEditType.php', + 'PhabricatorCommitBranchesField' => 'applications/repository/customfield/PhabricatorCommitBranchesField.php', + 'PhabricatorCommitCustomField' => 'applications/repository/customfield/PhabricatorCommitCustomField.php', + 'PhabricatorCommitMergedCommitsField' => 'applications/repository/customfield/PhabricatorCommitMergedCommitsField.php', + 'PhabricatorCommitRepositoryField' => 'applications/repository/customfield/PhabricatorCommitRepositoryField.php', + 'PhabricatorCommitSearchEngine' => 'applications/audit/query/PhabricatorCommitSearchEngine.php', + 'PhabricatorCommitTagsField' => 'applications/repository/customfield/PhabricatorCommitTagsField.php', + 'PhabricatorCommonPasswords' => 'applications/auth/constants/PhabricatorCommonPasswords.php', + 'PhabricatorComposeChartFunction' => 'applications/fact/chart/PhabricatorComposeChartFunction.php', 'PhabricatorConduitAPIController' => 'applications/conduit/controller/PhabricatorConduitAPIController.php', + 'PhabricatorConduitApplication' => 'applications/conduit/application/PhabricatorConduitApplication.php', + 'PhabricatorConduitCallManagementWorkflow' => 'applications/conduit/management/PhabricatorConduitCallManagementWorkflow.php', + 'PhabricatorConduitCertificateFailureUserLogType' => 'applications/people/userlog/PhabricatorConduitCertificateFailureUserLogType.php', 'PhabricatorConduitCertificateToken' => 'applications/conduit/storage/PhabricatorConduitCertificateToken.php', - 'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/PhabricatorConduitConnectionLog.php', + 'PhabricatorConduitCertificateUserLogType' => 'applications/people/userlog/PhabricatorConduitCertificateUserLogType.php', 'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php', + 'PhabricatorConduitContentSource' => 'infrastructure/contentsource/PhabricatorConduitContentSource.php', 'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php', 'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php', + 'PhabricatorConduitEditField' => 'applications/transactions/editfield/PhabricatorConduitEditField.php', 'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php', 'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php', + 'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php', + 'PhabricatorConduitLogSearchEngine' => 'applications/conduit/query/PhabricatorConduitLogSearchEngine.php', + 'PhabricatorConduitManagementWorkflow' => 'applications/conduit/management/PhabricatorConduitManagementWorkflow.php', 'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/PhabricatorConduitMethodCallLog.php', + 'PhabricatorConduitMethodQuery' => 'applications/conduit/query/PhabricatorConduitMethodQuery.php', + 'PhabricatorConduitRequestExceptionHandler' => 'aphront/handler/PhabricatorConduitRequestExceptionHandler.php', + 'PhabricatorConduitResultInterface' => 'applications/conduit/interface/PhabricatorConduitResultInterface.php', + 'PhabricatorConduitSearchEngine' => 'applications/conduit/query/PhabricatorConduitSearchEngine.php', + 'PhabricatorConduitSearchFieldSpecification' => 'applications/conduit/interface/PhabricatorConduitSearchFieldSpecification.php', + 'PhabricatorConduitTestCase' => '__tests__/PhabricatorConduitTestCase.php', + 'PhabricatorConduitToken' => 'applications/conduit/storage/PhabricatorConduitToken.php', 'PhabricatorConduitTokenController' => 'applications/conduit/controller/PhabricatorConduitTokenController.php', - 'PhabricatorContentSource' => 'applications/metamta/contentsource/PhabricatorContentSource.php', - 'PhabricatorContentSourceView' => 'applications/metamta/contentsource/PhabricatorContentSourceView.php', + 'PhabricatorConduitTokenEditController' => 'applications/conduit/controller/PhabricatorConduitTokenEditController.php', + 'PhabricatorConduitTokenHandshakeController' => 'applications/conduit/controller/PhabricatorConduitTokenHandshakeController.php', + 'PhabricatorConduitTokenQuery' => 'applications/conduit/query/PhabricatorConduitTokenQuery.php', + 'PhabricatorConduitTokenTerminateController' => 'applications/conduit/controller/PhabricatorConduitTokenTerminateController.php', + 'PhabricatorConduitTokensSettingsPanel' => 'applications/conduit/settings/PhabricatorConduitTokensSettingsPanel.php', + 'PhabricatorConfigApplication' => 'applications/config/application/PhabricatorConfigApplication.php', + 'PhabricatorConfigCacheController' => 'applications/config/controller/services/PhabricatorConfigCacheController.php', + 'PhabricatorConfigClusterDatabasesController' => 'applications/config/controller/services/PhabricatorConfigClusterDatabasesController.php', + 'PhabricatorConfigClusterNotificationsController' => 'applications/config/controller/services/PhabricatorConfigClusterNotificationsController.php', + 'PhabricatorConfigClusterRepositoriesController' => 'applications/config/controller/services/PhabricatorConfigClusterRepositoriesController.php', + 'PhabricatorConfigClusterSearchController' => 'applications/config/controller/services/PhabricatorConfigClusterSearchController.php', + 'PhabricatorConfigCollectorsModule' => 'applications/config/module/PhabricatorConfigCollectorsModule.php', + 'PhabricatorConfigColumnSchema' => 'applications/config/schema/PhabricatorConfigColumnSchema.php', + 'PhabricatorConfigConfigPHIDType' => 'applications/config/phid/PhabricatorConfigConfigPHIDType.php', + 'PhabricatorConfigConsoleController' => 'applications/config/controller/PhabricatorConfigConsoleController.php', + 'PhabricatorConfigConstants' => 'applications/config/constants/PhabricatorConfigConstants.php', + 'PhabricatorConfigController' => 'applications/config/controller/PhabricatorConfigController.php', + 'PhabricatorConfigCoreSchemaSpec' => 'applications/config/schema/PhabricatorConfigCoreSchemaSpec.php', + 'PhabricatorConfigDatabaseController' => 'applications/config/controller/services/PhabricatorConfigDatabaseController.php', + 'PhabricatorConfigDatabaseIssueController' => 'applications/config/controller/services/PhabricatorConfigDatabaseIssueController.php', + 'PhabricatorConfigDatabaseSchema' => 'applications/config/schema/PhabricatorConfigDatabaseSchema.php', + 'PhabricatorConfigDatabaseSource' => 'infrastructure/env/PhabricatorConfigDatabaseSource.php', + 'PhabricatorConfigDatabaseStatusController' => 'applications/config/controller/services/PhabricatorConfigDatabaseStatusController.php', + 'PhabricatorConfigDefaultSource' => 'infrastructure/env/PhabricatorConfigDefaultSource.php', + 'PhabricatorConfigDictionarySource' => 'infrastructure/env/PhabricatorConfigDictionarySource.php', + 'PhabricatorConfigEdgeModule' => 'applications/config/module/PhabricatorConfigEdgeModule.php', + 'PhabricatorConfigEditController' => 'applications/config/controller/settings/PhabricatorConfigEditController.php', + 'PhabricatorConfigEditor' => 'applications/config/editor/PhabricatorConfigEditor.php', + 'PhabricatorConfigEntry' => 'applications/config/storage/PhabricatorConfigEntry.php', + 'PhabricatorConfigEntryDAO' => 'applications/config/storage/PhabricatorConfigEntryDAO.php', + 'PhabricatorConfigEntryQuery' => 'applications/config/query/PhabricatorConfigEntryQuery.php', + 'PhabricatorConfigFileSource' => 'infrastructure/env/PhabricatorConfigFileSource.php', + 'PhabricatorConfigGroupConstants' => 'applications/config/constants/PhabricatorConfigGroupConstants.php', + 'PhabricatorConfigHTTPParameterTypesModule' => 'applications/config/module/PhabricatorConfigHTTPParameterTypesModule.php', + 'PhabricatorConfigIgnoreController' => 'applications/config/controller/issue/PhabricatorConfigIgnoreController.php', + 'PhabricatorConfigIssueListController' => 'applications/config/controller/issue/PhabricatorConfigIssueListController.php', + 'PhabricatorConfigIssuePanelController' => 'applications/config/controller/issue/PhabricatorConfigIssuePanelController.php', + 'PhabricatorConfigIssueViewController' => 'applications/config/controller/issue/PhabricatorConfigIssueViewController.php', + 'PhabricatorConfigJSON' => 'applications/config/json/PhabricatorConfigJSON.php', + 'PhabricatorConfigJSONOptionType' => 'applications/config/custom/PhabricatorConfigJSONOptionType.php', + 'PhabricatorConfigKeySchema' => 'applications/config/schema/PhabricatorConfigKeySchema.php', + 'PhabricatorConfigLocalSource' => 'infrastructure/env/PhabricatorConfigLocalSource.php', + 'PhabricatorConfigManagementDeleteWorkflow' => 'applications/config/management/PhabricatorConfigManagementDeleteWorkflow.php', + 'PhabricatorConfigManagementDoneWorkflow' => 'applications/config/management/PhabricatorConfigManagementDoneWorkflow.php', + 'PhabricatorConfigManagementGetWorkflow' => 'applications/config/management/PhabricatorConfigManagementGetWorkflow.php', + 'PhabricatorConfigManagementListWorkflow' => 'applications/config/management/PhabricatorConfigManagementListWorkflow.php', + 'PhabricatorConfigManagementMigrateWorkflow' => 'applications/config/management/PhabricatorConfigManagementMigrateWorkflow.php', + 'PhabricatorConfigManagementSetWorkflow' => 'applications/config/management/PhabricatorConfigManagementSetWorkflow.php', + 'PhabricatorConfigManagementWorkflow' => 'applications/config/management/PhabricatorConfigManagementWorkflow.php', + 'PhabricatorConfigManualActivity' => 'applications/config/storage/PhabricatorConfigManualActivity.php', + 'PhabricatorConfigModule' => 'applications/config/module/PhabricatorConfigModule.php', + 'PhabricatorConfigModuleController' => 'applications/config/controller/module/PhabricatorConfigModuleController.php', + 'PhabricatorConfigOption' => 'applications/config/option/PhabricatorConfigOption.php', + 'PhabricatorConfigOptionType' => 'applications/config/custom/PhabricatorConfigOptionType.php', + 'PhabricatorConfigPHIDModule' => 'applications/config/module/PhabricatorConfigPHIDModule.php', + 'PhabricatorConfigProxySource' => 'infrastructure/env/PhabricatorConfigProxySource.php', + 'PhabricatorConfigPurgeCacheController' => 'applications/config/controller/services/PhabricatorConfigPurgeCacheController.php', + 'PhabricatorConfigRegexOptionType' => 'applications/config/custom/PhabricatorConfigRegexOptionType.php', + 'PhabricatorConfigRemarkupRule' => 'infrastructure/markup/rule/PhabricatorConfigRemarkupRule.php', + 'PhabricatorConfigRequestExceptionHandlerModule' => 'applications/config/module/PhabricatorConfigRequestExceptionHandlerModule.php', + 'PhabricatorConfigResponse' => 'applications/config/response/PhabricatorConfigResponse.php', + 'PhabricatorConfigSchemaQuery' => 'applications/config/schema/PhabricatorConfigSchemaQuery.php', + 'PhabricatorConfigSchemaSpec' => 'applications/config/schema/PhabricatorConfigSchemaSpec.php', + 'PhabricatorConfigServerSchema' => 'applications/config/schema/PhabricatorConfigServerSchema.php', + 'PhabricatorConfigServicesController' => 'applications/config/controller/services/PhabricatorConfigServicesController.php', + 'PhabricatorConfigSettingsController' => 'applications/config/controller/settings/PhabricatorConfigSettingsController.php', + 'PhabricatorConfigSettingsHistoryController' => 'applications/config/controller/settings/PhabricatorConfigSettingsHistoryController.php', + 'PhabricatorConfigSettingsListController' => 'applications/config/controller/settings/PhabricatorConfigSettingsListController.php', + 'PhabricatorConfigSetupCheckModule' => 'applications/config/module/PhabricatorConfigSetupCheckModule.php', + 'PhabricatorConfigSiteModule' => 'applications/config/module/PhabricatorConfigSiteModule.php', + 'PhabricatorConfigSiteSource' => 'infrastructure/env/PhabricatorConfigSiteSource.php', + 'PhabricatorConfigSource' => 'infrastructure/env/PhabricatorConfigSource.php', + 'PhabricatorConfigStackSource' => 'infrastructure/env/PhabricatorConfigStackSource.php', + 'PhabricatorConfigStorageSchema' => 'applications/config/schema/PhabricatorConfigStorageSchema.php', + 'PhabricatorConfigTableSchema' => 'applications/config/schema/PhabricatorConfigTableSchema.php', + 'PhabricatorConfigTransaction' => 'applications/config/storage/PhabricatorConfigTransaction.php', + 'PhabricatorConfigTransactionQuery' => 'applications/config/query/PhabricatorConfigTransactionQuery.php', + 'PhabricatorConfigType' => 'applications/config/type/PhabricatorConfigType.php', + 'PhabricatorConfigValidationException' => 'applications/config/exception/PhabricatorConfigValidationException.php', + 'PhabricatorConpherenceApplication' => 'applications/conpherence/application/PhabricatorConpherenceApplication.php', + 'PhabricatorConpherenceColumnMinimizeSetting' => 'applications/settings/setting/PhabricatorConpherenceColumnMinimizeSetting.php', + 'PhabricatorConpherenceColumnVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceColumnVisibleSetting.php', + 'PhabricatorConpherenceNotificationsSetting' => 'applications/settings/setting/PhabricatorConpherenceNotificationsSetting.php', + 'PhabricatorConpherencePreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorConpherencePreferencesSettingsPanel.php', + 'PhabricatorConpherenceProfileMenuItem' => 'applications/search/menuitem/PhabricatorConpherenceProfileMenuItem.php', + 'PhabricatorConpherenceRoomContextFreeGrammar' => 'applications/conpherence/lipsum/PhabricatorConpherenceRoomContextFreeGrammar.php', + 'PhabricatorConpherenceRoomTestDataGenerator' => 'applications/conpherence/lipsum/PhabricatorConpherenceRoomTestDataGenerator.php', + 'PhabricatorConpherenceSoundSetting' => 'applications/settings/setting/PhabricatorConpherenceSoundSetting.php', + 'PhabricatorConpherenceThreadPHIDType' => 'applications/conpherence/phid/PhabricatorConpherenceThreadPHIDType.php', + 'PhabricatorConpherenceWidgetVisibleSetting' => 'applications/settings/setting/PhabricatorConpherenceWidgetVisibleSetting.php', + 'PhabricatorConsoleApplication' => 'applications/console/application/PhabricatorConsoleApplication.php', + 'PhabricatorConsoleContentSource' => 'infrastructure/contentsource/PhabricatorConsoleContentSource.php', + 'PhabricatorConstantChartFunction' => 'applications/fact/chart/PhabricatorConstantChartFunction.php', + 'PhabricatorContactNumbersSettingsPanel' => 'applications/settings/panel/PhabricatorContactNumbersSettingsPanel.php', + 'PhabricatorContentSource' => 'infrastructure/contentsource/PhabricatorContentSource.php', + 'PhabricatorContentSourceModule' => 'infrastructure/contentsource/PhabricatorContentSourceModule.php', + 'PhabricatorContentSourceView' => 'infrastructure/contentsource/PhabricatorContentSourceView.php', + 'PhabricatorContributedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorContributedToObjectEdgeType.php', 'PhabricatorController' => 'applications/base/controller/PhabricatorController.php', + 'PhabricatorCookies' => 'applications/auth/constants/PhabricatorCookies.php', + 'PhabricatorCoreConfigOptions' => 'applications/config/option/PhabricatorCoreConfigOptions.php', + 'PhabricatorCoreCreateTransaction' => 'applications/transactions/xaction/PhabricatorCoreCreateTransaction.php', + 'PhabricatorCoreTransactionType' => 'applications/transactions/xaction/PhabricatorCoreTransactionType.php', + 'PhabricatorCoreVoidTransaction' => 'applications/transactions/xaction/PhabricatorCoreVoidTransaction.php', + 'PhabricatorCosChartFunction' => 'applications/fact/chart/PhabricatorCosChartFunction.php', + 'PhabricatorCountFact' => 'applications/fact/fact/PhabricatorCountFact.php', + 'PhabricatorCountdown' => 'applications/countdown/storage/PhabricatorCountdown.php', + 'PhabricatorCountdownApplication' => 'applications/countdown/application/PhabricatorCountdownApplication.php', 'PhabricatorCountdownController' => 'applications/countdown/controller/PhabricatorCountdownController.php', + 'PhabricatorCountdownCountdownPHIDType' => 'applications/countdown/phid/PhabricatorCountdownCountdownPHIDType.php', 'PhabricatorCountdownDAO' => 'applications/countdown/storage/PhabricatorCountdownDAO.php', - 'PhabricatorCountdownDeleteController' => 'applications/countdown/controller/PhabricatorCountdownDeleteController.php', + 'PhabricatorCountdownDefaultEditCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultEditCapability.php', + 'PhabricatorCountdownDefaultViewCapability' => 'applications/countdown/capability/PhabricatorCountdownDefaultViewCapability.php', + 'PhabricatorCountdownDescriptionTransaction' => 'applications/countdown/xaction/PhabricatorCountdownDescriptionTransaction.php', 'PhabricatorCountdownEditController' => 'applications/countdown/controller/PhabricatorCountdownEditController.php', + 'PhabricatorCountdownEditEngine' => 'applications/countdown/editor/PhabricatorCountdownEditEngine.php', + 'PhabricatorCountdownEditor' => 'applications/countdown/editor/PhabricatorCountdownEditor.php', + 'PhabricatorCountdownEpochTransaction' => 'applications/countdown/xaction/PhabricatorCountdownEpochTransaction.php', 'PhabricatorCountdownListController' => 'applications/countdown/controller/PhabricatorCountdownListController.php', + 'PhabricatorCountdownMailReceiver' => 'applications/countdown/mail/PhabricatorCountdownMailReceiver.php', + 'PhabricatorCountdownQuery' => 'applications/countdown/query/PhabricatorCountdownQuery.php', + 'PhabricatorCountdownRemarkupRule' => 'applications/countdown/remarkup/PhabricatorCountdownRemarkupRule.php', + 'PhabricatorCountdownReplyHandler' => 'applications/countdown/mail/PhabricatorCountdownReplyHandler.php', + 'PhabricatorCountdownSchemaSpec' => 'applications/countdown/storage/PhabricatorCountdownSchemaSpec.php', + 'PhabricatorCountdownSearchEngine' => 'applications/countdown/query/PhabricatorCountdownSearchEngine.php', + 'PhabricatorCountdownTitleTransaction' => 'applications/countdown/xaction/PhabricatorCountdownTitleTransaction.php', + 'PhabricatorCountdownTransaction' => 'applications/countdown/storage/PhabricatorCountdownTransaction.php', + 'PhabricatorCountdownTransactionComment' => 'applications/countdown/storage/PhabricatorCountdownTransactionComment.php', + 'PhabricatorCountdownTransactionQuery' => 'applications/countdown/query/PhabricatorCountdownTransactionQuery.php', + 'PhabricatorCountdownTransactionType' => 'applications/countdown/xaction/PhabricatorCountdownTransactionType.php', + 'PhabricatorCountdownView' => 'applications/countdown/view/PhabricatorCountdownView.php', 'PhabricatorCountdownViewController' => 'applications/countdown/controller/PhabricatorCountdownViewController.php', + 'PhabricatorCredentialEditField' => 'applications/transactions/editfield/PhabricatorCredentialEditField.php', + 'PhabricatorCursorPagedPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorCursorPagedPolicyAwareQuery.php', + 'PhabricatorCustomField' => 'infrastructure/customfield/field/PhabricatorCustomField.php', + 'PhabricatorCustomFieldApplicationSearchAnyFunctionDatasource' => 'infrastructure/customfield/datasource/PhabricatorCustomFieldApplicationSearchAnyFunctionDatasource.php', + 'PhabricatorCustomFieldApplicationSearchDatasource' => 'infrastructure/customfield/datasource/PhabricatorCustomFieldApplicationSearchDatasource.php', + 'PhabricatorCustomFieldApplicationSearchNoneFunctionDatasource' => 'infrastructure/customfield/datasource/PhabricatorCustomFieldApplicationSearchNoneFunctionDatasource.php', + 'PhabricatorCustomFieldAttachment' => 'infrastructure/customfield/field/PhabricatorCustomFieldAttachment.php', + 'PhabricatorCustomFieldConfigOptionType' => 'infrastructure/customfield/config/PhabricatorCustomFieldConfigOptionType.php', + 'PhabricatorCustomFieldDataNotAvailableException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldDataNotAvailableException.php', + 'PhabricatorCustomFieldEditEngineExtension' => 'infrastructure/customfield/engineextension/PhabricatorCustomFieldEditEngineExtension.php', + 'PhabricatorCustomFieldEditField' => 'infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php', + 'PhabricatorCustomFieldEditType' => 'infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php', + 'PhabricatorCustomFieldExportEngineExtension' => 'infrastructure/export/engine/PhabricatorCustomFieldExportEngineExtension.php', + 'PhabricatorCustomFieldFulltextEngineExtension' => 'infrastructure/customfield/engineextension/PhabricatorCustomFieldFulltextEngineExtension.php', + 'PhabricatorCustomFieldHeraldAction' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldAction.php', + 'PhabricatorCustomFieldHeraldActionGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldActionGroup.php', + 'PhabricatorCustomFieldHeraldField' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldField.php', + 'PhabricatorCustomFieldHeraldFieldGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldFieldGroup.php', + 'PhabricatorCustomFieldImplementationIncompleteException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldImplementationIncompleteException.php', + 'PhabricatorCustomFieldIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldIndexStorage.php', + 'PhabricatorCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorCustomFieldInterface.php', + 'PhabricatorCustomFieldList' => 'infrastructure/customfield/field/PhabricatorCustomFieldList.php', + 'PhabricatorCustomFieldMonogramParser' => 'infrastructure/customfield/parser/PhabricatorCustomFieldMonogramParser.php', + 'PhabricatorCustomFieldNotAttachedException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotAttachedException.php', + 'PhabricatorCustomFieldNotProxyException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldNotProxyException.php', + 'PhabricatorCustomFieldNumericIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldNumericIndexStorage.php', + 'PhabricatorCustomFieldSearchEngineExtension' => 'infrastructure/customfield/engineextension/PhabricatorCustomFieldSearchEngineExtension.php', + 'PhabricatorCustomFieldStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStorage.php', + 'PhabricatorCustomFieldStorageQuery' => 'infrastructure/customfield/query/PhabricatorCustomFieldStorageQuery.php', + 'PhabricatorCustomFieldStringIndexStorage' => 'infrastructure/customfield/storage/PhabricatorCustomFieldStringIndexStorage.php', + 'PhabricatorCustomLogoConfigType' => 'applications/config/custom/PhabricatorCustomLogoConfigType.php', + 'PhabricatorCustomUIFooterConfigType' => 'applications/config/custom/PhabricatorCustomUIFooterConfigType.php', 'PhabricatorDaemon' => 'infrastructure/daemon/PhabricatorDaemon.php', - 'PhabricatorDaemonCombinedLogController' => 'applications/daemon/controller/PhabricatorDaemonCombinedLogController.php', + 'PhabricatorDaemonBulkJobController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobController.php', + 'PhabricatorDaemonBulkJobListController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobListController.php', + 'PhabricatorDaemonBulkJobMonitorController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobMonitorController.php', + 'PhabricatorDaemonBulkJobViewController' => 'applications/daemon/controller/PhabricatorDaemonBulkJobViewController.php', 'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/PhabricatorDaemonConsoleController.php', - 'PhabricatorDaemonControl' => 'infrastructure/daemon/PhabricatorDaemonControl.php', + 'PhabricatorDaemonContentSource' => 'infrastructure/daemon/contentsource/PhabricatorDaemonContentSource.php', 'PhabricatorDaemonController' => 'applications/daemon/controller/PhabricatorDaemonController.php', - 'PhabricatorDaemonDAO' => 'infrastructure/daemon/storage/PhabricatorDaemonDAO.php', - 'PhabricatorDaemonLog' => 'infrastructure/daemon/storage/PhabricatorDaemonLog.php', - 'PhabricatorDaemonLogEvent' => 'infrastructure/daemon/storage/PhabricatorDaemonLogEvent.php', - 'PhabricatorDaemonLogEventsView' => 'applications/daemon/view/PhabricatorDaemonLogEventsView.php', + 'PhabricatorDaemonDAO' => 'applications/daemon/storage/PhabricatorDaemonDAO.php', + 'PhabricatorDaemonEventListener' => 'applications/daemon/event/PhabricatorDaemonEventListener.php', + 'PhabricatorDaemonLockLog' => 'applications/daemon/storage/PhabricatorDaemonLockLog.php', + 'PhabricatorDaemonLockLogGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLockLogGarbageCollector.php', + 'PhabricatorDaemonLog' => 'applications/daemon/storage/PhabricatorDaemonLog.php', + 'PhabricatorDaemonLogEvent' => 'applications/daemon/storage/PhabricatorDaemonLogEvent.php', + 'PhabricatorDaemonLogEventGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogEventGarbageCollector.php', + 'PhabricatorDaemonLogGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonLogGarbageCollector.php', 'PhabricatorDaemonLogListController' => 'applications/daemon/controller/PhabricatorDaemonLogListController.php', 'PhabricatorDaemonLogListView' => 'applications/daemon/view/PhabricatorDaemonLogListView.php', + 'PhabricatorDaemonLogQuery' => 'applications/daemon/query/PhabricatorDaemonLogQuery.php', 'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/PhabricatorDaemonLogViewController.php', + 'PhabricatorDaemonManagementDebugWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementDebugWorkflow.php', + 'PhabricatorDaemonManagementLaunchWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLaunchWorkflow.php', + 'PhabricatorDaemonManagementListWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementListWorkflow.php', + 'PhabricatorDaemonManagementLogWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementLogWorkflow.php', + 'PhabricatorDaemonManagementReloadWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementReloadWorkflow.php', + 'PhabricatorDaemonManagementRestartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementRestartWorkflow.php', + 'PhabricatorDaemonManagementStartWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStartWorkflow.php', + 'PhabricatorDaemonManagementStatusWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStatusWorkflow.php', + 'PhabricatorDaemonManagementStopWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementStopWorkflow.php', + 'PhabricatorDaemonManagementWorkflow' => 'applications/daemon/management/PhabricatorDaemonManagementWorkflow.php', + 'PhabricatorDaemonOverseerModule' => 'infrastructure/daemon/overseer/PhabricatorDaemonOverseerModule.php', 'PhabricatorDaemonReference' => 'infrastructure/daemon/control/PhabricatorDaemonReference.php', - 'PhabricatorDaemonTimelineConsoleController' => 'applications/daemon/controller/PhabricatorDaemonTimelineConsoleController.php', - 'PhabricatorDaemonTimelineEventController' => 'applications/daemon/controller/PhabricatorDaemonTimelineEventController.php', - 'PhabricatorDefaultFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorDefaultFileStorageEngineSelector.php', - 'PhabricatorDefaultSearchEngineSelector' => 'applications/search/selector/PhabricatorDefaultSearchEngineSelector.php', + 'PhabricatorDaemonTaskGarbageCollector' => 'applications/daemon/garbagecollector/PhabricatorDaemonTaskGarbageCollector.php', + 'PhabricatorDaemonTasksTableView' => 'applications/daemon/view/PhabricatorDaemonTasksTableView.php', + 'PhabricatorDaemonsApplication' => 'applications/daemon/application/PhabricatorDaemonsApplication.php', + 'PhabricatorDaemonsSetupCheck' => 'applications/config/check/PhabricatorDaemonsSetupCheck.php', + 'PhabricatorDailyRoutineTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorDailyRoutineTriggerClock.php', + 'PhabricatorDarkConsoleSetting' => 'applications/settings/setting/PhabricatorDarkConsoleSetting.php', + 'PhabricatorDarkConsoleTabSetting' => 'applications/settings/setting/PhabricatorDarkConsoleTabSetting.php', + 'PhabricatorDarkConsoleVisibleSetting' => 'applications/settings/setting/PhabricatorDarkConsoleVisibleSetting.php', + 'PhabricatorDashboard' => 'applications/dashboard/storage/PhabricatorDashboard.php', + 'PhabricatorDashboardAdjustController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardAdjustController.php', + 'PhabricatorDashboardApplication' => 'applications/dashboard/application/PhabricatorDashboardApplication.php', + 'PhabricatorDashboardApplicationInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardApplicationInstallWorkflow.php', + 'PhabricatorDashboardArchiveController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardArchiveController.php', + 'PhabricatorDashboardChartPanelChartTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardChartPanelChartTransaction.php', + 'PhabricatorDashboardChartPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardChartPanelType.php', + 'PhabricatorDashboardColumn' => 'applications/dashboard/layoutconfig/PhabricatorDashboardColumn.php', + 'PhabricatorDashboardConsoleController' => 'applications/dashboard/controller/PhabricatorDashboardConsoleController.php', + 'PhabricatorDashboardController' => 'applications/dashboard/controller/PhabricatorDashboardController.php', + 'PhabricatorDashboardDAO' => 'applications/dashboard/storage/PhabricatorDashboardDAO.php', + 'PhabricatorDashboardDashboardPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardDashboardPHIDType.php', + 'PhabricatorDashboardDatasource' => 'applications/dashboard/typeahead/PhabricatorDashboardDatasource.php', + 'PhabricatorDashboardEditController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardEditController.php', + 'PhabricatorDashboardEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardEditEngine.php', + 'PhabricatorDashboardFavoritesInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardFavoritesInstallWorkflow.php', + 'PhabricatorDashboardFerretEngine' => 'applications/dashboard/engine/PhabricatorDashboardFerretEngine.php', + 'PhabricatorDashboardFullLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardFullLayoutMode.php', + 'PhabricatorDashboardFulltextEngine' => 'applications/dashboard/engine/PhabricatorDashboardFulltextEngine.php', + 'PhabricatorDashboardHalfLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardHalfLayoutMode.php', + 'PhabricatorDashboardHomeInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardHomeInstallWorkflow.php', + 'PhabricatorDashboardIconSet' => 'applications/dashboard/icon/PhabricatorDashboardIconSet.php', + 'PhabricatorDashboardIconTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardIconTransaction.php', + 'PhabricatorDashboardInstallController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardInstallController.php', + 'PhabricatorDashboardInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardInstallWorkflow.php', + 'PhabricatorDashboardLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardLayoutMode.php', + 'PhabricatorDashboardLayoutTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardLayoutTransaction.php', + 'PhabricatorDashboardListController' => 'applications/dashboard/controller/PhabricatorDashboardListController.php', + 'PhabricatorDashboardNameTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardNameTransaction.php', + 'PhabricatorDashboardObjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardObjectInstallWorkflow.php', + 'PhabricatorDashboardOneThirdLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardOneThirdLayoutMode.php', + 'PhabricatorDashboardPanel' => 'applications/dashboard/storage/PhabricatorDashboardPanel.php', + 'PhabricatorDashboardPanelArchiveController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelArchiveController.php', + 'PhabricatorDashboardPanelContainerIndexEngineExtension' => 'applications/dashboard/engineextension/PhabricatorDashboardPanelContainerIndexEngineExtension.php', + 'PhabricatorDashboardPanelContainerInterface' => 'applications/dashboard/interface/PhabricatorDashboardPanelContainerInterface.php', + 'PhabricatorDashboardPanelDatasource' => 'applications/dashboard/typeahead/PhabricatorDashboardPanelDatasource.php', + 'PhabricatorDashboardPanelEditConduitAPIMethod' => 'applications/dashboard/conduit/PhabricatorDashboardPanelEditConduitAPIMethod.php', + 'PhabricatorDashboardPanelEditController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelEditController.php', + 'PhabricatorDashboardPanelEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardPanelEditEngine.php', + 'PhabricatorDashboardPanelFerretEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelFerretEngine.php', + 'PhabricatorDashboardPanelFulltextEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelFulltextEngine.php', + 'PhabricatorDashboardPanelListController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelListController.php', + 'PhabricatorDashboardPanelNameTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardPanelNameTransaction.php', + 'PhabricatorDashboardPanelPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardPanelPHIDType.php', + 'PhabricatorDashboardPanelPropertyTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardPanelPropertyTransaction.php', + 'PhabricatorDashboardPanelQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelQuery.php', + 'PhabricatorDashboardPanelRef' => 'applications/dashboard/layoutconfig/PhabricatorDashboardPanelRef.php', + 'PhabricatorDashboardPanelRefList' => 'applications/dashboard/layoutconfig/PhabricatorDashboardPanelRefList.php', + 'PhabricatorDashboardPanelRenderController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelRenderController.php', + 'PhabricatorDashboardPanelRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardPanelRenderingEngine.php', + 'PhabricatorDashboardPanelSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardPanelSearchEngine.php', + 'PhabricatorDashboardPanelStatusTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardPanelStatusTransaction.php', + 'PhabricatorDashboardPanelTabsController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelTabsController.php', + 'PhabricatorDashboardPanelTransaction' => 'applications/dashboard/storage/PhabricatorDashboardPanelTransaction.php', + 'PhabricatorDashboardPanelTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardPanelTransactionEditor.php', + 'PhabricatorDashboardPanelTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardPanelTransactionQuery.php', + 'PhabricatorDashboardPanelTransactionType' => 'applications/dashboard/xaction/panel/PhabricatorDashboardPanelTransactionType.php', + 'PhabricatorDashboardPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardPanelType.php', + 'PhabricatorDashboardPanelUsedByObjectEdgeType' => 'applications/search/edge/PhabricatorDashboardPanelUsedByObjectEdgeType.php', + 'PhabricatorDashboardPanelViewController' => 'applications/dashboard/controller/panel/PhabricatorDashboardPanelViewController.php', + 'PhabricatorDashboardPanelsTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardPanelsTransaction.php', + 'PhabricatorDashboardPortal' => 'applications/dashboard/storage/PhabricatorDashboardPortal.php', + 'PhabricatorDashboardPortalController' => 'applications/dashboard/controller/portal/PhabricatorDashboardPortalController.php', + 'PhabricatorDashboardPortalDatasource' => 'applications/dashboard/typeahead/PhabricatorDashboardPortalDatasource.php', + 'PhabricatorDashboardPortalEditConduitAPIMethod' => 'applications/dashboard/conduit/PhabricatorDashboardPortalEditConduitAPIMethod.php', + 'PhabricatorDashboardPortalEditController' => 'applications/dashboard/controller/portal/PhabricatorDashboardPortalEditController.php', + 'PhabricatorDashboardPortalEditEngine' => 'applications/dashboard/editor/PhabricatorDashboardPortalEditEngine.php', + 'PhabricatorDashboardPortalEditor' => 'applications/dashboard/editor/PhabricatorDashboardPortalEditor.php', + 'PhabricatorDashboardPortalFerretEngine' => 'applications/dashboard/engine/PhabricatorDashboardPortalFerretEngine.php', + 'PhabricatorDashboardPortalFulltextEngine' => 'applications/dashboard/engine/PhabricatorDashboardPortalFulltextEngine.php', + 'PhabricatorDashboardPortalInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardPortalInstallWorkflow.php', + 'PhabricatorDashboardPortalListController' => 'applications/dashboard/controller/portal/PhabricatorDashboardPortalListController.php', + 'PhabricatorDashboardPortalMenuItem' => 'applications/dashboard/menuitem/PhabricatorDashboardPortalMenuItem.php', + 'PhabricatorDashboardPortalNameTransaction' => 'applications/dashboard/xaction/portal/PhabricatorDashboardPortalNameTransaction.php', + 'PhabricatorDashboardPortalPHIDType' => 'applications/dashboard/phid/PhabricatorDashboardPortalPHIDType.php', + 'PhabricatorDashboardPortalProfileMenuEngine' => 'applications/dashboard/engine/PhabricatorDashboardPortalProfileMenuEngine.php', + 'PhabricatorDashboardPortalQuery' => 'applications/dashboard/query/PhabricatorDashboardPortalQuery.php', + 'PhabricatorDashboardPortalSearchConduitAPIMethod' => 'applications/dashboard/conduit/PhabricatorDashboardPortalSearchConduitAPIMethod.php', + 'PhabricatorDashboardPortalSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardPortalSearchEngine.php', + 'PhabricatorDashboardPortalStatus' => 'applications/dashboard/constants/PhabricatorDashboardPortalStatus.php', + 'PhabricatorDashboardPortalTransaction' => 'applications/dashboard/storage/PhabricatorDashboardPortalTransaction.php', + 'PhabricatorDashboardPortalTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardPortalTransactionQuery.php', + 'PhabricatorDashboardPortalTransactionType' => 'applications/dashboard/xaction/portal/PhabricatorDashboardPortalTransactionType.php', + 'PhabricatorDashboardPortalViewController' => 'applications/dashboard/controller/portal/PhabricatorDashboardPortalViewController.php', + 'PhabricatorDashboardProfileController' => 'applications/dashboard/controller/PhabricatorDashboardProfileController.php', + 'PhabricatorDashboardProfileMenuItem' => 'applications/search/menuitem/PhabricatorDashboardProfileMenuItem.php', + 'PhabricatorDashboardProjectInstallWorkflow' => 'applications/dashboard/install/PhabricatorDashboardProjectInstallWorkflow.php', + 'PhabricatorDashboardQuery' => 'applications/dashboard/query/PhabricatorDashboardQuery.php', + 'PhabricatorDashboardQueryPanelApplicationEditField' => 'applications/dashboard/editfield/PhabricatorDashboardQueryPanelApplicationEditField.php', + 'PhabricatorDashboardQueryPanelApplicationTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelApplicationTransaction.php', + 'PhabricatorDashboardQueryPanelInstallController' => 'applications/dashboard/controller/PhabricatorDashboardQueryPanelInstallController.php', + 'PhabricatorDashboardQueryPanelLimitTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelLimitTransaction.php', + 'PhabricatorDashboardQueryPanelQueryEditField' => 'applications/dashboard/editfield/PhabricatorDashboardQueryPanelQueryEditField.php', + 'PhabricatorDashboardQueryPanelQueryTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardQueryPanelQueryTransaction.php', + 'PhabricatorDashboardQueryPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardQueryPanelType.php', + 'PhabricatorDashboardRemarkupRule' => 'applications/dashboard/remarkup/PhabricatorDashboardRemarkupRule.php', + 'PhabricatorDashboardRenderingEngine' => 'applications/dashboard/engine/PhabricatorDashboardRenderingEngine.php', + 'PhabricatorDashboardSchemaSpec' => 'applications/dashboard/storage/PhabricatorDashboardSchemaSpec.php', + 'PhabricatorDashboardSearchEngine' => 'applications/dashboard/query/PhabricatorDashboardSearchEngine.php', + 'PhabricatorDashboardStatusTransaction' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardStatusTransaction.php', + 'PhabricatorDashboardTabsPanelTabsTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardTabsPanelTabsTransaction.php', + 'PhabricatorDashboardTabsPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTabsPanelType.php', + 'PhabricatorDashboardTextPanelTextTransaction' => 'applications/dashboard/xaction/panel/PhabricatorDashboardTextPanelTextTransaction.php', + 'PhabricatorDashboardTextPanelType' => 'applications/dashboard/paneltype/PhabricatorDashboardTextPanelType.php', + 'PhabricatorDashboardTransaction' => 'applications/dashboard/storage/PhabricatorDashboardTransaction.php', + 'PhabricatorDashboardTransactionEditor' => 'applications/dashboard/editor/PhabricatorDashboardTransactionEditor.php', + 'PhabricatorDashboardTransactionQuery' => 'applications/dashboard/query/PhabricatorDashboardTransactionQuery.php', + 'PhabricatorDashboardTransactionType' => 'applications/dashboard/xaction/dashboard/PhabricatorDashboardTransactionType.php', + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'applications/dashboard/layoutconfig/PhabricatorDashboardTwoThirdsLayoutMode.php', + 'PhabricatorDashboardViewController' => 'applications/dashboard/controller/dashboard/PhabricatorDashboardViewController.php', + 'PhabricatorDataCacheSpec' => 'applications/cache/spec/PhabricatorDataCacheSpec.php', + 'PhabricatorDataNotAttachedException' => 'infrastructure/storage/lisk/PhabricatorDataNotAttachedException.php', + 'PhabricatorDatabaseRef' => 'infrastructure/cluster/PhabricatorDatabaseRef.php', + 'PhabricatorDatabaseRefParser' => 'infrastructure/cluster/PhabricatorDatabaseRefParser.php', + 'PhabricatorDatabaseSetupCheck' => 'applications/config/check/PhabricatorDatabaseSetupCheck.php', + 'PhabricatorDatasourceApplicationEngineExtension' => 'applications/meta/engineextension/PhabricatorDatasourceApplicationEngineExtension.php', + 'PhabricatorDatasourceEditField' => 'applications/transactions/editfield/PhabricatorDatasourceEditField.php', + 'PhabricatorDatasourceEditType' => 'applications/transactions/edittype/PhabricatorDatasourceEditType.php', + 'PhabricatorDatasourceEngine' => 'applications/search/engine/PhabricatorDatasourceEngine.php', + 'PhabricatorDatasourceEngineExtension' => 'applications/search/engineextension/PhabricatorDatasourceEngineExtension.php', + 'PhabricatorDatasourceURIEngineExtension' => 'applications/meta/engineextension/PhabricatorDatasourceURIEngineExtension.php', + 'PhabricatorDateFormatSetting' => 'applications/settings/setting/PhabricatorDateFormatSetting.php', + 'PhabricatorDateTimeSettingsPanel' => 'applications/settings/panel/PhabricatorDateTimeSettingsPanel.php', + 'PhabricatorDebugController' => 'applications/system/controller/PhabricatorDebugController.php', + 'PhabricatorDefaultRequestExceptionHandler' => 'aphront/handler/PhabricatorDefaultRequestExceptionHandler.php', + 'PhabricatorDefaultSyntaxStyle' => 'infrastructure/syntax/PhabricatorDefaultSyntaxStyle.php', + 'PhabricatorDefaultUnlockEngine' => 'applications/system/engine/PhabricatorDefaultUnlockEngine.php', + 'PhabricatorDemoChartEngine' => 'applications/fact/engine/PhabricatorDemoChartEngine.php', + 'PhabricatorDestructibleCodex' => 'applications/system/codex/PhabricatorDestructibleCodex.php', + 'PhabricatorDestructibleCodexInterface' => 'applications/system/interface/PhabricatorDestructibleCodexInterface.php', + 'PhabricatorDestructibleInterface' => 'applications/system/interface/PhabricatorDestructibleInterface.php', + 'PhabricatorDestructionEngine' => 'applications/system/engine/PhabricatorDestructionEngine.php', + 'PhabricatorDestructionEngineExtension' => 'applications/system/engine/PhabricatorDestructionEngineExtension.php', + 'PhabricatorDestructionEngineExtensionModule' => 'applications/system/engine/PhabricatorDestructionEngineExtensionModule.php', + 'PhabricatorDeveloperConfigOptions' => 'applications/config/option/PhabricatorDeveloperConfigOptions.php', + 'PhabricatorDeveloperPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDeveloperPreferencesSettingsPanel.php', + 'PhabricatorDiffInlineCommentContentState' => 'infrastructure/diff/inline/PhabricatorDiffInlineCommentContentState.php', + 'PhabricatorDiffInlineCommentContext' => 'infrastructure/diff/inline/PhabricatorDiffInlineCommentContext.php', + 'PhabricatorDiffInlineCommentQuery' => 'infrastructure/diff/query/PhabricatorDiffInlineCommentQuery.php', + 'PhabricatorDiffPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDiffPreferencesSettingsPanel.php', + 'PhabricatorDiffScopeEngine' => 'infrastructure/diff/PhabricatorDiffScopeEngine.php', + 'PhabricatorDiffScopeEngineTestCase' => 'infrastructure/diff/__tests__/PhabricatorDiffScopeEngineTestCase.php', 'PhabricatorDifferenceEngine' => 'infrastructure/diff/PhabricatorDifferenceEngine.php', - 'PhabricatorDirectoryController' => 'applications/directory/controller/PhabricatorDirectoryController.php', - 'PhabricatorDirectoryMainController' => 'applications/directory/controller/PhabricatorDirectoryMainController.php', + 'PhabricatorDifferentialApplication' => 'applications/differential/application/PhabricatorDifferentialApplication.php', + 'PhabricatorDifferentialAttachCommitWorkflow' => 'applications/differential/management/PhabricatorDifferentialAttachCommitWorkflow.php', + 'PhabricatorDifferentialConfigOptions' => 'applications/differential/config/PhabricatorDifferentialConfigOptions.php', + 'PhabricatorDifferentialExtractWorkflow' => 'applications/differential/management/PhabricatorDifferentialExtractWorkflow.php', + 'PhabricatorDifferentialManagementWorkflow' => 'applications/differential/management/PhabricatorDifferentialManagementWorkflow.php', + 'PhabricatorDifferentialMigrateHunkWorkflow' => 'applications/differential/management/PhabricatorDifferentialMigrateHunkWorkflow.php', + 'PhabricatorDifferentialRebuildChangesetsWorkflow' => 'applications/differential/management/PhabricatorDifferentialRebuildChangesetsWorkflow.php', + 'PhabricatorDifferentialRevisionTestDataGenerator' => 'applications/differential/lipsum/PhabricatorDifferentialRevisionTestDataGenerator.php', + 'PhabricatorDiffusionApplication' => 'applications/diffusion/application/PhabricatorDiffusionApplication.php', + 'PhabricatorDiffusionBlameSetting' => 'applications/settings/setting/PhabricatorDiffusionBlameSetting.php', + 'PhabricatorDiffusionConfigOptions' => 'applications/diffusion/config/PhabricatorDiffusionConfigOptions.php', 'PhabricatorDisabledUserController' => 'applications/auth/controller/PhabricatorDisabledUserController.php', + 'PhabricatorDisplayPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorDisplayPreferencesSettingsPanel.php', + 'PhabricatorDisqusAuthProvider' => 'applications/auth/provider/PhabricatorDisqusAuthProvider.php', + 'PhabricatorDividerEditField' => 'applications/transactions/editfield/PhabricatorDividerEditField.php', + 'PhabricatorDividerProfileMenuItem' => 'applications/search/menuitem/PhabricatorDividerProfileMenuItem.php', + 'PhabricatorDivinerApplication' => 'applications/diviner/application/PhabricatorDivinerApplication.php', + 'PhabricatorDocumentEngine' => 'applications/files/document/PhabricatorDocumentEngine.php', + 'PhabricatorDocumentEngineBlock' => 'applications/files/diff/PhabricatorDocumentEngineBlock.php', + 'PhabricatorDocumentEngineBlockDiff' => 'applications/files/diff/PhabricatorDocumentEngineBlockDiff.php', + 'PhabricatorDocumentEngineBlocks' => 'applications/files/diff/PhabricatorDocumentEngineBlocks.php', + 'PhabricatorDocumentEngineParserException' => 'applications/files/document/exception/PhabricatorDocumentEngineParserException.php', + 'PhabricatorDocumentRef' => 'applications/files/document/PhabricatorDocumentRef.php', + 'PhabricatorDocumentRenderingEngine' => 'applications/files/document/render/PhabricatorDocumentRenderingEngine.php', + 'PhabricatorDoorkeeperApplication' => 'applications/doorkeeper/application/PhabricatorDoorkeeperApplication.php', + 'PhabricatorDoubleExportField' => 'infrastructure/export/field/PhabricatorDoubleExportField.php', 'PhabricatorDraft' => 'applications/draft/storage/PhabricatorDraft.php', 'PhabricatorDraftDAO' => 'applications/draft/storage/PhabricatorDraftDAO.php', + 'PhabricatorDraftEngine' => 'applications/transactions/draft/PhabricatorDraftEngine.php', + 'PhabricatorDraftInterface' => 'applications/transactions/draft/PhabricatorDraftInterface.php', + 'PhabricatorDrydockApplication' => 'applications/drydock/application/PhabricatorDrydockApplication.php', + 'PhabricatorDuoAuthFactor' => 'applications/auth/factor/PhabricatorDuoAuthFactor.php', + 'PhabricatorDuoFuture' => 'applications/auth/future/PhabricatorDuoFuture.php', + 'PhabricatorEdgeChangeRecord' => 'infrastructure/edges/util/PhabricatorEdgeChangeRecord.php', + 'PhabricatorEdgeChangeRecordTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeChangeRecordTestCase.php', 'PhabricatorEdgeConfig' => 'infrastructure/edges/constants/PhabricatorEdgeConfig.php', 'PhabricatorEdgeConstants' => 'infrastructure/edges/constants/PhabricatorEdgeConstants.php', + 'PhabricatorEdgeCycleException' => 'infrastructure/edges/exception/PhabricatorEdgeCycleException.php', + 'PhabricatorEdgeEditType' => 'applications/transactions/edittype/PhabricatorEdgeEditType.php', 'PhabricatorEdgeEditor' => 'infrastructure/edges/editor/PhabricatorEdgeEditor.php', + 'PhabricatorEdgeGraph' => 'infrastructure/edges/util/PhabricatorEdgeGraph.php', + 'PhabricatorEdgeIndexEngineExtension' => 'applications/search/engineextension/PhabricatorEdgeIndexEngineExtension.php', + 'PhabricatorEdgeObject' => 'infrastructure/edges/conduit/PhabricatorEdgeObject.php', + 'PhabricatorEdgeObjectQuery' => 'infrastructure/edges/query/PhabricatorEdgeObjectQuery.php', 'PhabricatorEdgeQuery' => 'infrastructure/edges/query/PhabricatorEdgeQuery.php', + 'PhabricatorEdgeTestCase' => 'infrastructure/edges/__tests__/PhabricatorEdgeTestCase.php', + 'PhabricatorEdgeType' => 'infrastructure/edges/type/PhabricatorEdgeType.php', + 'PhabricatorEdgeTypeTestCase' => 'infrastructure/edges/type/__tests__/PhabricatorEdgeTypeTestCase.php', + 'PhabricatorEdgesDestructionEngineExtension' => 'infrastructure/edges/engineextension/PhabricatorEdgesDestructionEngineExtension.php', + 'PhabricatorEditEngine' => 'applications/transactions/editengine/PhabricatorEditEngine.php', + 'PhabricatorEditEngineAPIMethod' => 'applications/transactions/editengine/PhabricatorEditEngineAPIMethod.php', + 'PhabricatorEditEngineBulkJobType' => 'applications/transactions/bulk/PhabricatorEditEngineBulkJobType.php', + 'PhabricatorEditEngineCheckboxesCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineCheckboxesCommentAction.php', + 'PhabricatorEditEngineColumnsCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineColumnsCommentAction.php', + 'PhabricatorEditEngineCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineCommentAction.php', + 'PhabricatorEditEngineCommentActionGroup' => 'applications/transactions/commentaction/PhabricatorEditEngineCommentActionGroup.php', + 'PhabricatorEditEngineConfiguration' => 'applications/transactions/storage/PhabricatorEditEngineConfiguration.php', + 'PhabricatorEditEngineConfigurationDefaultCreateController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultCreateController.php', + 'PhabricatorEditEngineConfigurationDefaultsController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDefaultsController.php', + 'PhabricatorEditEngineConfigurationDisableController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationDisableController.php', + 'PhabricatorEditEngineConfigurationEditController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationEditController.php', + 'PhabricatorEditEngineConfigurationEditEngine' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditEngine.php', + 'PhabricatorEditEngineConfigurationEditor' => 'applications/transactions/editor/PhabricatorEditEngineConfigurationEditor.php', + 'PhabricatorEditEngineConfigurationIsEditController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationIsEditController.php', + 'PhabricatorEditEngineConfigurationListController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationListController.php', + 'PhabricatorEditEngineConfigurationLockController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationLockController.php', + 'PhabricatorEditEngineConfigurationPHIDType' => 'applications/transactions/phid/PhabricatorEditEngineConfigurationPHIDType.php', + 'PhabricatorEditEngineConfigurationQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationQuery.php', + 'PhabricatorEditEngineConfigurationReorderController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationReorderController.php', + 'PhabricatorEditEngineConfigurationSaveController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSaveController.php', + 'PhabricatorEditEngineConfigurationSearchEngine' => 'applications/transactions/query/PhabricatorEditEngineConfigurationSearchEngine.php', + 'PhabricatorEditEngineConfigurationSortController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSortController.php', + 'PhabricatorEditEngineConfigurationSubtypeController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationSubtypeController.php', + 'PhabricatorEditEngineConfigurationTransaction' => 'applications/transactions/storage/PhabricatorEditEngineConfigurationTransaction.php', + 'PhabricatorEditEngineConfigurationTransactionQuery' => 'applications/transactions/query/PhabricatorEditEngineConfigurationTransactionQuery.php', + 'PhabricatorEditEngineConfigurationViewController' => 'applications/transactions/controller/PhabricatorEditEngineConfigurationViewController.php', + 'PhabricatorEditEngineController' => 'applications/transactions/controller/PhabricatorEditEngineController.php', + 'PhabricatorEditEngineCreateOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineCreateOrderTransaction.php', + 'PhabricatorEditEngineDatasource' => 'applications/transactions/typeahead/PhabricatorEditEngineDatasource.php', + 'PhabricatorEditEngineDefaultCreateTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDefaultCreateTransaction.php', + 'PhabricatorEditEngineDefaultLock' => 'applications/transactions/editengine/PhabricatorEditEngineDefaultLock.php', + 'PhabricatorEditEngineDefaultTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDefaultTransaction.php', + 'PhabricatorEditEngineDisableTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineDisableTransaction.php', + 'PhabricatorEditEngineEditOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineEditOrderTransaction.php', + 'PhabricatorEditEngineExtension' => 'applications/transactions/engineextension/PhabricatorEditEngineExtension.php', + 'PhabricatorEditEngineExtensionModule' => 'applications/transactions/engineextension/PhabricatorEditEngineExtensionModule.php', + 'PhabricatorEditEngineIsEditTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineIsEditTransaction.php', + 'PhabricatorEditEngineListController' => 'applications/transactions/controller/PhabricatorEditEngineListController.php', + 'PhabricatorEditEngineLock' => 'applications/transactions/editengine/PhabricatorEditEngineLock.php', + 'PhabricatorEditEngineLockableInterface' => 'applications/transactions/editengine/PhabricatorEditEngineLockableInterface.php', + 'PhabricatorEditEngineLocksTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineLocksTransaction.php', + 'PhabricatorEditEngineMFAEngine' => 'applications/transactions/editengine/PhabricatorEditEngineMFAEngine.php', + 'PhabricatorEditEngineMFAInterface' => 'applications/transactions/editengine/PhabricatorEditEngineMFAInterface.php', + 'PhabricatorEditEngineNameTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineNameTransaction.php', + 'PhabricatorEditEngineOrderTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineOrderTransaction.php', + 'PhabricatorEditEnginePageState' => 'applications/transactions/editengine/PhabricatorEditEnginePageState.php', + 'PhabricatorEditEnginePointsCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEnginePointsCommentAction.php', + 'PhabricatorEditEnginePreambleTransaction' => 'applications/transactions/xaction/PhabricatorEditEnginePreambleTransaction.php', + 'PhabricatorEditEngineProfileMenuItem' => 'applications/search/menuitem/PhabricatorEditEngineProfileMenuItem.php', + 'PhabricatorEditEngineQuery' => 'applications/transactions/query/PhabricatorEditEngineQuery.php', + 'PhabricatorEditEngineSearchEngine' => 'applications/transactions/query/PhabricatorEditEngineSearchEngine.php', + 'PhabricatorEditEngineSelectCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineSelectCommentAction.php', + 'PhabricatorEditEngineSettingsPanel' => 'applications/settings/panel/PhabricatorEditEngineSettingsPanel.php', + 'PhabricatorEditEngineStaticCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineStaticCommentAction.php', + 'PhabricatorEditEngineSubtype' => 'applications/transactions/editengine/PhabricatorEditEngineSubtype.php', + 'PhabricatorEditEngineSubtypeHeraldField' => 'applications/transactions/herald/PhabricatorEditEngineSubtypeHeraldField.php', + 'PhabricatorEditEngineSubtypeInterface' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeInterface.php', + 'PhabricatorEditEngineSubtypeMap' => 'applications/transactions/editengine/PhabricatorEditEngineSubtypeMap.php', + 'PhabricatorEditEngineSubtypeTestCase' => 'applications/transactions/editengine/__tests__/PhabricatorEditEngineSubtypeTestCase.php', + 'PhabricatorEditEngineSubtypeTransaction' => 'applications/transactions/xaction/PhabricatorEditEngineSubtypeTransaction.php', + 'PhabricatorEditEngineTokenizerCommentAction' => 'applications/transactions/commentaction/PhabricatorEditEngineTokenizerCommentAction.php', + 'PhabricatorEditEngineTransactionType' => 'applications/transactions/xaction/PhabricatorEditEngineTransactionType.php', + 'PhabricatorEditField' => 'applications/transactions/editfield/PhabricatorEditField.php', + 'PhabricatorEditPage' => 'applications/transactions/editengine/PhabricatorEditPage.php', + 'PhabricatorEditType' => 'applications/transactions/edittype/PhabricatorEditType.php', + 'PhabricatorEditor' => 'infrastructure/PhabricatorEditor.php', + 'PhabricatorEditorExtension' => 'applications/transactions/engineextension/PhabricatorEditorExtension.php', + 'PhabricatorEditorExtensionModule' => 'applications/transactions/engineextension/PhabricatorEditorExtensionModule.php', + 'PhabricatorEditorMailEngineExtension' => 'applications/transactions/engineextension/PhabricatorEditorMailEngineExtension.php', + 'PhabricatorEditorSetting' => 'applications/settings/setting/PhabricatorEditorSetting.php', + 'PhabricatorEditorURIEngine' => 'infrastructure/editor/PhabricatorEditorURIEngine.php', + 'PhabricatorEditorURIEngineTestCase' => 'infrastructure/editor/__tests__/PhabricatorEditorURIEngineTestCase.php', + 'PhabricatorEditorURIParserException' => 'infrastructure/editor/PhabricatorEditorURIParserException.php', + 'PhabricatorElasticFulltextStorageEngine' => 'applications/search/fulltextstorage/PhabricatorElasticFulltextStorageEngine.php', + 'PhabricatorElasticsearchHost' => 'infrastructure/cluster/search/PhabricatorElasticsearchHost.php', + 'PhabricatorElasticsearchQueryBuilder' => 'applications/search/fulltextstorage/PhabricatorElasticsearchQueryBuilder.php', + 'PhabricatorElasticsearchSetupCheck' => 'applications/config/check/PhabricatorElasticsearchSetupCheck.php', + 'PhabricatorEmailAddressesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailAddressesSettingsPanel.php', + 'PhabricatorEmailContentSource' => 'applications/metamta/contentsource/PhabricatorEmailContentSource.php', + 'PhabricatorEmailDeliverySettingsPanel' => 'applications/settings/panel/PhabricatorEmailDeliverySettingsPanel.php', + 'PhabricatorEmailFormatSetting' => 'applications/settings/setting/PhabricatorEmailFormatSetting.php', + 'PhabricatorEmailFormatSettingsPanel' => 'applications/settings/panel/PhabricatorEmailFormatSettingsPanel.php', 'PhabricatorEmailLoginController' => 'applications/auth/controller/PhabricatorEmailLoginController.php', - 'PhabricatorEmailTokenController' => 'applications/auth/controller/PhabricatorEmailTokenController.php', - 'PhabricatorEmailVerificationController' => 'applications/people/controller/PhabricatorEmailVerificationController.php', - 'PhabricatorEnglishTranslation' => 'infrastructure/internationalization/PhabricatorEnglishTranslation.php', - 'PhabricatorEnv' => 'infrastructure/PhabricatorEnv.php', - 'PhabricatorEnvTestCase' => 'infrastructure/__tests__/PhabricatorEnvTestCase.php', - 'PhabricatorErrorExample' => 'applications/uiexample/examples/PhabricatorErrorExample.php', + 'PhabricatorEmailLoginUserLogType' => 'applications/people/userlog/PhabricatorEmailLoginUserLogType.php', + 'PhabricatorEmailNotificationsSetting' => 'applications/settings/setting/PhabricatorEmailNotificationsSetting.php', + 'PhabricatorEmailPreferencesSettingsPanel' => 'applications/settings/panel/PhabricatorEmailPreferencesSettingsPanel.php', + 'PhabricatorEmailRePrefixSetting' => 'applications/settings/setting/PhabricatorEmailRePrefixSetting.php', + 'PhabricatorEmailSelfActionsSetting' => 'applications/settings/setting/PhabricatorEmailSelfActionsSetting.php', + 'PhabricatorEmailStampsSetting' => 'applications/settings/setting/PhabricatorEmailStampsSetting.php', + 'PhabricatorEmailTagsSetting' => 'applications/settings/setting/PhabricatorEmailTagsSetting.php', + 'PhabricatorEmailVarySubjectsSetting' => 'applications/settings/setting/PhabricatorEmailVarySubjectsSetting.php', + 'PhabricatorEmailVerificationController' => 'applications/auth/controller/PhabricatorEmailVerificationController.php', + 'PhabricatorEmbedFileRemarkupRule' => 'applications/files/markup/PhabricatorEmbedFileRemarkupRule.php', + 'PhabricatorEmojiDatasource' => 'applications/macro/typeahead/PhabricatorEmojiDatasource.php', + 'PhabricatorEmojiRemarkupRule' => 'applications/macro/markup/PhabricatorEmojiRemarkupRule.php', + 'PhabricatorEmojiTranslation' => 'infrastructure/internationalization/translation/PhabricatorEmojiTranslation.php', + 'PhabricatorEmptyQueryException' => 'infrastructure/query/exception/PhabricatorEmptyQueryException.php', + 'PhabricatorEnterHisecUserLogType' => 'applications/people/userlog/PhabricatorEnterHisecUserLogType.php', + 'PhabricatorEnumConfigType' => 'applications/config/type/PhabricatorEnumConfigType.php', + 'PhabricatorEnv' => 'infrastructure/env/PhabricatorEnv.php', + 'PhabricatorEnvTestCase' => 'infrastructure/env/__tests__/PhabricatorEnvTestCase.php', + 'PhabricatorEpochEditField' => 'applications/transactions/editfield/PhabricatorEpochEditField.php', + 'PhabricatorEpochExportField' => 'infrastructure/export/field/PhabricatorEpochExportField.php', 'PhabricatorEvent' => 'infrastructure/events/PhabricatorEvent.php', 'PhabricatorEventEngine' => 'infrastructure/events/PhabricatorEventEngine.php', + 'PhabricatorEventListener' => 'infrastructure/events/PhabricatorEventListener.php', 'PhabricatorEventType' => 'infrastructure/events/constant/PhabricatorEventType.php', + 'PhabricatorExampleEventListener' => 'infrastructure/events/PhabricatorExampleEventListener.php', + 'PhabricatorExcelExportFormat' => 'infrastructure/export/format/PhabricatorExcelExportFormat.php', + 'PhabricatorExecFutureFileUploadSource' => 'applications/files/uploadsource/PhabricatorExecFutureFileUploadSource.php', + 'PhabricatorExitHisecUserLogType' => 'applications/people/userlog/PhabricatorExitHisecUserLogType.php', + 'PhabricatorExportEngine' => 'infrastructure/export/engine/PhabricatorExportEngine.php', + 'PhabricatorExportEngineBulkJobType' => 'infrastructure/export/engine/PhabricatorExportEngineBulkJobType.php', + 'PhabricatorExportEngineExtension' => 'infrastructure/export/engine/PhabricatorExportEngineExtension.php', + 'PhabricatorExportField' => 'infrastructure/export/field/PhabricatorExportField.php', + 'PhabricatorExportFormat' => 'infrastructure/export/format/PhabricatorExportFormat.php', + 'PhabricatorExportFormatSetting' => 'infrastructure/export/engine/PhabricatorExportFormatSetting.php', + 'PhabricatorExtendedPolicyInterface' => 'applications/policy/interface/PhabricatorExtendedPolicyInterface.php', + 'PhabricatorExtendingPhabricatorConfigOptions' => 'applications/config/option/PhabricatorExtendingPhabricatorConfigOptions.php', + 'PhabricatorExtensionsSetupCheck' => 'applications/config/check/PhabricatorExtensionsSetupCheck.php', + 'PhabricatorExternalAccount' => 'applications/people/storage/PhabricatorExternalAccount.php', + 'PhabricatorExternalAccountIdentifier' => 'applications/people/storage/PhabricatorExternalAccountIdentifier.php', + 'PhabricatorExternalAccountIdentifierQuery' => 'applications/auth/query/PhabricatorExternalAccountIdentifierQuery.php', + 'PhabricatorExternalAccountQuery' => 'applications/auth/query/PhabricatorExternalAccountQuery.php', + 'PhabricatorExternalAccountsSettingsPanel' => 'applications/settings/panel/PhabricatorExternalAccountsSettingsPanel.php', + 'PhabricatorExternalEditorSettingsPanel' => 'applications/settings/panel/PhabricatorExternalEditorSettingsPanel.php', + 'PhabricatorExtraConfigSetupCheck' => 'applications/config/check/PhabricatorExtraConfigSetupCheck.php', + 'PhabricatorFacebookAuthProvider' => 'applications/auth/provider/PhabricatorFacebookAuthProvider.php', + 'PhabricatorFact' => 'applications/fact/fact/PhabricatorFact.php', + 'PhabricatorFactAggregate' => 'applications/fact/storage/PhabricatorFactAggregate.php', + 'PhabricatorFactApplication' => 'applications/fact/application/PhabricatorFactApplication.php', + 'PhabricatorFactChart' => 'applications/fact/storage/PhabricatorFactChart.php', + 'PhabricatorFactChartController' => 'applications/fact/controller/PhabricatorFactChartController.php', + 'PhabricatorFactChartFunction' => 'applications/fact/chart/PhabricatorFactChartFunction.php', + 'PhabricatorFactController' => 'applications/fact/controller/PhabricatorFactController.php', + 'PhabricatorFactCursor' => 'applications/fact/storage/PhabricatorFactCursor.php', + 'PhabricatorFactDAO' => 'applications/fact/storage/PhabricatorFactDAO.php', + 'PhabricatorFactDaemon' => 'applications/fact/daemon/PhabricatorFactDaemon.php', + 'PhabricatorFactDatapointQuery' => 'applications/fact/query/PhabricatorFactDatapointQuery.php', + 'PhabricatorFactDimension' => 'applications/fact/storage/PhabricatorFactDimension.php', + 'PhabricatorFactEngine' => 'applications/fact/engine/PhabricatorFactEngine.php', + 'PhabricatorFactEngineTestCase' => 'applications/fact/engine/__tests__/PhabricatorFactEngineTestCase.php', + 'PhabricatorFactHomeController' => 'applications/fact/controller/PhabricatorFactHomeController.php', + 'PhabricatorFactIntDatapoint' => 'applications/fact/storage/PhabricatorFactIntDatapoint.php', + 'PhabricatorFactKeyDimension' => 'applications/fact/storage/PhabricatorFactKeyDimension.php', + 'PhabricatorFactManagementAnalyzeWorkflow' => 'applications/fact/management/PhabricatorFactManagementAnalyzeWorkflow.php', + 'PhabricatorFactManagementCursorsWorkflow' => 'applications/fact/management/PhabricatorFactManagementCursorsWorkflow.php', + 'PhabricatorFactManagementDestroyWorkflow' => 'applications/fact/management/PhabricatorFactManagementDestroyWorkflow.php', + 'PhabricatorFactManagementListWorkflow' => 'applications/fact/management/PhabricatorFactManagementListWorkflow.php', + 'PhabricatorFactManagementWorkflow' => 'applications/fact/management/PhabricatorFactManagementWorkflow.php', + 'PhabricatorFactObjectController' => 'applications/fact/controller/PhabricatorFactObjectController.php', + 'PhabricatorFactObjectDimension' => 'applications/fact/storage/PhabricatorFactObjectDimension.php', + 'PhabricatorFactRaw' => 'applications/fact/storage/PhabricatorFactRaw.php', + 'PhabricatorFactUpdateIterator' => 'applications/fact/extract/PhabricatorFactUpdateIterator.php', + 'PhabricatorFailHisecUserLogType' => 'applications/people/userlog/PhabricatorFailHisecUserLogType.php', + 'PhabricatorFaviconController' => 'applications/system/controller/PhabricatorFaviconController.php', + 'PhabricatorFaviconRef' => 'applications/files/favicon/PhabricatorFaviconRef.php', + 'PhabricatorFaviconRefQuery' => 'applications/files/favicon/PhabricatorFaviconRefQuery.php', + 'PhabricatorFavoritesApplication' => 'applications/favorites/application/PhabricatorFavoritesApplication.php', + 'PhabricatorFavoritesController' => 'applications/favorites/controller/PhabricatorFavoritesController.php', + 'PhabricatorFavoritesMainMenuBarExtension' => 'applications/favorites/engineextension/PhabricatorFavoritesMainMenuBarExtension.php', + 'PhabricatorFavoritesMenuItemController' => 'applications/favorites/controller/PhabricatorFavoritesMenuItemController.php', + 'PhabricatorFavoritesProfileMenuEngine' => 'applications/favorites/engine/PhabricatorFavoritesProfileMenuEngine.php', + 'PhabricatorFaxContentSource' => 'infrastructure/contentsource/PhabricatorFaxContentSource.php', + 'PhabricatorFeedApplication' => 'applications/feed/application/PhabricatorFeedApplication.php', 'PhabricatorFeedBuilder' => 'applications/feed/builder/PhabricatorFeedBuilder.php', - 'PhabricatorFeedConstants' => 'applications/feed/constants/PhabricatorFeedConstants.php', + 'PhabricatorFeedConfigOptions' => 'applications/feed/config/PhabricatorFeedConfigOptions.php', 'PhabricatorFeedController' => 'applications/feed/controller/PhabricatorFeedController.php', 'PhabricatorFeedDAO' => 'applications/feed/storage/PhabricatorFeedDAO.php', - 'PhabricatorFeedPublicStreamController' => 'applications/feed/controller/PhabricatorFeedPublicStreamController.php', - 'PhabricatorFeedQuery' => 'applications/feed/PhabricatorFeedQuery.php', + 'PhabricatorFeedDetailController' => 'applications/feed/controller/PhabricatorFeedDetailController.php', + 'PhabricatorFeedListController' => 'applications/feed/controller/PhabricatorFeedListController.php', + 'PhabricatorFeedManagementRepublishWorkflow' => 'applications/feed/management/PhabricatorFeedManagementRepublishWorkflow.php', + 'PhabricatorFeedManagementWorkflow' => 'applications/feed/management/PhabricatorFeedManagementWorkflow.php', + 'PhabricatorFeedQuery' => 'applications/feed/query/PhabricatorFeedQuery.php', + 'PhabricatorFeedSearchEngine' => 'applications/feed/query/PhabricatorFeedSearchEngine.php', 'PhabricatorFeedStory' => 'applications/feed/story/PhabricatorFeedStory.php', - 'PhabricatorFeedStoryAudit' => 'applications/feed/story/PhabricatorFeedStoryAudit.php', 'PhabricatorFeedStoryData' => 'applications/feed/storage/PhabricatorFeedStoryData.php', - 'PhabricatorFeedStoryDifferential' => 'applications/feed/story/PhabricatorFeedStoryDifferential.php', - 'PhabricatorFeedStoryManiphest' => 'applications/feed/story/PhabricatorFeedStoryManiphest.php', 'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php', - 'PhabricatorFeedStoryPhriction' => 'applications/feed/story/PhabricatorFeedStoryPhriction.php', - 'PhabricatorFeedStoryProject' => 'applications/feed/story/PhabricatorFeedStoryProject.php', 'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php', 'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php', - 'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php', - 'PhabricatorFeedStoryTypeConstants' => 'applications/feed/constants/PhabricatorFeedStoryTypeConstants.php', - 'PhabricatorFeedStoryUnknown' => 'applications/feed/story/PhabricatorFeedStoryUnknown.php', - 'PhabricatorFeedStoryView' => 'applications/feed/view/PhabricatorFeedStoryView.php', - 'PhabricatorFeedView' => 'applications/feed/view/PhabricatorFeedView.php', + 'PhabricatorFeedTransactionListController' => 'applications/feed/controller/PhabricatorFeedTransactionListController.php', + 'PhabricatorFeedTransactionQuery' => 'applications/feed/query/PhabricatorFeedTransactionQuery.php', + 'PhabricatorFeedTransactionSearchEngine' => 'applications/feed/query/PhabricatorFeedTransactionSearchEngine.php', + 'PhabricatorFerretEngine' => 'applications/search/ferret/PhabricatorFerretEngine.php', + 'PhabricatorFerretEngineTestCase' => 'applications/search/ferret/__tests__/PhabricatorFerretEngineTestCase.php', + 'PhabricatorFerretFulltextEngineExtension' => 'applications/search/engineextension/PhabricatorFerretFulltextEngineExtension.php', + 'PhabricatorFerretFulltextStorageEngine' => 'applications/search/fulltextstorage/PhabricatorFerretFulltextStorageEngine.php', + 'PhabricatorFerretInterface' => 'applications/search/ferret/PhabricatorFerretInterface.php', + 'PhabricatorFerretMetadata' => 'applications/search/ferret/PhabricatorFerretMetadata.php', + 'PhabricatorFerretSearchEngineExtension' => 'applications/search/engineextension/PhabricatorFerretSearchEngineExtension.php', 'PhabricatorFile' => 'applications/files/storage/PhabricatorFile.php', + 'PhabricatorFileAES256StorageFormat' => 'applications/files/format/PhabricatorFileAES256StorageFormat.php', + 'PhabricatorFileAltTextTransaction' => 'applications/files/xaction/PhabricatorFileAltTextTransaction.php', + 'PhabricatorFileAttachment' => 'applications/files/storage/PhabricatorFileAttachment.php', + 'PhabricatorFileAttachmentQuery' => 'applications/files/query/PhabricatorFileAttachmentQuery.php', + 'PhabricatorFileBundleLoader' => 'applications/files/query/PhabricatorFileBundleLoader.php', + 'PhabricatorFileChunk' => 'applications/files/storage/PhabricatorFileChunk.php', + 'PhabricatorFileChunkIterator' => 'applications/files/engine/PhabricatorFileChunkIterator.php', + 'PhabricatorFileChunkQuery' => 'applications/files/query/PhabricatorFileChunkQuery.php', + 'PhabricatorFileComposeController' => 'applications/files/controller/PhabricatorFileComposeController.php', 'PhabricatorFileController' => 'applications/files/controller/PhabricatorFileController.php', 'PhabricatorFileDAO' => 'applications/files/storage/PhabricatorFileDAO.php', 'PhabricatorFileDataController' => 'applications/files/controller/PhabricatorFileDataController.php', 'PhabricatorFileDeleteController' => 'applications/files/controller/PhabricatorFileDeleteController.php', + 'PhabricatorFileDeleteTransaction' => 'applications/files/xaction/PhabricatorFileDeleteTransaction.php', + 'PhabricatorFileDetachController' => 'applications/files/controller/PhabricatorFileDetachController.php', + 'PhabricatorFileDocumentController' => 'applications/files/controller/PhabricatorFileDocumentController.php', + 'PhabricatorFileDocumentRenderingEngine' => 'applications/files/document/render/PhabricatorFileDocumentRenderingEngine.php', 'PhabricatorFileDropUploadController' => 'applications/files/controller/PhabricatorFileDropUploadController.php', - 'PhabricatorFileImageMacro' => 'applications/files/storage/PhabricatorFileImageMacro.php', - 'PhabricatorFileInfoController' => 'applications/files/controller/PhabricatorFileInfoController.php', + 'PhabricatorFileEditController' => 'applications/files/controller/PhabricatorFileEditController.php', + 'PhabricatorFileEditEngine' => 'applications/files/editor/PhabricatorFileEditEngine.php', + 'PhabricatorFileEditField' => 'applications/transactions/editfield/PhabricatorFileEditField.php', + 'PhabricatorFileEditor' => 'applications/files/editor/PhabricatorFileEditor.php', + 'PhabricatorFileExternalRequest' => 'applications/files/storage/PhabricatorFileExternalRequest.php', + 'PhabricatorFileExternalRequestGarbageCollector' => 'applications/files/garbagecollector/PhabricatorFileExternalRequestGarbageCollector.php', + 'PhabricatorFileFilePHIDType' => 'applications/files/phid/PhabricatorFileFilePHIDType.php', + 'PhabricatorFileIconSetSelectController' => 'applications/files/controller/PhabricatorFileIconSetSelectController.php', + 'PhabricatorFileImageMacro' => 'applications/macro/storage/PhabricatorFileImageMacro.php', + 'PhabricatorFileImageProxyController' => 'applications/files/controller/PhabricatorFileImageProxyController.php', + 'PhabricatorFileImageTransform' => 'applications/files/transform/PhabricatorFileImageTransform.php', + 'PhabricatorFileIntegrityException' => 'applications/files/exception/PhabricatorFileIntegrityException.php', + 'PhabricatorFileLightboxController' => 'applications/files/controller/PhabricatorFileLightboxController.php', + 'PhabricatorFileLinkView' => 'view/layout/PhabricatorFileLinkView.php', 'PhabricatorFileListController' => 'applications/files/controller/PhabricatorFileListController.php', - 'PhabricatorFileMacroDeleteController' => 'applications/files/controller/PhabricatorFileMacroDeleteController.php', - 'PhabricatorFileMacroEditController' => 'applications/files/controller/PhabricatorFileMacroEditController.php', - 'PhabricatorFileMacroListController' => 'applications/files/controller/PhabricatorFileMacroListController.php', - 'PhabricatorFileProxyController' => 'applications/files/controller/PhabricatorFileProxyController.php', - 'PhabricatorFileProxyImage' => 'applications/files/storage/PhabricatorFileProxyImage.php', - 'PhabricatorFileShortcutController' => 'applications/files/controller/PhabricatorFileShortcutController.php', - 'PhabricatorFileSideNavView' => 'applications/files/view/PhabricatorFileSideNavView.php', + 'PhabricatorFileNameNgrams' => 'applications/files/storage/PhabricatorFileNameNgrams.php', + 'PhabricatorFileNameTransaction' => 'applications/files/xaction/PhabricatorFileNameTransaction.php', + 'PhabricatorFileQuery' => 'applications/files/query/PhabricatorFileQuery.php', + 'PhabricatorFileROT13StorageFormat' => 'applications/files/format/PhabricatorFileROT13StorageFormat.php', + 'PhabricatorFileRawStorageFormat' => 'applications/files/format/PhabricatorFileRawStorageFormat.php', + 'PhabricatorFileSchemaSpec' => 'applications/files/storage/PhabricatorFileSchemaSpec.php', + 'PhabricatorFileSearchConduitAPIMethod' => 'applications/files/conduit/PhabricatorFileSearchConduitAPIMethod.php', + 'PhabricatorFileSearchEngine' => 'applications/files/query/PhabricatorFileSearchEngine.php', 'PhabricatorFileStorageBlob' => 'applications/files/storage/PhabricatorFileStorageBlob.php', 'PhabricatorFileStorageConfigurationException' => 'applications/files/exception/PhabricatorFileStorageConfigurationException.php', 'PhabricatorFileStorageEngine' => 'applications/files/engine/PhabricatorFileStorageEngine.php', - 'PhabricatorFileStorageEngineSelector' => 'applications/files/engineselector/PhabricatorFileStorageEngineSelector.php', + 'PhabricatorFileStorageEngineTestCase' => 'applications/files/engine/__tests__/PhabricatorFileStorageEngineTestCase.php', + 'PhabricatorFileStorageFormat' => 'applications/files/format/PhabricatorFileStorageFormat.php', + 'PhabricatorFileStorageFormatTestCase' => 'applications/files/format/__tests__/PhabricatorFileStorageFormatTestCase.php', + 'PhabricatorFileTemporaryGarbageCollector' => 'applications/files/garbagecollector/PhabricatorFileTemporaryGarbageCollector.php', + 'PhabricatorFileTestCase' => 'applications/files/storage/__tests__/PhabricatorFileTestCase.php', + 'PhabricatorFileTestDataGenerator' => 'applications/files/lipsum/PhabricatorFileTestDataGenerator.php', + 'PhabricatorFileThumbnailTransform' => 'applications/files/transform/PhabricatorFileThumbnailTransform.php', + 'PhabricatorFileTransaction' => 'applications/files/storage/PhabricatorFileTransaction.php', + 'PhabricatorFileTransactionComment' => 'applications/files/storage/PhabricatorFileTransactionComment.php', + 'PhabricatorFileTransactionQuery' => 'applications/files/query/PhabricatorFileTransactionQuery.php', + 'PhabricatorFileTransactionType' => 'applications/files/xaction/PhabricatorFileTransactionType.php', + 'PhabricatorFileTransform' => 'applications/files/transform/PhabricatorFileTransform.php', 'PhabricatorFileTransformController' => 'applications/files/controller/PhabricatorFileTransformController.php', + 'PhabricatorFileTransformListController' => 'applications/files/controller/PhabricatorFileTransformListController.php', + 'PhabricatorFileTransformTestCase' => 'applications/files/transform/__tests__/PhabricatorFileTransformTestCase.php', + 'PhabricatorFileUICurtainAttachController' => 'applications/files/controller/PhabricatorFileUICurtainAttachController.php', + 'PhabricatorFileUICurtainListController' => 'applications/files/controller/PhabricatorFileUICurtainListController.php', 'PhabricatorFileUploadController' => 'applications/files/controller/PhabricatorFileUploadController.php', + 'PhabricatorFileUploadDialogController' => 'applications/files/controller/PhabricatorFileUploadDialogController.php', 'PhabricatorFileUploadException' => 'applications/files/exception/PhabricatorFileUploadException.php', - 'PhabricatorFileUploadView' => 'applications/files/view/PhabricatorFileUploadView.php', + 'PhabricatorFileUploadSource' => 'applications/files/uploadsource/PhabricatorFileUploadSource.php', + 'PhabricatorFileUploadSourceByteLimitException' => 'applications/files/uploadsource/PhabricatorFileUploadSourceByteLimitException.php', + 'PhabricatorFileViewController' => 'applications/files/controller/PhabricatorFileViewController.php', + 'PhabricatorFileinfoSetupCheck' => 'applications/config/check/PhabricatorFileinfoSetupCheck.php', + 'PhabricatorFilesApplication' => 'applications/files/application/PhabricatorFilesApplication.php', + 'PhabricatorFilesApplicationStorageEnginePanel' => 'applications/files/applicationpanel/PhabricatorFilesApplicationStorageEnginePanel.php', + 'PhabricatorFilesBuiltinFile' => 'applications/files/builtin/PhabricatorFilesBuiltinFile.php', + 'PhabricatorFilesComposeAvatarBuiltinFile' => 'applications/files/builtin/PhabricatorFilesComposeAvatarBuiltinFile.php', + 'PhabricatorFilesComposeIconBuiltinFile' => 'applications/files/builtin/PhabricatorFilesComposeIconBuiltinFile.php', + 'PhabricatorFilesConfigOptions' => 'applications/files/config/PhabricatorFilesConfigOptions.php', + 'PhabricatorFilesCurtainExtension' => 'applications/files/engineextension/PhabricatorFilesCurtainExtension.php', + 'PhabricatorFilesManagementCatWorkflow' => 'applications/files/management/PhabricatorFilesManagementCatWorkflow.php', + 'PhabricatorFilesManagementCompactWorkflow' => 'applications/files/management/PhabricatorFilesManagementCompactWorkflow.php', + 'PhabricatorFilesManagementCycleWorkflow' => 'applications/files/management/PhabricatorFilesManagementCycleWorkflow.php', + 'PhabricatorFilesManagementEncodeWorkflow' => 'applications/files/management/PhabricatorFilesManagementEncodeWorkflow.php', + 'PhabricatorFilesManagementEnginesWorkflow' => 'applications/files/management/PhabricatorFilesManagementEnginesWorkflow.php', + 'PhabricatorFilesManagementGenerateKeyWorkflow' => 'applications/files/management/PhabricatorFilesManagementGenerateKeyWorkflow.php', + 'PhabricatorFilesManagementIntegrityWorkflow' => 'applications/files/management/PhabricatorFilesManagementIntegrityWorkflow.php', + 'PhabricatorFilesManagementMigrateWorkflow' => 'applications/files/management/PhabricatorFilesManagementMigrateWorkflow.php', + 'PhabricatorFilesManagementRebuildWorkflow' => 'applications/files/management/PhabricatorFilesManagementRebuildWorkflow.php', + 'PhabricatorFilesManagementWorkflow' => 'applications/files/management/PhabricatorFilesManagementWorkflow.php', + 'PhabricatorFilesOnDiskBuiltinFile' => 'applications/files/builtin/PhabricatorFilesOnDiskBuiltinFile.php', + 'PhabricatorFilesOutboundRequestAction' => 'applications/files/action/PhabricatorFilesOutboundRequestAction.php', + 'PhabricatorFiletreeVisibleSetting' => 'applications/settings/setting/PhabricatorFiletreeVisibleSetting.php', + 'PhabricatorFiletreeWidthSetting' => 'applications/settings/setting/PhabricatorFiletreeWidthSetting.php', 'PhabricatorFlag' => 'applications/flag/storage/PhabricatorFlag.php', + 'PhabricatorFlagAddFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagAddFlagHeraldAction.php', 'PhabricatorFlagColor' => 'applications/flag/constants/PhabricatorFlagColor.php', 'PhabricatorFlagConstants' => 'applications/flag/constants/PhabricatorFlagConstants.php', 'PhabricatorFlagController' => 'applications/flag/controller/PhabricatorFlagController.php', 'PhabricatorFlagDAO' => 'applications/flag/storage/PhabricatorFlagDAO.php', 'PhabricatorFlagDeleteController' => 'applications/flag/controller/PhabricatorFlagDeleteController.php', + 'PhabricatorFlagDestructionEngineExtension' => 'applications/flag/engineextension/PhabricatorFlagDestructionEngineExtension.php', 'PhabricatorFlagEditController' => 'applications/flag/controller/PhabricatorFlagEditController.php', + 'PhabricatorFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagHeraldAction.php', 'PhabricatorFlagListController' => 'applications/flag/controller/PhabricatorFlagListController.php', - 'PhabricatorFlagListView' => 'applications/flag/view/PhabricatorFlagListView.php', 'PhabricatorFlagQuery' => 'applications/flag/query/PhabricatorFlagQuery.php', - 'PhabricatorFormExample' => 'applications/uiexample/examples/PhabricatorFormExample.php', - 'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/PhabricatorGarbageCollectorDaemon.php', - 'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/PhabricatorGoodForNothingWorker.php', + 'PhabricatorFlagRemoveFlagHeraldAction' => 'applications/flag/herald/PhabricatorFlagRemoveFlagHeraldAction.php', + 'PhabricatorFlagSearchEngine' => 'applications/flag/query/PhabricatorFlagSearchEngine.php', + 'PhabricatorFlagSelectControl' => 'applications/flag/view/PhabricatorFlagSelectControl.php', + 'PhabricatorFlaggableInterface' => 'applications/flag/interface/PhabricatorFlaggableInterface.php', + 'PhabricatorFlagsApplication' => 'applications/flag/application/PhabricatorFlagsApplication.php', + 'PhabricatorFlagsUIEventListener' => 'applications/flag/events/PhabricatorFlagsUIEventListener.php', + 'PhabricatorFullLoginUserLogType' => 'applications/people/userlog/PhabricatorFullLoginUserLogType.php', + 'PhabricatorFulltextEngine' => 'applications/search/index/PhabricatorFulltextEngine.php', + 'PhabricatorFulltextEngineExtension' => 'applications/search/index/PhabricatorFulltextEngineExtension.php', + 'PhabricatorFulltextEngineExtensionModule' => 'applications/search/index/PhabricatorFulltextEngineExtensionModule.php', + 'PhabricatorFulltextIndexEngineExtension' => 'applications/search/engineextension/PhabricatorFulltextIndexEngineExtension.php', + 'PhabricatorFulltextInterface' => 'applications/search/interface/PhabricatorFulltextInterface.php', + 'PhabricatorFulltextResultSet' => 'applications/search/query/PhabricatorFulltextResultSet.php', + 'PhabricatorFulltextStorageEngine' => 'applications/search/fulltextstorage/PhabricatorFulltextStorageEngine.php', + 'PhabricatorFulltextToken' => 'applications/search/query/PhabricatorFulltextToken.php', + 'PhabricatorFundApplication' => 'applications/fund/application/PhabricatorFundApplication.php', + 'PhabricatorGDSetupCheck' => 'applications/config/check/PhabricatorGDSetupCheck.php', + 'PhabricatorGarbageCollector' => 'infrastructure/daemon/garbagecollector/PhabricatorGarbageCollector.php', + 'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementCollectWorkflow.php', + 'PhabricatorGarbageCollectorManagementCompactEdgesWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementCompactEdgesWorkflow.php', + 'PhabricatorGarbageCollectorManagementSetPolicyWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementSetPolicyWorkflow.php', + 'PhabricatorGarbageCollectorManagementWorkflow' => 'infrastructure/daemon/garbagecollector/management/PhabricatorGarbageCollectorManagementWorkflow.php', + 'PhabricatorGeneralCachePurger' => 'applications/cache/purger/PhabricatorGeneralCachePurger.php', + 'PhabricatorGestureUIExample' => 'applications/uiexample/examples/PhabricatorGestureUIExample.php', + 'PhabricatorGitGraphStream' => 'applications/repository/daemon/PhabricatorGitGraphStream.php', + 'PhabricatorGitHubAuthProvider' => 'applications/auth/provider/PhabricatorGitHubAuthProvider.php', + 'PhabricatorGlobalLock' => 'infrastructure/util/PhabricatorGlobalLock.php', + 'PhabricatorGlobalLockTestCase' => 'infrastructure/util/__tests__/PhabricatorGlobalLockTestCase.php', + 'PhabricatorGlobalUploadTargetView' => 'applications/files/view/PhabricatorGlobalUploadTargetView.php', + 'PhabricatorGoogleAuthProvider' => 'applications/auth/provider/PhabricatorGoogleAuthProvider.php', + 'PhabricatorGuidanceContext' => 'applications/guides/guidance/PhabricatorGuidanceContext.php', + 'PhabricatorGuidanceEngine' => 'applications/guides/guidance/PhabricatorGuidanceEngine.php', + 'PhabricatorGuidanceEngineExtension' => 'applications/guides/guidance/PhabricatorGuidanceEngineExtension.php', + 'PhabricatorGuidanceMessage' => 'applications/guides/guidance/PhabricatorGuidanceMessage.php', + 'PhabricatorGuideApplication' => 'applications/guides/application/PhabricatorGuideApplication.php', + 'PhabricatorGuideController' => 'applications/guides/controller/PhabricatorGuideController.php', + 'PhabricatorGuideInstallModule' => 'applications/guides/module/PhabricatorGuideInstallModule.php', + 'PhabricatorGuideItemView' => 'applications/guides/view/PhabricatorGuideItemView.php', + 'PhabricatorGuideListView' => 'applications/guides/view/PhabricatorGuideListView.php', + 'PhabricatorGuideModule' => 'applications/guides/module/PhabricatorGuideModule.php', + 'PhabricatorGuideModuleController' => 'applications/guides/controller/PhabricatorGuideModuleController.php', + 'PhabricatorGuideQuickStartModule' => 'applications/guides/module/PhabricatorGuideQuickStartModule.php', + 'PhabricatorHMACTestCase' => 'infrastructure/util/__tests__/PhabricatorHMACTestCase.php', + 'PhabricatorHTTPParameterTypeTableView' => 'applications/config/view/PhabricatorHTTPParameterTypeTableView.php', + 'PhabricatorHandleList' => 'applications/phid/handle/pool/PhabricatorHandleList.php', 'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/PhabricatorHandleObjectSelectorDataView.php', + 'PhabricatorHandlePool' => 'applications/phid/handle/pool/PhabricatorHandlePool.php', + 'PhabricatorHandlePoolTestCase' => 'applications/phid/handle/pool/__tests__/PhabricatorHandlePoolTestCase.php', + 'PhabricatorHandleQuery' => 'applications/phid/query/PhabricatorHandleQuery.php', + 'PhabricatorHandleRemarkupRule' => 'applications/phid/remarkup/PhabricatorHandleRemarkupRule.php', + 'PhabricatorHandlesEditField' => 'applications/transactions/editfield/PhabricatorHandlesEditField.php', + 'PhabricatorHarbormasterApplication' => 'applications/harbormaster/application/PhabricatorHarbormasterApplication.php', 'PhabricatorHash' => 'infrastructure/util/PhabricatorHash.php', + 'PhabricatorHashTestCase' => 'infrastructure/util/__tests__/PhabricatorHashTestCase.php', + 'PhabricatorHelpApplication' => 'applications/help/application/PhabricatorHelpApplication.php', 'PhabricatorHelpController' => 'applications/help/controller/PhabricatorHelpController.php', + 'PhabricatorHelpDocumentationController' => 'applications/help/controller/PhabricatorHelpDocumentationController.php', 'PhabricatorHelpKeyboardShortcutController' => 'applications/help/controller/PhabricatorHelpKeyboardShortcutController.php', - 'PhabricatorIDPagedPolicyQuery' => 'infrastructure/query/policy/PhabricatorIDPagedPolicyQuery.php', - 'PhabricatorIRCBot' => 'infrastructure/daemon/irc/PhabricatorIRCBot.php', - 'PhabricatorIRCDifferentialNotificationHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCDifferentialNotificationHandler.php', - 'PhabricatorIRCHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCHandler.php', - 'PhabricatorIRCLogHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCLogHandler.php', - 'PhabricatorIRCMacroHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCMacroHandler.php', - 'PhabricatorIRCMessage' => 'infrastructure/daemon/irc/PhabricatorIRCMessage.php', - 'PhabricatorIRCObjectNameHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCObjectNameHandler.php', - 'PhabricatorIRCProtocolHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCProtocolHandler.php', - 'PhabricatorIRCWhatsNewHandler' => 'infrastructure/daemon/irc/handler/PhabricatorIRCWhatsNewHandler.php', + 'PhabricatorHeraldApplication' => 'applications/herald/application/PhabricatorHeraldApplication.php', + 'PhabricatorHeraldContentSource' => 'applications/herald/contentsource/PhabricatorHeraldContentSource.php', + 'PhabricatorHexdumpDocumentEngine' => 'applications/files/document/PhabricatorHexdumpDocumentEngine.php', + 'PhabricatorHighSecurityRequestExceptionHandler' => 'aphront/handler/PhabricatorHighSecurityRequestExceptionHandler.php', + 'PhabricatorHigherOrderChartFunction' => 'applications/fact/chart/PhabricatorHigherOrderChartFunction.php', + 'PhabricatorHomeApplication' => 'applications/home/application/PhabricatorHomeApplication.php', + 'PhabricatorHomeConstants' => 'applications/home/constants/PhabricatorHomeConstants.php', + 'PhabricatorHomeController' => 'applications/home/controller/PhabricatorHomeController.php', + 'PhabricatorHomeLauncherProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeLauncherProfileMenuItem.php', + 'PhabricatorHomeMenuItemController' => 'applications/home/controller/PhabricatorHomeMenuItemController.php', + 'PhabricatorHomeProfileMenuEngine' => 'applications/home/engine/PhabricatorHomeProfileMenuEngine.php', + 'PhabricatorHomeProfileMenuItem' => 'applications/home/menuitem/PhabricatorHomeProfileMenuItem.php', + 'PhabricatorHovercardEngineExtension' => 'applications/search/engineextension/PhabricatorHovercardEngineExtension.php', + 'PhabricatorHovercardEngineExtensionModule' => 'applications/search/engineextension/PhabricatorHovercardEngineExtensionModule.php', + 'PhabricatorIDExportField' => 'infrastructure/export/field/PhabricatorIDExportField.php', + 'PhabricatorIDsSearchEngineExtension' => 'applications/search/engineextension/PhabricatorIDsSearchEngineExtension.php', + 'PhabricatorIDsSearchField' => 'applications/search/field/PhabricatorIDsSearchField.php', + 'PhabricatorIconDatasource' => 'applications/files/typeahead/PhabricatorIconDatasource.php', + 'PhabricatorIconRemarkupRule' => 'applications/macro/markup/PhabricatorIconRemarkupRule.php', + 'PhabricatorIconSet' => 'applications/files/iconset/PhabricatorIconSet.php', + 'PhabricatorIconSetEditField' => 'applications/transactions/editfield/PhabricatorIconSetEditField.php', + 'PhabricatorIconSetIcon' => 'applications/files/iconset/PhabricatorIconSetIcon.php', + 'PhabricatorImageDocumentEngine' => 'applications/files/document/PhabricatorImageDocumentEngine.php', + 'PhabricatorImageMacroRemarkupRule' => 'applications/macro/markup/PhabricatorImageMacroRemarkupRule.php', + 'PhabricatorImageRemarkupRule' => 'applications/files/markup/PhabricatorImageRemarkupRule.php', 'PhabricatorImageTransformer' => 'applications/files/PhabricatorImageTransformer.php', - 'PhabricatorInfrastructureTestCase' => 'infrastructure/__tests__/PhabricatorInfrastructureTestCase.php', + 'PhabricatorImagemagickSetupCheck' => 'applications/config/check/PhabricatorImagemagickSetupCheck.php', + 'PhabricatorInFlightErrorView' => 'applications/config/view/PhabricatorInFlightErrorView.php', + 'PhabricatorIndexEngine' => 'applications/search/index/PhabricatorIndexEngine.php', + 'PhabricatorIndexEngineExtension' => 'applications/search/index/PhabricatorIndexEngineExtension.php', + 'PhabricatorIndexEngineExtensionModule' => 'applications/search/index/PhabricatorIndexEngineExtensionModule.php', + 'PhabricatorIndexableInterface' => 'applications/search/interface/PhabricatorIndexableInterface.php', + 'PhabricatorInfrastructureTestCase' => '__tests__/PhabricatorInfrastructureTestCase.php', + 'PhabricatorInlineComment' => 'infrastructure/diff/interface/PhabricatorInlineComment.php', + 'PhabricatorInlineCommentAdjustmentEngine' => 'infrastructure/diff/engine/PhabricatorInlineCommentAdjustmentEngine.php', + 'PhabricatorInlineCommentContentState' => 'infrastructure/diff/inline/PhabricatorInlineCommentContentState.php', + 'PhabricatorInlineCommentContext' => 'infrastructure/diff/inline/PhabricatorInlineCommentContext.php', 'PhabricatorInlineCommentController' => 'infrastructure/diff/PhabricatorInlineCommentController.php', - 'PhabricatorInlineCommentInterface' => 'infrastructure/diff/interface/PhabricatorInlineCommentInterface.php', + 'PhabricatorInlineCommentInterface' => 'applications/transactions/interface/PhabricatorInlineCommentInterface.php', 'PhabricatorInlineSummaryView' => 'infrastructure/diff/view/PhabricatorInlineSummaryView.php', + 'PhabricatorInstructionsEditField' => 'applications/transactions/editfield/PhabricatorInstructionsEditField.php', + 'PhabricatorIntConfigType' => 'applications/config/type/PhabricatorIntConfigType.php', + 'PhabricatorIntEditField' => 'applications/transactions/editfield/PhabricatorIntEditField.php', + 'PhabricatorIntExportField' => 'infrastructure/export/field/PhabricatorIntExportField.php', + 'PhabricatorInternalSetting' => 'applications/settings/setting/PhabricatorInternalSetting.php', + 'PhabricatorInternationalizationManagementExtractWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementExtractWorkflow.php', + 'PhabricatorInternationalizationManagementWorkflow' => 'infrastructure/internationalization/management/PhabricatorInternationalizationManagementWorkflow.php', + 'PhabricatorInvalidConfigSetupCheck' => 'applications/config/check/PhabricatorInvalidConfigSetupCheck.php', + 'PhabricatorInvalidQueryCursorException' => 'infrastructure/query/exception/PhabricatorInvalidQueryCursorException.php', + 'PhabricatorIteratedMD5PasswordHasher' => 'infrastructure/util/password/PhabricatorIteratedMD5PasswordHasher.php', + 'PhabricatorIteratedMD5PasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorIteratedMD5PasswordHasherTestCase.php', + 'PhabricatorIteratorFileUploadSource' => 'applications/files/uploadsource/PhabricatorIteratorFileUploadSource.php', + 'PhabricatorJIRAAuthProvider' => 'applications/auth/provider/PhabricatorJIRAAuthProvider.php', + 'PhabricatorJSONConfigType' => 'applications/config/type/PhabricatorJSONConfigType.php', + 'PhabricatorJSONDocumentEngine' => 'applications/files/document/PhabricatorJSONDocumentEngine.php', + 'PhabricatorJSONExportFormat' => 'infrastructure/export/format/PhabricatorJSONExportFormat.php', 'PhabricatorJavelinLinter' => 'infrastructure/lint/linter/PhabricatorJavelinLinter.php', - 'PhabricatorJumpNavHandler' => 'applications/search/engine/PhabricatorJumpNavHandler.php', - 'PhabricatorLDAPLoginController' => 'applications/auth/controller/PhabricatorLDAPLoginController.php', - 'PhabricatorLDAPProvider' => 'applications/auth/ldap/PhabricatorLDAPProvider.php', - 'PhabricatorLDAPRegistrationController' => 'applications/auth/controller/PhabricatorLDAPRegistrationController.php', - 'PhabricatorLDAPUnlinkController' => 'applications/auth/controller/PhabricatorLDAPUnlinkController.php', - 'PhabricatorLintEngine' => 'infrastructure/lint/PhabricatorLintEngine.php', - 'PhabricatorLiskDAO' => 'applications/base/storage/PhabricatorLiskDAO.php', + 'PhabricatorJiraIssueHasObjectEdgeType' => 'applications/doorkeeper/edge/PhabricatorJiraIssueHasObjectEdgeType.php', + 'PhabricatorJupyterDocumentEngine' => 'applications/files/document/PhabricatorJupyterDocumentEngine.php', + 'PhabricatorKeyValueDatabaseCache' => 'applications/cache/PhabricatorKeyValueDatabaseCache.php', + 'PhabricatorKeyValueSerializingCacheProxy' => 'applications/cache/PhabricatorKeyValueSerializingCacheProxy.php', + 'PhabricatorKeyboardRemarkupRule' => 'infrastructure/markup/rule/PhabricatorKeyboardRemarkupRule.php', + 'PhabricatorKeyring' => 'applications/files/keyring/PhabricatorKeyring.php', + 'PhabricatorKeyringConfigOptionType' => 'applications/files/keyring/PhabricatorKeyringConfigOptionType.php', + 'PhabricatorLDAPAuthProvider' => 'applications/auth/provider/PhabricatorLDAPAuthProvider.php', + 'PhabricatorLabelProfileMenuItem' => 'applications/search/menuitem/PhabricatorLabelProfileMenuItem.php', + 'PhabricatorLanguageSettingsPanel' => 'applications/settings/panel/PhabricatorLanguageSettingsPanel.php', + 'PhabricatorLegalpadApplication' => 'applications/legalpad/application/PhabricatorLegalpadApplication.php', + 'PhabricatorLegalpadDocumentPHIDType' => 'applications/legalpad/phid/PhabricatorLegalpadDocumentPHIDType.php', + 'PhabricatorLegalpadSignaturePolicyRule' => 'applications/legalpad/policyrule/PhabricatorLegalpadSignaturePolicyRule.php', + 'PhabricatorLibraryTestCase' => '__tests__/PhabricatorLibraryTestCase.php', + 'PhabricatorLinkProfileMenuItem' => 'applications/search/menuitem/PhabricatorLinkProfileMenuItem.php', + 'PhabricatorLipsumArtist' => 'applications/lipsum/image/PhabricatorLipsumArtist.php', + 'PhabricatorLipsumContentSource' => 'infrastructure/contentsource/PhabricatorLipsumContentSource.php', + 'PhabricatorLipsumGenerateWorkflow' => 'applications/lipsum/management/PhabricatorLipsumGenerateWorkflow.php', + 'PhabricatorLipsumManagementWorkflow' => 'applications/lipsum/management/PhabricatorLipsumManagementWorkflow.php', + 'PhabricatorLipsumMondrianArtist' => 'applications/lipsum/image/PhabricatorLipsumMondrianArtist.php', + 'PhabricatorLiskDAO' => 'infrastructure/storage/lisk/PhabricatorLiskDAO.php', + 'PhabricatorLiskExportEngineExtension' => 'infrastructure/export/engine/PhabricatorLiskExportEngineExtension.php', + 'PhabricatorLiskFulltextEngineExtension' => 'applications/search/engineextension/PhabricatorLiskFulltextEngineExtension.php', + 'PhabricatorLiskSearchEngineExtension' => 'applications/search/engineextension/PhabricatorLiskSearchEngineExtension.php', + 'PhabricatorLiskSerializer' => 'infrastructure/storage/lisk/PhabricatorLiskSerializer.php', + 'PhabricatorListExportField' => 'infrastructure/export/field/PhabricatorListExportField.php', 'PhabricatorLocalDiskFileStorageEngine' => 'applications/files/engine/PhabricatorLocalDiskFileStorageEngine.php', 'PhabricatorLocalTimeTestCase' => 'view/__tests__/PhabricatorLocalTimeTestCase.php', - 'PhabricatorLoginController' => 'applications/auth/controller/PhabricatorLoginController.php', - 'PhabricatorLoginValidateController' => 'applications/auth/controller/PhabricatorLoginValidateController.php', + 'PhabricatorLocaleScopeGuard' => 'infrastructure/internationalization/scope/PhabricatorLocaleScopeGuard.php', + 'PhabricatorLocaleScopeGuardTestCase' => 'infrastructure/internationalization/scope/__tests__/PhabricatorLocaleScopeGuardTestCase.php', + 'PhabricatorLockLogManagementWorkflow' => 'applications/daemon/management/PhabricatorLockLogManagementWorkflow.php', + 'PhabricatorLockManagementWorkflow' => 'applications/daemon/management/PhabricatorLockManagementWorkflow.php', + 'PhabricatorLogTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorLogTriggerAction.php', + 'PhabricatorLoginFailureUserLogType' => 'applications/people/userlog/PhabricatorLoginFailureUserLogType.php', + 'PhabricatorLoginUserLogType' => 'applications/people/userlog/PhabricatorLoginUserLogType.php', 'PhabricatorLogoutController' => 'applications/auth/controller/PhabricatorLogoutController.php', - 'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAdapter.php', - 'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationAmazonSESAdapter.php', - 'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationPHPMailerLiteAdapter.php', - 'PhabricatorMailImplementationSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationSendGridAdapter.php', - 'PhabricatorMailImplementationTestAdapter' => 'applications/metamta/adapter/PhabricatorMailImplementationTestAdapter.php', + 'PhabricatorLogoutUserLogType' => 'applications/people/userlog/PhabricatorLogoutUserLogType.php', + 'PhabricatorLunarPhasePolicyRule' => 'applications/policy/rule/PhabricatorLunarPhasePolicyRule.php', + 'PhabricatorMacroApplication' => 'applications/macro/application/PhabricatorMacroApplication.php', + 'PhabricatorMacroAudioBehaviorTransaction' => 'applications/macro/xaction/PhabricatorMacroAudioBehaviorTransaction.php', + 'PhabricatorMacroAudioController' => 'applications/macro/controller/PhabricatorMacroAudioController.php', + 'PhabricatorMacroAudioTransaction' => 'applications/macro/xaction/PhabricatorMacroAudioTransaction.php', + 'PhabricatorMacroController' => 'applications/macro/controller/PhabricatorMacroController.php', + 'PhabricatorMacroDatasource' => 'applications/macro/typeahead/PhabricatorMacroDatasource.php', + 'PhabricatorMacroDisableController' => 'applications/macro/controller/PhabricatorMacroDisableController.php', + 'PhabricatorMacroDisabledTransaction' => 'applications/macro/xaction/PhabricatorMacroDisabledTransaction.php', + 'PhabricatorMacroEditController' => 'applications/macro/controller/PhabricatorMacroEditController.php', + 'PhabricatorMacroEditEngine' => 'applications/macro/editor/PhabricatorMacroEditEngine.php', + 'PhabricatorMacroEditor' => 'applications/macro/editor/PhabricatorMacroEditor.php', + 'PhabricatorMacroFileTransaction' => 'applications/macro/xaction/PhabricatorMacroFileTransaction.php', + 'PhabricatorMacroListController' => 'applications/macro/controller/PhabricatorMacroListController.php', + 'PhabricatorMacroMacroPHIDType' => 'applications/macro/phid/PhabricatorMacroMacroPHIDType.php', + 'PhabricatorMacroMailReceiver' => 'applications/macro/mail/PhabricatorMacroMailReceiver.php', + 'PhabricatorMacroManageCapability' => 'applications/macro/capability/PhabricatorMacroManageCapability.php', + 'PhabricatorMacroMemeController' => 'applications/macro/controller/PhabricatorMacroMemeController.php', + 'PhabricatorMacroMemeDialogController' => 'applications/macro/controller/PhabricatorMacroMemeDialogController.php', + 'PhabricatorMacroNameTransaction' => 'applications/macro/xaction/PhabricatorMacroNameTransaction.php', + 'PhabricatorMacroQuery' => 'applications/macro/query/PhabricatorMacroQuery.php', + 'PhabricatorMacroReplyHandler' => 'applications/macro/mail/PhabricatorMacroReplyHandler.php', + 'PhabricatorMacroSearchEngine' => 'applications/macro/query/PhabricatorMacroSearchEngine.php', + 'PhabricatorMacroTestCase' => 'applications/macro/xaction/__tests__/PhabricatorMacroTestCase.php', + 'PhabricatorMacroTransaction' => 'applications/macro/storage/PhabricatorMacroTransaction.php', + 'PhabricatorMacroTransactionComment' => 'applications/macro/storage/PhabricatorMacroTransactionComment.php', + 'PhabricatorMacroTransactionQuery' => 'applications/macro/query/PhabricatorMacroTransactionQuery.php', + 'PhabricatorMacroTransactionType' => 'applications/macro/xaction/PhabricatorMacroTransactionType.php', + 'PhabricatorMacroViewController' => 'applications/macro/controller/PhabricatorMacroViewController.php', + 'PhabricatorMailAdapter' => 'applications/metamta/adapter/PhabricatorMailAdapter.php', + 'PhabricatorMailAdapterTestCase' => 'applications/metamta/adapter/__tests__/PhabricatorMailAdapterTestCase.php', + 'PhabricatorMailAmazonSESAdapter' => 'applications/metamta/adapter/PhabricatorMailAmazonSESAdapter.php', + 'PhabricatorMailAmazonSNSAdapter' => 'applications/metamta/adapter/PhabricatorMailAmazonSNSAdapter.php', + 'PhabricatorMailAttachment' => 'applications/metamta/message/PhabricatorMailAttachment.php', + 'PhabricatorMailConfigTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMailConfigTestCase.php', + 'PhabricatorMailEmailEngine' => 'applications/metamta/engine/PhabricatorMailEmailEngine.php', + 'PhabricatorMailEmailHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailHeraldField.php', + 'PhabricatorMailEmailHeraldFieldGroup' => 'applications/metamta/herald/PhabricatorMailEmailHeraldFieldGroup.php', + 'PhabricatorMailEmailMessage' => 'applications/metamta/message/PhabricatorMailEmailMessage.php', + 'PhabricatorMailEmailSubjectHeraldField' => 'applications/metamta/herald/PhabricatorMailEmailSubjectHeraldField.php', + 'PhabricatorMailEngineExtension' => 'applications/metamta/engine/PhabricatorMailEngineExtension.php', + 'PhabricatorMailExternalMessage' => 'applications/metamta/message/PhabricatorMailExternalMessage.php', + 'PhabricatorMailHeader' => 'applications/metamta/message/PhabricatorMailHeader.php', + 'PhabricatorMailMailgunAdapter' => 'applications/metamta/adapter/PhabricatorMailMailgunAdapter.php', + 'PhabricatorMailManagementListInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListInboundWorkflow.php', + 'PhabricatorMailManagementListOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementListOutboundWorkflow.php', + 'PhabricatorMailManagementReceiveTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementReceiveTestWorkflow.php', + 'PhabricatorMailManagementResendWorkflow' => 'applications/metamta/management/PhabricatorMailManagementResendWorkflow.php', + 'PhabricatorMailManagementSendTestWorkflow' => 'applications/metamta/management/PhabricatorMailManagementSendTestWorkflow.php', + 'PhabricatorMailManagementShowInboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowInboundWorkflow.php', + 'PhabricatorMailManagementShowOutboundWorkflow' => 'applications/metamta/management/PhabricatorMailManagementShowOutboundWorkflow.php', + 'PhabricatorMailManagementUnverifyWorkflow' => 'applications/metamta/management/PhabricatorMailManagementUnverifyWorkflow.php', + 'PhabricatorMailManagementVolumeWorkflow' => 'applications/metamta/management/PhabricatorMailManagementVolumeWorkflow.php', + 'PhabricatorMailManagementWorkflow' => 'applications/metamta/management/PhabricatorMailManagementWorkflow.php', + 'PhabricatorMailMessageEngine' => 'applications/metamta/engine/PhabricatorMailMessageEngine.php', + 'PhabricatorMailMustEncryptHeraldAction' => 'applications/metamta/herald/PhabricatorMailMustEncryptHeraldAction.php', + 'PhabricatorMailOutboundMailHeraldAdapter' => 'applications/metamta/herald/PhabricatorMailOutboundMailHeraldAdapter.php', + 'PhabricatorMailOutboundRoutingHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingHeraldAction.php', + 'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfEmailHeraldAction.php', + 'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'applications/metamta/herald/PhabricatorMailOutboundRoutingSelfNotificationHeraldAction.php', + 'PhabricatorMailOutboundStatus' => 'applications/metamta/constants/PhabricatorMailOutboundStatus.php', + 'PhabricatorMailPostmarkAdapter' => 'applications/metamta/adapter/PhabricatorMailPostmarkAdapter.php', + 'PhabricatorMailPropertiesDestructionEngineExtension' => 'applications/metamta/engineextension/PhabricatorMailPropertiesDestructionEngineExtension.php', + 'PhabricatorMailReceiver' => 'applications/metamta/receiver/PhabricatorMailReceiver.php', + 'PhabricatorMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorMailReceiverTestCase.php', 'PhabricatorMailReplyHandler' => 'applications/metamta/replyhandler/PhabricatorMailReplyHandler.php', - 'PhabricatorMarkupEngine' => 'applications/markup/PhabricatorMarkupEngine.php', + 'PhabricatorMailRoutingRule' => 'applications/metamta/constants/PhabricatorMailRoutingRule.php', + 'PhabricatorMailSMSEngine' => 'applications/metamta/engine/PhabricatorMailSMSEngine.php', + 'PhabricatorMailSMSMessage' => 'applications/metamta/message/PhabricatorMailSMSMessage.php', + 'PhabricatorMailSMTPAdapter' => 'applications/metamta/adapter/PhabricatorMailSMTPAdapter.php', + 'PhabricatorMailSendGridAdapter' => 'applications/metamta/adapter/PhabricatorMailSendGridAdapter.php', + 'PhabricatorMailSendmailAdapter' => 'applications/metamta/adapter/PhabricatorMailSendmailAdapter.php', + 'PhabricatorMailSetupCheck' => 'applications/config/check/PhabricatorMailSetupCheck.php', + 'PhabricatorMailStamp' => 'applications/metamta/stamp/PhabricatorMailStamp.php', + 'PhabricatorMailTarget' => 'applications/metamta/replyhandler/PhabricatorMailTarget.php', + 'PhabricatorMailTestAdapter' => 'applications/metamta/adapter/PhabricatorMailTestAdapter.php', + 'PhabricatorMailTwilioAdapter' => 'applications/metamta/adapter/PhabricatorMailTwilioAdapter.php', + 'PhabricatorMailUtil' => 'applications/metamta/util/PhabricatorMailUtil.php', + 'PhabricatorMainMenuBarExtension' => 'view/page/menu/PhabricatorMainMenuBarExtension.php', + 'PhabricatorMainMenuSearchView' => 'view/page/menu/PhabricatorMainMenuSearchView.php', + 'PhabricatorMainMenuView' => 'view/page/menu/PhabricatorMainMenuView.php', + 'PhabricatorManageProfileMenuItem' => 'applications/search/menuitem/PhabricatorManageProfileMenuItem.php', + 'PhabricatorManagementWorkflow' => 'infrastructure/management/PhabricatorManagementWorkflow.php', + 'PhabricatorManiphestApplication' => 'applications/maniphest/application/PhabricatorManiphestApplication.php', + 'PhabricatorManiphestConfigOptions' => 'applications/maniphest/config/PhabricatorManiphestConfigOptions.php', + 'PhabricatorManiphestTaskFactEngine' => 'applications/fact/engine/PhabricatorManiphestTaskFactEngine.php', + 'PhabricatorManiphestTaskTestDataGenerator' => 'applications/maniphest/lipsum/PhabricatorManiphestTaskTestDataGenerator.php', + 'PhabricatorManualActivitySetupCheck' => 'applications/config/check/PhabricatorManualActivitySetupCheck.php', + 'PhabricatorMarkupCache' => 'applications/cache/storage/PhabricatorMarkupCache.php', + 'PhabricatorMarkupEngine' => 'infrastructure/markup/PhabricatorMarkupEngine.php', + 'PhabricatorMarkupEngineTestCase' => 'infrastructure/markup/__tests__/PhabricatorMarkupEngineTestCase.php', + 'PhabricatorMarkupInterface' => 'infrastructure/markup/PhabricatorMarkupInterface.php', + 'PhabricatorMarkupOneOff' => 'infrastructure/markup/PhabricatorMarkupOneOff.php', + 'PhabricatorMarkupPreviewController' => 'infrastructure/markup/PhabricatorMarkupPreviewController.php', + 'PhabricatorMaxChartFunction' => 'applications/fact/chart/PhabricatorMaxChartFunction.php', + 'PhabricatorMemeEngine' => 'applications/macro/engine/PhabricatorMemeEngine.php', + 'PhabricatorMemeRemarkupRule' => 'applications/macro/markup/PhabricatorMemeRemarkupRule.php', + 'PhabricatorMentionRemarkupRule' => 'applications/people/markup/PhabricatorMentionRemarkupRule.php', + 'PhabricatorMentionableInterface' => 'applications/transactions/interface/PhabricatorMentionableInterface.php', 'PhabricatorMercurialGraphStream' => 'applications/repository/daemon/PhabricatorMercurialGraphStream.php', - 'PhabricatorMetaMTAAttachment' => 'applications/metamta/storage/PhabricatorMetaMTAAttachment.php', + 'PhabricatorMetaMTAActor' => 'applications/metamta/query/PhabricatorMetaMTAActor.php', + 'PhabricatorMetaMTAActorQuery' => 'applications/metamta/query/PhabricatorMetaMTAActorQuery.php', + 'PhabricatorMetaMTAApplication' => 'applications/metamta/application/PhabricatorMetaMTAApplication.php', + 'PhabricatorMetaMTAApplicationEmail' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmail.php', + 'PhabricatorMetaMTAApplicationEmailDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAApplicationEmailDatasource.php', + 'PhabricatorMetaMTAApplicationEmailEditor' => 'applications/metamta/editor/PhabricatorMetaMTAApplicationEmailEditor.php', + 'PhabricatorMetaMTAApplicationEmailHeraldField' => 'applications/metamta/herald/PhabricatorMetaMTAApplicationEmailHeraldField.php', + 'PhabricatorMetaMTAApplicationEmailPHIDType' => 'applications/phid/PhabricatorMetaMTAApplicationEmailPHIDType.php', + 'PhabricatorMetaMTAApplicationEmailPanel' => 'applications/metamta/applicationpanel/PhabricatorMetaMTAApplicationEmailPanel.php', + 'PhabricatorMetaMTAApplicationEmailQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailQuery.php', + 'PhabricatorMetaMTAApplicationEmailTransaction' => 'applications/metamta/storage/PhabricatorMetaMTAApplicationEmailTransaction.php', + 'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'applications/metamta/query/PhabricatorMetaMTAApplicationEmailTransactionQuery.php', + 'PhabricatorMetaMTAConfigOptions' => 'applications/config/option/PhabricatorMetaMTAConfigOptions.php', 'PhabricatorMetaMTAController' => 'applications/metamta/controller/PhabricatorMetaMTAController.php', 'PhabricatorMetaMTADAO' => 'applications/metamta/storage/PhabricatorMetaMTADAO.php', - 'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/PhabricatorMetaMTAEmailBodyParser.php', - 'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php', - 'PhabricatorMetaMTAListController' => 'applications/metamta/controller/PhabricatorMetaMTAListController.php', + 'PhabricatorMetaMTAEmailBodyParser' => 'applications/metamta/parser/PhabricatorMetaMTAEmailBodyParser.php', + 'PhabricatorMetaMTAEmailBodyParserTestCase' => 'applications/metamta/parser/__tests__/PhabricatorMetaMTAEmailBodyParserTestCase.php', + 'PhabricatorMetaMTAEmailHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailHeraldAction.php', + 'PhabricatorMetaMTAEmailOthersHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailOthersHeraldAction.php', + 'PhabricatorMetaMTAEmailSelfHeraldAction' => 'applications/metamta/herald/PhabricatorMetaMTAEmailSelfHeraldAction.php', + 'PhabricatorMetaMTAErrorMailAction' => 'applications/metamta/action/PhabricatorMetaMTAErrorMailAction.php', 'PhabricatorMetaMTAMail' => 'applications/metamta/storage/PhabricatorMetaMTAMail.php', + 'PhabricatorMetaMTAMailBody' => 'applications/metamta/view/PhabricatorMetaMTAMailBody.php', + 'PhabricatorMetaMTAMailBodyTestCase' => 'applications/metamta/view/__tests__/PhabricatorMetaMTAMailBodyTestCase.php', + 'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'applications/metamta/edge/PhabricatorMetaMTAMailHasRecipientEdgeType.php', + 'PhabricatorMetaMTAMailListController' => 'applications/metamta/controller/PhabricatorMetaMTAMailListController.php', + 'PhabricatorMetaMTAMailPHIDType' => 'applications/metamta/phid/PhabricatorMetaMTAMailPHIDType.php', + 'PhabricatorMetaMTAMailProperties' => 'applications/metamta/storage/PhabricatorMetaMTAMailProperties.php', + 'PhabricatorMetaMTAMailPropertiesQuery' => 'applications/metamta/query/PhabricatorMetaMTAMailPropertiesQuery.php', + 'PhabricatorMetaMTAMailQuery' => 'applications/metamta/query/PhabricatorMetaMTAMailQuery.php', + 'PhabricatorMetaMTAMailSearchEngine' => 'applications/metamta/query/PhabricatorMetaMTAMailSearchEngine.php', + 'PhabricatorMetaMTAMailSection' => 'applications/metamta/view/PhabricatorMetaMTAMailSection.php', 'PhabricatorMetaMTAMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAMailTestCase.php', - 'PhabricatorMetaMTAMailingList' => 'applications/metamta/storage/PhabricatorMetaMTAMailingList.php', - 'PhabricatorMetaMTAMailingListEditController' => 'applications/metamta/controller/PhabricatorMetaMTAMailingListEditController.php', - 'PhabricatorMetaMTAMailingListsController' => 'applications/metamta/controller/PhabricatorMetaMTAMailingListsController.php', - 'PhabricatorMetaMTAReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAReceiveController.php', - 'PhabricatorMetaMTAReceivedListController' => 'applications/metamta/controller/PhabricatorMetaMTAReceivedListController.php', + 'PhabricatorMetaMTAMailViewController' => 'applications/metamta/controller/PhabricatorMetaMTAMailViewController.php', + 'PhabricatorMetaMTAMailableDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableDatasource.php', + 'PhabricatorMetaMTAMailableFunctionDatasource' => 'applications/metamta/typeahead/PhabricatorMetaMTAMailableFunctionDatasource.php', + 'PhabricatorMetaMTAMailgunReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAMailgunReceiveController.php', + 'PhabricatorMetaMTAMemberQuery' => 'applications/metamta/query/PhabricatorMetaMTAMemberQuery.php', + 'PhabricatorMetaMTAPermanentFailureException' => 'applications/metamta/exception/PhabricatorMetaMTAPermanentFailureException.php', + 'PhabricatorMetaMTAPostmarkReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTAPostmarkReceiveController.php', 'PhabricatorMetaMTAReceivedMail' => 'applications/metamta/storage/PhabricatorMetaMTAReceivedMail.php', - 'PhabricatorMetaMTASendController' => 'applications/metamta/controller/PhabricatorMetaMTASendController.php', + 'PhabricatorMetaMTAReceivedMailProcessingException' => 'applications/metamta/exception/PhabricatorMetaMTAReceivedMailProcessingException.php', + 'PhabricatorMetaMTAReceivedMailTestCase' => 'applications/metamta/storage/__tests__/PhabricatorMetaMTAReceivedMailTestCase.php', + 'PhabricatorMetaMTASchemaSpec' => 'applications/metamta/storage/PhabricatorMetaMTASchemaSpec.php', 'PhabricatorMetaMTASendGridReceiveController' => 'applications/metamta/controller/PhabricatorMetaMTASendGridReceiveController.php', - 'PhabricatorMetaMTAViewController' => 'applications/metamta/controller/PhabricatorMetaMTAViewController.php', 'PhabricatorMetaMTAWorker' => 'applications/metamta/PhabricatorMetaMTAWorker.php', + 'PhabricatorMetronome' => 'infrastructure/util/PhabricatorMetronome.php', + 'PhabricatorMetronomeTestCase' => 'infrastructure/util/__tests__/PhabricatorMetronomeTestCase.php', + 'PhabricatorMetronomicTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorMetronomicTriggerClock.php', + 'PhabricatorMinChartFunction' => 'applications/fact/chart/PhabricatorMinChartFunction.php', + 'PhabricatorModularTransaction' => 'applications/transactions/storage/PhabricatorModularTransaction.php', + 'PhabricatorModularTransactionType' => 'applications/transactions/storage/PhabricatorModularTransactionType.php', + 'PhabricatorMonogramDatasourceEngineExtension' => 'applications/typeahead/engineextension/PhabricatorMonogramDatasourceEngineExtension.php', + 'PhabricatorMonospacedFontSetting' => 'applications/settings/setting/PhabricatorMonospacedFontSetting.php', + 'PhabricatorMonospacedTextareasSetting' => 'applications/settings/setting/PhabricatorMonospacedTextareasSetting.php', + 'PhabricatorMotivatorProfileMenuItem' => 'applications/search/menuitem/PhabricatorMotivatorProfileMenuItem.php', + 'PhabricatorMultiColumnUIExample' => 'applications/uiexample/examples/PhabricatorMultiColumnUIExample.php', + 'PhabricatorMultiFactorSettingsPanel' => 'applications/settings/panel/PhabricatorMultiFactorSettingsPanel.php', + 'PhabricatorMultimeterApplication' => 'applications/multimeter/application/PhabricatorMultimeterApplication.php', 'PhabricatorMustVerifyEmailController' => 'applications/auth/controller/PhabricatorMustVerifyEmailController.php', + 'PhabricatorMutedByEdgeType' => 'applications/transactions/edges/PhabricatorMutedByEdgeType.php', + 'PhabricatorMutedEdgeType' => 'applications/transactions/edges/PhabricatorMutedEdgeType.php', + 'PhabricatorMySQLConfigOptions' => 'applications/config/option/PhabricatorMySQLConfigOptions.php', 'PhabricatorMySQLFileStorageEngine' => 'applications/files/engine/PhabricatorMySQLFileStorageEngine.php', + 'PhabricatorMySQLSearchHost' => 'infrastructure/cluster/search/PhabricatorMySQLSearchHost.php', + 'PhabricatorMySQLSetupCheck' => 'applications/config/check/PhabricatorMySQLSetupCheck.php', + 'PhabricatorNamedQuery' => 'applications/search/storage/PhabricatorNamedQuery.php', + 'PhabricatorNamedQueryConfig' => 'applications/search/storage/PhabricatorNamedQueryConfig.php', + 'PhabricatorNamedQueryConfigQuery' => 'applications/search/query/PhabricatorNamedQueryConfigQuery.php', + 'PhabricatorNamedQueryQuery' => 'applications/search/query/PhabricatorNamedQueryQuery.php', + 'PhabricatorNavigationRemarkupRule' => 'infrastructure/markup/rule/PhabricatorNavigationRemarkupRule.php', + 'PhabricatorNeverTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorNeverTriggerClock.php', + 'PhabricatorNgramsIndexEngineExtension' => 'applications/search/engineextension/PhabricatorNgramsIndexEngineExtension.php', + 'PhabricatorNgramsInterface' => 'applications/search/interface/PhabricatorNgramsInterface.php', 'PhabricatorNotificationBuilder' => 'applications/notification/builder/PhabricatorNotificationBuilder.php', + 'PhabricatorNotificationClearController' => 'applications/notification/controller/PhabricatorNotificationClearController.php', + 'PhabricatorNotificationClient' => 'applications/notification/client/PhabricatorNotificationClient.php', + 'PhabricatorNotificationConfigOptions' => 'applications/config/option/PhabricatorNotificationConfigOptions.php', 'PhabricatorNotificationController' => 'applications/notification/controller/PhabricatorNotificationController.php', + 'PhabricatorNotificationDestructionEngineExtension' => 'applications/notification/engineextension/PhabricatorNotificationDestructionEngineExtension.php', 'PhabricatorNotificationIndividualController' => 'applications/notification/controller/PhabricatorNotificationIndividualController.php', 'PhabricatorNotificationListController' => 'applications/notification/controller/PhabricatorNotificationListController.php', 'PhabricatorNotificationPanelController' => 'applications/notification/controller/PhabricatorNotificationPanelController.php', - 'PhabricatorNotificationQuery' => 'applications/notification/PhabricatorNotificationQuery.php', - 'PhabricatorNotificationStatusController' => 'applications/notification/controller/PhabricatorNotificationStatusController.php', - 'PhabricatorNotificationStoryView' => 'applications/notification/view/PhabricatorNotificationStoryView.php', - 'PhabricatorNotificationView' => 'applications/notification/view/PhabricatorNotificationView.php', + 'PhabricatorNotificationQuery' => 'applications/notification/query/PhabricatorNotificationQuery.php', + 'PhabricatorNotificationSearchEngine' => 'applications/notification/query/PhabricatorNotificationSearchEngine.php', + 'PhabricatorNotificationServerRef' => 'applications/notification/client/PhabricatorNotificationServerRef.php', + 'PhabricatorNotificationServersConfigType' => 'applications/notification/config/PhabricatorNotificationServersConfigType.php', + 'PhabricatorNotificationStatusView' => 'applications/notification/view/PhabricatorNotificationStatusView.php', + 'PhabricatorNotificationTestController' => 'applications/notification/controller/PhabricatorNotificationTestController.php', + 'PhabricatorNotificationUIExample' => 'applications/uiexample/examples/PhabricatorNotificationUIExample.php', + 'PhabricatorNotificationsApplication' => 'applications/notification/application/PhabricatorNotificationsApplication.php', + 'PhabricatorNotificationsSetting' => 'applications/settings/setting/PhabricatorNotificationsSetting.php', + 'PhabricatorNotificationsSettingsPanel' => 'applications/settings/panel/PhabricatorNotificationsSettingsPanel.php', + 'PhabricatorNuanceApplication' => 'applications/nuance/application/PhabricatorNuanceApplication.php', + 'PhabricatorOAuth1AuthProvider' => 'applications/auth/provider/PhabricatorOAuth1AuthProvider.php', + 'PhabricatorOAuth1SecretTemporaryTokenType' => 'applications/auth/provider/PhabricatorOAuth1SecretTemporaryTokenType.php', + 'PhabricatorOAuth2AuthProvider' => 'applications/auth/provider/PhabricatorOAuth2AuthProvider.php', + 'PhabricatorOAuthAuthProvider' => 'applications/auth/provider/PhabricatorOAuthAuthProvider.php', 'PhabricatorOAuthClientAuthorization' => 'applications/oauthserver/storage/PhabricatorOAuthClientAuthorization.php', - 'PhabricatorOAuthClientAuthorizationBaseController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationBaseController.php', - 'PhabricatorOAuthClientAuthorizationDeleteController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationDeleteController.php', - 'PhabricatorOAuthClientAuthorizationEditController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationEditController.php', - 'PhabricatorOAuthClientAuthorizationListController' => 'applications/oauthserver/controller/clientauthorization/PhabricatorOAuthClientAuthorizationListController.php', 'PhabricatorOAuthClientAuthorizationQuery' => 'applications/oauthserver/query/PhabricatorOAuthClientAuthorizationQuery.php', - 'PhabricatorOAuthClientBaseController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientBaseController.php', - 'PhabricatorOAuthClientDeleteController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDeleteController.php', + 'PhabricatorOAuthClientController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientController.php', + 'PhabricatorOAuthClientDisableController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientDisableController.php', 'PhabricatorOAuthClientEditController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientEditController.php', 'PhabricatorOAuthClientListController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientListController.php', + 'PhabricatorOAuthClientSecretController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientSecretController.php', + 'PhabricatorOAuthClientTestController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientTestController.php', 'PhabricatorOAuthClientViewController' => 'applications/oauthserver/controller/client/PhabricatorOAuthClientViewController.php', - 'PhabricatorOAuthDefaultRegistrationController' => 'applications/auth/controller/oauthregistration/PhabricatorOAuthDefaultRegistrationController.php', - 'PhabricatorOAuthDiagnosticsController' => 'applications/auth/controller/PhabricatorOAuthDiagnosticsController.php', - 'PhabricatorOAuthFailureView' => 'applications/auth/view/PhabricatorOAuthFailureView.php', - 'PhabricatorOAuthLoginController' => 'applications/auth/controller/PhabricatorOAuthLoginController.php', - 'PhabricatorOAuthProvider' => 'applications/auth/oauth/provider/PhabricatorOAuthProvider.php', - 'PhabricatorOAuthProviderDisqus' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderDisqus.php', - 'PhabricatorOAuthProviderException' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderException.php', - 'PhabricatorOAuthProviderFacebook' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderFacebook.php', - 'PhabricatorOAuthProviderGitHub' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderGitHub.php', - 'PhabricatorOAuthProviderGoogle' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderGoogle.php', - 'PhabricatorOAuthProviderPhabricator' => 'applications/auth/oauth/provider/PhabricatorOAuthProviderPhabricator.php', - 'PhabricatorOAuthRegistrationController' => 'applications/auth/controller/oauthregistration/PhabricatorOAuthRegistrationController.php', 'PhabricatorOAuthResponse' => 'applications/oauthserver/PhabricatorOAuthResponse.php', 'PhabricatorOAuthServer' => 'applications/oauthserver/PhabricatorOAuthServer.php', 'PhabricatorOAuthServerAccessToken' => 'applications/oauthserver/storage/PhabricatorOAuthServerAccessToken.php', + 'PhabricatorOAuthServerApplication' => 'applications/oauthserver/application/PhabricatorOAuthServerApplication.php', 'PhabricatorOAuthServerAuthController' => 'applications/oauthserver/controller/PhabricatorOAuthServerAuthController.php', 'PhabricatorOAuthServerAuthorizationCode' => 'applications/oauthserver/storage/PhabricatorOAuthServerAuthorizationCode.php', + 'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'applications/oauthserver/panel/PhabricatorOAuthServerAuthorizationsSettingsPanel.php', 'PhabricatorOAuthServerClient' => 'applications/oauthserver/storage/PhabricatorOAuthServerClient.php', + 'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientAuthorizationPHIDType.php', + 'PhabricatorOAuthServerClientPHIDType' => 'applications/oauthserver/phid/PhabricatorOAuthServerClientPHIDType.php', 'PhabricatorOAuthServerClientQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerClientQuery.php', + 'PhabricatorOAuthServerClientSearchEngine' => 'applications/oauthserver/query/PhabricatorOAuthServerClientSearchEngine.php', 'PhabricatorOAuthServerController' => 'applications/oauthserver/controller/PhabricatorOAuthServerController.php', + 'PhabricatorOAuthServerCreateClientsCapability' => 'applications/oauthserver/capability/PhabricatorOAuthServerCreateClientsCapability.php', 'PhabricatorOAuthServerDAO' => 'applications/oauthserver/storage/PhabricatorOAuthServerDAO.php', + 'PhabricatorOAuthServerEditEngine' => 'applications/oauthserver/editor/PhabricatorOAuthServerEditEngine.php', + 'PhabricatorOAuthServerEditor' => 'applications/oauthserver/editor/PhabricatorOAuthServerEditor.php', + 'PhabricatorOAuthServerSchemaSpec' => 'applications/oauthserver/query/PhabricatorOAuthServerSchemaSpec.php', 'PhabricatorOAuthServerScope' => 'applications/oauthserver/PhabricatorOAuthServerScope.php', 'PhabricatorOAuthServerTestCase' => 'applications/oauthserver/__tests__/PhabricatorOAuthServerTestCase.php', - 'PhabricatorOAuthServerTestController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTestController.php', 'PhabricatorOAuthServerTokenController' => 'applications/oauthserver/controller/PhabricatorOAuthServerTokenController.php', - 'PhabricatorOAuthUnlinkController' => 'applications/auth/controller/PhabricatorOAuthUnlinkController.php', - 'PhabricatorObjectAttachmentEditor' => 'applications/search/editor/PhabricatorObjectAttachmentEditor.php', - 'PhabricatorObjectGraph' => 'applications/phid/PhabricatorObjectGraph.php', + 'PhabricatorOAuthServerTransaction' => 'applications/oauthserver/storage/PhabricatorOAuthServerTransaction.php', + 'PhabricatorOAuthServerTransactionQuery' => 'applications/oauthserver/query/PhabricatorOAuthServerTransactionQuery.php', + 'PhabricatorObjectGraph' => 'infrastructure/graph/PhabricatorObjectGraph.php', 'PhabricatorObjectHandle' => 'applications/phid/PhabricatorObjectHandle.php', - 'PhabricatorObjectHandleConstants' => 'applications/phid/handle/const/PhabricatorObjectHandleConstants.php', - 'PhabricatorObjectHandleData' => 'applications/phid/handle/PhabricatorObjectHandleData.php', - 'PhabricatorObjectHandleStatus' => 'applications/phid/handle/const/PhabricatorObjectHandleStatus.php', + 'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaSubtaskEdgeType.php', + 'PhabricatorObjectHasAsanaTaskEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasAsanaTaskEdgeType.php', + 'PhabricatorObjectHasContributorEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasContributorEdgeType.php', + 'PhabricatorObjectHasDraftEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasDraftEdgeType.php', + 'PhabricatorObjectHasJiraIssueEdgeType' => 'applications/doorkeeper/edge/PhabricatorObjectHasJiraIssueEdgeType.php', + 'PhabricatorObjectHasSubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasSubscriberEdgeType.php', + 'PhabricatorObjectHasUnsubscriberEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasUnsubscriberEdgeType.php', + 'PhabricatorObjectHasWatcherEdgeType' => 'applications/transactions/edges/PhabricatorObjectHasWatcherEdgeType.php', + 'PhabricatorObjectListQuery' => 'applications/phid/query/PhabricatorObjectListQuery.php', + 'PhabricatorObjectListQueryTestCase' => 'applications/phid/query/__tests__/PhabricatorObjectListQueryTestCase.php', + 'PhabricatorObjectMailReceiver' => 'applications/metamta/receiver/PhabricatorObjectMailReceiver.php', + 'PhabricatorObjectMailReceiverTestCase' => 'applications/metamta/receiver/__tests__/PhabricatorObjectMailReceiverTestCase.php', + 'PhabricatorObjectMentionedByObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionedByObjectEdgeType.php', + 'PhabricatorObjectMentionsObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionsObjectEdgeType.php', + 'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php', + 'PhabricatorObjectRelationship' => 'applications/search/relationship/PhabricatorObjectRelationship.php', + 'PhabricatorObjectRelationshipList' => 'applications/search/relationship/PhabricatorObjectRelationshipList.php', + 'PhabricatorObjectRelationshipSource' => 'applications/search/relationship/PhabricatorObjectRelationshipSource.php', + 'PhabricatorObjectRemarkupRule' => 'infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php', 'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php', + 'PhabricatorObjectStatus' => 'infrastructure/status/PhabricatorObjectStatus.php', + 'PhabricatorObjectUsesDashboardPanelEdgeType' => 'applications/search/edge/PhabricatorObjectUsesDashboardPanelEdgeType.php', 'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php', + 'PhabricatorOldWorldContentSource' => 'infrastructure/contentsource/PhabricatorOldWorldContentSource.php', + 'PhabricatorOlderInlinesSetting' => 'applications/settings/setting/PhabricatorOlderInlinesSetting.php', + 'PhabricatorOneTimeTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorOneTimeTriggerClock.php', + 'PhabricatorOpcodeCacheSpec' => 'applications/cache/spec/PhabricatorOpcodeCacheSpec.php', + 'PhabricatorOptionExportField' => 'infrastructure/export/field/PhabricatorOptionExportField.php', + 'PhabricatorOptionGroupSetting' => 'applications/settings/setting/PhabricatorOptionGroupSetting.php', 'PhabricatorOwnerPathQuery' => 'applications/owners/query/PhabricatorOwnerPathQuery.php', + 'PhabricatorOwnersApplication' => 'applications/owners/application/PhabricatorOwnersApplication.php', + 'PhabricatorOwnersArchiveController' => 'applications/owners/controller/PhabricatorOwnersArchiveController.php', + 'PhabricatorOwnersAuditRule' => 'applications/owners/constants/PhabricatorOwnersAuditRule.php', + 'PhabricatorOwnersConfigOptions' => 'applications/owners/config/PhabricatorOwnersConfigOptions.php', + 'PhabricatorOwnersConfiguredCustomField' => 'applications/owners/customfield/PhabricatorOwnersConfiguredCustomField.php', 'PhabricatorOwnersController' => 'applications/owners/controller/PhabricatorOwnersController.php', + 'PhabricatorOwnersCustomField' => 'applications/owners/customfield/PhabricatorOwnersCustomField.php', + 'PhabricatorOwnersCustomFieldNumericIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldNumericIndex.php', + 'PhabricatorOwnersCustomFieldStorage' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStorage.php', + 'PhabricatorOwnersCustomFieldStringIndex' => 'applications/owners/storage/PhabricatorOwnersCustomFieldStringIndex.php', 'PhabricatorOwnersDAO' => 'applications/owners/storage/PhabricatorOwnersDAO.php', - 'PhabricatorOwnersDeleteController' => 'applications/owners/controller/PhabricatorOwnersDeleteController.php', + 'PhabricatorOwnersDefaultEditCapability' => 'applications/owners/capability/PhabricatorOwnersDefaultEditCapability.php', + 'PhabricatorOwnersDefaultViewCapability' => 'applications/owners/capability/PhabricatorOwnersDefaultViewCapability.php', 'PhabricatorOwnersDetailController' => 'applications/owners/controller/PhabricatorOwnersDetailController.php', 'PhabricatorOwnersEditController' => 'applications/owners/controller/PhabricatorOwnersEditController.php', + 'PhabricatorOwnersHovercardEngineExtension' => 'applications/owners/engineextension/PhabricatorOwnersHovercardEngineExtension.php', 'PhabricatorOwnersListController' => 'applications/owners/controller/PhabricatorOwnersListController.php', 'PhabricatorOwnersOwner' => 'applications/owners/storage/PhabricatorOwnersOwner.php', 'PhabricatorOwnersPackage' => 'applications/owners/storage/PhabricatorOwnersPackage.php', + 'PhabricatorOwnersPackageAuditingTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAuditingTransaction.php', + 'PhabricatorOwnersPackageAuthorityTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAuthorityTransaction.php', + 'PhabricatorOwnersPackageAutoreviewTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageAutoreviewTransaction.php', + 'PhabricatorOwnersPackageContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPackageContextFreeGrammar.php', + 'PhabricatorOwnersPackageDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageDatasource.php', + 'PhabricatorOwnersPackageDescriptionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDescriptionTransaction.php', + 'PhabricatorOwnersPackageDominionTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageDominionTransaction.php', + 'PhabricatorOwnersPackageEditEngine' => 'applications/owners/editor/PhabricatorOwnersPackageEditEngine.php', + 'PhabricatorOwnersPackageFerretEngine' => 'applications/owners/search/PhabricatorOwnersPackageFerretEngine.php', + 'PhabricatorOwnersPackageFulltextEngine' => 'applications/owners/search/PhabricatorOwnersPackageFulltextEngine.php', + 'PhabricatorOwnersPackageFunctionDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageFunctionDatasource.php', + 'PhabricatorOwnersPackageIgnoredTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageIgnoredTransaction.php', + 'PhabricatorOwnersPackageNameNgrams' => 'applications/owners/storage/PhabricatorOwnersPackageNameNgrams.php', + 'PhabricatorOwnersPackageNameTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageNameTransaction.php', + 'PhabricatorOwnersPackageOwnerDatasource' => 'applications/owners/typeahead/PhabricatorOwnersPackageOwnerDatasource.php', + 'PhabricatorOwnersPackageOwnersTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageOwnersTransaction.php', + 'PhabricatorOwnersPackagePHIDType' => 'applications/owners/phid/PhabricatorOwnersPackagePHIDType.php', + 'PhabricatorOwnersPackagePathsTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackagePathsTransaction.php', + 'PhabricatorOwnersPackagePrimaryTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackagePrimaryTransaction.php', + 'PhabricatorOwnersPackageQuery' => 'applications/owners/query/PhabricatorOwnersPackageQuery.php', + 'PhabricatorOwnersPackageRemarkupRule' => 'applications/owners/remarkup/PhabricatorOwnersPackageRemarkupRule.php', + 'PhabricatorOwnersPackageSearchEngine' => 'applications/owners/query/PhabricatorOwnersPackageSearchEngine.php', + 'PhabricatorOwnersPackageStatusTransaction' => 'applications/owners/xaction/PhabricatorOwnersPackageStatusTransaction.php', + 'PhabricatorOwnersPackageTestCase' => 'applications/owners/storage/__tests__/PhabricatorOwnersPackageTestCase.php', + 'PhabricatorOwnersPackageTestDataGenerator' => 'applications/owners/lipsum/PhabricatorOwnersPackageTestDataGenerator.php', + 'PhabricatorOwnersPackageTransaction' => 'applications/owners/storage/PhabricatorOwnersPackageTransaction.php', + 'PhabricatorOwnersPackageTransactionEditor' => 'applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php', + 'PhabricatorOwnersPackageTransactionQuery' => 'applications/owners/query/PhabricatorOwnersPackageTransactionQuery.php', + 'PhabricatorOwnersPackageTransactionType' => 'applications/owners/xaction/PhabricatorOwnersPackageTransactionType.php', 'PhabricatorOwnersPath' => 'applications/owners/storage/PhabricatorOwnersPath.php', + 'PhabricatorOwnersPathContextFreeGrammar' => 'applications/owners/lipsum/PhabricatorOwnersPathContextFreeGrammar.php', + 'PhabricatorOwnersPathsController' => 'applications/owners/controller/PhabricatorOwnersPathsController.php', + 'PhabricatorOwnersPathsSearchEngineAttachment' => 'applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php', + 'PhabricatorOwnersSchemaSpec' => 'applications/owners/storage/PhabricatorOwnersSchemaSpec.php', + 'PhabricatorOwnersSearchField' => 'applications/owners/searchfield/PhabricatorOwnersSearchField.php', + 'PhabricatorPDFCatalogObject' => 'applications/phortune/pdf/PhabricatorPDFCatalogObject.php', + 'PhabricatorPDFContentsObject' => 'applications/phortune/pdf/PhabricatorPDFContentsObject.php', + 'PhabricatorPDFDocumentEngine' => 'applications/files/document/PhabricatorPDFDocumentEngine.php', + 'PhabricatorPDFFontObject' => 'applications/phortune/pdf/PhabricatorPDFFontObject.php', + 'PhabricatorPDFFragment' => 'applications/phortune/pdf/PhabricatorPDFFragment.php', + 'PhabricatorPDFFragmentOffset' => 'applications/phortune/pdf/PhabricatorPDFFragmentOffset.php', + 'PhabricatorPDFGenerator' => 'applications/phortune/pdf/PhabricatorPDFGenerator.php', + 'PhabricatorPDFHeadFragment' => 'applications/phortune/pdf/PhabricatorPDFHeadFragment.php', + 'PhabricatorPDFInfoObject' => 'applications/phortune/pdf/PhabricatorPDFInfoObject.php', + 'PhabricatorPDFIterator' => 'applications/phortune/pdf/PhabricatorPDFIterator.php', + 'PhabricatorPDFObject' => 'applications/phortune/pdf/PhabricatorPDFObject.php', + 'PhabricatorPDFPageObject' => 'applications/phortune/pdf/PhabricatorPDFPageObject.php', + 'PhabricatorPDFPagesObject' => 'applications/phortune/pdf/PhabricatorPDFPagesObject.php', + 'PhabricatorPDFResourcesObject' => 'applications/phortune/pdf/PhabricatorPDFResourcesObject.php', + 'PhabricatorPDFTailFragment' => 'applications/phortune/pdf/PhabricatorPDFTailFragment.php', + 'PhabricatorPHDConfigOptions' => 'applications/config/option/PhabricatorPHDConfigOptions.php', 'PhabricatorPHID' => 'applications/phid/storage/PhabricatorPHID.php', 'PhabricatorPHIDConstants' => 'applications/phid/PhabricatorPHIDConstants.php', - 'PhabricatorPHIDController' => 'applications/phid/controller/PhabricatorPHIDController.php', - 'PhabricatorPHIDLookupController' => 'applications/phid/controller/PhabricatorPHIDLookupController.php', + 'PhabricatorPHIDExportField' => 'infrastructure/export/field/PhabricatorPHIDExportField.php', + 'PhabricatorPHIDInterface' => 'applications/phid/interface/PhabricatorPHIDInterface.php', + 'PhabricatorPHIDListEditField' => 'applications/transactions/editfield/PhabricatorPHIDListEditField.php', + 'PhabricatorPHIDListEditType' => 'applications/transactions/edittype/PhabricatorPHIDListEditType.php', + 'PhabricatorPHIDListExportField' => 'infrastructure/export/field/PhabricatorPHIDListExportField.php', + 'PhabricatorPHIDMailStamp' => 'applications/metamta/stamp/PhabricatorPHIDMailStamp.php', + 'PhabricatorPHIDResolver' => 'applications/phid/resolver/PhabricatorPHIDResolver.php', + 'PhabricatorPHIDType' => 'applications/phid/type/PhabricatorPHIDType.php', + 'PhabricatorPHIDTypeTestCase' => 'applications/phid/type/__tests__/PhabricatorPHIDTypeTestCase.php', + 'PhabricatorPHIDsSearchField' => 'applications/search/field/PhabricatorPHIDsSearchField.php', + 'PhabricatorPHPASTApplication' => 'applications/phpast/application/PhabricatorPHPASTApplication.php', + 'PhabricatorPHPConfigSetupCheck' => 'applications/config/check/PhabricatorPHPConfigSetupCheck.php', + 'PhabricatorPHPPreflightSetupCheck' => 'applications/config/check/PhabricatorPHPPreflightSetupCheck.php', + 'PhabricatorPackagesApplication' => 'applications/packages/application/PhabricatorPackagesApplication.php', + 'PhabricatorPackagesController' => 'applications/packages/controller/PhabricatorPackagesController.php', + 'PhabricatorPackagesCreatePublisherCapability' => 'applications/packages/capability/PhabricatorPackagesCreatePublisherCapability.php', + 'PhabricatorPackagesDAO' => 'applications/packages/storage/PhabricatorPackagesDAO.php', + 'PhabricatorPackagesEditEngine' => 'applications/packages/editor/PhabricatorPackagesEditEngine.php', + 'PhabricatorPackagesEditor' => 'applications/packages/editor/PhabricatorPackagesEditor.php', + 'PhabricatorPackagesNgrams' => 'applications/packages/storage/PhabricatorPackagesNgrams.php', + 'PhabricatorPackagesPackage' => 'applications/packages/storage/PhabricatorPackagesPackage.php', + 'PhabricatorPackagesPackageController' => 'applications/packages/controller/PhabricatorPackagesPackageController.php', + 'PhabricatorPackagesPackageDatasource' => 'applications/packages/typeahead/PhabricatorPackagesPackageDatasource.php', + 'PhabricatorPackagesPackageDefaultEditCapability' => 'applications/packages/capability/PhabricatorPackagesPackageDefaultEditCapability.php', + 'PhabricatorPackagesPackageDefaultViewCapability' => 'applications/packages/capability/PhabricatorPackagesPackageDefaultViewCapability.php', + 'PhabricatorPackagesPackageEditConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPackageEditConduitAPIMethod.php', + 'PhabricatorPackagesPackageEditController' => 'applications/packages/controller/PhabricatorPackagesPackageEditController.php', + 'PhabricatorPackagesPackageEditEngine' => 'applications/packages/editor/PhabricatorPackagesPackageEditEngine.php', + 'PhabricatorPackagesPackageEditor' => 'applications/packages/editor/PhabricatorPackagesPackageEditor.php', + 'PhabricatorPackagesPackageKeyTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackageKeyTransaction.php', + 'PhabricatorPackagesPackageListController' => 'applications/packages/controller/PhabricatorPackagesPackageListController.php', + 'PhabricatorPackagesPackageListView' => 'applications/packages/view/PhabricatorPackagesPackageListView.php', + 'PhabricatorPackagesPackageNameNgrams' => 'applications/packages/storage/PhabricatorPackagesPackageNameNgrams.php', + 'PhabricatorPackagesPackageNameTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackageNameTransaction.php', + 'PhabricatorPackagesPackagePHIDType' => 'applications/packages/phid/PhabricatorPackagesPackagePHIDType.php', + 'PhabricatorPackagesPackagePublisherTransaction' => 'applications/packages/xaction/package/PhabricatorPackagesPackagePublisherTransaction.php', + 'PhabricatorPackagesPackageQuery' => 'applications/packages/query/PhabricatorPackagesPackageQuery.php', + 'PhabricatorPackagesPackageSearchConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPackageSearchConduitAPIMethod.php', + 'PhabricatorPackagesPackageSearchEngine' => 'applications/packages/query/PhabricatorPackagesPackageSearchEngine.php', + 'PhabricatorPackagesPackageTransaction' => 'applications/packages/storage/PhabricatorPackagesPackageTransaction.php', + 'PhabricatorPackagesPackageTransactionQuery' => 'applications/packages/query/PhabricatorPackagesPackageTransactionQuery.php', + 'PhabricatorPackagesPackageTransactionType' => 'applications/packages/xaction/package/PhabricatorPackagesPackageTransactionType.php', + 'PhabricatorPackagesPackageViewController' => 'applications/packages/controller/PhabricatorPackagesPackageViewController.php', + 'PhabricatorPackagesPublisher' => 'applications/packages/storage/PhabricatorPackagesPublisher.php', + 'PhabricatorPackagesPublisherController' => 'applications/packages/controller/PhabricatorPackagesPublisherController.php', + 'PhabricatorPackagesPublisherDatasource' => 'applications/packages/typeahead/PhabricatorPackagesPublisherDatasource.php', + 'PhabricatorPackagesPublisherDefaultEditCapability' => 'applications/packages/capability/PhabricatorPackagesPublisherDefaultEditCapability.php', + 'PhabricatorPackagesPublisherEditConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPublisherEditConduitAPIMethod.php', + 'PhabricatorPackagesPublisherEditController' => 'applications/packages/controller/PhabricatorPackagesPublisherEditController.php', + 'PhabricatorPackagesPublisherEditEngine' => 'applications/packages/editor/PhabricatorPackagesPublisherEditEngine.php', + 'PhabricatorPackagesPublisherEditor' => 'applications/packages/editor/PhabricatorPackagesPublisherEditor.php', + 'PhabricatorPackagesPublisherKeyTransaction' => 'applications/packages/xaction/publisher/PhabricatorPackagesPublisherKeyTransaction.php', + 'PhabricatorPackagesPublisherListController' => 'applications/packages/controller/PhabricatorPackagesPublisherListController.php', + 'PhabricatorPackagesPublisherListView' => 'applications/packages/view/PhabricatorPackagesPublisherListView.php', + 'PhabricatorPackagesPublisherNameNgrams' => 'applications/packages/storage/PhabricatorPackagesPublisherNameNgrams.php', + 'PhabricatorPackagesPublisherNameTransaction' => 'applications/packages/xaction/publisher/PhabricatorPackagesPublisherNameTransaction.php', + 'PhabricatorPackagesPublisherPHIDType' => 'applications/packages/phid/PhabricatorPackagesPublisherPHIDType.php', + 'PhabricatorPackagesPublisherQuery' => 'applications/packages/query/PhabricatorPackagesPublisherQuery.php', + 'PhabricatorPackagesPublisherSearchConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesPublisherSearchConduitAPIMethod.php', + 'PhabricatorPackagesPublisherSearchEngine' => 'applications/packages/query/PhabricatorPackagesPublisherSearchEngine.php', + 'PhabricatorPackagesPublisherTransaction' => 'applications/packages/storage/PhabricatorPackagesPublisherTransaction.php', + 'PhabricatorPackagesPublisherTransactionQuery' => 'applications/packages/query/PhabricatorPackagesPublisherTransactionQuery.php', + 'PhabricatorPackagesPublisherTransactionType' => 'applications/packages/xaction/publisher/PhabricatorPackagesPublisherTransactionType.php', + 'PhabricatorPackagesPublisherViewController' => 'applications/packages/controller/PhabricatorPackagesPublisherViewController.php', + 'PhabricatorPackagesQuery' => 'applications/packages/query/PhabricatorPackagesQuery.php', + 'PhabricatorPackagesSchemaSpec' => 'applications/packages/storage/PhabricatorPackagesSchemaSpec.php', + 'PhabricatorPackagesTransactionType' => 'applications/packages/xaction/PhabricatorPackagesTransactionType.php', + 'PhabricatorPackagesVersion' => 'applications/packages/storage/PhabricatorPackagesVersion.php', + 'PhabricatorPackagesVersionController' => 'applications/packages/controller/PhabricatorPackagesVersionController.php', + 'PhabricatorPackagesVersionEditConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesVersionEditConduitAPIMethod.php', + 'PhabricatorPackagesVersionEditController' => 'applications/packages/controller/PhabricatorPackagesVersionEditController.php', + 'PhabricatorPackagesVersionEditEngine' => 'applications/packages/editor/PhabricatorPackagesVersionEditEngine.php', + 'PhabricatorPackagesVersionEditor' => 'applications/packages/editor/PhabricatorPackagesVersionEditor.php', + 'PhabricatorPackagesVersionListController' => 'applications/packages/controller/PhabricatorPackagesVersionListController.php', + 'PhabricatorPackagesVersionListView' => 'applications/packages/view/PhabricatorPackagesVersionListView.php', + 'PhabricatorPackagesVersionNameNgrams' => 'applications/packages/storage/PhabricatorPackagesVersionNameNgrams.php', + 'PhabricatorPackagesVersionNameTransaction' => 'applications/packages/xaction/version/PhabricatorPackagesVersionNameTransaction.php', + 'PhabricatorPackagesVersionPHIDType' => 'applications/packages/phid/PhabricatorPackagesVersionPHIDType.php', + 'PhabricatorPackagesVersionPackageTransaction' => 'applications/packages/xaction/version/PhabricatorPackagesVersionPackageTransaction.php', + 'PhabricatorPackagesVersionQuery' => 'applications/packages/query/PhabricatorPackagesVersionQuery.php', + 'PhabricatorPackagesVersionSearchConduitAPIMethod' => 'applications/packages/conduit/PhabricatorPackagesVersionSearchConduitAPIMethod.php', + 'PhabricatorPackagesVersionSearchEngine' => 'applications/packages/query/PhabricatorPackagesVersionSearchEngine.php', + 'PhabricatorPackagesVersionTransaction' => 'applications/packages/storage/PhabricatorPackagesVersionTransaction.php', + 'PhabricatorPackagesVersionTransactionQuery' => 'applications/packages/query/PhabricatorPackagesVersionTransactionQuery.php', + 'PhabricatorPackagesVersionTransactionType' => 'applications/packages/xaction/version/PhabricatorPackagesVersionTransactionType.php', + 'PhabricatorPackagesVersionViewController' => 'applications/packages/controller/PhabricatorPackagesVersionViewController.php', + 'PhabricatorPackagesView' => 'applications/packages/view/PhabricatorPackagesView.php', + 'PhabricatorPagerUIExample' => 'applications/uiexample/examples/PhabricatorPagerUIExample.php', + 'PhabricatorPartialLoginUserLogType' => 'applications/people/userlog/PhabricatorPartialLoginUserLogType.php', + 'PhabricatorPassphraseApplication' => 'applications/passphrase/application/PhabricatorPassphraseApplication.php', + 'PhabricatorPasswordAuthProvider' => 'applications/auth/provider/PhabricatorPasswordAuthProvider.php', + 'PhabricatorPasswordDestructionEngineExtension' => 'applications/auth/extension/PhabricatorPasswordDestructionEngineExtension.php', + 'PhabricatorPasswordHasher' => 'infrastructure/util/password/PhabricatorPasswordHasher.php', + 'PhabricatorPasswordHasherTestCase' => 'infrastructure/util/password/__tests__/PhabricatorPasswordHasherTestCase.php', + 'PhabricatorPasswordHasherUnavailableException' => 'infrastructure/util/password/PhabricatorPasswordHasherUnavailableException.php', + 'PhabricatorPasswordSettingsPanel' => 'applications/settings/panel/PhabricatorPasswordSettingsPanel.php', 'PhabricatorPaste' => 'applications/paste/storage/PhabricatorPaste.php', + 'PhabricatorPasteApplication' => 'applications/paste/application/PhabricatorPasteApplication.php', + 'PhabricatorPasteArchiveController' => 'applications/paste/controller/PhabricatorPasteArchiveController.php', + 'PhabricatorPasteContentSearchEngineAttachment' => 'applications/paste/engineextension/PhabricatorPasteContentSearchEngineAttachment.php', + 'PhabricatorPasteContentTransaction' => 'applications/paste/xaction/PhabricatorPasteContentTransaction.php', 'PhabricatorPasteController' => 'applications/paste/controller/PhabricatorPasteController.php', 'PhabricatorPasteDAO' => 'applications/paste/storage/PhabricatorPasteDAO.php', + 'PhabricatorPasteEditController' => 'applications/paste/controller/PhabricatorPasteEditController.php', + 'PhabricatorPasteEditEngine' => 'applications/paste/editor/PhabricatorPasteEditEngine.php', + 'PhabricatorPasteEditor' => 'applications/paste/editor/PhabricatorPasteEditor.php', + 'PhabricatorPasteFerretEngine' => 'applications/paste/engine/PhabricatorPasteFerretEngine.php', + 'PhabricatorPasteFilenameContextFreeGrammar' => 'applications/paste/lipsum/PhabricatorPasteFilenameContextFreeGrammar.php', + 'PhabricatorPasteFulltextEngine' => 'applications/paste/engine/PhabricatorPasteFulltextEngine.php', + 'PhabricatorPasteLanguageTransaction' => 'applications/paste/xaction/PhabricatorPasteLanguageTransaction.php', 'PhabricatorPasteListController' => 'applications/paste/controller/PhabricatorPasteListController.php', + 'PhabricatorPastePastePHIDType' => 'applications/paste/phid/PhabricatorPastePastePHIDType.php', 'PhabricatorPasteQuery' => 'applications/paste/query/PhabricatorPasteQuery.php', + 'PhabricatorPasteRawController' => 'applications/paste/controller/PhabricatorPasteRawController.php', + 'PhabricatorPasteRemarkupRule' => 'applications/paste/remarkup/PhabricatorPasteRemarkupRule.php', + 'PhabricatorPasteSchemaSpec' => 'applications/paste/storage/PhabricatorPasteSchemaSpec.php', + 'PhabricatorPasteSearchEngine' => 'applications/paste/query/PhabricatorPasteSearchEngine.php', + 'PhabricatorPasteSnippet' => 'applications/paste/snippet/PhabricatorPasteSnippet.php', + 'PhabricatorPasteStatusTransaction' => 'applications/paste/xaction/PhabricatorPasteStatusTransaction.php', + 'PhabricatorPasteTestDataGenerator' => 'applications/paste/lipsum/PhabricatorPasteTestDataGenerator.php', + 'PhabricatorPasteTitleTransaction' => 'applications/paste/xaction/PhabricatorPasteTitleTransaction.php', + 'PhabricatorPasteTransaction' => 'applications/paste/storage/PhabricatorPasteTransaction.php', + 'PhabricatorPasteTransactionComment' => 'applications/paste/storage/PhabricatorPasteTransactionComment.php', + 'PhabricatorPasteTransactionQuery' => 'applications/paste/query/PhabricatorPasteTransactionQuery.php', + 'PhabricatorPasteTransactionType' => 'applications/paste/xaction/PhabricatorPasteTransactionType.php', 'PhabricatorPasteViewController' => 'applications/paste/controller/PhabricatorPasteViewController.php', + 'PhabricatorPathSetupCheck' => 'applications/config/check/PhabricatorPathSetupCheck.php', + 'PhabricatorPeopleAnyOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php', + 'PhabricatorPeopleApplication' => 'applications/people/application/PhabricatorPeopleApplication.php', + 'PhabricatorPeopleApproveController' => 'applications/people/controller/PhabricatorPeopleApproveController.php', + 'PhabricatorPeopleAvailabilitySearchEngineAttachment' => 'applications/people/engineextension/PhabricatorPeopleAvailabilitySearchEngineAttachment.php', + 'PhabricatorPeopleBadgesProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleBadgesProfileMenuItem.php', + 'PhabricatorPeopleCommitsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleCommitsProfileMenuItem.php', 'PhabricatorPeopleController' => 'applications/people/controller/PhabricatorPeopleController.php', - 'PhabricatorPeopleEditController' => 'applications/people/controller/PhabricatorPeopleEditController.php', + 'PhabricatorPeopleCreateController' => 'applications/people/controller/PhabricatorPeopleCreateController.php', + 'PhabricatorPeopleCreateGuidanceContext' => 'applications/people/guidance/PhabricatorPeopleCreateGuidanceContext.php', + 'PhabricatorPeopleDatasource' => 'applications/people/typeahead/PhabricatorPeopleDatasource.php', + 'PhabricatorPeopleDatasourceEngineExtension' => 'applications/people/engineextension/PhabricatorPeopleDatasourceEngineExtension.php', + 'PhabricatorPeopleDeleteController' => 'applications/people/controller/PhabricatorPeopleDeleteController.php', + 'PhabricatorPeopleDetailsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleDetailsProfileMenuItem.php', + 'PhabricatorPeopleDisableController' => 'applications/people/controller/PhabricatorPeopleDisableController.php', + 'PhabricatorPeopleEmailLoginMailEngine' => 'applications/people/mail/PhabricatorPeopleEmailLoginMailEngine.php', + 'PhabricatorPeopleEmpowerController' => 'applications/people/controller/PhabricatorPeopleEmpowerController.php', + 'PhabricatorPeopleExternalIdentifierPHIDType' => 'applications/people/phid/PhabricatorPeopleExternalIdentifierPHIDType.php', + 'PhabricatorPeopleExternalPHIDType' => 'applications/people/phid/PhabricatorPeopleExternalPHIDType.php', + 'PhabricatorPeopleIconSet' => 'applications/people/icon/PhabricatorPeopleIconSet.php', + 'PhabricatorPeopleInviteController' => 'applications/people/controller/PhabricatorPeopleInviteController.php', + 'PhabricatorPeopleInviteListController' => 'applications/people/controller/PhabricatorPeopleInviteListController.php', + 'PhabricatorPeopleInviteSendController' => 'applications/people/controller/PhabricatorPeopleInviteSendController.php', 'PhabricatorPeopleListController' => 'applications/people/controller/PhabricatorPeopleListController.php', + 'PhabricatorPeopleLogQuery' => 'applications/people/query/PhabricatorPeopleLogQuery.php', + 'PhabricatorPeopleLogSearchEngine' => 'applications/people/query/PhabricatorPeopleLogSearchEngine.php', + 'PhabricatorPeopleLogViewController' => 'applications/people/controller/PhabricatorPeopleLogViewController.php', 'PhabricatorPeopleLogsController' => 'applications/people/controller/PhabricatorPeopleLogsController.php', + 'PhabricatorPeopleMailEngine' => 'applications/people/mail/PhabricatorPeopleMailEngine.php', + 'PhabricatorPeopleMailEngineException' => 'applications/people/mail/PhabricatorPeopleMailEngineException.php', + 'PhabricatorPeopleManageProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleManageProfileMenuItem.php', + 'PhabricatorPeopleManagementApproveWorkflow' => 'applications/people/management/PhabricatorPeopleManagementApproveWorkflow.php', + 'PhabricatorPeopleManagementEmpowerWorkflow' => 'applications/people/management/PhabricatorPeopleManagementEmpowerWorkflow.php', + 'PhabricatorPeopleManagementEnableWorkflow' => 'applications/people/management/PhabricatorPeopleManagementEnableWorkflow.php', + 'PhabricatorPeopleManagementWorkflow' => 'applications/people/management/PhabricatorPeopleManagementWorkflow.php', + 'PhabricatorPeopleNewController' => 'applications/people/controller/PhabricatorPeopleNewController.php', + 'PhabricatorPeopleNoOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php', + 'PhabricatorPeopleOwnerDatasource' => 'applications/people/typeahead/PhabricatorPeopleOwnerDatasource.php', + 'PhabricatorPeoplePictureProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeoplePictureProfileMenuItem.php', + 'PhabricatorPeopleProfileBadgesController' => 'applications/people/controller/PhabricatorPeopleProfileBadgesController.php', + 'PhabricatorPeopleProfileCommitsController' => 'applications/people/controller/PhabricatorPeopleProfileCommitsController.php', 'PhabricatorPeopleProfileController' => 'applications/people/controller/PhabricatorPeopleProfileController.php', - 'PhabricatorPeopleQuery' => 'applications/people/PhabricatorPeopleQuery.php', + 'PhabricatorPeopleProfileEditController' => 'applications/people/controller/PhabricatorPeopleProfileEditController.php', + 'PhabricatorPeopleProfileManageController' => 'applications/people/controller/PhabricatorPeopleProfileManageController.php', + 'PhabricatorPeopleProfileMenuEngine' => 'applications/people/engine/PhabricatorPeopleProfileMenuEngine.php', + 'PhabricatorPeopleProfilePictureController' => 'applications/people/controller/PhabricatorPeopleProfilePictureController.php', + 'PhabricatorPeopleProfileRevisionsController' => 'applications/people/controller/PhabricatorPeopleProfileRevisionsController.php', + 'PhabricatorPeopleProfileTasksController' => 'applications/people/controller/PhabricatorPeopleProfileTasksController.php', + 'PhabricatorPeopleProfileViewController' => 'applications/people/controller/PhabricatorPeopleProfileViewController.php', + 'PhabricatorPeopleQuery' => 'applications/people/query/PhabricatorPeopleQuery.php', + 'PhabricatorPeopleRenameController' => 'applications/people/controller/PhabricatorPeopleRenameController.php', + 'PhabricatorPeopleRevisionsProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleRevisionsProfileMenuItem.php', + 'PhabricatorPeopleSearchEngine' => 'applications/people/query/PhabricatorPeopleSearchEngine.php', + 'PhabricatorPeopleTasksProfileMenuItem' => 'applications/people/menuitem/PhabricatorPeopleTasksProfileMenuItem.php', + 'PhabricatorPeopleTestDataGenerator' => 'applications/people/lipsum/PhabricatorPeopleTestDataGenerator.php', + 'PhabricatorPeopleTransactionQuery' => 'applications/people/query/PhabricatorPeopleTransactionQuery.php', + 'PhabricatorPeopleUserEmailPHIDType' => 'applications/people/phid/PhabricatorPeopleUserEmailPHIDType.php', + 'PhabricatorPeopleUserEmailQuery' => 'applications/people/query/PhabricatorPeopleUserEmailQuery.php', + 'PhabricatorPeopleUserFunctionDatasource' => 'applications/people/typeahead/PhabricatorPeopleUserFunctionDatasource.php', + 'PhabricatorPeopleUserPHIDType' => 'applications/people/phid/PhabricatorPeopleUserPHIDType.php', + 'PhabricatorPeopleUsernameMailEngine' => 'applications/people/mail/PhabricatorPeopleUsernameMailEngine.php', + 'PhabricatorPeopleWelcomeController' => 'applications/people/controller/PhabricatorPeopleWelcomeController.php', + 'PhabricatorPeopleWelcomeMailEngine' => 'applications/people/mail/PhabricatorPeopleWelcomeMailEngine.php', + 'PhabricatorPhabricatorAuthProvider' => 'applications/auth/provider/PhabricatorPhabricatorAuthProvider.php', + 'PhabricatorPhameApplication' => 'applications/phame/application/PhabricatorPhameApplication.php', + 'PhabricatorPhameBlogPHIDType' => 'applications/phame/phid/PhabricatorPhameBlogPHIDType.php', + 'PhabricatorPhamePostPHIDType' => 'applications/phame/phid/PhabricatorPhamePostPHIDType.php', + 'PhabricatorPhluxApplication' => 'applications/phlux/application/PhabricatorPhluxApplication.php', + 'PhabricatorPholioApplication' => 'applications/pholio/application/PhabricatorPholioApplication.php', + 'PhabricatorPholioMockTestDataGenerator' => 'applications/pholio/lipsum/PhabricatorPholioMockTestDataGenerator.php', + 'PhabricatorPhoneNumber' => 'applications/metamta/message/PhabricatorPhoneNumber.php', + 'PhabricatorPhoneNumberTestCase' => 'applications/metamta/message/__tests__/PhabricatorPhoneNumberTestCase.php', + 'PhabricatorPhortuneApplication' => 'applications/phortune/application/PhabricatorPhortuneApplication.php', + 'PhabricatorPhortuneContentSource' => 'applications/phortune/contentsource/PhabricatorPhortuneContentSource.php', + 'PhabricatorPhortuneManagementInvoiceWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementInvoiceWorkflow.php', + 'PhabricatorPhortuneManagementWorkflow' => 'applications/phortune/management/PhabricatorPhortuneManagementWorkflow.php', + 'PhabricatorPhortuneTestCase' => 'applications/phortune/__tests__/PhabricatorPhortuneTestCase.php', + 'PhabricatorPhrequentApplication' => 'applications/phrequent/application/PhabricatorPhrequentApplication.php', + 'PhabricatorPhrictionApplication' => 'applications/phriction/application/PhabricatorPhrictionApplication.php', + 'PhabricatorPhurlApplication' => 'applications/phurl/application/PhabricatorPhurlApplication.php', + 'PhabricatorPhurlConfigOptions' => 'applications/config/option/PhabricatorPhurlConfigOptions.php', + 'PhabricatorPhurlController' => 'applications/phurl/controller/PhabricatorPhurlController.php', + 'PhabricatorPhurlDAO' => 'applications/phurl/storage/PhabricatorPhurlDAO.php', + 'PhabricatorPhurlLinkRemarkupRule' => 'applications/phurl/remarkup/PhabricatorPhurlLinkRemarkupRule.php', + 'PhabricatorPhurlRemarkupRule' => 'applications/phurl/remarkup/PhabricatorPhurlRemarkupRule.php', + 'PhabricatorPhurlSchemaSpec' => 'applications/phurl/storage/PhabricatorPhurlSchemaSpec.php', + 'PhabricatorPhurlShortURLController' => 'applications/phurl/controller/PhabricatorPhurlShortURLController.php', + 'PhabricatorPhurlShortURLDefaultController' => 'applications/phurl/controller/PhabricatorPhurlShortURLDefaultController.php', + 'PhabricatorPhurlURL' => 'applications/phurl/storage/PhabricatorPhurlURL.php', + 'PhabricatorPhurlURLAccessController' => 'applications/phurl/controller/PhabricatorPhurlURLAccessController.php', + 'PhabricatorPhurlURLAliasTransaction' => 'applications/phurl/xaction/PhabricatorPhurlURLAliasTransaction.php', + 'PhabricatorPhurlURLCreateCapability' => 'applications/phurl/capability/PhabricatorPhurlURLCreateCapability.php', + 'PhabricatorPhurlURLDatasource' => 'applications/phurl/typeahead/PhabricatorPhurlURLDatasource.php', + 'PhabricatorPhurlURLDescriptionTransaction' => 'applications/phurl/xaction/PhabricatorPhurlURLDescriptionTransaction.php', + 'PhabricatorPhurlURLEditConduitAPIMethod' => 'applications/phurl/conduit/PhabricatorPhurlURLEditConduitAPIMethod.php', + 'PhabricatorPhurlURLEditController' => 'applications/phurl/controller/PhabricatorPhurlURLEditController.php', + 'PhabricatorPhurlURLEditEngine' => 'applications/phurl/editor/PhabricatorPhurlURLEditEngine.php', + 'PhabricatorPhurlURLEditor' => 'applications/phurl/editor/PhabricatorPhurlURLEditor.php', + 'PhabricatorPhurlURLListController' => 'applications/phurl/controller/PhabricatorPhurlURLListController.php', + 'PhabricatorPhurlURLLongURLTransaction' => 'applications/phurl/xaction/PhabricatorPhurlURLLongURLTransaction.php', + 'PhabricatorPhurlURLMailReceiver' => 'applications/phurl/mail/PhabricatorPhurlURLMailReceiver.php', + 'PhabricatorPhurlURLNameNgrams' => 'applications/phurl/storage/PhabricatorPhurlURLNameNgrams.php', + 'PhabricatorPhurlURLNameTransaction' => 'applications/phurl/xaction/PhabricatorPhurlURLNameTransaction.php', + 'PhabricatorPhurlURLPHIDType' => 'applications/phurl/phid/PhabricatorPhurlURLPHIDType.php', + 'PhabricatorPhurlURLQuery' => 'applications/phurl/query/PhabricatorPhurlURLQuery.php', + 'PhabricatorPhurlURLReplyHandler' => 'applications/phurl/mail/PhabricatorPhurlURLReplyHandler.php', + 'PhabricatorPhurlURLSearchConduitAPIMethod' => 'applications/phurl/conduit/PhabricatorPhurlURLSearchConduitAPIMethod.php', + 'PhabricatorPhurlURLSearchEngine' => 'applications/phurl/query/PhabricatorPhurlURLSearchEngine.php', + 'PhabricatorPhurlURLTransaction' => 'applications/phurl/storage/PhabricatorPhurlURLTransaction.php', + 'PhabricatorPhurlURLTransactionComment' => 'applications/phurl/storage/PhabricatorPhurlURLTransactionComment.php', + 'PhabricatorPhurlURLTransactionQuery' => 'applications/phurl/query/PhabricatorPhurlURLTransactionQuery.php', + 'PhabricatorPhurlURLTransactionType' => 'applications/phurl/xaction/PhabricatorPhurlURLTransactionType.php', + 'PhabricatorPhurlURLViewController' => 'applications/phurl/controller/PhabricatorPhurlURLViewController.php', + 'PhabricatorPinnedApplicationsSetting' => 'applications/settings/setting/PhabricatorPinnedApplicationsSetting.php', + 'PhabricatorPirateEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorPirateEnglishTranslation.php', + 'PhabricatorPlatform404Controller' => 'applications/base/controller/PhabricatorPlatform404Controller.php', + 'PhabricatorPlatformSite' => 'aphront/site/PhabricatorPlatformSite.php', + 'PhabricatorPointsEditField' => 'applications/transactions/editfield/PhabricatorPointsEditField.php', + 'PhabricatorPointsFact' => 'applications/fact/fact/PhabricatorPointsFact.php', 'PhabricatorPolicies' => 'applications/policy/constants/PhabricatorPolicies.php', - 'PhabricatorPolicyCapability' => 'applications/policy/constants/PhabricatorPolicyCapability.php', + 'PhabricatorPolicy' => 'applications/policy/storage/PhabricatorPolicy.php', + 'PhabricatorPolicyApplication' => 'applications/policy/application/PhabricatorPolicyApplication.php', + 'PhabricatorPolicyAwareQuery' => 'infrastructure/query/policy/PhabricatorPolicyAwareQuery.php', + 'PhabricatorPolicyAwareTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyAwareTestQuery.php', + 'PhabricatorPolicyCanEditCapability' => 'applications/policy/capability/PhabricatorPolicyCanEditCapability.php', + 'PhabricatorPolicyCanInteractCapability' => 'applications/policy/capability/PhabricatorPolicyCanInteractCapability.php', + 'PhabricatorPolicyCanJoinCapability' => 'applications/policy/capability/PhabricatorPolicyCanJoinCapability.php', + 'PhabricatorPolicyCanViewCapability' => 'applications/policy/capability/PhabricatorPolicyCanViewCapability.php', + 'PhabricatorPolicyCapability' => 'applications/policy/capability/PhabricatorPolicyCapability.php', + 'PhabricatorPolicyCapabilityTestCase' => 'applications/policy/capability/__tests__/PhabricatorPolicyCapabilityTestCase.php', + 'PhabricatorPolicyCodex' => 'applications/policy/codex/PhabricatorPolicyCodex.php', + 'PhabricatorPolicyCodexInterface' => 'applications/policy/codex/PhabricatorPolicyCodexInterface.php', + 'PhabricatorPolicyCodexRuleDescription' => 'applications/policy/codex/PhabricatorPolicyCodexRuleDescription.php', + 'PhabricatorPolicyConfigOptions' => 'applications/policy/config/PhabricatorPolicyConfigOptions.php', 'PhabricatorPolicyConstants' => 'applications/policy/constants/PhabricatorPolicyConstants.php', + 'PhabricatorPolicyController' => 'applications/policy/controller/PhabricatorPolicyController.php', + 'PhabricatorPolicyDAO' => 'applications/policy/storage/PhabricatorPolicyDAO.php', + 'PhabricatorPolicyDataTestCase' => 'applications/policy/__tests__/PhabricatorPolicyDataTestCase.php', + 'PhabricatorPolicyEditController' => 'applications/policy/controller/PhabricatorPolicyEditController.php', + 'PhabricatorPolicyEditEngineExtension' => 'applications/policy/editor/PhabricatorPolicyEditEngineExtension.php', + 'PhabricatorPolicyEditField' => 'applications/transactions/editfield/PhabricatorPolicyEditField.php', 'PhabricatorPolicyException' => 'applications/policy/exception/PhabricatorPolicyException.php', + 'PhabricatorPolicyExplainController' => 'applications/policy/controller/PhabricatorPolicyExplainController.php', + 'PhabricatorPolicyFavoritesSetting' => 'applications/settings/setting/PhabricatorPolicyFavoritesSetting.php', 'PhabricatorPolicyFilter' => 'applications/policy/filter/PhabricatorPolicyFilter.php', + 'PhabricatorPolicyFilterSet' => 'applications/policy/filter/PhabricatorPolicyFilterSet.php', 'PhabricatorPolicyInterface' => 'applications/policy/interface/PhabricatorPolicyInterface.php', - 'PhabricatorPolicyQuery' => 'infrastructure/query/policy/PhabricatorPolicyQuery.php', + 'PhabricatorPolicyManagementShowWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementShowWorkflow.php', + 'PhabricatorPolicyManagementUnlockWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementUnlockWorkflow.php', + 'PhabricatorPolicyManagementWorkflow' => 'applications/policy/management/PhabricatorPolicyManagementWorkflow.php', + 'PhabricatorPolicyPHIDTypePolicy' => 'applications/policy/phid/PhabricatorPolicyPHIDTypePolicy.php', + 'PhabricatorPolicyQuery' => 'applications/policy/query/PhabricatorPolicyQuery.php', + 'PhabricatorPolicyRef' => 'applications/policy/view/PhabricatorPolicyRef.php', + 'PhabricatorPolicyRequestExceptionHandler' => 'aphront/handler/PhabricatorPolicyRequestExceptionHandler.php', + 'PhabricatorPolicyRule' => 'applications/policy/rule/PhabricatorPolicyRule.php', + 'PhabricatorPolicyRulesView' => 'applications/policy/view/PhabricatorPolicyRulesView.php', + 'PhabricatorPolicySearchEngineExtension' => 'applications/policy/engineextension/PhabricatorPolicySearchEngineExtension.php', 'PhabricatorPolicyTestCase' => 'applications/policy/__tests__/PhabricatorPolicyTestCase.php', 'PhabricatorPolicyTestObject' => 'applications/policy/__tests__/PhabricatorPolicyTestObject.php', - 'PhabricatorPolicyTestQuery' => 'applications/policy/__tests__/PhabricatorPolicyTestQuery.php', - 'PhabricatorProfileHeaderView' => 'view/layout/PhabricatorProfileHeaderView.php', + 'PhabricatorPolicyType' => 'applications/policy/constants/PhabricatorPolicyType.php', + 'PhabricatorPonderApplication' => 'applications/ponder/application/PhabricatorPonderApplication.php', + 'PhabricatorPreambleTestCase' => 'infrastructure/util/__tests__/PhabricatorPreambleTestCase.php', + 'PhabricatorPrimaryEmailUserLogType' => 'applications/people/userlog/PhabricatorPrimaryEmailUserLogType.php', + 'PhabricatorProfileMenuEditEngine' => 'applications/search/editor/PhabricatorProfileMenuEditEngine.php', + 'PhabricatorProfileMenuEditor' => 'applications/search/editor/PhabricatorProfileMenuEditor.php', + 'PhabricatorProfileMenuEngine' => 'applications/search/engine/PhabricatorProfileMenuEngine.php', + 'PhabricatorProfileMenuItem' => 'applications/search/menuitem/PhabricatorProfileMenuItem.php', + 'PhabricatorProfileMenuItemAffectsObjectEdgeType' => 'applications/search/edge/PhabricatorProfileMenuItemAffectsObjectEdgeType.php', + 'PhabricatorProfileMenuItemConfiguration' => 'applications/search/storage/PhabricatorProfileMenuItemConfiguration.php', + 'PhabricatorProfileMenuItemConfigurationQuery' => 'applications/search/query/PhabricatorProfileMenuItemConfigurationQuery.php', + 'PhabricatorProfileMenuItemConfigurationTransaction' => 'applications/search/storage/PhabricatorProfileMenuItemConfigurationTransaction.php', + 'PhabricatorProfileMenuItemConfigurationTransactionQuery' => 'applications/search/query/PhabricatorProfileMenuItemConfigurationTransactionQuery.php', + 'PhabricatorProfileMenuItemIconSet' => 'applications/search/menuitem/PhabricatorProfileMenuItemIconSet.php', + 'PhabricatorProfileMenuItemIndexEngineExtension' => 'applications/search/engineextension/PhabricatorProfileMenuItemIndexEngineExtension.php', + 'PhabricatorProfileMenuItemPHIDType' => 'applications/search/phidtype/PhabricatorProfileMenuItemPHIDType.php', + 'PhabricatorProfileMenuItemView' => 'applications/search/engine/PhabricatorProfileMenuItemView.php', + 'PhabricatorProfileMenuItemViewList' => 'applications/search/engine/PhabricatorProfileMenuItemViewList.php', 'PhabricatorProject' => 'applications/project/storage/PhabricatorProject.php', - 'PhabricatorProjectAffiliation' => 'applications/project/storage/PhabricatorProjectAffiliation.php', - 'PhabricatorProjectConstants' => 'applications/project/constants/PhabricatorProjectConstants.php', + 'PhabricatorProjectActivityChartEngine' => 'applications/project/chart/PhabricatorProjectActivityChartEngine.php', + 'PhabricatorProjectAddHeraldAction' => 'applications/project/herald/PhabricatorProjectAddHeraldAction.php', + 'PhabricatorProjectApplication' => 'applications/project/application/PhabricatorProjectApplication.php', + 'PhabricatorProjectArchiveController' => 'applications/project/controller/PhabricatorProjectArchiveController.php', + 'PhabricatorProjectBoardBackgroundController' => 'applications/project/controller/PhabricatorProjectBoardBackgroundController.php', + 'PhabricatorProjectBoardController' => 'applications/project/controller/PhabricatorProjectBoardController.php', + 'PhabricatorProjectBoardDefaultController' => 'applications/project/controller/PhabricatorProjectBoardDefaultController.php', + 'PhabricatorProjectBoardDisableController' => 'applications/project/controller/PhabricatorProjectBoardDisableController.php', + 'PhabricatorProjectBoardFilterController' => 'applications/project/controller/PhabricatorProjectBoardFilterController.php', + 'PhabricatorProjectBoardImportController' => 'applications/project/controller/PhabricatorProjectBoardImportController.php', + 'PhabricatorProjectBoardManageController' => 'applications/project/controller/PhabricatorProjectBoardManageController.php', + 'PhabricatorProjectBoardReloadController' => 'applications/project/controller/PhabricatorProjectBoardReloadController.php', + 'PhabricatorProjectBoardReorderController' => 'applications/project/controller/PhabricatorProjectBoardReorderController.php', + 'PhabricatorProjectBoardViewController' => 'applications/project/controller/PhabricatorProjectBoardViewController.php', + 'PhabricatorProjectBuiltinsExample' => 'applications/uiexample/examples/PhabricatorProjectBuiltinsExample.php', + 'PhabricatorProjectBurndownChartEngine' => 'applications/project/chart/PhabricatorProjectBurndownChartEngine.php', + 'PhabricatorProjectCardView' => 'applications/project/view/PhabricatorProjectCardView.php', + 'PhabricatorProjectColorTransaction' => 'applications/project/xaction/PhabricatorProjectColorTransaction.php', + 'PhabricatorProjectColorsConfigType' => 'applications/project/config/PhabricatorProjectColorsConfigType.php', + 'PhabricatorProjectColumn' => 'applications/project/storage/PhabricatorProjectColumn.php', + 'PhabricatorProjectColumnAuthorOrder' => 'applications/project/order/PhabricatorProjectColumnAuthorOrder.php', + 'PhabricatorProjectColumnBulkEditController' => 'applications/project/controller/PhabricatorProjectColumnBulkEditController.php', + 'PhabricatorProjectColumnBulkMoveController' => 'applications/project/controller/PhabricatorProjectColumnBulkMoveController.php', + 'PhabricatorProjectColumnCreatedOrder' => 'applications/project/order/PhabricatorProjectColumnCreatedOrder.php', + 'PhabricatorProjectColumnDetailController' => 'applications/project/controller/PhabricatorProjectColumnDetailController.php', + 'PhabricatorProjectColumnEditController' => 'applications/project/controller/PhabricatorProjectColumnEditController.php', + 'PhabricatorProjectColumnHeader' => 'applications/project/order/PhabricatorProjectColumnHeader.php', + 'PhabricatorProjectColumnHideController' => 'applications/project/controller/PhabricatorProjectColumnHideController.php', + 'PhabricatorProjectColumnLimitTransaction' => 'applications/project/xaction/column/PhabricatorProjectColumnLimitTransaction.php', + 'PhabricatorProjectColumnNameTransaction' => 'applications/project/xaction/column/PhabricatorProjectColumnNameTransaction.php', + 'PhabricatorProjectColumnNaturalOrder' => 'applications/project/order/PhabricatorProjectColumnNaturalOrder.php', + 'PhabricatorProjectColumnOrder' => 'applications/project/order/PhabricatorProjectColumnOrder.php', + 'PhabricatorProjectColumnOwnerOrder' => 'applications/project/order/PhabricatorProjectColumnOwnerOrder.php', + 'PhabricatorProjectColumnPHIDType' => 'applications/project/phid/PhabricatorProjectColumnPHIDType.php', + 'PhabricatorProjectColumnPointsOrder' => 'applications/project/order/PhabricatorProjectColumnPointsOrder.php', + 'PhabricatorProjectColumnPosition' => 'applications/project/storage/PhabricatorProjectColumnPosition.php', + 'PhabricatorProjectColumnPositionQuery' => 'applications/project/query/PhabricatorProjectColumnPositionQuery.php', + 'PhabricatorProjectColumnPriorityOrder' => 'applications/project/order/PhabricatorProjectColumnPriorityOrder.php', + 'PhabricatorProjectColumnQuery' => 'applications/project/query/PhabricatorProjectColumnQuery.php', + 'PhabricatorProjectColumnRemoveTriggerController' => 'applications/project/controller/PhabricatorProjectColumnRemoveTriggerController.php', + 'PhabricatorProjectColumnSearchEngine' => 'applications/project/query/PhabricatorProjectColumnSearchEngine.php', + 'PhabricatorProjectColumnStatusOrder' => 'applications/project/order/PhabricatorProjectColumnStatusOrder.php', + 'PhabricatorProjectColumnStatusTransaction' => 'applications/project/xaction/column/PhabricatorProjectColumnStatusTransaction.php', + 'PhabricatorProjectColumnTitleOrder' => 'applications/project/order/PhabricatorProjectColumnTitleOrder.php', + 'PhabricatorProjectColumnTransaction' => 'applications/project/storage/PhabricatorProjectColumnTransaction.php', + 'PhabricatorProjectColumnTransactionEditor' => 'applications/project/editor/PhabricatorProjectColumnTransactionEditor.php', + 'PhabricatorProjectColumnTransactionQuery' => 'applications/project/query/PhabricatorProjectColumnTransactionQuery.php', + 'PhabricatorProjectColumnTransactionType' => 'applications/project/xaction/column/PhabricatorProjectColumnTransactionType.php', + 'PhabricatorProjectColumnTriggerTransaction' => 'applications/project/xaction/column/PhabricatorProjectColumnTriggerTransaction.php', + 'PhabricatorProjectColumnViewQueryController' => 'applications/project/controller/PhabricatorProjectColumnViewQueryController.php', + 'PhabricatorProjectConfigOptions' => 'applications/project/config/PhabricatorProjectConfigOptions.php', + 'PhabricatorProjectConfiguredCustomField' => 'applications/project/customfield/PhabricatorProjectConfiguredCustomField.php', 'PhabricatorProjectController' => 'applications/project/controller/PhabricatorProjectController.php', - 'PhabricatorProjectCreateController' => 'applications/project/controller/PhabricatorProjectCreateController.php', + 'PhabricatorProjectCoreTestCase' => 'applications/project/__tests__/PhabricatorProjectCoreTestCase.php', + 'PhabricatorProjectCoverController' => 'applications/project/controller/PhabricatorProjectCoverController.php', + 'PhabricatorProjectCustomField' => 'applications/project/customfield/PhabricatorProjectCustomField.php', + 'PhabricatorProjectCustomFieldNumericIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldNumericIndex.php', + 'PhabricatorProjectCustomFieldStorage' => 'applications/project/storage/PhabricatorProjectCustomFieldStorage.php', + 'PhabricatorProjectCustomFieldStringIndex' => 'applications/project/storage/PhabricatorProjectCustomFieldStringIndex.php', 'PhabricatorProjectDAO' => 'applications/project/storage/PhabricatorProjectDAO.php', - 'PhabricatorProjectEditor' => 'applications/project/editor/PhabricatorProjectEditor.php', + 'PhabricatorProjectDatasource' => 'applications/project/typeahead/PhabricatorProjectDatasource.php', + 'PhabricatorProjectDescriptionField' => 'applications/project/customfield/PhabricatorProjectDescriptionField.php', + 'PhabricatorProjectDetailsProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectDetailsProfileMenuItem.php', + 'PhabricatorProjectDropEffect' => 'applications/project/icon/PhabricatorProjectDropEffect.php', + 'PhabricatorProjectEditController' => 'applications/project/controller/PhabricatorProjectEditController.php', + 'PhabricatorProjectEditEngine' => 'applications/project/engine/PhabricatorProjectEditEngine.php', + 'PhabricatorProjectEditPictureController' => 'applications/project/controller/PhabricatorProjectEditPictureController.php', + 'PhabricatorProjectFerretEngine' => 'applications/project/search/PhabricatorProjectFerretEngine.php', + 'PhabricatorProjectFilterTransaction' => 'applications/project/xaction/PhabricatorProjectFilterTransaction.php', + 'PhabricatorProjectFulltextEngine' => 'applications/project/search/PhabricatorProjectFulltextEngine.php', + 'PhabricatorProjectHeraldAction' => 'applications/project/herald/PhabricatorProjectHeraldAction.php', + 'PhabricatorProjectHeraldAdapter' => 'applications/project/herald/PhabricatorProjectHeraldAdapter.php', + 'PhabricatorProjectHeraldFieldGroup' => 'applications/project/herald/PhabricatorProjectHeraldFieldGroup.php', + 'PhabricatorProjectHovercardEngineExtension' => 'applications/project/engineextension/PhabricatorProjectHovercardEngineExtension.php', + 'PhabricatorProjectIconSet' => 'applications/project/icon/PhabricatorProjectIconSet.php', + 'PhabricatorProjectIconTransaction' => 'applications/project/xaction/PhabricatorProjectIconTransaction.php', + 'PhabricatorProjectIconsConfigType' => 'applications/project/config/PhabricatorProjectIconsConfigType.php', + 'PhabricatorProjectImageTransaction' => 'applications/project/xaction/PhabricatorProjectImageTransaction.php', + 'PhabricatorProjectInterface' => 'applications/project/interface/PhabricatorProjectInterface.php', 'PhabricatorProjectListController' => 'applications/project/controller/PhabricatorProjectListController.php', - 'PhabricatorProjectNameCollisionException' => 'applications/project/exception/PhabricatorProjectNameCollisionException.php', - 'PhabricatorProjectProfile' => 'applications/project/storage/PhabricatorProjectProfile.php', + 'PhabricatorProjectListView' => 'applications/project/view/PhabricatorProjectListView.php', + 'PhabricatorProjectLockController' => 'applications/project/controller/PhabricatorProjectLockController.php', + 'PhabricatorProjectLockTransaction' => 'applications/project/xaction/PhabricatorProjectLockTransaction.php', + 'PhabricatorProjectLogicalAncestorDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalAncestorDatasource.php', + 'PhabricatorProjectLogicalDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalDatasource.php', + 'PhabricatorProjectLogicalOnlyDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOnlyDatasource.php', + 'PhabricatorProjectLogicalOrNotDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php', + 'PhabricatorProjectLogicalUserDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalUserDatasource.php', + 'PhabricatorProjectLogicalViewerDatasource' => 'applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php', + 'PhabricatorProjectManageController' => 'applications/project/controller/PhabricatorProjectManageController.php', + 'PhabricatorProjectManageProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectManageProfileMenuItem.php', + 'PhabricatorProjectMaterializedMemberEdgeType' => 'applications/project/edge/PhabricatorProjectMaterializedMemberEdgeType.php', + 'PhabricatorProjectMemberListView' => 'applications/project/view/PhabricatorProjectMemberListView.php', + 'PhabricatorProjectMemberOfProjectEdgeType' => 'applications/project/edge/PhabricatorProjectMemberOfProjectEdgeType.php', + 'PhabricatorProjectMembersAddController' => 'applications/project/controller/PhabricatorProjectMembersAddController.php', + 'PhabricatorProjectMembersDatasource' => 'applications/project/typeahead/PhabricatorProjectMembersDatasource.php', + 'PhabricatorProjectMembersPolicyRule' => 'applications/project/policyrule/PhabricatorProjectMembersPolicyRule.php', + 'PhabricatorProjectMembersProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectMembersProfileMenuItem.php', + 'PhabricatorProjectMembersRemoveController' => 'applications/project/controller/PhabricatorProjectMembersRemoveController.php', + 'PhabricatorProjectMembersViewController' => 'applications/project/controller/PhabricatorProjectMembersViewController.php', + 'PhabricatorProjectMenuItemController' => 'applications/project/controller/PhabricatorProjectMenuItemController.php', + 'PhabricatorProjectMilestoneTransaction' => 'applications/project/xaction/PhabricatorProjectMilestoneTransaction.php', + 'PhabricatorProjectMoveController' => 'applications/project/controller/PhabricatorProjectMoveController.php', + 'PhabricatorProjectNameContextFreeGrammar' => 'applications/project/lipsum/PhabricatorProjectNameContextFreeGrammar.php', + 'PhabricatorProjectNameTransaction' => 'applications/project/xaction/PhabricatorProjectNameTransaction.php', + 'PhabricatorProjectNoProjectsDatasource' => 'applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php', + 'PhabricatorProjectObjectHasProjectEdgeType' => 'applications/project/edge/PhabricatorProjectObjectHasProjectEdgeType.php', + 'PhabricatorProjectOrUserDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserDatasource.php', + 'PhabricatorProjectOrUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectOrUserFunctionDatasource.php', + 'PhabricatorProjectPHIDResolver' => 'applications/phid/resolver/PhabricatorProjectPHIDResolver.php', + 'PhabricatorProjectParentTransaction' => 'applications/project/xaction/PhabricatorProjectParentTransaction.php', + 'PhabricatorProjectPictureProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectPictureProfileMenuItem.php', + 'PhabricatorProjectPointsProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectPointsProfileMenuItem.php', 'PhabricatorProjectProfileController' => 'applications/project/controller/PhabricatorProjectProfileController.php', - 'PhabricatorProjectProfileEditController' => 'applications/project/controller/PhabricatorProjectProfileEditController.php', + 'PhabricatorProjectProfileMenuEngine' => 'applications/project/engine/PhabricatorProjectProfileMenuEngine.php', + 'PhabricatorProjectProfileMenuItem' => 'applications/search/menuitem/PhabricatorProjectProfileMenuItem.php', + 'PhabricatorProjectProjectHasMemberEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasMemberEdgeType.php', + 'PhabricatorProjectProjectHasObjectEdgeType' => 'applications/project/edge/PhabricatorProjectProjectHasObjectEdgeType.php', + 'PhabricatorProjectProjectPHIDType' => 'applications/project/phid/PhabricatorProjectProjectPHIDType.php', 'PhabricatorProjectQuery' => 'applications/project/query/PhabricatorProjectQuery.php', + 'PhabricatorProjectRemoveHeraldAction' => 'applications/project/herald/PhabricatorProjectRemoveHeraldAction.php', + 'PhabricatorProjectReportsController' => 'applications/project/controller/PhabricatorProjectReportsController.php', + 'PhabricatorProjectReportsProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectReportsProfileMenuItem.php', + 'PhabricatorProjectSchemaSpec' => 'applications/project/storage/PhabricatorProjectSchemaSpec.php', + 'PhabricatorProjectSearchEngine' => 'applications/project/query/PhabricatorProjectSearchEngine.php', + 'PhabricatorProjectSearchField' => 'applications/project/searchfield/PhabricatorProjectSearchField.php', + 'PhabricatorProjectSilenceController' => 'applications/project/controller/PhabricatorProjectSilenceController.php', + 'PhabricatorProjectSilencedEdgeType' => 'applications/project/edge/PhabricatorProjectSilencedEdgeType.php', + 'PhabricatorProjectSlug' => 'applications/project/storage/PhabricatorProjectSlug.php', + 'PhabricatorProjectSlugsTransaction' => 'applications/project/xaction/PhabricatorProjectSlugsTransaction.php', + 'PhabricatorProjectSortTransaction' => 'applications/project/xaction/PhabricatorProjectSortTransaction.php', + 'PhabricatorProjectStandardCustomField' => 'applications/project/customfield/PhabricatorProjectStandardCustomField.php', 'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php', - 'PhabricatorProjectSubproject' => 'applications/project/storage/PhabricatorProjectSubproject.php', + 'PhabricatorProjectStatusTransaction' => 'applications/project/xaction/PhabricatorProjectStatusTransaction.php', + 'PhabricatorProjectSubprojectWarningController' => 'applications/project/controller/PhabricatorProjectSubprojectWarningController.php', + 'PhabricatorProjectSubprojectsController' => 'applications/project/controller/PhabricatorProjectSubprojectsController.php', + 'PhabricatorProjectSubprojectsProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectSubprojectsProfileMenuItem.php', + 'PhabricatorProjectSubtypeDatasource' => 'applications/project/typeahead/PhabricatorProjectSubtypeDatasource.php', + 'PhabricatorProjectSubtypesConfigType' => 'applications/project/config/PhabricatorProjectSubtypesConfigType.php', + 'PhabricatorProjectTagsAddedField' => 'applications/project/herald/PhabricatorProjectTagsAddedField.php', + 'PhabricatorProjectTagsField' => 'applications/project/herald/PhabricatorProjectTagsField.php', + 'PhabricatorProjectTagsRemovedField' => 'applications/project/herald/PhabricatorProjectTagsRemovedField.php', + 'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php', 'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php', - 'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php', + 'PhabricatorProjectTransactionEditor' => 'applications/project/editor/PhabricatorProjectTransactionEditor.php', + 'PhabricatorProjectTransactionQuery' => 'applications/project/query/PhabricatorProjectTransactionQuery.php', + 'PhabricatorProjectTransactionType' => 'applications/project/xaction/PhabricatorProjectTransactionType.php', + 'PhabricatorProjectTrigger' => 'applications/project/storage/PhabricatorProjectTrigger.php', + 'PhabricatorProjectTriggerAddProjectsRule' => 'applications/project/trigger/PhabricatorProjectTriggerAddProjectsRule.php', + 'PhabricatorProjectTriggerController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerController.php', + 'PhabricatorProjectTriggerCorruptionException' => 'applications/project/exception/PhabricatorProjectTriggerCorruptionException.php', + 'PhabricatorProjectTriggerEditController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerEditController.php', + 'PhabricatorProjectTriggerEditor' => 'applications/project/editor/PhabricatorProjectTriggerEditor.php', + 'PhabricatorProjectTriggerInvalidRule' => 'applications/project/trigger/PhabricatorProjectTriggerInvalidRule.php', + 'PhabricatorProjectTriggerListController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerListController.php', + 'PhabricatorProjectTriggerManiphestOwnerRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestOwnerRule.php', + 'PhabricatorProjectTriggerManiphestPriorityRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestPriorityRule.php', + 'PhabricatorProjectTriggerManiphestStatusRule' => 'applications/project/trigger/PhabricatorProjectTriggerManiphestStatusRule.php', + 'PhabricatorProjectTriggerNameTransaction' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerNameTransaction.php', + 'PhabricatorProjectTriggerPHIDType' => 'applications/project/phid/PhabricatorProjectTriggerPHIDType.php', + 'PhabricatorProjectTriggerPlaySoundRule' => 'applications/project/trigger/PhabricatorProjectTriggerPlaySoundRule.php', + 'PhabricatorProjectTriggerQuery' => 'applications/project/query/PhabricatorProjectTriggerQuery.php', + 'PhabricatorProjectTriggerRemoveProjectsRule' => 'applications/project/trigger/PhabricatorProjectTriggerRemoveProjectsRule.php', + 'PhabricatorProjectTriggerRule' => 'applications/project/trigger/PhabricatorProjectTriggerRule.php', + 'PhabricatorProjectTriggerRuleRecord' => 'applications/project/trigger/PhabricatorProjectTriggerRuleRecord.php', + 'PhabricatorProjectTriggerRulesetTransaction' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerRulesetTransaction.php', + 'PhabricatorProjectTriggerSearchEngine' => 'applications/project/query/PhabricatorProjectTriggerSearchEngine.php', + 'PhabricatorProjectTriggerTransaction' => 'applications/project/storage/PhabricatorProjectTriggerTransaction.php', + 'PhabricatorProjectTriggerTransactionQuery' => 'applications/project/query/PhabricatorProjectTriggerTransactionQuery.php', + 'PhabricatorProjectTriggerTransactionType' => 'applications/project/xaction/trigger/PhabricatorProjectTriggerTransactionType.php', + 'PhabricatorProjectTriggerUnknownRule' => 'applications/project/trigger/PhabricatorProjectTriggerUnknownRule.php', + 'PhabricatorProjectTriggerUsage' => 'applications/project/storage/PhabricatorProjectTriggerUsage.php', + 'PhabricatorProjectTriggerUsageIndexEngineExtension' => 'applications/project/engineextension/PhabricatorProjectTriggerUsageIndexEngineExtension.php', + 'PhabricatorProjectTriggerViewController' => 'applications/project/controller/trigger/PhabricatorProjectTriggerViewController.php', + 'PhabricatorProjectTypeTransaction' => 'applications/project/xaction/PhabricatorProjectTypeTransaction.php', + 'PhabricatorProjectUIEventListener' => 'applications/project/events/PhabricatorProjectUIEventListener.php', 'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php', + 'PhabricatorProjectUserFunctionDatasource' => 'applications/project/typeahead/PhabricatorProjectUserFunctionDatasource.php', + 'PhabricatorProjectUserListView' => 'applications/project/view/PhabricatorProjectUserListView.php', + 'PhabricatorProjectViewController' => 'applications/project/controller/PhabricatorProjectViewController.php', + 'PhabricatorProjectWatchController' => 'applications/project/controller/PhabricatorProjectWatchController.php', + 'PhabricatorProjectWatcherListView' => 'applications/project/view/PhabricatorProjectWatcherListView.php', + 'PhabricatorProjectWorkboardBackgroundColor' => 'applications/project/constants/PhabricatorProjectWorkboardBackgroundColor.php', + 'PhabricatorProjectWorkboardBackgroundTransaction' => 'applications/project/xaction/PhabricatorProjectWorkboardBackgroundTransaction.php', + 'PhabricatorProjectWorkboardProfileMenuItem' => 'applications/project/menuitem/PhabricatorProjectWorkboardProfileMenuItem.php', + 'PhabricatorProjectWorkboardTransaction' => 'applications/project/xaction/PhabricatorProjectWorkboardTransaction.php', + 'PhabricatorProjectsAllPolicyRule' => 'applications/project/policyrule/PhabricatorProjectsAllPolicyRule.php', + 'PhabricatorProjectsAncestorsSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorProjectsAncestorsSearchEngineAttachment.php', + 'PhabricatorProjectsBasePolicyRule' => 'applications/project/policyrule/PhabricatorProjectsBasePolicyRule.php', + 'PhabricatorProjectsCurtainExtension' => 'applications/project/engineextension/PhabricatorProjectsCurtainExtension.php', + 'PhabricatorProjectsEditEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsEditEngineExtension.php', + 'PhabricatorProjectsEditField' => 'applications/transactions/editfield/PhabricatorProjectsEditField.php', + 'PhabricatorProjectsExportEngineExtension' => 'infrastructure/export/engine/PhabricatorProjectsExportEngineExtension.php', + 'PhabricatorProjectsFulltextEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsFulltextEngineExtension.php', + 'PhabricatorProjectsMailEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsMailEngineExtension.php', + 'PhabricatorProjectsMembersSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorProjectsMembersSearchEngineAttachment.php', + 'PhabricatorProjectsMembershipIndexEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsMembershipIndexEngineExtension.php', + 'PhabricatorProjectsPolicyRule' => 'applications/project/policyrule/PhabricatorProjectsPolicyRule.php', + 'PhabricatorProjectsSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorProjectsSearchEngineAttachment.php', + 'PhabricatorProjectsSearchEngineExtension' => 'applications/project/engineextension/PhabricatorProjectsSearchEngineExtension.php', + 'PhabricatorProjectsWatchersSearchEngineAttachment' => 'applications/project/engineextension/PhabricatorProjectsWatchersSearchEngineAttachment.php', + 'PhabricatorPronounSetting' => 'applications/settings/setting/PhabricatorPronounSetting.php', + 'PhabricatorProtocolLog' => 'infrastructure/log/PhabricatorProtocolLog.php', + 'PhabricatorPureChartFunction' => 'applications/fact/chart/PhabricatorPureChartFunction.php', + 'PhabricatorPygmentSetupCheck' => 'applications/config/check/PhabricatorPygmentSetupCheck.php', 'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php', + 'PhabricatorQueryConstraint' => 'infrastructure/query/constraint/PhabricatorQueryConstraint.php', + 'PhabricatorQueryCursor' => 'infrastructure/query/policy/PhabricatorQueryCursor.php', + 'PhabricatorQueryIterator' => 'infrastructure/storage/lisk/PhabricatorQueryIterator.php', + 'PhabricatorQueryOrderItem' => 'infrastructure/query/order/PhabricatorQueryOrderItem.php', + 'PhabricatorQueryOrderTestCase' => 'infrastructure/query/order/__tests__/PhabricatorQueryOrderTestCase.php', + 'PhabricatorQueryOrderVector' => 'infrastructure/query/order/PhabricatorQueryOrderVector.php', + 'PhabricatorRateLimitRequestExceptionHandler' => 'aphront/handler/PhabricatorRateLimitRequestExceptionHandler.php', + 'PhabricatorReassignEmailUserLogType' => 'applications/people/userlog/PhabricatorReassignEmailUserLogType.php', + 'PhabricatorRebuildIndexesWorker' => 'applications/search/worker/PhabricatorRebuildIndexesWorker.php', + 'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php', 'PhabricatorRedirectController' => 'applications/base/controller/PhabricatorRedirectController.php', 'PhabricatorRefreshCSRFController' => 'applications/auth/controller/PhabricatorRefreshCSRFController.php', - 'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleDifferential.php', - 'PhabricatorRemarkupRuleDifferentialHandle' => 'infrastructure/markup/remarkup/markuprule/handle/PhabricatorRemarkupRuleDifferentialHandle.php', - 'PhabricatorRemarkupRuleDiffusion' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleDiffusion.php', - 'PhabricatorRemarkupRuleEmbedFile' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleEmbedFile.php', - 'PhabricatorRemarkupRuleImageMacro' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleImageMacro.php', - 'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleManiphest.php', - 'PhabricatorRemarkupRuleManiphestHandle' => 'infrastructure/markup/remarkup/markuprule/handle/PhabricatorRemarkupRuleManiphestHandle.php', - 'PhabricatorRemarkupRuleMention' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleMention.php', - 'PhabricatorRemarkupRuleObjectHandle' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleObjectHandle.php', - 'PhabricatorRemarkupRuleObjectName' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleObjectName.php', - 'PhabricatorRemarkupRulePaste' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRulePaste.php', - 'PhabricatorRemarkupRulePhriction' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRulePhriction.php', - 'PhabricatorRemarkupRuleProxyImage' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleProxyImage.php', - 'PhabricatorRemarkupRuleYoutube' => 'infrastructure/markup/remarkup/markuprule/PhabricatorRemarkupRuleYoutube.php', + 'PhabricatorRegexListConfigType' => 'applications/config/type/PhabricatorRegexListConfigType.php', + 'PhabricatorRegistrationProfile' => 'applications/people/storage/PhabricatorRegistrationProfile.php', + 'PhabricatorRemarkupCachePurger' => 'applications/cache/purger/PhabricatorRemarkupCachePurger.php', + 'PhabricatorRemarkupControl' => 'view/form/control/PhabricatorRemarkupControl.php', + 'PhabricatorRemarkupCowsayBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupCowsayBlockInterpreter.php', + 'PhabricatorRemarkupCustomBlockRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomBlockRule.php', + 'PhabricatorRemarkupCustomInlineRule' => 'infrastructure/markup/rule/PhabricatorRemarkupCustomInlineRule.php', + 'PhabricatorRemarkupDocumentEngine' => 'applications/files/document/PhabricatorRemarkupDocumentEngine.php', + 'PhabricatorRemarkupEditField' => 'applications/transactions/editfield/PhabricatorRemarkupEditField.php', + 'PhabricatorRemarkupFigletBlockInterpreter' => 'infrastructure/markup/interpreter/PhabricatorRemarkupFigletBlockInterpreter.php', + 'PhabricatorRemarkupHyperlinkEngineExtension' => 'applications/remarkup/engineextension/PhabricatorRemarkupHyperlinkEngineExtension.php', + 'PhabricatorRemarkupUIExample' => 'applications/uiexample/examples/PhabricatorRemarkupUIExample.php', + 'PhabricatorRemoveEmailUserLogType' => 'applications/people/userlog/PhabricatorRemoveEmailUserLogType.php', + 'PhabricatorRemoveMultifactorUserLogType' => 'applications/people/userlog/PhabricatorRemoveMultifactorUserLogType.php', + 'PhabricatorRepositoriesSetupCheck' => 'applications/config/check/PhabricatorRepositoriesSetupCheck.php', 'PhabricatorRepository' => 'applications/repository/storage/PhabricatorRepository.php', - 'PhabricatorRepositoryArcanistProject' => 'applications/repository/storage/PhabricatorRepositoryArcanistProject.php', - 'PhabricatorRepositoryArcanistProjectEditController' => 'applications/repository/controller/PhabricatorRepositoryArcanistProjectEditController.php', + 'PhabricatorRepositoryActivateTransaction' => 'applications/repository/xaction/PhabricatorRepositoryActivateTransaction.php', 'PhabricatorRepositoryAuditRequest' => 'applications/repository/storage/PhabricatorRepositoryAuditRequest.php', + 'PhabricatorRepositoryBlueprintsTransaction' => 'applications/repository/xaction/PhabricatorRepositoryBlueprintsTransaction.php', + 'PhabricatorRepositoryBranch' => 'applications/repository/storage/PhabricatorRepositoryBranch.php', + 'PhabricatorRepositoryCallsignTransaction' => 'applications/repository/xaction/PhabricatorRepositoryCallsignTransaction.php', 'PhabricatorRepositoryCommit' => 'applications/repository/storage/PhabricatorRepositoryCommit.php', 'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php', 'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php', - 'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php', - 'PhabricatorRepositoryCommitMessageDetailParser' => 'applications/repository/parser/PhabricatorRepositoryCommitMessageDetailParser.php', + 'PhabricatorRepositoryCommitHint' => 'applications/repository/storage/PhabricatorRepositoryCommitHint.php', 'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php', - 'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php', + 'PhabricatorRepositoryCommitPHIDType' => 'applications/repository/phid/PhabricatorRepositoryCommitPHIDType.php', 'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php', - 'PhabricatorRepositoryController' => 'applications/repository/controller/PhabricatorRepositoryController.php', - 'PhabricatorRepositoryCreateController' => 'applications/repository/controller/PhabricatorRepositoryCreateController.php', + 'PhabricatorRepositoryCommitPublishWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitPublishWorker.php', + 'PhabricatorRepositoryCommitRef' => 'applications/repository/engine/PhabricatorRepositoryCommitRef.php', + 'PhabricatorRepositoryCommitTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryCommitTestCase.php', + 'PhabricatorRepositoryConfigOptions' => 'applications/repository/config/PhabricatorRepositoryConfigOptions.php', + 'PhabricatorRepositoryCopyTimeLimitTransaction' => 'applications/repository/xaction/PhabricatorRepositoryCopyTimeLimitTransaction.php', 'PhabricatorRepositoryDAO' => 'applications/repository/storage/PhabricatorRepositoryDAO.php', - 'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'applications/repository/parser/PhabricatorRepositoryDefaultCommitMessageDetailParser.php', - 'PhabricatorRepositoryDeleteController' => 'applications/repository/controller/PhabricatorRepositoryDeleteController.php', - 'PhabricatorRepositoryEditController' => 'applications/repository/controller/PhabricatorRepositoryEditController.php', + 'PhabricatorRepositoryDangerousTransaction' => 'applications/repository/xaction/PhabricatorRepositoryDangerousTransaction.php', + 'PhabricatorRepositoryDefaultBranchTransaction' => 'applications/repository/xaction/PhabricatorRepositoryDefaultBranchTransaction.php', + 'PhabricatorRepositoryDescriptionTransaction' => 'applications/repository/xaction/PhabricatorRepositoryDescriptionTransaction.php', + 'PhabricatorRepositoryDestructibleCodex' => 'applications/repository/codex/PhabricatorRepositoryDestructibleCodex.php', + 'PhabricatorRepositoryDiscoveryEngine' => 'applications/repository/engine/PhabricatorRepositoryDiscoveryEngine.php', + 'PhabricatorRepositoryEditor' => 'applications/repository/editor/PhabricatorRepositoryEditor.php', + 'PhabricatorRepositoryEncodingTransaction' => 'applications/repository/xaction/PhabricatorRepositoryEncodingTransaction.php', + 'PhabricatorRepositoryEngine' => 'applications/repository/engine/PhabricatorRepositoryEngine.php', + 'PhabricatorRepositoryEnormousTransaction' => 'applications/repository/xaction/PhabricatorRepositoryEnormousTransaction.php', + 'PhabricatorRepositoryFerretEngine' => 'applications/repository/search/PhabricatorRepositoryFerretEngine.php', + 'PhabricatorRepositoryFetchRefsTransaction' => 'applications/repository/xaction/PhabricatorRepositoryFetchRefsTransaction.php', + 'PhabricatorRepositoryFilesizeLimitTransaction' => 'applications/repository/xaction/PhabricatorRepositoryFilesizeLimitTransaction.php', + 'PhabricatorRepositoryFulltextEngine' => 'applications/repository/search/PhabricatorRepositoryFulltextEngine.php', 'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryGitCommitChangeParserWorker.php', 'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php', - 'PhabricatorRepositoryListController' => 'applications/repository/controller/PhabricatorRepositoryListController.php', + 'PhabricatorRepositoryGitLFSRef' => 'applications/repository/storage/PhabricatorRepositoryGitLFSRef.php', + 'PhabricatorRepositoryGitLFSRefQuery' => 'applications/repository/query/PhabricatorRepositoryGitLFSRefQuery.php', + 'PhabricatorRepositoryGraphCache' => 'applications/repository/graphcache/PhabricatorRepositoryGraphCache.php', + 'PhabricatorRepositoryGraphStream' => 'applications/repository/daemon/PhabricatorRepositoryGraphStream.php', + 'PhabricatorRepositoryIdentity' => 'applications/repository/storage/PhabricatorRepositoryIdentity.php', + 'PhabricatorRepositoryIdentityAssignTransaction' => 'applications/repository/xaction/PhabricatorRepositoryIdentityAssignTransaction.php', + 'PhabricatorRepositoryIdentityChangeWorker' => 'applications/repository/worker/PhabricatorRepositoryIdentityChangeWorker.php', + 'PhabricatorRepositoryIdentityEditEngine' => 'applications/repository/engine/PhabricatorRepositoryIdentityEditEngine.php', + 'PhabricatorRepositoryIdentityFerretEngine' => 'applications/repository/search/PhabricatorRepositoryIdentityFerretEngine.php', + 'PhabricatorRepositoryIdentityPHIDType' => 'applications/repository/phid/PhabricatorRepositoryIdentityPHIDType.php', + 'PhabricatorRepositoryIdentityQuery' => 'applications/repository/query/PhabricatorRepositoryIdentityQuery.php', + 'PhabricatorRepositoryIdentityTransaction' => 'applications/repository/storage/PhabricatorRepositoryIdentityTransaction.php', + 'PhabricatorRepositoryIdentityTransactionQuery' => 'applications/repository/query/PhabricatorRepositoryIdentityTransactionQuery.php', + 'PhabricatorRepositoryIdentityTransactionType' => 'applications/repository/xaction/PhabricatorRepositoryIdentityTransactionType.php', + 'PhabricatorRepositoryMaintenanceTransaction' => 'applications/repository/xaction/PhabricatorRepositoryMaintenanceTransaction.php', + 'PhabricatorRepositoryManagementCacheWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementCacheWorkflow.php', + 'PhabricatorRepositoryManagementClusterizeWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementClusterizeWorkflow.php', + 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementDiscoverWorkflow.php', + 'PhabricatorRepositoryManagementHintWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementHintWorkflow.php', + 'PhabricatorRepositoryManagementImportingWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementImportingWorkflow.php', + 'PhabricatorRepositoryManagementListPathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListPathsWorkflow.php', + 'PhabricatorRepositoryManagementListWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementListWorkflow.php', + 'PhabricatorRepositoryManagementLockWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementLockWorkflow.php', + 'PhabricatorRepositoryManagementMaintenanceWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMaintenanceWorkflow.php', + 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkImportedWorkflow.php', + 'PhabricatorRepositoryManagementMarkReachableWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMarkReachableWorkflow.php', + 'PhabricatorRepositoryManagementMirrorWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMirrorWorkflow.php', + 'PhabricatorRepositoryManagementMovePathsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementMovePathsWorkflow.php', + 'PhabricatorRepositoryManagementParentsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementParentsWorkflow.php', + 'PhabricatorRepositoryManagementPullWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementPullWorkflow.php', + 'PhabricatorRepositoryManagementRebuildIdentitiesWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementRebuildIdentitiesWorkflow.php', + 'PhabricatorRepositoryManagementRefsWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementRefsWorkflow.php', + 'PhabricatorRepositoryManagementReparseWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementReparseWorkflow.php', + 'PhabricatorRepositoryManagementThawWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementThawWorkflow.php', + 'PhabricatorRepositoryManagementUnpublishWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementUnpublishWorkflow.php', + 'PhabricatorRepositoryManagementUpdateWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementUpdateWorkflow.php', + 'PhabricatorRepositoryManagementWorkflow' => 'applications/repository/management/PhabricatorRepositoryManagementWorkflow.php', 'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryMercurialCommitChangeParserWorker.php', 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php', + 'PhabricatorRepositoryMirror' => 'applications/repository/storage/PhabricatorRepositoryMirror.php', + 'PhabricatorRepositoryMirrorEngine' => 'applications/repository/engine/PhabricatorRepositoryMirrorEngine.php', + 'PhabricatorRepositoryNameTransaction' => 'applications/repository/xaction/PhabricatorRepositoryNameTransaction.php', + 'PhabricatorRepositoryNotifyTransaction' => 'applications/repository/xaction/PhabricatorRepositoryNotifyTransaction.php', + 'PhabricatorRepositoryOldRef' => 'applications/repository/storage/PhabricatorRepositoryOldRef.php', + 'PhabricatorRepositoryParsedChange' => 'applications/repository/data/PhabricatorRepositoryParsedChange.php', + 'PhabricatorRepositoryPermanentRefsTransaction' => 'applications/repository/xaction/PhabricatorRepositoryPermanentRefsTransaction.php', + 'PhabricatorRepositoryPublisher' => 'applications/repository/query/PhabricatorRepositoryPublisher.php', + 'PhabricatorRepositoryPublisherHoldReason' => 'applications/repository/query/PhabricatorRepositoryPublisherHoldReason.php', + 'PhabricatorRepositoryPullEngine' => 'applications/repository/engine/PhabricatorRepositoryPullEngine.php', + 'PhabricatorRepositoryPullEvent' => 'applications/repository/storage/PhabricatorRepositoryPullEvent.php', + 'PhabricatorRepositoryPullEventPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPullEventPHIDType.php', + 'PhabricatorRepositoryPullEventQuery' => 'applications/repository/query/PhabricatorRepositoryPullEventQuery.php', 'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php', - 'PhabricatorRepositoryPullLocalDaemonTestCase' => 'applications/repository/daemon/__tests__/PhabricatorRepositoryPullLocalDaemonTestCase.php', - 'PhabricatorRepositoryShortcut' => 'applications/repository/storage/PhabricatorRepositoryShortcut.php', + 'PhabricatorRepositoryPullLocalDaemonModule' => 'applications/repository/daemon/PhabricatorRepositoryPullLocalDaemonModule.php', + 'PhabricatorRepositoryPushEvent' => 'applications/repository/storage/PhabricatorRepositoryPushEvent.php', + 'PhabricatorRepositoryPushEventPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushEventPHIDType.php', + 'PhabricatorRepositoryPushEventQuery' => 'applications/repository/query/PhabricatorRepositoryPushEventQuery.php', + 'PhabricatorRepositoryPushLog' => 'applications/repository/storage/PhabricatorRepositoryPushLog.php', + 'PhabricatorRepositoryPushLogPHIDType' => 'applications/repository/phid/PhabricatorRepositoryPushLogPHIDType.php', + 'PhabricatorRepositoryPushLogQuery' => 'applications/repository/query/PhabricatorRepositoryPushLogQuery.php', + 'PhabricatorRepositoryPushLogSearchEngine' => 'applications/repository/query/PhabricatorRepositoryPushLogSearchEngine.php', + 'PhabricatorRepositoryPushMailWorker' => 'applications/repository/worker/PhabricatorRepositoryPushMailWorker.php', + 'PhabricatorRepositoryPushPolicyTransaction' => 'applications/repository/xaction/PhabricatorRepositoryPushPolicyTransaction.php', + 'PhabricatorRepositoryPushReplyHandler' => 'applications/repository/mail/PhabricatorRepositoryPushReplyHandler.php', + 'PhabricatorRepositoryQuery' => 'applications/repository/query/PhabricatorRepositoryQuery.php', + 'PhabricatorRepositoryRefCursor' => 'applications/repository/storage/PhabricatorRepositoryRefCursor.php', + 'PhabricatorRepositoryRefCursorPHIDType' => 'applications/repository/phid/PhabricatorRepositoryRefCursorPHIDType.php', + 'PhabricatorRepositoryRefCursorQuery' => 'applications/repository/query/PhabricatorRepositoryRefCursorQuery.php', + 'PhabricatorRepositoryRefEngine' => 'applications/repository/engine/PhabricatorRepositoryRefEngine.php', + 'PhabricatorRepositoryRefPosition' => 'applications/repository/storage/PhabricatorRepositoryRefPosition.php', + 'PhabricatorRepositoryRepositoryPHIDType' => 'applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php', + 'PhabricatorRepositorySVNSubpathTransaction' => 'applications/repository/xaction/PhabricatorRepositorySVNSubpathTransaction.php', + 'PhabricatorRepositorySchemaSpec' => 'applications/repository/storage/PhabricatorRepositorySchemaSpec.php', + 'PhabricatorRepositorySearchEngine' => 'applications/repository/query/PhabricatorRepositorySearchEngine.php', + 'PhabricatorRepositoryServiceTransaction' => 'applications/repository/xaction/PhabricatorRepositoryServiceTransaction.php', + 'PhabricatorRepositorySlugTransaction' => 'applications/repository/xaction/PhabricatorRepositorySlugTransaction.php', + 'PhabricatorRepositoryStagingURITransaction' => 'applications/repository/xaction/PhabricatorRepositoryStagingURITransaction.php', + 'PhabricatorRepositoryStatusMessage' => 'applications/repository/storage/PhabricatorRepositoryStatusMessage.php', 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php', 'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositorySvnCommitMessageParserWorker.php', 'PhabricatorRepositorySymbol' => 'applications/repository/storage/PhabricatorRepositorySymbol.php', + 'PhabricatorRepositorySymbolLanguagesTransaction' => 'applications/repository/xaction/PhabricatorRepositorySymbolLanguagesTransaction.php', + 'PhabricatorRepositorySymbolSourcesTransaction' => 'applications/repository/xaction/PhabricatorRepositorySymbolSourcesTransaction.php', + 'PhabricatorRepositorySyncEvent' => 'applications/repository/storage/PhabricatorRepositorySyncEvent.php', + 'PhabricatorRepositorySyncEventPHIDType' => 'applications/repository/phid/PhabricatorRepositorySyncEventPHIDType.php', + 'PhabricatorRepositorySyncEventQuery' => 'applications/repository/query/PhabricatorRepositorySyncEventQuery.php', 'PhabricatorRepositoryTestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryTestCase.php', + 'PhabricatorRepositoryTouchLimitTransaction' => 'applications/repository/xaction/PhabricatorRepositoryTouchLimitTransaction.php', + 'PhabricatorRepositoryTrackOnlyTransaction' => 'applications/repository/xaction/PhabricatorRepositoryTrackOnlyTransaction.php', + 'PhabricatorRepositoryTransaction' => 'applications/repository/storage/PhabricatorRepositoryTransaction.php', + 'PhabricatorRepositoryTransactionQuery' => 'applications/repository/query/PhabricatorRepositoryTransactionQuery.php', + 'PhabricatorRepositoryTransactionType' => 'applications/repository/xaction/PhabricatorRepositoryTransactionType.php', 'PhabricatorRepositoryType' => 'applications/repository/constants/PhabricatorRepositoryType.php', + 'PhabricatorRepositoryURI' => 'applications/repository/storage/PhabricatorRepositoryURI.php', + 'PhabricatorRepositoryURIIndex' => 'applications/repository/storage/PhabricatorRepositoryURIIndex.php', + 'PhabricatorRepositoryURIPHIDType' => 'applications/repository/phid/PhabricatorRepositoryURIPHIDType.php', + 'PhabricatorRepositoryURIQuery' => 'applications/repository/query/PhabricatorRepositoryURIQuery.php', + 'PhabricatorRepositoryURITestCase' => 'applications/repository/storage/__tests__/PhabricatorRepositoryURITestCase.php', + 'PhabricatorRepositoryURITransaction' => 'applications/repository/storage/PhabricatorRepositoryURITransaction.php', + 'PhabricatorRepositoryURITransactionQuery' => 'applications/repository/query/PhabricatorRepositoryURITransactionQuery.php', + 'PhabricatorRepositoryVCSTransaction' => 'applications/repository/xaction/PhabricatorRepositoryVCSTransaction.php', + 'PhabricatorRepositoryWorkingCopyVersion' => 'applications/repository/storage/PhabricatorRepositoryWorkingCopyVersion.php', + 'PhabricatorRequestExceptionHandler' => 'aphront/handler/PhabricatorRequestExceptionHandler.php', + 'PhabricatorResetPasswordUserLogType' => 'applications/people/userlog/PhabricatorResetPasswordUserLogType.php', + 'PhabricatorResourceSite' => 'aphront/site/PhabricatorResourceSite.php', + 'PhabricatorRobotsBlogController' => 'applications/system/controller/robots/PhabricatorRobotsBlogController.php', + 'PhabricatorRobotsController' => 'applications/system/controller/robots/PhabricatorRobotsController.php', + 'PhabricatorRobotsPlatformController' => 'applications/system/controller/robots/PhabricatorRobotsPlatformController.php', + 'PhabricatorRobotsResourceController' => 'applications/system/controller/robots/PhabricatorRobotsResourceController.php', + 'PhabricatorRobotsShortController' => 'applications/system/controller/robots/PhabricatorRobotsShortController.php', 'PhabricatorS3FileStorageEngine' => 'applications/files/engine/PhabricatorS3FileStorageEngine.php', - 'PhabricatorSQLPatchList' => 'infrastructure/setup/sql/PhabricatorSQLPatchList.php', - 'PhabricatorScopedEnv' => 'infrastructure/PhabricatorScopedEnv.php', + 'PhabricatorSMSAuthFactor' => 'applications/auth/factor/PhabricatorSMSAuthFactor.php', + 'PhabricatorSQLPatchList' => 'infrastructure/storage/patch/PhabricatorSQLPatchList.php', + 'PhabricatorSSHKeyGenerator' => 'infrastructure/util/PhabricatorSSHKeyGenerator.php', + 'PhabricatorSSHKeysSettingsPanel' => 'applications/settings/panel/PhabricatorSSHKeysSettingsPanel.php', + 'PhabricatorSSHLog' => 'infrastructure/log/PhabricatorSSHLog.php', + 'PhabricatorSSHPassthruCommand' => 'infrastructure/ssh/PhabricatorSSHPassthruCommand.php', + 'PhabricatorSSHPublicKeyInterface' => 'applications/auth/sshkey/PhabricatorSSHPublicKeyInterface.php', + 'PhabricatorSSHWorkflow' => 'infrastructure/ssh/PhabricatorSSHWorkflow.php', + 'PhabricatorSavedQuery' => 'applications/search/storage/PhabricatorSavedQuery.php', + 'PhabricatorSavedQueryQuery' => 'applications/search/query/PhabricatorSavedQueryQuery.php', + 'PhabricatorScaleChartFunction' => 'applications/fact/chart/PhabricatorScaleChartFunction.php', + 'PhabricatorScheduleTaskTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorScheduleTaskTriggerAction.php', + 'PhabricatorScopedEnv' => 'infrastructure/env/PhabricatorScopedEnv.php', 'PhabricatorSearchAbstractDocument' => 'applications/search/index/PhabricatorSearchAbstractDocument.php', - 'PhabricatorSearchAttachController' => 'applications/search/controller/PhabricatorSearchAttachController.php', + 'PhabricatorSearchApplication' => 'applications/search/application/PhabricatorSearchApplication.php', + 'PhabricatorSearchApplicationSearchEngine' => 'applications/search/query/PhabricatorSearchApplicationSearchEngine.php', + 'PhabricatorSearchApplicationStorageEnginePanel' => 'applications/search/applicationpanel/PhabricatorSearchApplicationStorageEnginePanel.php', 'PhabricatorSearchBaseController' => 'applications/search/controller/PhabricatorSearchBaseController.php', - 'PhabricatorSearchCommitIndexer' => 'applications/search/index/indexer/PhabricatorSearchCommitIndexer.php', + 'PhabricatorSearchCheckboxesField' => 'applications/search/field/PhabricatorSearchCheckboxesField.php', + 'PhabricatorSearchConstraintException' => 'applications/search/exception/PhabricatorSearchConstraintException.php', 'PhabricatorSearchController' => 'applications/search/controller/PhabricatorSearchController.php', + 'PhabricatorSearchCustomFieldProxyField' => 'applications/search/field/PhabricatorSearchCustomFieldProxyField.php', 'PhabricatorSearchDAO' => 'applications/search/storage/PhabricatorSearchDAO.php', - 'PhabricatorSearchDifferentialIndexer' => 'applications/search/index/indexer/PhabricatorSearchDifferentialIndexer.php', + 'PhabricatorSearchDatasource' => 'applications/search/typeahead/PhabricatorSearchDatasource.php', + 'PhabricatorSearchDatasourceField' => 'applications/search/field/PhabricatorSearchDatasourceField.php', + 'PhabricatorSearchDateControlField' => 'applications/search/field/PhabricatorSearchDateControlField.php', + 'PhabricatorSearchDateField' => 'applications/search/field/PhabricatorSearchDateField.php', + 'PhabricatorSearchDefaultController' => 'applications/search/controller/PhabricatorSearchDefaultController.php', + 'PhabricatorSearchDeleteController' => 'applications/search/controller/PhabricatorSearchDeleteController.php', 'PhabricatorSearchDocument' => 'applications/search/storage/document/PhabricatorSearchDocument.php', - 'PhabricatorSearchDocumentField' => 'applications/search/storage/document/PhabricatorSearchDocumentField.php', - 'PhabricatorSearchDocumentIndexer' => 'applications/search/index/indexer/PhabricatorSearchDocumentIndexer.php', + 'PhabricatorSearchDocumentFieldType' => 'applications/search/constants/PhabricatorSearchDocumentFieldType.php', + 'PhabricatorSearchDocumentQuery' => 'applications/search/query/PhabricatorSearchDocumentQuery.php', 'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/PhabricatorSearchDocumentRelationship.php', - 'PhabricatorSearchEngine' => 'applications/search/engine/PhabricatorSearchEngine.php', - 'PhabricatorSearchEngineElastic' => 'applications/search/engine/PhabricatorSearchEngineElastic.php', - 'PhabricatorSearchEngineMySQL' => 'applications/search/engine/PhabricatorSearchEngineMySQL.php', - 'PhabricatorSearchEngineSelector' => 'applications/search/selector/PhabricatorSearchEngineSelector.php', - 'PhabricatorSearchField' => 'applications/search/constants/PhabricatorSearchField.php', - 'PhabricatorSearchIndexController' => 'applications/search/controller/PhabricatorSearchIndexController.php', - 'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/PhabricatorSearchManiphestIndexer.php', - 'PhabricatorSearchPhrictionIndexer' => 'applications/search/index/indexer/PhabricatorSearchPhrictionIndexer.php', - 'PhabricatorSearchQuery' => 'applications/search/storage/PhabricatorSearchQuery.php', + 'PhabricatorSearchDocumentTypeDatasource' => 'applications/search/typeahead/PhabricatorSearchDocumentTypeDatasource.php', + 'PhabricatorSearchEditController' => 'applications/search/controller/PhabricatorSearchEditController.php', + 'PhabricatorSearchEngineAPIMethod' => 'applications/search/engine/PhabricatorSearchEngineAPIMethod.php', + 'PhabricatorSearchEngineAttachment' => 'applications/search/engineextension/PhabricatorSearchEngineAttachment.php', + 'PhabricatorSearchEngineExtension' => 'applications/search/engineextension/PhabricatorSearchEngineExtension.php', + 'PhabricatorSearchEngineExtensionModule' => 'applications/search/engineextension/PhabricatorSearchEngineExtensionModule.php', + 'PhabricatorSearchFerretNgramGarbageCollector' => 'applications/search/garbagecollector/PhabricatorSearchFerretNgramGarbageCollector.php', + 'PhabricatorSearchField' => 'applications/search/field/PhabricatorSearchField.php', + 'PhabricatorSearchHandleController' => 'applications/search/controller/PhabricatorSearchHandleController.php', + 'PhabricatorSearchHost' => 'infrastructure/cluster/search/PhabricatorSearchHost.php', + 'PhabricatorSearchHovercardController' => 'applications/search/controller/PhabricatorSearchHovercardController.php', + 'PhabricatorSearchIndexVersion' => 'applications/search/storage/PhabricatorSearchIndexVersion.php', + 'PhabricatorSearchIndexVersionDestructionEngineExtension' => 'applications/search/engineextension/PhabricatorSearchIndexVersionDestructionEngineExtension.php', + 'PhabricatorSearchIntField' => 'applications/search/field/PhabricatorSearchIntField.php', + 'PhabricatorSearchManagementIndexWorkflow' => 'applications/search/management/PhabricatorSearchManagementIndexWorkflow.php', + 'PhabricatorSearchManagementInitWorkflow' => 'applications/search/management/PhabricatorSearchManagementInitWorkflow.php', + 'PhabricatorSearchManagementNgramsWorkflow' => 'applications/search/management/PhabricatorSearchManagementNgramsWorkflow.php', + 'PhabricatorSearchManagementQueryWorkflow' => 'applications/search/management/PhabricatorSearchManagementQueryWorkflow.php', + 'PhabricatorSearchManagementWorkflow' => 'applications/search/management/PhabricatorSearchManagementWorkflow.php', + 'PhabricatorSearchNgramEngine' => 'applications/search/engine/PhabricatorSearchNgramEngine.php', + 'PhabricatorSearchNgrams' => 'applications/search/ngrams/PhabricatorSearchNgrams.php', + 'PhabricatorSearchNgramsDestructionEngineExtension' => 'applications/search/engineextension/PhabricatorSearchNgramsDestructionEngineExtension.php', + 'PhabricatorSearchOrderController' => 'applications/search/controller/PhabricatorSearchOrderController.php', + 'PhabricatorSearchOrderField' => 'applications/search/field/PhabricatorSearchOrderField.php', 'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php', + 'PhabricatorSearchRelationshipController' => 'applications/search/controller/PhabricatorSearchRelationshipController.php', + 'PhabricatorSearchRelationshipSourceController' => 'applications/search/controller/PhabricatorSearchRelationshipSourceController.php', + 'PhabricatorSearchResultBucket' => 'applications/search/buckets/PhabricatorSearchResultBucket.php', + 'PhabricatorSearchResultBucketGroup' => 'applications/search/buckets/PhabricatorSearchResultBucketGroup.php', 'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php', - 'PhabricatorSearchScope' => 'applications/search/constants/PhabricatorSearchScope.php', - 'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php', - 'PhabricatorSearchUserIndexer' => 'applications/search/index/indexer/PhabricatorSearchUserIndexer.php', - 'PhabricatorSetup' => 'infrastructure/PhabricatorSetup.php', + 'PhabricatorSearchSchemaSpec' => 'applications/search/storage/PhabricatorSearchSchemaSpec.php', + 'PhabricatorSearchScopeSetting' => 'applications/settings/setting/PhabricatorSearchScopeSetting.php', + 'PhabricatorSearchSelectField' => 'applications/search/field/PhabricatorSearchSelectField.php', + 'PhabricatorSearchService' => 'infrastructure/cluster/search/PhabricatorSearchService.php', + 'PhabricatorSearchSettingsPanel' => 'applications/settings/panel/PhabricatorSearchSettingsPanel.php', + 'PhabricatorSearchStringListField' => 'applications/search/field/PhabricatorSearchStringListField.php', + 'PhabricatorSearchSubscribersField' => 'applications/search/field/PhabricatorSearchSubscribersField.php', + 'PhabricatorSearchTextField' => 'applications/search/field/PhabricatorSearchTextField.php', + 'PhabricatorSearchThreeStateField' => 'applications/search/field/PhabricatorSearchThreeStateField.php', + 'PhabricatorSearchTokenizerField' => 'applications/search/field/PhabricatorSearchTokenizerField.php', + 'PhabricatorSearchWorker' => 'applications/search/worker/PhabricatorSearchWorker.php', + 'PhabricatorSecurityConfigOptions' => 'applications/config/option/PhabricatorSecurityConfigOptions.php', + 'PhabricatorSecuritySetupCheck' => 'applications/config/check/PhabricatorSecuritySetupCheck.php', + 'PhabricatorSelectEditField' => 'applications/transactions/editfield/PhabricatorSelectEditField.php', + 'PhabricatorSelectSetting' => 'applications/settings/setting/PhabricatorSelectSetting.php', + 'PhabricatorSelfHyperlinkEngineExtension' => 'applications/meta/engineextension/PhabricatorSelfHyperlinkEngineExtension.php', + 'PhabricatorSessionsSettingsPanel' => 'applications/settings/panel/PhabricatorSessionsSettingsPanel.php', + 'PhabricatorSetConfigType' => 'applications/config/type/PhabricatorSetConfigType.php', + 'PhabricatorSetting' => 'applications/settings/setting/PhabricatorSetting.php', + 'PhabricatorSettingsAccountPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsAccountPanelGroup.php', + 'PhabricatorSettingsAddEmailAction' => 'applications/settings/action/PhabricatorSettingsAddEmailAction.php', + 'PhabricatorSettingsAdjustController' => 'applications/settings/controller/PhabricatorSettingsAdjustController.php', + 'PhabricatorSettingsApplication' => 'applications/settings/application/PhabricatorSettingsApplication.php', + 'PhabricatorSettingsApplicationsPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsApplicationsPanelGroup.php', + 'PhabricatorSettingsAuthenticationPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsAuthenticationPanelGroup.php', + 'PhabricatorSettingsDeveloperPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsDeveloperPanelGroup.php', + 'PhabricatorSettingsEditEngine' => 'applications/settings/editor/PhabricatorSettingsEditEngine.php', + 'PhabricatorSettingsEmailPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsEmailPanelGroup.php', + 'PhabricatorSettingsIssueController' => 'applications/settings/controller/PhabricatorSettingsIssueController.php', + 'PhabricatorSettingsListController' => 'applications/settings/controller/PhabricatorSettingsListController.php', + 'PhabricatorSettingsLogsPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsLogsPanelGroup.php', + 'PhabricatorSettingsMainController' => 'applications/settings/controller/PhabricatorSettingsMainController.php', + 'PhabricatorSettingsPanel' => 'applications/settings/panel/PhabricatorSettingsPanel.php', + 'PhabricatorSettingsPanelGroup' => 'applications/settings/panelgroup/PhabricatorSettingsPanelGroup.php', + 'PhabricatorSettingsTimezoneController' => 'applications/settings/controller/PhabricatorSettingsTimezoneController.php', + 'PhabricatorSetupCheck' => 'applications/config/check/PhabricatorSetupCheck.php', + 'PhabricatorSetupCheckTestCase' => 'applications/config/check/__tests__/PhabricatorSetupCheckTestCase.php', + 'PhabricatorSetupEngine' => 'applications/config/engine/PhabricatorSetupEngine.php', + 'PhabricatorSetupIssue' => 'applications/config/issue/PhabricatorSetupIssue.php', + 'PhabricatorSetupIssueUIExample' => 'applications/uiexample/examples/PhabricatorSetupIssueUIExample.php', + 'PhabricatorSetupIssueView' => 'applications/config/view/PhabricatorSetupIssueView.php', + 'PhabricatorShiftChartFunction' => 'applications/fact/chart/PhabricatorShiftChartFunction.php', + 'PhabricatorShortSite' => 'aphront/site/PhabricatorShortSite.php', + 'PhabricatorSignDocumentsUserLogType' => 'applications/people/userlog/PhabricatorSignDocumentsUserLogType.php', + 'PhabricatorSimpleEditType' => 'applications/transactions/edittype/PhabricatorSimpleEditType.php', + 'PhabricatorSinChartFunction' => 'applications/fact/chart/PhabricatorSinChartFunction.php', + 'PhabricatorSite' => 'aphront/site/PhabricatorSite.php', + 'PhabricatorSlackAuthProvider' => 'applications/auth/provider/PhabricatorSlackAuthProvider.php', + 'PhabricatorSlowvoteApplication' => 'applications/slowvote/application/PhabricatorSlowvoteApplication.php', 'PhabricatorSlowvoteChoice' => 'applications/slowvote/storage/PhabricatorSlowvoteChoice.php', - 'PhabricatorSlowvoteComment' => 'applications/slowvote/storage/PhabricatorSlowvoteComment.php', + 'PhabricatorSlowvoteCloseController' => 'applications/slowvote/controller/PhabricatorSlowvoteCloseController.php', + 'PhabricatorSlowvoteCommentController' => 'applications/slowvote/controller/PhabricatorSlowvoteCommentController.php', 'PhabricatorSlowvoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteController.php', - 'PhabricatorSlowvoteCreateController' => 'applications/slowvote/controller/PhabricatorSlowvoteCreateController.php', 'PhabricatorSlowvoteDAO' => 'applications/slowvote/storage/PhabricatorSlowvoteDAO.php', + 'PhabricatorSlowvoteDefaultViewCapability' => 'applications/slowvote/capability/PhabricatorSlowvoteDefaultViewCapability.php', + 'PhabricatorSlowvoteDescriptionTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteDescriptionTransaction.php', + 'PhabricatorSlowvoteEditController' => 'applications/slowvote/controller/PhabricatorSlowvoteEditController.php', + 'PhabricatorSlowvoteEditor' => 'applications/slowvote/editor/PhabricatorSlowvoteEditor.php', 'PhabricatorSlowvoteListController' => 'applications/slowvote/controller/PhabricatorSlowvoteListController.php', + 'PhabricatorSlowvoteMailReceiver' => 'applications/slowvote/mail/PhabricatorSlowvoteMailReceiver.php', 'PhabricatorSlowvoteOption' => 'applications/slowvote/storage/PhabricatorSlowvoteOption.php', 'PhabricatorSlowvotePoll' => 'applications/slowvote/storage/PhabricatorSlowvotePoll.php', 'PhabricatorSlowvotePollController' => 'applications/slowvote/controller/PhabricatorSlowvotePollController.php', + 'PhabricatorSlowvotePollPHIDType' => 'applications/slowvote/phid/PhabricatorSlowvotePollPHIDType.php', + 'PhabricatorSlowvoteQuery' => 'applications/slowvote/query/PhabricatorSlowvoteQuery.php', + 'PhabricatorSlowvoteQuestionTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteQuestionTransaction.php', + 'PhabricatorSlowvoteReplyHandler' => 'applications/slowvote/mail/PhabricatorSlowvoteReplyHandler.php', + 'PhabricatorSlowvoteResponsesTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteResponsesTransaction.php', + 'PhabricatorSlowvoteSchemaSpec' => 'applications/slowvote/storage/PhabricatorSlowvoteSchemaSpec.php', + 'PhabricatorSlowvoteSearchEngine' => 'applications/slowvote/query/PhabricatorSlowvoteSearchEngine.php', + 'PhabricatorSlowvoteShuffleTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteShuffleTransaction.php', + 'PhabricatorSlowvoteStatusTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteStatusTransaction.php', + 'PhabricatorSlowvoteTransaction' => 'applications/slowvote/storage/PhabricatorSlowvoteTransaction.php', + 'PhabricatorSlowvoteTransactionComment' => 'applications/slowvote/storage/PhabricatorSlowvoteTransactionComment.php', + 'PhabricatorSlowvoteTransactionQuery' => 'applications/slowvote/query/PhabricatorSlowvoteTransactionQuery.php', + 'PhabricatorSlowvoteTransactionType' => 'applications/slowvote/xaction/PhabricatorSlowvoteTransactionType.php', + 'PhabricatorSlowvoteVoteController' => 'applications/slowvote/controller/PhabricatorSlowvoteVoteController.php', + 'PhabricatorSlowvoteVotingMethodTransaction' => 'applications/slowvote/xaction/PhabricatorSlowvoteVotingMethodTransaction.php', 'PhabricatorSlug' => 'infrastructure/util/PhabricatorSlug.php', 'PhabricatorSlugTestCase' => 'infrastructure/util/__tests__/PhabricatorSlugTestCase.php', - 'PhabricatorSortTableExample' => 'applications/uiexample/examples/PhabricatorSortTableExample.php', + 'PhabricatorSourceCodeView' => 'view/layout/PhabricatorSourceCodeView.php', + 'PhabricatorSourceDocumentEngine' => 'applications/files/document/PhabricatorSourceDocumentEngine.php', + 'PhabricatorSpaceEditField' => 'applications/transactions/editfield/PhabricatorSpaceEditField.php', + 'PhabricatorSpacesApplication' => 'applications/spaces/application/PhabricatorSpacesApplication.php', + 'PhabricatorSpacesArchiveController' => 'applications/spaces/controller/PhabricatorSpacesArchiveController.php', + 'PhabricatorSpacesCapabilityCreateSpaces' => 'applications/spaces/capability/PhabricatorSpacesCapabilityCreateSpaces.php', + 'PhabricatorSpacesCapabilityDefaultEdit' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultEdit.php', + 'PhabricatorSpacesCapabilityDefaultView' => 'applications/spaces/capability/PhabricatorSpacesCapabilityDefaultView.php', + 'PhabricatorSpacesController' => 'applications/spaces/controller/PhabricatorSpacesController.php', + 'PhabricatorSpacesDAO' => 'applications/spaces/storage/PhabricatorSpacesDAO.php', + 'PhabricatorSpacesEditController' => 'applications/spaces/controller/PhabricatorSpacesEditController.php', + 'PhabricatorSpacesExportEngineExtension' => 'infrastructure/export/engine/PhabricatorSpacesExportEngineExtension.php', + 'PhabricatorSpacesInterface' => 'applications/spaces/interface/PhabricatorSpacesInterface.php', + 'PhabricatorSpacesListController' => 'applications/spaces/controller/PhabricatorSpacesListController.php', + 'PhabricatorSpacesMailEngineExtension' => 'applications/spaces/engineextension/PhabricatorSpacesMailEngineExtension.php', + 'PhabricatorSpacesNamespace' => 'applications/spaces/storage/PhabricatorSpacesNamespace.php', + 'PhabricatorSpacesNamespaceArchiveTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceArchiveTransaction.php', + 'PhabricatorSpacesNamespaceDatasource' => 'applications/spaces/typeahead/PhabricatorSpacesNamespaceDatasource.php', + 'PhabricatorSpacesNamespaceDefaultTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceDefaultTransaction.php', + 'PhabricatorSpacesNamespaceDescriptionTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceDescriptionTransaction.php', + 'PhabricatorSpacesNamespaceEditor' => 'applications/spaces/editor/PhabricatorSpacesNamespaceEditor.php', + 'PhabricatorSpacesNamespaceNameTransaction' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceNameTransaction.php', + 'PhabricatorSpacesNamespacePHIDType' => 'applications/spaces/phid/PhabricatorSpacesNamespacePHIDType.php', + 'PhabricatorSpacesNamespaceQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceQuery.php', + 'PhabricatorSpacesNamespaceSearchEngine' => 'applications/spaces/query/PhabricatorSpacesNamespaceSearchEngine.php', + 'PhabricatorSpacesNamespaceTransaction' => 'applications/spaces/storage/PhabricatorSpacesNamespaceTransaction.php', + 'PhabricatorSpacesNamespaceTransactionQuery' => 'applications/spaces/query/PhabricatorSpacesNamespaceTransactionQuery.php', + 'PhabricatorSpacesNamespaceTransactionType' => 'applications/spaces/xaction/PhabricatorSpacesNamespaceTransactionType.php', + 'PhabricatorSpacesNoAccessController' => 'applications/spaces/controller/PhabricatorSpacesNoAccessController.php', + 'PhabricatorSpacesRemarkupRule' => 'applications/spaces/remarkup/PhabricatorSpacesRemarkupRule.php', + 'PhabricatorSpacesSchemaSpec' => 'applications/spaces/storage/PhabricatorSpacesSchemaSpec.php', + 'PhabricatorSpacesSearchEngineExtension' => 'applications/spaces/engineextension/PhabricatorSpacesSearchEngineExtension.php', + 'PhabricatorSpacesSearchField' => 'applications/spaces/searchfield/PhabricatorSpacesSearchField.php', + 'PhabricatorSpacesTestCase' => 'applications/spaces/__tests__/PhabricatorSpacesTestCase.php', + 'PhabricatorSpacesViewController' => 'applications/spaces/controller/PhabricatorSpacesViewController.php', + 'PhabricatorStandardCustomField' => 'infrastructure/customfield/standard/PhabricatorStandardCustomField.php', + 'PhabricatorStandardCustomFieldBlueprints' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBlueprints.php', + 'PhabricatorStandardCustomFieldBool' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldBool.php', + 'PhabricatorStandardCustomFieldCredential' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldCredential.php', + 'PhabricatorStandardCustomFieldDatasource' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDatasource.php', + 'PhabricatorStandardCustomFieldDate' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldDate.php', + 'PhabricatorStandardCustomFieldHeader' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldHeader.php', + 'PhabricatorStandardCustomFieldInt' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldInt.php', + 'PhabricatorStandardCustomFieldInterface' => 'infrastructure/customfield/interface/PhabricatorStandardCustomFieldInterface.php', + 'PhabricatorStandardCustomFieldLink' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldLink.php', + 'PhabricatorStandardCustomFieldPHIDs' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldPHIDs.php', + 'PhabricatorStandardCustomFieldRemarkup' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldRemarkup.php', + 'PhabricatorStandardCustomFieldSelect' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldSelect.php', + 'PhabricatorStandardCustomFieldText' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldText.php', + 'PhabricatorStandardCustomFieldTokenizer' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldTokenizer.php', + 'PhabricatorStandardCustomFieldUsers' => 'infrastructure/customfield/standard/PhabricatorStandardCustomFieldUsers.php', 'PhabricatorStandardPageView' => 'view/page/PhabricatorStandardPageView.php', - 'PhabricatorStatusController' => 'applications/status/PhabricatorStatusController.php', + 'PhabricatorStandardSelectCustomFieldDatasource' => 'infrastructure/customfield/datasource/PhabricatorStandardSelectCustomFieldDatasource.php', + 'PhabricatorStandardTimelineEngine' => 'applications/transactions/engine/PhabricatorStandardTimelineEngine.php', + 'PhabricatorStaticEditField' => 'applications/transactions/editfield/PhabricatorStaticEditField.php', + 'PhabricatorStatusController' => 'applications/system/controller/PhabricatorStatusController.php', + 'PhabricatorStatusUIExample' => 'applications/uiexample/examples/PhabricatorStatusUIExample.php', 'PhabricatorStorageFixtureScopeGuard' => 'infrastructure/testing/fixture/PhabricatorStorageFixtureScopeGuard.php', - 'PhabricatorStorageManagementAPI' => 'infrastructure/setup/storage/PhabricatorStorageManagementAPI.php', - 'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementDatabasesWorkflow.php', - 'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementDestroyWorkflow.php', - 'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementDumpWorkflow.php', - 'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementStatusWorkflow.php', - 'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementUpgradeWorkflow.php', - 'PhabricatorStorageManagementWorkflow' => 'infrastructure/setup/storage/workflow/PhabricatorStorageManagementWorkflow.php', - 'PhabricatorStoragePatch' => 'infrastructure/setup/storage/PhabricatorStoragePatch.php', - 'PhabricatorSymbolNameLinter' => 'infrastructure/lint/hook/PhabricatorSymbolNameLinter.php', - 'PhabricatorSyntaxHighlighter' => 'applications/markup/PhabricatorSyntaxHighlighter.php', + 'PhabricatorStorageManagementAPI' => 'infrastructure/storage/management/PhabricatorStorageManagementAPI.php', + 'PhabricatorStorageManagementAdjustWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAdjustWorkflow.php', + 'PhabricatorStorageManagementAnalyzeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementAnalyzeWorkflow.php', + 'PhabricatorStorageManagementDatabasesWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php', + 'PhabricatorStorageManagementDestroyWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDestroyWorkflow.php', + 'PhabricatorStorageManagementDumpWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php', + 'PhabricatorStorageManagementOptimizeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementOptimizeWorkflow.php', + 'PhabricatorStorageManagementPartitionWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementPartitionWorkflow.php', + 'PhabricatorStorageManagementProbeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php', + 'PhabricatorStorageManagementQuickstartWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementQuickstartWorkflow.php', + 'PhabricatorStorageManagementRenamespaceWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php', + 'PhabricatorStorageManagementShellWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php', + 'PhabricatorStorageManagementStatusWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php', + 'PhabricatorStorageManagementUpgradeWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementUpgradeWorkflow.php', + 'PhabricatorStorageManagementWorkflow' => 'infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php', + 'PhabricatorStoragePatch' => 'infrastructure/storage/management/PhabricatorStoragePatch.php', + 'PhabricatorStorageSchemaSpec' => 'infrastructure/storage/schema/PhabricatorStorageSchemaSpec.php', + 'PhabricatorStorageSetupCheck' => 'applications/config/check/PhabricatorStorageSetupCheck.php', + 'PhabricatorStringConfigType' => 'applications/config/type/PhabricatorStringConfigType.php', + 'PhabricatorStringExportField' => 'infrastructure/export/field/PhabricatorStringExportField.php', + 'PhabricatorStringListConfigType' => 'applications/config/type/PhabricatorStringListConfigType.php', + 'PhabricatorStringListEditField' => 'applications/transactions/editfield/PhabricatorStringListEditField.php', + 'PhabricatorStringListExportField' => 'infrastructure/export/field/PhabricatorStringListExportField.php', + 'PhabricatorStringMailStamp' => 'applications/metamta/stamp/PhabricatorStringMailStamp.php', + 'PhabricatorStringSetting' => 'applications/settings/setting/PhabricatorStringSetting.php', + 'PhabricatorSubmitEditField' => 'applications/transactions/editfield/PhabricatorSubmitEditField.php', + 'PhabricatorSubscribableInterface' => 'applications/subscriptions/interface/PhabricatorSubscribableInterface.php', + 'PhabricatorSubscribedToObjectEdgeType' => 'applications/transactions/edges/PhabricatorSubscribedToObjectEdgeType.php', + 'PhabricatorSubscribersEditField' => 'applications/transactions/editfield/PhabricatorSubscribersEditField.php', + 'PhabricatorSubscribersQuery' => 'applications/subscriptions/query/PhabricatorSubscribersQuery.php', + 'PhabricatorSubscriptionTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorSubscriptionTriggerClock.php', + 'PhabricatorSubscriptionsAddSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSelfHeraldAction.php', + 'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsAddSubscribersHeraldAction.php', + 'PhabricatorSubscriptionsApplication' => 'applications/subscriptions/application/PhabricatorSubscriptionsApplication.php', + 'PhabricatorSubscriptionsCurtainExtension' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsCurtainExtension.php', + 'PhabricatorSubscriptionsEditController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsEditController.php', + 'PhabricatorSubscriptionsEditEngineExtension' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsEditEngineExtension.php', + 'PhabricatorSubscriptionsEditor' => 'applications/subscriptions/editor/PhabricatorSubscriptionsEditor.php', + 'PhabricatorSubscriptionsExportEngineExtension' => 'infrastructure/export/engine/PhabricatorSubscriptionsExportEngineExtension.php', + 'PhabricatorSubscriptionsFulltextEngineExtension' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsFulltextEngineExtension.php', + 'PhabricatorSubscriptionsHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsHeraldAction.php', + 'PhabricatorSubscriptionsListController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsListController.php', + 'PhabricatorSubscriptionsMailEngineExtension' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsMailEngineExtension.php', + 'PhabricatorSubscriptionsMuteController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsMuteController.php', + 'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSelfHeraldAction.php', + 'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'applications/subscriptions/herald/PhabricatorSubscriptionsRemoveSubscribersHeraldAction.php', + 'PhabricatorSubscriptionsSearchEngineAttachment' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineAttachment.php', + 'PhabricatorSubscriptionsSearchEngineExtension' => 'applications/subscriptions/engineextension/PhabricatorSubscriptionsSearchEngineExtension.php', + 'PhabricatorSubscriptionsSubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsSubscribeEmailCommand.php', + 'PhabricatorSubscriptionsSubscribersPolicyRule' => 'applications/subscriptions/policyrule/PhabricatorSubscriptionsSubscribersPolicyRule.php', + 'PhabricatorSubscriptionsTransactionController' => 'applications/subscriptions/controller/PhabricatorSubscriptionsTransactionController.php', + 'PhabricatorSubscriptionsUIEventListener' => 'applications/subscriptions/events/PhabricatorSubscriptionsUIEventListener.php', + 'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'applications/subscriptions/command/PhabricatorSubscriptionsUnsubscribeEmailCommand.php', + 'PhabricatorSubtypeEditEngineExtension' => 'applications/transactions/engineextension/PhabricatorSubtypeEditEngineExtension.php', + 'PhabricatorSumChartFunction' => 'applications/fact/chart/PhabricatorSumChartFunction.php', + 'PhabricatorSupportApplication' => 'applications/support/application/PhabricatorSupportApplication.php', + 'PhabricatorSyntaxHighlighter' => 'infrastructure/markup/PhabricatorSyntaxHighlighter.php', + 'PhabricatorSyntaxHighlightingConfigOptions' => 'applications/config/option/PhabricatorSyntaxHighlightingConfigOptions.php', + 'PhabricatorSyntaxStyle' => 'infrastructure/syntax/PhabricatorSyntaxStyle.php', + 'PhabricatorSystemAction' => 'applications/system/action/PhabricatorSystemAction.php', + 'PhabricatorSystemActionEngine' => 'applications/system/engine/PhabricatorSystemActionEngine.php', + 'PhabricatorSystemActionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemActionGarbageCollector.php', + 'PhabricatorSystemActionLog' => 'applications/system/storage/PhabricatorSystemActionLog.php', + 'PhabricatorSystemActionRateLimitException' => 'applications/system/exception/PhabricatorSystemActionRateLimitException.php', + 'PhabricatorSystemApplication' => 'applications/system/application/PhabricatorSystemApplication.php', + 'PhabricatorSystemDAO' => 'applications/system/storage/PhabricatorSystemDAO.php', + 'PhabricatorSystemDebugUIEventListener' => 'applications/system/events/PhabricatorSystemDebugUIEventListener.php', + 'PhabricatorSystemDestructionGarbageCollector' => 'applications/system/garbagecollector/PhabricatorSystemDestructionGarbageCollector.php', + 'PhabricatorSystemDestructionLog' => 'applications/system/storage/PhabricatorSystemDestructionLog.php', + 'PhabricatorSystemObjectController' => 'applications/system/controller/PhabricatorSystemObjectController.php', + 'PhabricatorSystemReadOnlyController' => 'applications/system/controller/PhabricatorSystemReadOnlyController.php', + 'PhabricatorSystemRemoveDestroyWorkflow' => 'applications/system/management/PhabricatorSystemRemoveDestroyWorkflow.php', + 'PhabricatorSystemRemoveLogWorkflow' => 'applications/system/management/PhabricatorSystemRemoveLogWorkflow.php', + 'PhabricatorSystemRemoveWorkflow' => 'applications/system/management/PhabricatorSystemRemoveWorkflow.php', + 'PhabricatorSystemSelectEncodingController' => 'applications/system/controller/PhabricatorSystemSelectEncodingController.php', + 'PhabricatorSystemSelectHighlightController' => 'applications/system/controller/PhabricatorSystemSelectHighlightController.php', + 'PhabricatorSystemSelectViewAsController' => 'applications/system/controller/PhabricatorSystemSelectViewAsController.php', + 'PhabricatorTOTPAuthFactor' => 'applications/auth/factor/PhabricatorTOTPAuthFactor.php', + 'PhabricatorTOTPAuthFactorTestCase' => 'applications/auth/factor/__tests__/PhabricatorTOTPAuthFactorTestCase.php', 'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemon.php', + 'PhabricatorTaskmasterDaemonModule' => 'infrastructure/daemon/workers/PhabricatorTaskmasterDaemonModule.php', + 'PhabricatorTestApplication' => 'applications/base/controller/__tests__/PhabricatorTestApplication.php', 'PhabricatorTestCase' => 'infrastructure/testing/PhabricatorTestCase.php', - 'PhabricatorTimelineCursor' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineCursor.php', - 'PhabricatorTimelineDAO' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineDAO.php', - 'PhabricatorTimelineEvent' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineEvent.php', - 'PhabricatorTimelineEventData' => 'infrastructure/daemon/timeline/storage/PhabricatorTimelineEventData.php', - 'PhabricatorTimelineIterator' => 'infrastructure/daemon/timeline/cursor/PhabricatorTimelineIterator.php', - 'PhabricatorTimer' => 'applications/countdown/storage/PhabricatorTimer.php', - 'PhabricatorTransactionView' => 'view/layout/PhabricatorTransactionView.php', + 'PhabricatorTestController' => 'applications/base/controller/__tests__/PhabricatorTestController.php', + 'PhabricatorTestDataGenerator' => 'applications/lipsum/generator/PhabricatorTestDataGenerator.php', + 'PhabricatorTestNoCycleEdgeType' => 'applications/transactions/edges/PhabricatorTestNoCycleEdgeType.php', + 'PhabricatorTestStorageEngine' => 'applications/files/engine/PhabricatorTestStorageEngine.php', + 'PhabricatorTestWorker' => 'infrastructure/daemon/workers/__tests__/PhabricatorTestWorker.php', + 'PhabricatorTextAreaEditField' => 'applications/transactions/editfield/PhabricatorTextAreaEditField.php', + 'PhabricatorTextConfigType' => 'applications/config/type/PhabricatorTextConfigType.php', + 'PhabricatorTextDocumentEngine' => 'applications/files/document/PhabricatorTextDocumentEngine.php', + 'PhabricatorTextEditField' => 'applications/transactions/editfield/PhabricatorTextEditField.php', + 'PhabricatorTextExportFormat' => 'infrastructure/export/format/PhabricatorTextExportFormat.php', + 'PhabricatorTextListConfigType' => 'applications/config/type/PhabricatorTextListConfigType.php', + 'PhabricatorTime' => 'infrastructure/time/PhabricatorTime.php', + 'PhabricatorTimeFormatSetting' => 'applications/settings/setting/PhabricatorTimeFormatSetting.php', + 'PhabricatorTimeGuard' => 'infrastructure/time/PhabricatorTimeGuard.php', + 'PhabricatorTimeTestCase' => 'infrastructure/time/__tests__/PhabricatorTimeTestCase.php', + 'PhabricatorTimelineEngine' => 'applications/transactions/engine/PhabricatorTimelineEngine.php', + 'PhabricatorTimelineInterface' => 'applications/transactions/interface/PhabricatorTimelineInterface.php', + 'PhabricatorTimezoneIgnoreOffsetSetting' => 'applications/settings/setting/PhabricatorTimezoneIgnoreOffsetSetting.php', + 'PhabricatorTimezoneSetting' => 'applications/settings/setting/PhabricatorTimezoneSetting.php', + 'PhabricatorTimezoneSetupCheck' => 'applications/config/check/PhabricatorTimezoneSetupCheck.php', + 'PhabricatorTitleGlyphsSetting' => 'applications/settings/setting/PhabricatorTitleGlyphsSetting.php', + 'PhabricatorToken' => 'applications/tokens/storage/PhabricatorToken.php', + 'PhabricatorTokenController' => 'applications/tokens/controller/PhabricatorTokenController.php', + 'PhabricatorTokenCount' => 'applications/tokens/storage/PhabricatorTokenCount.php', + 'PhabricatorTokenCountQuery' => 'applications/tokens/query/PhabricatorTokenCountQuery.php', + 'PhabricatorTokenDAO' => 'applications/tokens/storage/PhabricatorTokenDAO.php', + 'PhabricatorTokenDestructionEngineExtension' => 'applications/tokens/engineextension/PhabricatorTokenDestructionEngineExtension.php', + 'PhabricatorTokenGiveController' => 'applications/tokens/controller/PhabricatorTokenGiveController.php', + 'PhabricatorTokenGiven' => 'applications/tokens/storage/PhabricatorTokenGiven.php', + 'PhabricatorTokenGivenController' => 'applications/tokens/controller/PhabricatorTokenGivenController.php', + 'PhabricatorTokenGivenEditor' => 'applications/tokens/editor/PhabricatorTokenGivenEditor.php', + 'PhabricatorTokenGivenFeedStory' => 'applications/tokens/feed/PhabricatorTokenGivenFeedStory.php', + 'PhabricatorTokenGivenQuery' => 'applications/tokens/query/PhabricatorTokenGivenQuery.php', + 'PhabricatorTokenLeaderController' => 'applications/tokens/controller/PhabricatorTokenLeaderController.php', + 'PhabricatorTokenQuery' => 'applications/tokens/query/PhabricatorTokenQuery.php', + 'PhabricatorTokenReceiverInterface' => 'applications/tokens/interface/PhabricatorTokenReceiverInterface.php', + 'PhabricatorTokenReceiverQuery' => 'applications/tokens/query/PhabricatorTokenReceiverQuery.php', + 'PhabricatorTokenTokenPHIDType' => 'applications/tokens/phid/PhabricatorTokenTokenPHIDType.php', + 'PhabricatorTokenUIEventListener' => 'applications/tokens/event/PhabricatorTokenUIEventListener.php', + 'PhabricatorTokenizerEditField' => 'applications/transactions/editfield/PhabricatorTokenizerEditField.php', + 'PhabricatorTokensApplication' => 'applications/tokens/application/PhabricatorTokensApplication.php', + 'PhabricatorTokensCurtainExtension' => 'applications/tokens/engineextension/PhabricatorTokensCurtainExtension.php', + 'PhabricatorTokensSettingsPanel' => 'applications/settings/panel/PhabricatorTokensSettingsPanel.php', + 'PhabricatorTokensToken' => 'applications/tokens/storage/PhabricatorTokensToken.php', + 'PhabricatorTransactionChange' => 'applications/transactions/data/PhabricatorTransactionChange.php', + 'PhabricatorTransactionFactEngine' => 'applications/fact/engine/PhabricatorTransactionFactEngine.php', + 'PhabricatorTransactionRemarkupChange' => 'applications/transactions/data/PhabricatorTransactionRemarkupChange.php', + 'PhabricatorTransactionWarning' => 'applications/transactions/data/PhabricatorTransactionWarning.php', + 'PhabricatorTransactions' => 'applications/transactions/constants/PhabricatorTransactions.php', + 'PhabricatorTransactionsApplication' => 'applications/transactions/application/PhabricatorTransactionsApplication.php', + 'PhabricatorTransactionsDestructionEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsDestructionEngineExtension.php', + 'PhabricatorTransactionsFulltextEngineExtension' => 'applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php', + 'PhabricatorTransactionsObjectTypeDatasource' => 'applications/transactions/typeahead/PhabricatorTransactionsObjectTypeDatasource.php', 'PhabricatorTransformedFile' => 'applications/files/storage/PhabricatorTransformedFile.php', - 'PhabricatorTranslation' => 'infrastructure/internationalization/PhabricatorTranslation.php', + 'PhabricatorTranslationSetting' => 'applications/settings/setting/PhabricatorTranslationSetting.php', + 'PhabricatorTranslationsConfigOptions' => 'applications/config/option/PhabricatorTranslationsConfigOptions.php', + 'PhabricatorTriggerAction' => 'infrastructure/daemon/workers/action/PhabricatorTriggerAction.php', + 'PhabricatorTriggerClock' => 'infrastructure/daemon/workers/clock/PhabricatorTriggerClock.php', + 'PhabricatorTriggerClockTestCase' => 'infrastructure/daemon/workers/clock/__tests__/PhabricatorTriggerClockTestCase.php', + 'PhabricatorTriggerDaemon' => 'infrastructure/daemon/workers/PhabricatorTriggerDaemon.php', 'PhabricatorTrivialTestCase' => 'infrastructure/testing/__tests__/PhabricatorTrivialTestCase.php', - 'PhabricatorTypeaheadCommonDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadCommonDatasourceController.php', + 'PhabricatorTwilioFuture' => 'applications/metamta/future/PhabricatorTwilioFuture.php', + 'PhabricatorTwitchAuthProvider' => 'applications/auth/provider/PhabricatorTwitchAuthProvider.php', + 'PhabricatorTwitterAuthProvider' => 'applications/auth/provider/PhabricatorTwitterAuthProvider.php', + 'PhabricatorTypeaheadApplication' => 'applications/typeahead/application/PhabricatorTypeaheadApplication.php', + 'PhabricatorTypeaheadCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php', + 'PhabricatorTypeaheadDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php', 'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadDatasourceController.php', + 'PhabricatorTypeaheadDatasourceTestCase' => 'applications/typeahead/datasource/__tests__/PhabricatorTypeaheadDatasourceTestCase.php', + 'PhabricatorTypeaheadFunctionHelpController' => 'applications/typeahead/controller/PhabricatorTypeaheadFunctionHelpController.php', + 'PhabricatorTypeaheadInvalidTokenException' => 'applications/typeahead/exception/PhabricatorTypeaheadInvalidTokenException.php', + 'PhabricatorTypeaheadModularDatasourceController' => 'applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php', + 'PhabricatorTypeaheadMonogramDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadMonogramDatasource.php', + 'PhabricatorTypeaheadProxyDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadProxyDatasource.php', + 'PhabricatorTypeaheadResult' => 'applications/typeahead/storage/PhabricatorTypeaheadResult.php', + 'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'applications/typeahead/datasource/PhabricatorTypeaheadRuntimeCompositeDatasource.php', + 'PhabricatorTypeaheadTestNumbersDatasource' => 'applications/typeahead/datasource/__tests__/PhabricatorTypeaheadTestNumbersDatasource.php', + 'PhabricatorTypeaheadTokenView' => 'applications/typeahead/view/PhabricatorTypeaheadTokenView.php', + 'PhabricatorUIConfigOptions' => 'applications/config/option/PhabricatorUIConfigOptions.php', 'PhabricatorUIExample' => 'applications/uiexample/examples/PhabricatorUIExample.php', - 'PhabricatorUIExampleController' => 'applications/uiexample/controller/PhabricatorUIExampleController.php', 'PhabricatorUIExampleRenderController' => 'applications/uiexample/controller/PhabricatorUIExampleRenderController.php', - 'PhabricatorUIListFilterExample' => 'applications/uiexample/examples/PhabricatorUIListFilterExample.php', - 'PhabricatorUINotificationExample' => 'applications/uiexample/examples/PhabricatorUINotificationExample.php', - 'PhabricatorUIPagerExample' => 'applications/uiexample/examples/PhabricatorUIPagerExample.php', - 'PhabricatorUITooltipExample' => 'applications/uiexample/examples/PhabricatorUITooltipExample.php', + 'PhabricatorUIExamplesApplication' => 'applications/uiexample/application/PhabricatorUIExamplesApplication.php', + 'PhabricatorURIExportField' => 'infrastructure/export/field/PhabricatorURIExportField.php', + 'PhabricatorUSEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php', + 'PhabricatorUnifiedDiffsSetting' => 'applications/settings/setting/PhabricatorUnifiedDiffsSetting.php', + 'PhabricatorUnitTestContentSource' => 'infrastructure/contentsource/PhabricatorUnitTestContentSource.php', 'PhabricatorUnitsTestCase' => 'view/__tests__/PhabricatorUnitsTestCase.php', + 'PhabricatorUnknownContentSource' => 'infrastructure/contentsource/PhabricatorUnknownContentSource.php', + 'PhabricatorUnlockEngine' => 'applications/system/engine/PhabricatorUnlockEngine.php', + 'PhabricatorUnlockableInterface' => 'applications/system/interface/PhabricatorUnlockableInterface.php', + 'PhabricatorUnsubscribedFromObjectEdgeType' => 'applications/transactions/edges/PhabricatorUnsubscribedFromObjectEdgeType.php', 'PhabricatorUser' => 'applications/people/storage/PhabricatorUser.php', - 'PhabricatorUserAccountSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserAccountSettingsPanelController.php', - 'PhabricatorUserConduitSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserConduitSettingsPanelController.php', + 'PhabricatorUserApproveTransaction' => 'applications/people/xaction/PhabricatorUserApproveTransaction.php', + 'PhabricatorUserBadgesCacheType' => 'applications/people/cache/PhabricatorUserBadgesCacheType.php', + 'PhabricatorUserBlurbField' => 'applications/people/customfield/PhabricatorUserBlurbField.php', + 'PhabricatorUserCache' => 'applications/people/storage/PhabricatorUserCache.php', + 'PhabricatorUserCachePurger' => 'applications/cache/purger/PhabricatorUserCachePurger.php', + 'PhabricatorUserCacheType' => 'applications/people/cache/PhabricatorUserCacheType.php', + 'PhabricatorUserCardView' => 'applications/people/view/PhabricatorUserCardView.php', + 'PhabricatorUserConfigOptions' => 'applications/people/config/PhabricatorUserConfigOptions.php', + 'PhabricatorUserConfiguredCustomField' => 'applications/people/customfield/PhabricatorUserConfiguredCustomField.php', + 'PhabricatorUserConfiguredCustomFieldStorage' => 'applications/people/storage/PhabricatorUserConfiguredCustomFieldStorage.php', + 'PhabricatorUserCustomField' => 'applications/people/customfield/PhabricatorUserCustomField.php', + 'PhabricatorUserCustomFieldNumericIndex' => 'applications/people/storage/PhabricatorUserCustomFieldNumericIndex.php', + 'PhabricatorUserCustomFieldStringIndex' => 'applications/people/storage/PhabricatorUserCustomFieldStringIndex.php', 'PhabricatorUserDAO' => 'applications/people/storage/PhabricatorUserDAO.php', - 'PhabricatorUserEditor' => 'applications/people/PhabricatorUserEditor.php', + 'PhabricatorUserDisableTransaction' => 'applications/people/xaction/PhabricatorUserDisableTransaction.php', + 'PhabricatorUserEditEngine' => 'applications/people/editor/PhabricatorUserEditEngine.php', + 'PhabricatorUserEditor' => 'applications/people/editor/PhabricatorUserEditor.php', + 'PhabricatorUserEditorTestCase' => 'applications/people/editor/__tests__/PhabricatorUserEditorTestCase.php', 'PhabricatorUserEmail' => 'applications/people/storage/PhabricatorUserEmail.php', - 'PhabricatorUserEmailPreferenceSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserEmailPreferenceSettingsPanelController.php', - 'PhabricatorUserEmailSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserEmailSettingsPanelController.php', - 'PhabricatorUserLDAPInfo' => 'applications/people/storage/PhabricatorUserLDAPInfo.php', - 'PhabricatorUserLDAPSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserLDAPSettingsPanelController.php', + 'PhabricatorUserEmailTestCase' => 'applications/people/storage/__tests__/PhabricatorUserEmailTestCase.php', + 'PhabricatorUserEmpowerTransaction' => 'applications/people/xaction/PhabricatorUserEmpowerTransaction.php', + 'PhabricatorUserFerretEngine' => 'applications/people/search/PhabricatorUserFerretEngine.php', + 'PhabricatorUserFulltextEngine' => 'applications/people/search/PhabricatorUserFulltextEngine.php', + 'PhabricatorUserIconField' => 'applications/people/customfield/PhabricatorUserIconField.php', 'PhabricatorUserLog' => 'applications/people/storage/PhabricatorUserLog.php', - 'PhabricatorUserOAuthInfo' => 'applications/people/storage/PhabricatorUserOAuthInfo.php', - 'PhabricatorUserOAuthSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserOAuthSettingsPanelController.php', - 'PhabricatorUserPasswordSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserPasswordSettingsPanelController.php', - 'PhabricatorUserPreferenceSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserPreferenceSettingsPanelController.php', - 'PhabricatorUserPreferences' => 'applications/people/storage/PhabricatorUserPreferences.php', + 'PhabricatorUserLogType' => 'applications/people/userlog/PhabricatorUserLogType.php', + 'PhabricatorUserLogTypeDatasource' => 'applications/people/typeahead/PhabricatorUserLogTypeDatasource.php', + 'PhabricatorUserLogView' => 'applications/people/view/PhabricatorUserLogView.php', + 'PhabricatorUserMessageCountCacheType' => 'applications/people/cache/PhabricatorUserMessageCountCacheType.php', + 'PhabricatorUserNotificationCountCacheType' => 'applications/people/cache/PhabricatorUserNotificationCountCacheType.php', + 'PhabricatorUserNotifyTransaction' => 'applications/people/xaction/PhabricatorUserNotifyTransaction.php', + 'PhabricatorUserPHIDResolver' => 'applications/phid/resolver/PhabricatorUserPHIDResolver.php', + 'PhabricatorUserPreferences' => 'applications/settings/storage/PhabricatorUserPreferences.php', + 'PhabricatorUserPreferencesCacheType' => 'applications/people/cache/PhabricatorUserPreferencesCacheType.php', + 'PhabricatorUserPreferencesEditor' => 'applications/settings/editor/PhabricatorUserPreferencesEditor.php', + 'PhabricatorUserPreferencesPHIDType' => 'applications/settings/phid/PhabricatorUserPreferencesPHIDType.php', + 'PhabricatorUserPreferencesQuery' => 'applications/settings/query/PhabricatorUserPreferencesQuery.php', + 'PhabricatorUserPreferencesSearchEngine' => 'applications/settings/query/PhabricatorUserPreferencesSearchEngine.php', + 'PhabricatorUserPreferencesTransaction' => 'applications/settings/storage/PhabricatorUserPreferencesTransaction.php', + 'PhabricatorUserPreferencesTransactionQuery' => 'applications/settings/query/PhabricatorUserPreferencesTransactionQuery.php', 'PhabricatorUserProfile' => 'applications/people/storage/PhabricatorUserProfile.php', - 'PhabricatorUserProfileSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserProfileSettingsPanelController.php', - 'PhabricatorUserSSHKey' => 'applications/people/storage/PhabricatorUserSSHKey.php', - 'PhabricatorUserSSHKeysSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSSHKeysSettingsPanelController.php', - 'PhabricatorUserSearchSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSearchSettingsPanelController.php', - 'PhabricatorUserSettingsController' => 'applications/people/controller/PhabricatorUserSettingsController.php', - 'PhabricatorUserSettingsPanelController' => 'applications/people/controller/settings/panels/PhabricatorUserSettingsPanelController.php', - 'PhabricatorUserStatus' => 'applications/people/storage/PhabricatorUserStatus.php', + 'PhabricatorUserProfileImageCacheType' => 'applications/people/cache/PhabricatorUserProfileImageCacheType.php', + 'PhabricatorUserRealNameField' => 'applications/people/customfield/PhabricatorUserRealNameField.php', + 'PhabricatorUserRolesField' => 'applications/people/customfield/PhabricatorUserRolesField.php', + 'PhabricatorUserSchemaSpec' => 'applications/people/storage/PhabricatorUserSchemaSpec.php', + 'PhabricatorUserSinceField' => 'applications/people/customfield/PhabricatorUserSinceField.php', + 'PhabricatorUserStatusField' => 'applications/people/customfield/PhabricatorUserStatusField.php', 'PhabricatorUserTestCase' => 'applications/people/storage/__tests__/PhabricatorUserTestCase.php', + 'PhabricatorUserTitleField' => 'applications/people/customfield/PhabricatorUserTitleField.php', + 'PhabricatorUserTransaction' => 'applications/people/storage/PhabricatorUserTransaction.php', + 'PhabricatorUserTransactionEditor' => 'applications/people/editor/PhabricatorUserTransactionEditor.php', + 'PhabricatorUserTransactionType' => 'applications/people/xaction/PhabricatorUserTransactionType.php', + 'PhabricatorUserUsernameTransaction' => 'applications/people/xaction/PhabricatorUserUsernameTransaction.php', + 'PhabricatorUsersEditField' => 'applications/transactions/editfield/PhabricatorUsersEditField.php', + 'PhabricatorUsersPolicyRule' => 'applications/people/policyrule/PhabricatorUsersPolicyRule.php', + 'PhabricatorUsersSearchField' => 'applications/people/searchfield/PhabricatorUsersSearchField.php', + 'PhabricatorVCSResponse' => 'applications/repository/response/PhabricatorVCSResponse.php', + 'PhabricatorVerifyEmailUserLogType' => 'applications/people/userlog/PhabricatorVerifyEmailUserLogType.php', + 'PhabricatorVersionedDraft' => 'applications/draft/storage/PhabricatorVersionedDraft.php', + 'PhabricatorVeryWowEnglishTranslation' => 'infrastructure/internationalization/translation/PhabricatorVeryWowEnglishTranslation.php', + 'PhabricatorVideoDocumentEngine' => 'applications/files/document/PhabricatorVideoDocumentEngine.php', + 'PhabricatorViewerDatasource' => 'applications/people/typeahead/PhabricatorViewerDatasource.php', + 'PhabricatorVoidDocumentEngine' => 'applications/files/document/PhabricatorVoidDocumentEngine.php', + 'PhabricatorWatcherHasObjectEdgeType' => 'applications/transactions/edges/PhabricatorWatcherHasObjectEdgeType.php', + 'PhabricatorWebContentSource' => 'infrastructure/contentsource/PhabricatorWebContentSource.php', + 'PhabricatorWebServerSetupCheck' => 'applications/config/check/PhabricatorWebServerSetupCheck.php', + 'PhabricatorWeekStartDaySetting' => 'applications/settings/setting/PhabricatorWeekStartDaySetting.php', + 'PhabricatorWildConfigType' => 'applications/config/type/PhabricatorWildConfigType.php', + 'PhabricatorWordPressAuthProvider' => 'applications/auth/provider/PhabricatorWordPressAuthProvider.php', + 'PhabricatorWorkboardInterface' => 'applications/project/interface/PhabricatorWorkboardInterface.php', + 'PhabricatorWorkboardViewState' => 'applications/project/state/PhabricatorWorkboardViewState.php', 'PhabricatorWorker' => 'infrastructure/daemon/workers/PhabricatorWorker.php', + 'PhabricatorWorkerActiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerActiveTask.php', + 'PhabricatorWorkerActiveTaskQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerActiveTaskQuery.php', + 'PhabricatorWorkerArchiveTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerArchiveTask.php', + 'PhabricatorWorkerArchiveTaskQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerArchiveTaskQuery.php', + 'PhabricatorWorkerBulkJob' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJob.php', + 'PhabricatorWorkerBulkJobCreateWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobCreateWorker.php', + 'PhabricatorWorkerBulkJobEditor' => 'infrastructure/daemon/workers/editor/PhabricatorWorkerBulkJobEditor.php', + 'PhabricatorWorkerBulkJobPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerBulkJobPHIDType.php', + 'PhabricatorWorkerBulkJobQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobQuery.php', + 'PhabricatorWorkerBulkJobSearchEngine' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobSearchEngine.php', + 'PhabricatorWorkerBulkJobTaskWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobTaskWorker.php', + 'PhabricatorWorkerBulkJobTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerBulkJobTestCase.php', + 'PhabricatorWorkerBulkJobTransaction' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkJobTransaction.php', + 'PhabricatorWorkerBulkJobTransactionQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerBulkJobTransactionQuery.php', + 'PhabricatorWorkerBulkJobType' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobType.php', + 'PhabricatorWorkerBulkJobWorker' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerBulkJobWorker.php', + 'PhabricatorWorkerBulkTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerBulkTask.php', 'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerDAO.php', + 'PhabricatorWorkerDestructionEngineExtension' => 'infrastructure/daemon/workers/engineextension/PhabricatorWorkerDestructionEngineExtension.php', + 'PhabricatorWorkerLeaseQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerLeaseQuery.php', + 'PhabricatorWorkerManagementCancelWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementCancelWorkflow.php', + 'PhabricatorWorkerManagementDelayWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementDelayWorkflow.php', + 'PhabricatorWorkerManagementExecuteWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementExecuteWorkflow.php', + 'PhabricatorWorkerManagementFloodWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFloodWorkflow.php', + 'PhabricatorWorkerManagementFreeWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementFreeWorkflow.php', + 'PhabricatorWorkerManagementPriorityWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementPriorityWorkflow.php', + 'PhabricatorWorkerManagementRetryWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementRetryWorkflow.php', + 'PhabricatorWorkerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerManagementWorkflow.php', + 'PhabricatorWorkerPermanentFailureException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerPermanentFailureException.php', + 'PhabricatorWorkerSchemaSpec' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerSchemaSpec.php', + 'PhabricatorWorkerSingleBulkJobType' => 'infrastructure/daemon/workers/bulk/PhabricatorWorkerSingleBulkJobType.php', 'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTask.php', 'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTaskData.php', 'PhabricatorWorkerTaskDetailController' => 'applications/daemon/controller/PhabricatorWorkerTaskDetailController.php', - 'PhabricatorWorkerTaskUpdateController' => 'applications/daemon/controller/PhabricatorWorkerTaskUpdateController.php', - 'PhabricatorXHPASTViewController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewController.php', - 'PhabricatorXHPASTViewDAO' => 'applications/xhpastview/storage/PhabricatorXHPASTViewDAO.php', - 'PhabricatorXHPASTViewFrameController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewFrameController.php', - 'PhabricatorXHPASTViewFramesetController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewFramesetController.php', - 'PhabricatorXHPASTViewInputController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewInputController.php', - 'PhabricatorXHPASTViewPanelController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewPanelController.php', - 'PhabricatorXHPASTViewParseTree' => 'applications/xhpastview/storage/PhabricatorXHPASTViewParseTree.php', - 'PhabricatorXHPASTViewRunController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewRunController.php', - 'PhabricatorXHPASTViewStreamController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewStreamController.php', - 'PhabricatorXHPASTViewTreeController' => 'applications/xhpastview/controller/PhabricatorXHPASTViewTreeController.php', + 'PhabricatorWorkerTaskQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerTaskQuery.php', + 'PhabricatorWorkerTestCase' => 'infrastructure/daemon/workers/__tests__/PhabricatorWorkerTestCase.php', + 'PhabricatorWorkerTrigger' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTrigger.php', + 'PhabricatorWorkerTriggerEvent' => 'infrastructure/daemon/workers/storage/PhabricatorWorkerTriggerEvent.php', + 'PhabricatorWorkerTriggerManagementFireWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementFireWorkflow.php', + 'PhabricatorWorkerTriggerManagementWorkflow' => 'infrastructure/daemon/workers/management/PhabricatorWorkerTriggerManagementWorkflow.php', + 'PhabricatorWorkerTriggerPHIDType' => 'infrastructure/daemon/workers/phid/PhabricatorWorkerTriggerPHIDType.php', + 'PhabricatorWorkerTriggerQuery' => 'infrastructure/daemon/workers/query/PhabricatorWorkerTriggerQuery.php', + 'PhabricatorWorkerYieldException' => 'infrastructure/daemon/workers/exception/PhabricatorWorkerYieldException.php', + 'PhabricatorWorkingCopyDiscoveryTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyDiscoveryTestCase.php', + 'PhabricatorWorkingCopyPullTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyPullTestCase.php', + 'PhabricatorWorkingCopyTestCase' => 'applications/repository/engine/__tests__/PhabricatorWorkingCopyTestCase.php', + 'PhabricatorXHPASTDAO' => 'applications/phpast/storage/PhabricatorXHPASTDAO.php', + 'PhabricatorXHPASTParseTree' => 'applications/phpast/storage/PhabricatorXHPASTParseTree.php', + 'PhabricatorXHPASTViewController' => 'applications/phpast/controller/PhabricatorXHPASTViewController.php', + 'PhabricatorXHPASTViewFrameController' => 'applications/phpast/controller/PhabricatorXHPASTViewFrameController.php', + 'PhabricatorXHPASTViewFramesetController' => 'applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php', + 'PhabricatorXHPASTViewInputController' => 'applications/phpast/controller/PhabricatorXHPASTViewInputController.php', + 'PhabricatorXHPASTViewPanelController' => 'applications/phpast/controller/PhabricatorXHPASTViewPanelController.php', + 'PhabricatorXHPASTViewRunController' => 'applications/phpast/controller/PhabricatorXHPASTViewRunController.php', + 'PhabricatorXHPASTViewStreamController' => 'applications/phpast/controller/PhabricatorXHPASTViewStreamController.php', + 'PhabricatorXHPASTViewTreeController' => 'applications/phpast/controller/PhabricatorXHPASTViewTreeController.php', + 'PhabricatorXHProfApplication' => 'applications/xhprof/application/PhabricatorXHProfApplication.php', 'PhabricatorXHProfController' => 'applications/xhprof/controller/PhabricatorXHProfController.php', + 'PhabricatorXHProfDAO' => 'applications/xhprof/storage/PhabricatorXHProfDAO.php', + 'PhabricatorXHProfDropController' => 'applications/xhprof/controller/PhabricatorXHProfDropController.php', 'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/PhabricatorXHProfProfileController.php', 'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/PhabricatorXHProfProfileSymbolView.php', 'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/PhabricatorXHProfProfileTopLevelView.php', 'PhabricatorXHProfProfileView' => 'applications/xhprof/view/PhabricatorXHProfProfileView.php', + 'PhabricatorXHProfSample' => 'applications/xhprof/storage/PhabricatorXHProfSample.php', + 'PhabricatorXHProfSampleListController' => 'applications/xhprof/controller/PhabricatorXHProfSampleListController.php', + 'PhabricatorXHProfSampleQuery' => 'applications/xhprof/query/PhabricatorXHProfSampleQuery.php', + 'PhabricatorXHProfSampleSearchEngine' => 'applications/xhprof/query/PhabricatorXHProfSampleSearchEngine.php', + 'PhabricatorYoutubeRemarkupRule' => 'infrastructure/markup/rule/PhabricatorYoutubeRemarkupRule.php', + 'PhabricatorZipSetupCheck' => 'applications/config/check/PhabricatorZipSetupCheck.php', + 'Phame404Response' => 'applications/phame/site/Phame404Response.php', + 'PhameBlog' => 'applications/phame/storage/PhameBlog.php', + 'PhameBlog404Controller' => 'applications/phame/controller/blog/PhameBlog404Controller.php', + 'PhameBlogArchiveController' => 'applications/phame/controller/blog/PhameBlogArchiveController.php', + 'PhameBlogController' => 'applications/phame/controller/blog/PhameBlogController.php', + 'PhameBlogCreateCapability' => 'applications/phame/capability/PhameBlogCreateCapability.php', + 'PhameBlogDatasource' => 'applications/phame/typeahead/PhameBlogDatasource.php', + 'PhameBlogDescriptionTransaction' => 'applications/phame/xaction/PhameBlogDescriptionTransaction.php', + 'PhameBlogEditConduitAPIMethod' => 'applications/phame/conduit/PhameBlogEditConduitAPIMethod.php', + 'PhameBlogEditController' => 'applications/phame/controller/blog/PhameBlogEditController.php', + 'PhameBlogEditEngine' => 'applications/phame/editor/PhameBlogEditEngine.php', + 'PhameBlogEditor' => 'applications/phame/editor/PhameBlogEditor.php', + 'PhameBlogFeedController' => 'applications/phame/controller/blog/PhameBlogFeedController.php', + 'PhameBlogFerretEngine' => 'applications/phame/search/PhameBlogFerretEngine.php', + 'PhameBlogFullDomainTransaction' => 'applications/phame/xaction/PhameBlogFullDomainTransaction.php', + 'PhameBlogFulltextEngine' => 'applications/phame/search/PhameBlogFulltextEngine.php', + 'PhameBlogHeaderImageTransaction' => 'applications/phame/xaction/PhameBlogHeaderImageTransaction.php', + 'PhameBlogHeaderPictureController' => 'applications/phame/controller/blog/PhameBlogHeaderPictureController.php', + 'PhameBlogListController' => 'applications/phame/controller/blog/PhameBlogListController.php', + 'PhameBlogListView' => 'applications/phame/view/PhameBlogListView.php', + 'PhameBlogManageController' => 'applications/phame/controller/blog/PhameBlogManageController.php', + 'PhameBlogNameTransaction' => 'applications/phame/xaction/PhameBlogNameTransaction.php', + 'PhameBlogParentDomainTransaction' => 'applications/phame/xaction/PhameBlogParentDomainTransaction.php', + 'PhameBlogParentSiteTransaction' => 'applications/phame/xaction/PhameBlogParentSiteTransaction.php', + 'PhameBlogProfileImageTransaction' => 'applications/phame/xaction/PhameBlogProfileImageTransaction.php', + 'PhameBlogProfilePictureController' => 'applications/phame/controller/blog/PhameBlogProfilePictureController.php', + 'PhameBlogQuery' => 'applications/phame/query/PhameBlogQuery.php', + 'PhameBlogReplyHandler' => 'applications/phame/mail/PhameBlogReplyHandler.php', + 'PhameBlogSearchConduitAPIMethod' => 'applications/phame/conduit/PhameBlogSearchConduitAPIMethod.php', + 'PhameBlogSearchEngine' => 'applications/phame/query/PhameBlogSearchEngine.php', + 'PhameBlogSite' => 'applications/phame/site/PhameBlogSite.php', + 'PhameBlogStatusTransaction' => 'applications/phame/xaction/PhameBlogStatusTransaction.php', + 'PhameBlogSubtitleTransaction' => 'applications/phame/xaction/PhameBlogSubtitleTransaction.php', + 'PhameBlogTransaction' => 'applications/phame/storage/PhameBlogTransaction.php', + 'PhameBlogTransactionQuery' => 'applications/phame/query/PhameBlogTransactionQuery.php', + 'PhameBlogTransactionType' => 'applications/phame/xaction/PhameBlogTransactionType.php', + 'PhameBlogViewController' => 'applications/phame/controller/blog/PhameBlogViewController.php', + 'PhameConstants' => 'applications/phame/constants/PhameConstants.php', 'PhameController' => 'applications/phame/controller/PhameController.php', 'PhameDAO' => 'applications/phame/storage/PhameDAO.php', - 'PhameDraftListController' => 'applications/phame/controller/post/list/PhameDraftListController.php', + 'PhameDescriptionView' => 'applications/phame/view/PhameDescriptionView.php', + 'PhameDraftListView' => 'applications/phame/view/PhameDraftListView.php', + 'PhameHomeController' => 'applications/phame/controller/PhameHomeController.php', + 'PhameInheritBlogPolicyRule' => 'applications/phame/policyrule/PhameInheritBlogPolicyRule.php', + 'PhameLiveController' => 'applications/phame/controller/PhameLiveController.php', + 'PhameNextPostView' => 'applications/phame/view/PhameNextPostView.php', 'PhamePost' => 'applications/phame/storage/PhamePost.php', - 'PhamePostDeleteController' => 'applications/phame/controller/post/PhamePostDeleteController.php', - 'PhamePostDetailView' => 'applications/phame/view/PhamePostDetailView.php', + 'PhamePostArchiveController' => 'applications/phame/controller/post/PhamePostArchiveController.php', + 'PhamePostBlogTransaction' => 'applications/phame/xaction/PhamePostBlogTransaction.php', + 'PhamePostBodyTransaction' => 'applications/phame/xaction/PhamePostBodyTransaction.php', + 'PhamePostController' => 'applications/phame/controller/post/PhamePostController.php', + 'PhamePostEditConduitAPIMethod' => 'applications/phame/conduit/PhamePostEditConduitAPIMethod.php', 'PhamePostEditController' => 'applications/phame/controller/post/PhamePostEditController.php', - 'PhamePostListBaseController' => 'applications/phame/controller/post/list/PhamePostListBaseController.php', - 'PhamePostListController' => 'applications/phame/controller/post/list/PhamePostListController.php', + 'PhamePostEditEngine' => 'applications/phame/editor/PhamePostEditEngine.php', + 'PhamePostEditEngineLock' => 'applications/phame/editor/PhamePostEditEngineLock.php', + 'PhamePostEditor' => 'applications/phame/editor/PhamePostEditor.php', + 'PhamePostFerretEngine' => 'applications/phame/search/PhamePostFerretEngine.php', + 'PhamePostFulltextEngine' => 'applications/phame/search/PhamePostFulltextEngine.php', + 'PhamePostHeaderImageTransaction' => 'applications/phame/xaction/PhamePostHeaderImageTransaction.php', + 'PhamePostHeaderPictureController' => 'applications/phame/controller/post/PhamePostHeaderPictureController.php', + 'PhamePostHistoryController' => 'applications/phame/controller/post/PhamePostHistoryController.php', + 'PhamePostListController' => 'applications/phame/controller/post/PhamePostListController.php', 'PhamePostListView' => 'applications/phame/view/PhamePostListView.php', - 'PhamePostPreviewController' => 'applications/phame/controller/post/PhamePostPreviewController.php', + 'PhamePostMailReceiver' => 'applications/phame/mail/PhamePostMailReceiver.php', + 'PhamePostMoveController' => 'applications/phame/controller/post/PhamePostMoveController.php', + 'PhamePostPublishController' => 'applications/phame/controller/post/PhamePostPublishController.php', 'PhamePostQuery' => 'applications/phame/query/PhamePostQuery.php', + 'PhamePostRemarkupRule' => 'applications/phame/remarkup/PhamePostRemarkupRule.php', + 'PhamePostReplyHandler' => 'applications/phame/mail/PhamePostReplyHandler.php', + 'PhamePostSearchConduitAPIMethod' => 'applications/phame/conduit/PhamePostSearchConduitAPIMethod.php', + 'PhamePostSearchEngine' => 'applications/phame/query/PhamePostSearchEngine.php', + 'PhamePostSubtitleTransaction' => 'applications/phame/xaction/PhamePostSubtitleTransaction.php', + 'PhamePostTitleTransaction' => 'applications/phame/xaction/PhamePostTitleTransaction.php', + 'PhamePostTransaction' => 'applications/phame/storage/PhamePostTransaction.php', + 'PhamePostTransactionComment' => 'applications/phame/storage/PhamePostTransactionComment.php', + 'PhamePostTransactionQuery' => 'applications/phame/query/PhamePostTransactionQuery.php', + 'PhamePostTransactionType' => 'applications/phame/xaction/PhamePostTransactionType.php', 'PhamePostViewController' => 'applications/phame/controller/post/PhamePostViewController.php', + 'PhamePostVisibilityTransaction' => 'applications/phame/xaction/PhamePostVisibilityTransaction.php', + 'PhameSchemaSpec' => 'applications/phame/storage/PhameSchemaSpec.php', + 'PhameSite' => 'applications/phame/site/PhameSite.php', + 'PhluxController' => 'applications/phlux/controller/PhluxController.php', + 'PhluxDAO' => 'applications/phlux/storage/PhluxDAO.php', + 'PhluxEditController' => 'applications/phlux/controller/PhluxEditController.php', + 'PhluxListController' => 'applications/phlux/controller/PhluxListController.php', + 'PhluxSchemaSpec' => 'applications/phlux/storage/PhluxSchemaSpec.php', + 'PhluxTransaction' => 'applications/phlux/storage/PhluxTransaction.php', + 'PhluxTransactionQuery' => 'applications/phlux/query/PhluxTransactionQuery.php', + 'PhluxVariable' => 'applications/phlux/storage/PhluxVariable.php', + 'PhluxVariableEditor' => 'applications/phlux/editor/PhluxVariableEditor.php', + 'PhluxVariablePHIDType' => 'applications/phlux/phid/PhluxVariablePHIDType.php', + 'PhluxVariableQuery' => 'applications/phlux/query/PhluxVariableQuery.php', + 'PhluxViewController' => 'applications/phlux/controller/PhluxViewController.php', + 'PholioController' => 'applications/pholio/controller/PholioController.php', + 'PholioDAO' => 'applications/pholio/storage/PholioDAO.php', + 'PholioDefaultEditCapability' => 'applications/pholio/capability/PholioDefaultEditCapability.php', + 'PholioDefaultViewCapability' => 'applications/pholio/capability/PholioDefaultViewCapability.php', + 'PholioImage' => 'applications/pholio/storage/PholioImage.php', + 'PholioImageDescriptionTransaction' => 'applications/pholio/xaction/PholioImageDescriptionTransaction.php', + 'PholioImageFileTransaction' => 'applications/pholio/xaction/PholioImageFileTransaction.php', + 'PholioImageNameTransaction' => 'applications/pholio/xaction/PholioImageNameTransaction.php', + 'PholioImagePHIDType' => 'applications/pholio/phid/PholioImagePHIDType.php', + 'PholioImageQuery' => 'applications/pholio/query/PholioImageQuery.php', + 'PholioImageReplaceTransaction' => 'applications/pholio/xaction/PholioImageReplaceTransaction.php', + 'PholioImageSequenceTransaction' => 'applications/pholio/xaction/PholioImageSequenceTransaction.php', + 'PholioImageTransactionType' => 'applications/pholio/xaction/PholioImageTransactionType.php', + 'PholioImageUploadController' => 'applications/pholio/controller/PholioImageUploadController.php', + 'PholioInlineController' => 'applications/pholio/controller/PholioInlineController.php', + 'PholioInlineListController' => 'applications/pholio/controller/PholioInlineListController.php', + 'PholioMock' => 'applications/pholio/storage/PholioMock.php', + 'PholioMockArchiveController' => 'applications/pholio/controller/PholioMockArchiveController.php', + 'PholioMockAuthorHeraldField' => 'applications/pholio/herald/PholioMockAuthorHeraldField.php', + 'PholioMockCommentController' => 'applications/pholio/controller/PholioMockCommentController.php', + 'PholioMockDescriptionHeraldField' => 'applications/pholio/herald/PholioMockDescriptionHeraldField.php', + 'PholioMockDescriptionTransaction' => 'applications/pholio/xaction/PholioMockDescriptionTransaction.php', + 'PholioMockEditController' => 'applications/pholio/controller/PholioMockEditController.php', + 'PholioMockEditor' => 'applications/pholio/editor/PholioMockEditor.php', + 'PholioMockEmbedView' => 'applications/pholio/view/PholioMockEmbedView.php', + 'PholioMockFerretEngine' => 'applications/pholio/search/PholioMockFerretEngine.php', + 'PholioMockFulltextEngine' => 'applications/pholio/search/PholioMockFulltextEngine.php', + 'PholioMockHasTaskEdgeType' => 'applications/pholio/edge/PholioMockHasTaskEdgeType.php', + 'PholioMockHasTaskRelationship' => 'applications/pholio/relationships/PholioMockHasTaskRelationship.php', + 'PholioMockHeraldField' => 'applications/pholio/herald/PholioMockHeraldField.php', + 'PholioMockHeraldFieldGroup' => 'applications/pholio/herald/PholioMockHeraldFieldGroup.php', + 'PholioMockImagesView' => 'applications/pholio/view/PholioMockImagesView.php', + 'PholioMockInlineTransaction' => 'applications/pholio/xaction/PholioMockInlineTransaction.php', + 'PholioMockListController' => 'applications/pholio/controller/PholioMockListController.php', + 'PholioMockMailReceiver' => 'applications/pholio/mail/PholioMockMailReceiver.php', + 'PholioMockNameHeraldField' => 'applications/pholio/herald/PholioMockNameHeraldField.php', + 'PholioMockNameTransaction' => 'applications/pholio/xaction/PholioMockNameTransaction.php', + 'PholioMockPHIDType' => 'applications/pholio/phid/PholioMockPHIDType.php', + 'PholioMockQuery' => 'applications/pholio/query/PholioMockQuery.php', + 'PholioMockRelationship' => 'applications/pholio/relationships/PholioMockRelationship.php', + 'PholioMockRelationshipSource' => 'applications/search/relationship/PholioMockRelationshipSource.php', + 'PholioMockSearchEngine' => 'applications/pholio/query/PholioMockSearchEngine.php', + 'PholioMockStatusTransaction' => 'applications/pholio/xaction/PholioMockStatusTransaction.php', + 'PholioMockThumbGridView' => 'applications/pholio/view/PholioMockThumbGridView.php', + 'PholioMockTimelineEngine' => 'applications/pholio/engine/PholioMockTimelineEngine.php', + 'PholioMockTransactionType' => 'applications/pholio/xaction/PholioMockTransactionType.php', + 'PholioMockViewController' => 'applications/pholio/controller/PholioMockViewController.php', + 'PholioRemarkupRule' => 'applications/pholio/remarkup/PholioRemarkupRule.php', + 'PholioReplyHandler' => 'applications/pholio/mail/PholioReplyHandler.php', + 'PholioSchemaSpec' => 'applications/pholio/storage/PholioSchemaSpec.php', + 'PholioTransaction' => 'applications/pholio/storage/PholioTransaction.php', + 'PholioTransactionComment' => 'applications/pholio/storage/PholioTransactionComment.php', + 'PholioTransactionQuery' => 'applications/pholio/query/PholioTransactionQuery.php', + 'PholioTransactionType' => 'applications/pholio/xaction/PholioTransactionType.php', + 'PholioTransactionView' => 'applications/pholio/view/PholioTransactionView.php', + 'PholioUploadedImageView' => 'applications/pholio/view/PholioUploadedImageView.php', + 'PhortuneAccount' => 'applications/phortune/storage/PhortuneAccount.php', + 'PhortuneAccountAddManagerController' => 'applications/phortune/controller/account/PhortuneAccountAddManagerController.php', + 'PhortuneAccountBillingAddressTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingAddressTransaction.php', + 'PhortuneAccountBillingNameTransaction' => 'applications/phortune/xaction/PhortuneAccountBillingNameTransaction.php', + 'PhortuneAccountChargeListController' => 'applications/phortune/controller/account/PhortuneAccountChargeListController.php', + 'PhortuneAccountChargesController' => 'applications/phortune/controller/account/PhortuneAccountChargesController.php', + 'PhortuneAccountController' => 'applications/phortune/controller/account/PhortuneAccountController.php', + 'PhortuneAccountDetailsController' => 'applications/phortune/controller/account/PhortuneAccountDetailsController.php', + 'PhortuneAccountEditController' => 'applications/phortune/controller/account/PhortuneAccountEditController.php', + 'PhortuneAccountEditEngine' => 'applications/phortune/editor/PhortuneAccountEditEngine.php', + 'PhortuneAccountEditor' => 'applications/phortune/editor/PhortuneAccountEditor.php', + 'PhortuneAccountEmail' => 'applications/phortune/storage/PhortuneAccountEmail.php', + 'PhortuneAccountEmailAddressTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailAddressTransaction.php', + 'PhortuneAccountEmailAddressesController' => 'applications/phortune/controller/account/PhortuneAccountEmailAddressesController.php', + 'PhortuneAccountEmailEditController' => 'applications/phortune/controller/account/PhortuneAccountEmailEditController.php', + 'PhortuneAccountEmailEditEngine' => 'applications/phortune/editor/PhortuneAccountEmailEditEngine.php', + 'PhortuneAccountEmailEditor' => 'applications/phortune/editor/PhortuneAccountEmailEditor.php', + 'PhortuneAccountEmailPHIDType' => 'applications/phortune/phid/PhortuneAccountEmailPHIDType.php', + 'PhortuneAccountEmailQuery' => 'applications/phortune/query/PhortuneAccountEmailQuery.php', + 'PhortuneAccountEmailRotateController' => 'applications/phortune/controller/account/PhortuneAccountEmailRotateController.php', + 'PhortuneAccountEmailRotateTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailRotateTransaction.php', + 'PhortuneAccountEmailStatus' => 'applications/phortune/constants/PhortuneAccountEmailStatus.php', + 'PhortuneAccountEmailStatusController' => 'applications/phortune/controller/account/PhortuneAccountEmailStatusController.php', + 'PhortuneAccountEmailStatusTransaction' => 'applications/phortune/xaction/PhortuneAccountEmailStatusTransaction.php', + 'PhortuneAccountEmailTransaction' => 'applications/phortune/storage/PhortuneAccountEmailTransaction.php', + 'PhortuneAccountEmailTransactionQuery' => 'applications/phortune/query/PhortuneAccountEmailTransactionQuery.php', + 'PhortuneAccountEmailTransactionType' => 'applications/phortune/xaction/PhortuneAccountEmailTransactionType.php', + 'PhortuneAccountEmailViewController' => 'applications/phortune/controller/account/PhortuneAccountEmailViewController.php', + 'PhortuneAccountHasMemberEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMemberEdgeType.php', + 'PhortuneAccountHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneAccountHasMerchantEdgeType.php', + 'PhortuneAccountListController' => 'applications/phortune/controller/account/PhortuneAccountListController.php', + 'PhortuneAccountManagersController' => 'applications/phortune/controller/account/PhortuneAccountManagersController.php', + 'PhortuneAccountNameTransaction' => 'applications/phortune/xaction/PhortuneAccountNameTransaction.php', + 'PhortuneAccountOrderListController' => 'applications/phortune/controller/account/PhortuneAccountOrderListController.php', + 'PhortuneAccountOrdersController' => 'applications/phortune/controller/account/PhortuneAccountOrdersController.php', + 'PhortuneAccountOverviewController' => 'applications/phortune/controller/account/PhortuneAccountOverviewController.php', + 'PhortuneAccountPHIDType' => 'applications/phortune/phid/PhortuneAccountPHIDType.php', + 'PhortuneAccountPaymentMethodController' => 'applications/phortune/controller/account/PhortuneAccountPaymentMethodController.php', + 'PhortuneAccountPaymentMethodViewController' => 'applications/phortune/controller/account/PhortuneAccountPaymentMethodViewController.php', + 'PhortuneAccountProfileController' => 'applications/phortune/controller/account/PhortuneAccountProfileController.php', + 'PhortuneAccountQuery' => 'applications/phortune/query/PhortuneAccountQuery.php', + 'PhortuneAccountSubscriptionAutopayController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionAutopayController.php', + 'PhortuneAccountSubscriptionController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionController.php', + 'PhortuneAccountSubscriptionViewController' => 'applications/phortune/controller/account/PhortuneAccountSubscriptionViewController.php', + 'PhortuneAccountTransaction' => 'applications/phortune/storage/PhortuneAccountTransaction.php', + 'PhortuneAccountTransactionQuery' => 'applications/phortune/query/PhortuneAccountTransactionQuery.php', + 'PhortuneAccountTransactionType' => 'applications/phortune/xaction/PhortuneAccountTransactionType.php', + 'PhortuneAdHocCart' => 'applications/phortune/cart/PhortuneAdHocCart.php', + 'PhortuneAdHocProduct' => 'applications/phortune/product/PhortuneAdHocProduct.php', + 'PhortuneAddPaymentMethodAction' => 'applications/phortune/action/PhortuneAddPaymentMethodAction.php', + 'PhortuneCart' => 'applications/phortune/storage/PhortuneCart.php', + 'PhortuneCartAcceptController' => 'applications/phortune/controller/cart/PhortuneCartAcceptController.php', + 'PhortuneCartCancelController' => 'applications/phortune/controller/cart/PhortuneCartCancelController.php', + 'PhortuneCartCheckoutController' => 'applications/phortune/controller/cart/PhortuneCartCheckoutController.php', + 'PhortuneCartController' => 'applications/phortune/controller/cart/PhortuneCartController.php', + 'PhortuneCartEditor' => 'applications/phortune/editor/PhortuneCartEditor.php', + 'PhortuneCartImplementation' => 'applications/phortune/cart/PhortuneCartImplementation.php', + 'PhortuneCartPHIDType' => 'applications/phortune/phid/PhortuneCartPHIDType.php', + 'PhortuneCartQuery' => 'applications/phortune/query/PhortuneCartQuery.php', + 'PhortuneCartReplyHandler' => 'applications/phortune/mail/PhortuneCartReplyHandler.php', + 'PhortuneCartSearchEngine' => 'applications/phortune/query/PhortuneCartSearchEngine.php', + 'PhortuneCartTransaction' => 'applications/phortune/storage/PhortuneCartTransaction.php', + 'PhortuneCartTransactionQuery' => 'applications/phortune/query/PhortuneCartTransactionQuery.php', + 'PhortuneCartUpdateController' => 'applications/phortune/controller/cart/PhortuneCartUpdateController.php', + 'PhortuneCartViewController' => 'applications/phortune/controller/cart/PhortuneCartViewController.php', + 'PhortuneCartVoidController' => 'applications/phortune/controller/cart/PhortuneCartVoidController.php', + 'PhortuneCharge' => 'applications/phortune/storage/PhortuneCharge.php', + 'PhortuneChargePHIDType' => 'applications/phortune/phid/PhortuneChargePHIDType.php', + 'PhortuneChargeQuery' => 'applications/phortune/query/PhortuneChargeQuery.php', + 'PhortuneChargeSearchEngine' => 'applications/phortune/query/PhortuneChargeSearchEngine.php', + 'PhortuneChargeTableView' => 'applications/phortune/view/PhortuneChargeTableView.php', + 'PhortuneConstants' => 'applications/phortune/constants/PhortuneConstants.php', + 'PhortuneController' => 'applications/phortune/controller/PhortuneController.php', + 'PhortuneCreditCardForm' => 'applications/phortune/view/PhortuneCreditCardForm.php', + 'PhortuneCurrency' => 'applications/phortune/currency/PhortuneCurrency.php', + 'PhortuneCurrencySerializer' => 'applications/phortune/currency/PhortuneCurrencySerializer.php', + 'PhortuneCurrencyTestCase' => 'applications/phortune/currency/__tests__/PhortuneCurrencyTestCase.php', + 'PhortuneDAO' => 'applications/phortune/storage/PhortuneDAO.php', + 'PhortuneDisplayException' => 'applications/phortune/exception/PhortuneDisplayException.php', + 'PhortuneErrCode' => 'applications/phortune/constants/PhortuneErrCode.php', + 'PhortuneExternalController' => 'applications/phortune/controller/external/PhortuneExternalController.php', + 'PhortuneExternalOrderController' => 'applications/phortune/controller/external/PhortuneExternalOrderController.php', + 'PhortuneExternalOverviewController' => 'applications/phortune/controller/external/PhortuneExternalOverviewController.php', + 'PhortuneExternalUnsubscribeController' => 'applications/phortune/controller/external/PhortuneExternalUnsubscribeController.php', + 'PhortuneLandingController' => 'applications/phortune/controller/PhortuneLandingController.php', + 'PhortuneMemberHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMemberHasAccountEdgeType.php', + 'PhortuneMemberHasMerchantEdgeType' => 'applications/phortune/edge/PhortuneMemberHasMerchantEdgeType.php', + 'PhortuneMerchant' => 'applications/phortune/storage/PhortuneMerchant.php', + 'PhortuneMerchantAddManagerController' => 'applications/phortune/controller/merchant/PhortuneMerchantAddManagerController.php', + 'PhortuneMerchantCapability' => 'applications/phortune/capability/PhortuneMerchantCapability.php', + 'PhortuneMerchantContactInfoTransaction' => 'applications/phortune/xaction/PhortuneMerchantContactInfoTransaction.php', + 'PhortuneMerchantController' => 'applications/phortune/controller/merchant/PhortuneMerchantController.php', + 'PhortuneMerchantDescriptionTransaction' => 'applications/phortune/xaction/PhortuneMerchantDescriptionTransaction.php', + 'PhortuneMerchantDetailsController' => 'applications/phortune/controller/merchant/PhortuneMerchantDetailsController.php', + 'PhortuneMerchantEditController' => 'applications/phortune/controller/merchant/PhortuneMerchantEditController.php', + 'PhortuneMerchantEditEngine' => 'applications/phortune/editor/PhortuneMerchantEditEngine.php', + 'PhortuneMerchantEditor' => 'applications/phortune/editor/PhortuneMerchantEditor.php', + 'PhortuneMerchantHasAccountEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasAccountEdgeType.php', + 'PhortuneMerchantHasMemberEdgeType' => 'applications/phortune/edge/PhortuneMerchantHasMemberEdgeType.php', + 'PhortuneMerchantInvoiceCreateController' => 'applications/phortune/controller/merchant/PhortuneMerchantInvoiceCreateController.php', + 'PhortuneMerchantInvoiceEmailTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceEmailTransaction.php', + 'PhortuneMerchantInvoiceFooterTransaction' => 'applications/phortune/xaction/PhortuneMerchantInvoiceFooterTransaction.php', + 'PhortuneMerchantListController' => 'applications/phortune/controller/merchant/PhortuneMerchantListController.php', + 'PhortuneMerchantManagersController' => 'applications/phortune/controller/merchant/PhortuneMerchantManagersController.php', + 'PhortuneMerchantNameTransaction' => 'applications/phortune/xaction/PhortuneMerchantNameTransaction.php', + 'PhortuneMerchantOrderListController' => 'applications/phortune/controller/merchant/PhortuneMerchantOrderListController.php', + 'PhortuneMerchantOrdersController' => 'applications/phortune/controller/merchant/PhortuneMerchantOrdersController.php', + 'PhortuneMerchantOverviewController' => 'applications/phortune/controller/merchant/PhortuneMerchantOverviewController.php', + 'PhortuneMerchantPHIDType' => 'applications/phortune/phid/PhortuneMerchantPHIDType.php', + 'PhortuneMerchantPictureController' => 'applications/phortune/controller/merchant/PhortuneMerchantPictureController.php', + 'PhortuneMerchantPictureTransaction' => 'applications/phortune/xaction/PhortuneMerchantPictureTransaction.php', + 'PhortuneMerchantProfileController' => 'applications/phortune/controller/merchant/PhortuneMerchantProfileController.php', + 'PhortuneMerchantProviderDisableController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderDisableController.php', + 'PhortuneMerchantProviderEditController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderEditController.php', + 'PhortuneMerchantProviderViewController' => 'applications/phortune/controller/merchant/PhortuneMerchantProviderViewController.php', + 'PhortuneMerchantProvidersController' => 'applications/phortune/controller/merchant/PhortuneMerchantProvidersController.php', + 'PhortuneMerchantQuery' => 'applications/phortune/query/PhortuneMerchantQuery.php', + 'PhortuneMerchantSearchEngine' => 'applications/phortune/query/PhortuneMerchantSearchEngine.php', + 'PhortuneMerchantSubscriptionListController' => 'applications/phortune/controller/merchant/PhortuneMerchantSubscriptionListController.php', + 'PhortuneMerchantSubscriptionsController' => 'applications/phortune/controller/merchant/PhortuneMerchantSubscriptionsController.php', + 'PhortuneMerchantTransaction' => 'applications/phortune/storage/PhortuneMerchantTransaction.php', + 'PhortuneMerchantTransactionQuery' => 'applications/phortune/query/PhortuneMerchantTransactionQuery.php', + 'PhortuneMerchantTransactionType' => 'applications/phortune/xaction/PhortuneMerchantTransactionType.php', 'PhortuneMonthYearExpiryControl' => 'applications/phortune/control/PhortuneMonthYearExpiryControl.php', - 'PhortuneStripeBaseController' => 'applications/phortune/stripe/controller/PhortuneStripeBaseController.php', - 'PhortuneStripePaymentFormView' => 'applications/phortune/stripe/view/PhortuneStripePaymentFormView.php', - 'PhortuneStripeTestPaymentFormController' => 'applications/phortune/stripe/controller/PhortuneStripeTestPaymentFormController.php', - 'PhrictionActionConstants' => 'applications/phriction/constants/PhrictionActionConstants.php', + 'PhortuneOrderDescriptionView' => 'applications/phortune/view/PhortuneOrderDescriptionView.php', + 'PhortuneOrderItemsView' => 'applications/phortune/view/PhortuneOrderItemsView.php', + 'PhortuneOrderSummaryView' => 'applications/phortune/view/PhortuneOrderSummaryView.php', + 'PhortuneOrderTableView' => 'applications/phortune/view/PhortuneOrderTableView.php', + 'PhortuneOrderView' => 'applications/phortune/view/PhortuneOrderView.php', + 'PhortunePayPalPaymentProvider' => 'applications/phortune/provider/PhortunePayPalPaymentProvider.php', + 'PhortunePaymentMethod' => 'applications/phortune/storage/PhortunePaymentMethod.php', + 'PhortunePaymentMethodCreateController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodCreateController.php', + 'PhortunePaymentMethodDisableController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodDisableController.php', + 'PhortunePaymentMethodEditController' => 'applications/phortune/controller/paymentmethod/PhortunePaymentMethodEditController.php', + 'PhortunePaymentMethodEditor' => 'applications/phortune/editor/PhortunePaymentMethodEditor.php', + 'PhortunePaymentMethodNameTransaction' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodNameTransaction.php', + 'PhortunePaymentMethodPHIDType' => 'applications/phortune/phid/PhortunePaymentMethodPHIDType.php', + 'PhortunePaymentMethodPolicyCodex' => 'applications/phortune/codex/PhortunePaymentMethodPolicyCodex.php', + 'PhortunePaymentMethodQuery' => 'applications/phortune/query/PhortunePaymentMethodQuery.php', + 'PhortunePaymentMethodStatusTransaction' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodStatusTransaction.php', + 'PhortunePaymentMethodTransaction' => 'applications/phortune/storage/PhortunePaymentMethodTransaction.php', + 'PhortunePaymentMethodTransactionQuery' => 'applications/phortune/query/PhortunePaymentMethodTransactionQuery.php', + 'PhortunePaymentMethodTransactionType' => 'applications/phortune/xaction/paymentmethod/PhortunePaymentMethodTransactionType.php', + 'PhortunePaymentProvider' => 'applications/phortune/provider/PhortunePaymentProvider.php', + 'PhortunePaymentProviderConfig' => 'applications/phortune/storage/PhortunePaymentProviderConfig.php', + 'PhortunePaymentProviderConfigEditor' => 'applications/phortune/editor/PhortunePaymentProviderConfigEditor.php', + 'PhortunePaymentProviderConfigQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigQuery.php', + 'PhortunePaymentProviderConfigTransaction' => 'applications/phortune/storage/PhortunePaymentProviderConfigTransaction.php', + 'PhortunePaymentProviderConfigTransactionQuery' => 'applications/phortune/query/PhortunePaymentProviderConfigTransactionQuery.php', + 'PhortunePaymentProviderPHIDType' => 'applications/phortune/phid/PhortunePaymentProviderPHIDType.php', + 'PhortunePaymentProviderTestCase' => 'applications/phortune/provider/__tests__/PhortunePaymentProviderTestCase.php', + 'PhortuneProduct' => 'applications/phortune/storage/PhortuneProduct.php', + 'PhortuneProductImplementation' => 'applications/phortune/product/PhortuneProductImplementation.php', + 'PhortuneProductListController' => 'applications/phortune/controller/product/PhortuneProductListController.php', + 'PhortuneProductPHIDType' => 'applications/phortune/phid/PhortuneProductPHIDType.php', + 'PhortuneProductQuery' => 'applications/phortune/query/PhortuneProductQuery.php', + 'PhortuneProductViewController' => 'applications/phortune/controller/product/PhortuneProductViewController.php', + 'PhortuneProviderActionController' => 'applications/phortune/controller/provider/PhortuneProviderActionController.php', + 'PhortunePurchase' => 'applications/phortune/storage/PhortunePurchase.php', + 'PhortunePurchasePHIDType' => 'applications/phortune/phid/PhortunePurchasePHIDType.php', + 'PhortunePurchaseQuery' => 'applications/phortune/query/PhortunePurchaseQuery.php', + 'PhortuneSchemaSpec' => 'applications/phortune/storage/PhortuneSchemaSpec.php', + 'PhortuneStripePaymentProvider' => 'applications/phortune/provider/PhortuneStripePaymentProvider.php', + 'PhortuneSubscription' => 'applications/phortune/storage/PhortuneSubscription.php', + 'PhortuneSubscriptionAutopayTransaction' => 'applications/phortune/xaction/subscription/PhortuneSubscriptionAutopayTransaction.php', + 'PhortuneSubscriptionCart' => 'applications/phortune/cart/PhortuneSubscriptionCart.php', + 'PhortuneSubscriptionEditor' => 'applications/phortune/editor/PhortuneSubscriptionEditor.php', + 'PhortuneSubscriptionImplementation' => 'applications/phortune/subscription/PhortuneSubscriptionImplementation.php', + 'PhortuneSubscriptionPHIDType' => 'applications/phortune/phid/PhortuneSubscriptionPHIDType.php', + 'PhortuneSubscriptionPolicyCodex' => 'applications/phortune/codex/PhortuneSubscriptionPolicyCodex.php', + 'PhortuneSubscriptionProduct' => 'applications/phortune/product/PhortuneSubscriptionProduct.php', + 'PhortuneSubscriptionQuery' => 'applications/phortune/query/PhortuneSubscriptionQuery.php', + 'PhortuneSubscriptionSearchEngine' => 'applications/phortune/query/PhortuneSubscriptionSearchEngine.php', + 'PhortuneSubscriptionTableView' => 'applications/phortune/view/PhortuneSubscriptionTableView.php', + 'PhortuneSubscriptionTransaction' => 'applications/phortune/storage/PhortuneSubscriptionTransaction.php', + 'PhortuneSubscriptionTransactionQuery' => 'applications/phortune/query/PhortuneSubscriptionTransactionQuery.php', + 'PhortuneSubscriptionTransactionType' => 'applications/phortune/xaction/subscription/PhortuneSubscriptionTransactionType.php', + 'PhortuneSubscriptionWorker' => 'applications/phortune/worker/PhortuneSubscriptionWorker.php', + 'PhortuneTestPaymentProvider' => 'applications/phortune/provider/PhortuneTestPaymentProvider.php', + 'PhrequentConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentConduitAPIMethod.php', + 'PhrequentController' => 'applications/phrequent/controller/PhrequentController.php', + 'PhrequentCurtainExtension' => 'applications/phrequent/engineextension/PhrequentCurtainExtension.php', + 'PhrequentDAO' => 'applications/phrequent/storage/PhrequentDAO.php', + 'PhrequentListController' => 'applications/phrequent/controller/PhrequentListController.php', + 'PhrequentPopConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPopConduitAPIMethod.php', + 'PhrequentPushConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentPushConduitAPIMethod.php', + 'PhrequentSearchEngine' => 'applications/phrequent/query/PhrequentSearchEngine.php', + 'PhrequentTimeBlock' => 'applications/phrequent/storage/PhrequentTimeBlock.php', + 'PhrequentTimeBlockTestCase' => 'applications/phrequent/storage/__tests__/PhrequentTimeBlockTestCase.php', + 'PhrequentTimeSlices' => 'applications/phrequent/storage/PhrequentTimeSlices.php', + 'PhrequentTrackController' => 'applications/phrequent/controller/PhrequentTrackController.php', + 'PhrequentTrackableInterface' => 'applications/phrequent/interface/PhrequentTrackableInterface.php', + 'PhrequentTrackingConduitAPIMethod' => 'applications/phrequent/conduit/PhrequentTrackingConduitAPIMethod.php', + 'PhrequentTrackingEditor' => 'applications/phrequent/editor/PhrequentTrackingEditor.php', + 'PhrequentUIEventListener' => 'applications/phrequent/event/PhrequentUIEventListener.php', + 'PhrequentUserTime' => 'applications/phrequent/storage/PhrequentUserTime.php', + 'PhrequentUserTimeQuery' => 'applications/phrequent/query/PhrequentUserTimeQuery.php', 'PhrictionChangeType' => 'applications/phriction/constants/PhrictionChangeType.php', + 'PhrictionConduitAPIMethod' => 'applications/phriction/conduit/PhrictionConduitAPIMethod.php', 'PhrictionConstants' => 'applications/phriction/constants/PhrictionConstants.php', 'PhrictionContent' => 'applications/phriction/storage/PhrictionContent.php', + 'PhrictionContentPHIDType' => 'applications/phriction/phid/PhrictionContentPHIDType.php', + 'PhrictionContentQuery' => 'applications/phriction/query/PhrictionContentQuery.php', + 'PhrictionContentSearchConduitAPIMethod' => 'applications/phriction/conduit/PhrictionContentSearchConduitAPIMethod.php', + 'PhrictionContentSearchEngine' => 'applications/phriction/query/PhrictionContentSearchEngine.php', + 'PhrictionContentSearchEngineAttachment' => 'applications/phriction/engineextension/PhrictionContentSearchEngineAttachment.php', 'PhrictionController' => 'applications/phriction/controller/PhrictionController.php', + 'PhrictionCreateConduitAPIMethod' => 'applications/phriction/conduit/PhrictionCreateConduitAPIMethod.php', 'PhrictionDAO' => 'applications/phriction/storage/PhrictionDAO.php', + 'PhrictionDatasourceEngineExtension' => 'applications/phriction/engineextension/PhrictionDatasourceEngineExtension.php', 'PhrictionDeleteController' => 'applications/phriction/controller/PhrictionDeleteController.php', 'PhrictionDiffController' => 'applications/phriction/controller/PhrictionDiffController.php', 'PhrictionDocument' => 'applications/phriction/storage/PhrictionDocument.php', + 'PhrictionDocumentAuthorHeraldField' => 'applications/phriction/herald/PhrictionDocumentAuthorHeraldField.php', + 'PhrictionDocumentContentHeraldField' => 'applications/phriction/herald/PhrictionDocumentContentHeraldField.php', + 'PhrictionDocumentContentTransaction' => 'applications/phriction/xaction/PhrictionDocumentContentTransaction.php', 'PhrictionDocumentController' => 'applications/phriction/controller/PhrictionDocumentController.php', - 'PhrictionDocumentEditor' => 'applications/phriction/editor/PhrictionDocumentEditor.php', - 'PhrictionDocumentPreviewController' => 'applications/phriction/controller/PhrictionDocumentPreviewController.php', + 'PhrictionDocumentDatasource' => 'applications/phriction/typeahead/PhrictionDocumentDatasource.php', + 'PhrictionDocumentDeleteTransaction' => 'applications/phriction/xaction/PhrictionDocumentDeleteTransaction.php', + 'PhrictionDocumentDraftTransaction' => 'applications/phriction/xaction/PhrictionDocumentDraftTransaction.php', + 'PhrictionDocumentEditEngine' => 'applications/phriction/editor/PhrictionDocumentEditEngine.php', + 'PhrictionDocumentEditTransaction' => 'applications/phriction/xaction/PhrictionDocumentEditTransaction.php', + 'PhrictionDocumentFerretEngine' => 'applications/phriction/search/PhrictionDocumentFerretEngine.php', + 'PhrictionDocumentFulltextEngine' => 'applications/phriction/search/PhrictionDocumentFulltextEngine.php', + 'PhrictionDocumentHeraldAdapter' => 'applications/phriction/herald/PhrictionDocumentHeraldAdapter.php', + 'PhrictionDocumentHeraldField' => 'applications/phriction/herald/PhrictionDocumentHeraldField.php', + 'PhrictionDocumentHeraldFieldGroup' => 'applications/phriction/herald/PhrictionDocumentHeraldFieldGroup.php', + 'PhrictionDocumentMoveAwayTransaction' => 'applications/phriction/xaction/PhrictionDocumentMoveAwayTransaction.php', + 'PhrictionDocumentMoveToTransaction' => 'applications/phriction/xaction/PhrictionDocumentMoveToTransaction.php', + 'PhrictionDocumentPHIDType' => 'applications/phriction/phid/PhrictionDocumentPHIDType.php', + 'PhrictionDocumentPathHeraldField' => 'applications/phriction/herald/PhrictionDocumentPathHeraldField.php', + 'PhrictionDocumentPolicyCodex' => 'applications/phriction/codex/PhrictionDocumentPolicyCodex.php', + 'PhrictionDocumentPublishTransaction' => 'applications/phriction/xaction/PhrictionDocumentPublishTransaction.php', + 'PhrictionDocumentPublishedHeraldField' => 'applications/phriction/herald/PhrictionDocumentPublishedHeraldField.php', + 'PhrictionDocumentQuery' => 'applications/phriction/query/PhrictionDocumentQuery.php', + 'PhrictionDocumentSearchConduitAPIMethod' => 'applications/phriction/conduit/PhrictionDocumentSearchConduitAPIMethod.php', + 'PhrictionDocumentSearchEngine' => 'applications/phriction/query/PhrictionDocumentSearchEngine.php', 'PhrictionDocumentStatus' => 'applications/phriction/constants/PhrictionDocumentStatus.php', - 'PhrictionDocumentTestCase' => 'applications/phriction/storage/__tests__/PhrictionDocumentTestCase.php', + 'PhrictionDocumentTitleHeraldField' => 'applications/phriction/herald/PhrictionDocumentTitleHeraldField.php', + 'PhrictionDocumentTitleTransaction' => 'applications/phriction/xaction/PhrictionDocumentTitleTransaction.php', + 'PhrictionDocumentTransactionType' => 'applications/phriction/xaction/PhrictionDocumentTransactionType.php', + 'PhrictionDocumentVersionTransaction' => 'applications/phriction/xaction/PhrictionDocumentVersionTransaction.php', + 'PhrictionEditConduitAPIMethod' => 'applications/phriction/conduit/PhrictionEditConduitAPIMethod.php', 'PhrictionEditController' => 'applications/phriction/controller/PhrictionEditController.php', + 'PhrictionEditEngineController' => 'applications/phriction/controller/PhrictionEditEngineController.php', + 'PhrictionHistoryConduitAPIMethod' => 'applications/phriction/conduit/PhrictionHistoryConduitAPIMethod.php', 'PhrictionHistoryController' => 'applications/phriction/controller/PhrictionHistoryController.php', + 'PhrictionInfoConduitAPIMethod' => 'applications/phriction/conduit/PhrictionInfoConduitAPIMethod.php', 'PhrictionListController' => 'applications/phriction/controller/PhrictionListController.php', - 'QueryFormattingTestCase' => 'storage/__tests__/QueryFormattingTestCase.php', + 'PhrictionMarkupPreviewController' => 'applications/phriction/controller/PhrictionMarkupPreviewController.php', + 'PhrictionMoveController' => 'applications/phriction/controller/PhrictionMoveController.php', + 'PhrictionNewController' => 'applications/phriction/controller/PhrictionNewController.php', + 'PhrictionPublishController' => 'applications/phriction/controller/PhrictionPublishController.php', + 'PhrictionRemarkupRule' => 'applications/phriction/markup/PhrictionRemarkupRule.php', + 'PhrictionReplyHandler' => 'applications/phriction/mail/PhrictionReplyHandler.php', + 'PhrictionSchemaSpec' => 'applications/phriction/storage/PhrictionSchemaSpec.php', + 'PhrictionTransaction' => 'applications/phriction/storage/PhrictionTransaction.php', + 'PhrictionTransactionComment' => 'applications/phriction/storage/PhrictionTransactionComment.php', + 'PhrictionTransactionEditor' => 'applications/phriction/editor/PhrictionTransactionEditor.php', + 'PhrictionTransactionQuery' => 'applications/phriction/query/PhrictionTransactionQuery.php', + 'PhutilAPCKeyValueCache' => 'infrastructure/cache/PhutilAPCKeyValueCache.php', + 'PhutilAmazonAuthAdapter' => 'applications/auth/adapter/PhutilAmazonAuthAdapter.php', + 'PhutilAsanaAuthAdapter' => 'applications/auth/adapter/PhutilAsanaAuthAdapter.php', + 'PhutilAuthAdapter' => 'applications/auth/adapter/PhutilAuthAdapter.php', + 'PhutilAuthConfigurationException' => 'applications/auth/exception/PhutilAuthConfigurationException.php', + 'PhutilAuthCredentialException' => 'applications/auth/exception/PhutilAuthCredentialException.php', + 'PhutilAuthException' => 'applications/auth/exception/PhutilAuthException.php', + 'PhutilAuthUserAbortedException' => 'applications/auth/exception/PhutilAuthUserAbortedException.php', + 'PhutilBitbucketAuthAdapter' => 'applications/auth/adapter/PhutilBitbucketAuthAdapter.php', + 'PhutilCLikeCodeSnippetContextFreeGrammar' => 'infrastructure/lipsum/code/PhutilCLikeCodeSnippetContextFreeGrammar.php', + 'PhutilCalendarAbsoluteDateTime' => 'applications/calendar/parser/data/PhutilCalendarAbsoluteDateTime.php', + 'PhutilCalendarContainerNode' => 'applications/calendar/parser/data/PhutilCalendarContainerNode.php', + 'PhutilCalendarDateTime' => 'applications/calendar/parser/data/PhutilCalendarDateTime.php', + 'PhutilCalendarDateTimeTestCase' => 'applications/calendar/parser/data/__tests__/PhutilCalendarDateTimeTestCase.php', + 'PhutilCalendarDocumentNode' => 'applications/calendar/parser/data/PhutilCalendarDocumentNode.php', + 'PhutilCalendarDuration' => 'applications/calendar/parser/data/PhutilCalendarDuration.php', + 'PhutilCalendarEventNode' => 'applications/calendar/parser/data/PhutilCalendarEventNode.php', + 'PhutilCalendarNode' => 'applications/calendar/parser/data/PhutilCalendarNode.php', + 'PhutilCalendarProxyDateTime' => 'applications/calendar/parser/data/PhutilCalendarProxyDateTime.php', + 'PhutilCalendarRawNode' => 'applications/calendar/parser/data/PhutilCalendarRawNode.php', + 'PhutilCalendarRecurrenceList' => 'applications/calendar/parser/data/PhutilCalendarRecurrenceList.php', + 'PhutilCalendarRecurrenceRule' => 'applications/calendar/parser/data/PhutilCalendarRecurrenceRule.php', + 'PhutilCalendarRecurrenceRuleTestCase' => 'applications/calendar/parser/data/__tests__/PhutilCalendarRecurrenceRuleTestCase.php', + 'PhutilCalendarRecurrenceSet' => 'applications/calendar/parser/data/PhutilCalendarRecurrenceSet.php', + 'PhutilCalendarRecurrenceSource' => 'applications/calendar/parser/data/PhutilCalendarRecurrenceSource.php', + 'PhutilCalendarRecurrenceTestCase' => 'applications/calendar/parser/data/__tests__/PhutilCalendarRecurrenceTestCase.php', + 'PhutilCalendarRelativeDateTime' => 'applications/calendar/parser/data/PhutilCalendarRelativeDateTime.php', + 'PhutilCalendarRootNode' => 'applications/calendar/parser/data/PhutilCalendarRootNode.php', + 'PhutilCalendarUserNode' => 'applications/calendar/parser/data/PhutilCalendarUserNode.php', + 'PhutilCodeSnippetContextFreeGrammar' => 'infrastructure/lipsum/code/PhutilCodeSnippetContextFreeGrammar.php', + 'PhutilConsoleSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilConsoleSyntaxHighlighter.php', + 'PhutilContextFreeGrammar' => 'infrastructure/lipsum/PhutilContextFreeGrammar.php', + 'PhutilDaemon' => 'infrastructure/daemon/PhutilDaemon.php', + 'PhutilDaemonHandle' => 'infrastructure/daemon/PhutilDaemonHandle.php', + 'PhutilDaemonOverseer' => 'infrastructure/daemon/PhutilDaemonOverseer.php', + 'PhutilDaemonOverseerModule' => 'infrastructure/daemon/PhutilDaemonOverseerModule.php', + 'PhutilDaemonPool' => 'infrastructure/daemon/PhutilDaemonPool.php', + 'PhutilDefaultSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilDefaultSyntaxHighlighter.php', + 'PhutilDefaultSyntaxHighlighterEngine' => 'infrastructure/markup/syntax/engine/PhutilDefaultSyntaxHighlighterEngine.php', + 'PhutilDefaultSyntaxHighlighterEnginePygmentsFuture' => 'infrastructure/markup/syntax/highlighter/pygments/PhutilDefaultSyntaxHighlighterEnginePygmentsFuture.php', + 'PhutilDefaultSyntaxHighlighterEngineTestCase' => 'infrastructure/markup/syntax/engine/__tests__/PhutilDefaultSyntaxHighlighterEngineTestCase.php', + 'PhutilDirectoryKeyValueCache' => 'infrastructure/cache/PhutilDirectoryKeyValueCache.php', + 'PhutilDisqusAuthAdapter' => 'applications/auth/adapter/PhutilDisqusAuthAdapter.php', + 'PhutilDivinerSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilDivinerSyntaxHighlighter.php', + 'PhutilEmptyAuthAdapter' => 'applications/auth/adapter/PhutilEmptyAuthAdapter.php', + 'PhutilFacebookAuthAdapter' => 'applications/auth/adapter/PhutilFacebookAuthAdapter.php', + 'PhutilGitHubAuthAdapter' => 'applications/auth/adapter/PhutilGitHubAuthAdapter.php', + 'PhutilGoogleAuthAdapter' => 'applications/auth/adapter/PhutilGoogleAuthAdapter.php', + 'PhutilICSParser' => 'applications/calendar/parser/ics/PhutilICSParser.php', + 'PhutilICSParserException' => 'applications/calendar/parser/ics/PhutilICSParserException.php', + 'PhutilICSParserTestCase' => 'applications/calendar/parser/ics/__tests__/PhutilICSParserTestCase.php', + 'PhutilICSWriter' => 'applications/calendar/parser/ics/PhutilICSWriter.php', + 'PhutilICSWriterTestCase' => 'applications/calendar/parser/ics/__tests__/PhutilICSWriterTestCase.php', + 'PhutilInRequestKeyValueCache' => 'infrastructure/cache/PhutilInRequestKeyValueCache.php', + 'PhutilInvisibleSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilInvisibleSyntaxHighlighter.php', + 'PhutilJIRAAuthAdapter' => 'applications/auth/adapter/PhutilJIRAAuthAdapter.php', + 'PhutilJSONFragmentLexerHighlighterTestCase' => 'infrastructure/markup/syntax/highlighter/__tests__/PhutilJSONFragmentLexerHighlighterTestCase.php', + 'PhutilJavaCodeSnippetContextFreeGrammar' => 'infrastructure/lipsum/code/PhutilJavaCodeSnippetContextFreeGrammar.php', + 'PhutilKeyValueCache' => 'infrastructure/cache/PhutilKeyValueCache.php', + 'PhutilKeyValueCacheNamespace' => 'infrastructure/cache/PhutilKeyValueCacheNamespace.php', + 'PhutilKeyValueCacheProfiler' => 'infrastructure/cache/PhutilKeyValueCacheProfiler.php', + 'PhutilKeyValueCacheProxy' => 'infrastructure/cache/PhutilKeyValueCacheProxy.php', + 'PhutilKeyValueCacheStack' => 'infrastructure/cache/PhutilKeyValueCacheStack.php', + 'PhutilKeyValueCacheTestCase' => 'infrastructure/cache/__tests__/PhutilKeyValueCacheTestCase.php', + 'PhutilLDAPAuthAdapter' => 'applications/auth/adapter/PhutilLDAPAuthAdapter.php', + 'PhutilLexerSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilLexerSyntaxHighlighter.php', + 'PhutilLipsumContextFreeGrammar' => 'infrastructure/lipsum/PhutilLipsumContextFreeGrammar.php', + 'PhutilMarkupEngine' => 'infrastructure/markup/PhutilMarkupEngine.php', + 'PhutilMarkupTestCase' => 'infrastructure/markup/__tests__/PhutilMarkupTestCase.php', + 'PhutilMemcacheKeyValueCache' => 'infrastructure/cache/PhutilMemcacheKeyValueCache.php', + 'PhutilOAuth1AuthAdapter' => 'applications/auth/adapter/PhutilOAuth1AuthAdapter.php', + 'PhutilOAuthAuthAdapter' => 'applications/auth/adapter/PhutilOAuthAuthAdapter.php', + 'PhutilOnDiskKeyValueCache' => 'infrastructure/cache/PhutilOnDiskKeyValueCache.php', + 'PhutilPHPCodeSnippetContextFreeGrammar' => 'infrastructure/lipsum/code/PhutilPHPCodeSnippetContextFreeGrammar.php', + 'PhutilPHPFragmentLexerHighlighterTestCase' => 'infrastructure/markup/syntax/highlighter/__tests__/PhutilPHPFragmentLexerHighlighterTestCase.php', + 'PhutilPhabricatorAuthAdapter' => 'applications/auth/adapter/PhutilPhabricatorAuthAdapter.php', + 'PhutilProseDiff' => 'infrastructure/diff/prose/PhutilProseDiff.php', + 'PhutilProseDiffTestCase' => 'infrastructure/diff/prose/__tests__/PhutilProseDiffTestCase.php', + 'PhutilProseDifferenceEngine' => 'infrastructure/diff/prose/PhutilProseDifferenceEngine.php', + 'PhutilPygmentizeParser' => 'infrastructure/parser/PhutilPygmentizeParser.php', + 'PhutilPygmentizeParserTestCase' => 'infrastructure/parser/__tests__/PhutilPygmentizeParserTestCase.php', + 'PhutilPygmentsSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilPygmentsSyntaxHighlighter.php', + 'PhutilQsprintfInterface' => 'infrastructure/storage/xsprintf/PhutilQsprintfInterface.php', + 'PhutilQueryString' => 'infrastructure/storage/xsprintf/PhutilQueryString.php', + 'PhutilRainbowSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilRainbowSyntaxHighlighter.php', + 'PhutilRealNameContextFreeGrammar' => 'infrastructure/lipsum/PhutilRealNameContextFreeGrammar.php', + 'PhutilRemarkupAnchorRule' => 'infrastructure/markup/markuprule/PhutilRemarkupAnchorRule.php', + 'PhutilRemarkupBlockInterpreter' => 'infrastructure/markup/blockrule/PhutilRemarkupBlockInterpreter.php', + 'PhutilRemarkupBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupBlockRule.php', + 'PhutilRemarkupBlockStorage' => 'infrastructure/markup/PhutilRemarkupBlockStorage.php', + 'PhutilRemarkupBoldRule' => 'infrastructure/markup/markuprule/PhutilRemarkupBoldRule.php', + 'PhutilRemarkupCodeBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupCodeBlockRule.php', + 'PhutilRemarkupDefaultBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupDefaultBlockRule.php', + 'PhutilRemarkupDelRule' => 'infrastructure/markup/markuprule/PhutilRemarkupDelRule.php', + 'PhutilRemarkupDocumentLinkRule' => 'infrastructure/markup/markuprule/PhutilRemarkupDocumentLinkRule.php', + 'PhutilRemarkupEngine' => 'infrastructure/markup/remarkup/PhutilRemarkupEngine.php', + 'PhutilRemarkupEngineTestCase' => 'infrastructure/markup/remarkup/__tests__/PhutilRemarkupEngineTestCase.php', + 'PhutilRemarkupEscapeRemarkupRule' => 'infrastructure/markup/markuprule/PhutilRemarkupEscapeRemarkupRule.php', + 'PhutilRemarkupEvalRule' => 'infrastructure/markup/markuprule/PhutilRemarkupEvalRule.php', + 'PhutilRemarkupHeaderBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupHeaderBlockRule.php', + 'PhutilRemarkupHighlightRule' => 'infrastructure/markup/markuprule/PhutilRemarkupHighlightRule.php', + 'PhutilRemarkupHorizontalRuleBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupHorizontalRuleBlockRule.php', + 'PhutilRemarkupHyperlinkEngineExtension' => 'infrastructure/markup/markuprule/PhutilRemarkupHyperlinkEngineExtension.php', + 'PhutilRemarkupHyperlinkRef' => 'infrastructure/markup/markuprule/PhutilRemarkupHyperlinkRef.php', + 'PhutilRemarkupHyperlinkRule' => 'infrastructure/markup/markuprule/PhutilRemarkupHyperlinkRule.php', + 'PhutilRemarkupInlineBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupInlineBlockRule.php', + 'PhutilRemarkupInterpreterBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupInterpreterBlockRule.php', + 'PhutilRemarkupItalicRule' => 'infrastructure/markup/markuprule/PhutilRemarkupItalicRule.php', + 'PhutilRemarkupLinebreaksRule' => 'infrastructure/markup/markuprule/PhutilRemarkupLinebreaksRule.php', + 'PhutilRemarkupListBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupListBlockRule.php', + 'PhutilRemarkupLiteralBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupLiteralBlockRule.php', + 'PhutilRemarkupMonospaceRule' => 'infrastructure/markup/markuprule/PhutilRemarkupMonospaceRule.php', + 'PhutilRemarkupNoteBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupNoteBlockRule.php', + 'PhutilRemarkupQuotedBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupQuotedBlockRule.php', + 'PhutilRemarkupQuotesBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupQuotesBlockRule.php', + 'PhutilRemarkupReplyBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupReplyBlockRule.php', + 'PhutilRemarkupRule' => 'infrastructure/markup/markuprule/PhutilRemarkupRule.php', + 'PhutilRemarkupSimpleTableBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupSimpleTableBlockRule.php', + 'PhutilRemarkupTableBlockRule' => 'infrastructure/markup/blockrule/PhutilRemarkupTableBlockRule.php', + 'PhutilRemarkupTestInterpreterRule' => 'infrastructure/markup/blockrule/PhutilRemarkupTestInterpreterRule.php', + 'PhutilRemarkupUnderlineRule' => 'infrastructure/markup/markuprule/PhutilRemarkupUnderlineRule.php', + 'PhutilSafeHTML' => 'infrastructure/markup/PhutilSafeHTML.php', + 'PhutilSafeHTMLProducerInterface' => 'infrastructure/markup/PhutilSafeHTMLProducerInterface.php', + 'PhutilSafeHTMLTestCase' => 'infrastructure/markup/__tests__/PhutilSafeHTMLTestCase.php', + 'PhutilSearchQueryCompiler' => 'applications/search/compiler/PhutilSearchQueryCompiler.php', + 'PhutilSearchQueryCompilerSyntaxException' => 'applications/search/compiler/PhutilSearchQueryCompilerSyntaxException.php', + 'PhutilSearchQueryCompilerTestCase' => 'applications/search/compiler/__tests__/PhutilSearchQueryCompilerTestCase.php', + 'PhutilSearchQueryToken' => 'applications/search/compiler/PhutilSearchQueryToken.php', + 'PhutilSearchStemmer' => 'applications/search/compiler/PhutilSearchStemmer.php', + 'PhutilSearchStemmerTestCase' => 'applications/search/compiler/__tests__/PhutilSearchStemmerTestCase.php', + 'PhutilSlackAuthAdapter' => 'applications/auth/adapter/PhutilSlackAuthAdapter.php', + 'PhutilSprite' => 'aphront/sprite/PhutilSprite.php', + 'PhutilSpriteSheet' => 'aphront/sprite/PhutilSpriteSheet.php', + 'PhutilSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilSyntaxHighlighter.php', + 'PhutilSyntaxHighlighterEngine' => 'infrastructure/markup/syntax/engine/PhutilSyntaxHighlighterEngine.php', + 'PhutilSyntaxHighlighterException' => 'infrastructure/markup/syntax/highlighter/PhutilSyntaxHighlighterException.php', + 'PhutilTranslatedHTMLTestCase' => 'infrastructure/markup/__tests__/PhutilTranslatedHTMLTestCase.php', + 'PhutilTwitchAuthAdapter' => 'applications/auth/adapter/PhutilTwitchAuthAdapter.php', + 'PhutilTwitterAuthAdapter' => 'applications/auth/adapter/PhutilTwitterAuthAdapter.php', + 'PhutilWordPressAuthAdapter' => 'applications/auth/adapter/PhutilWordPressAuthAdapter.php', + 'PhutilXHPASTSyntaxHighlighter' => 'infrastructure/markup/syntax/highlighter/PhutilXHPASTSyntaxHighlighter.php', + 'PhutilXHPASTSyntaxHighlighterFuture' => 'infrastructure/markup/syntax/highlighter/xhpast/PhutilXHPASTSyntaxHighlighterFuture.php', + 'PhutilXHPASTSyntaxHighlighterTestCase' => 'infrastructure/markup/syntax/highlighter/__tests__/PhutilXHPASTSyntaxHighlighterTestCase.php', + 'PolicyLockOptionType' => 'applications/policy/config/PolicyLockOptionType.php', + 'PonderAddAnswerView' => 'applications/ponder/view/PonderAddAnswerView.php', + 'PonderAnswer' => 'applications/ponder/storage/PonderAnswer.php', + 'PonderAnswerCommentController' => 'applications/ponder/controller/PonderAnswerCommentController.php', + 'PonderAnswerContentTransaction' => 'applications/ponder/xaction/PonderAnswerContentTransaction.php', + 'PonderAnswerEditController' => 'applications/ponder/controller/PonderAnswerEditController.php', + 'PonderAnswerEditor' => 'applications/ponder/editor/PonderAnswerEditor.php', + 'PonderAnswerHistoryController' => 'applications/ponder/controller/PonderAnswerHistoryController.php', + 'PonderAnswerMailReceiver' => 'applications/ponder/mail/PonderAnswerMailReceiver.php', + 'PonderAnswerPHIDType' => 'applications/ponder/phid/PonderAnswerPHIDType.php', + 'PonderAnswerQuery' => 'applications/ponder/query/PonderAnswerQuery.php', + 'PonderAnswerQuestionIDTransaction' => 'applications/ponder/xaction/PonderAnswerQuestionIDTransaction.php', + 'PonderAnswerReplyHandler' => 'applications/ponder/mail/PonderAnswerReplyHandler.php', + 'PonderAnswerSaveController' => 'applications/ponder/controller/PonderAnswerSaveController.php', + 'PonderAnswerStatus' => 'applications/ponder/constants/PonderAnswerStatus.php', + 'PonderAnswerStatusTransaction' => 'applications/ponder/xaction/PonderAnswerStatusTransaction.php', + 'PonderAnswerTransaction' => 'applications/ponder/storage/PonderAnswerTransaction.php', + 'PonderAnswerTransactionComment' => 'applications/ponder/storage/PonderAnswerTransactionComment.php', + 'PonderAnswerTransactionQuery' => 'applications/ponder/query/PonderAnswerTransactionQuery.php', + 'PonderAnswerTransactionType' => 'applications/ponder/xaction/PonderAnswerTransactionType.php', + 'PonderAnswerView' => 'applications/ponder/view/PonderAnswerView.php', + 'PonderConstants' => 'applications/ponder/constants/PonderConstants.php', + 'PonderController' => 'applications/ponder/controller/PonderController.php', + 'PonderDAO' => 'applications/ponder/storage/PonderDAO.php', + 'PonderDefaultViewCapability' => 'applications/ponder/capability/PonderDefaultViewCapability.php', + 'PonderEditor' => 'applications/ponder/editor/PonderEditor.php', + 'PonderFooterView' => 'applications/ponder/view/PonderFooterView.php', + 'PonderModerateCapability' => 'applications/ponder/capability/PonderModerateCapability.php', + 'PonderQuestion' => 'applications/ponder/storage/PonderQuestion.php', + 'PonderQuestionAnswerTransaction' => 'applications/ponder/xaction/PonderQuestionAnswerTransaction.php', + 'PonderQuestionAnswerWikiTransaction' => 'applications/ponder/xaction/PonderQuestionAnswerWikiTransaction.php', + 'PonderQuestionCommentController' => 'applications/ponder/controller/PonderQuestionCommentController.php', + 'PonderQuestionContentTransaction' => 'applications/ponder/xaction/PonderQuestionContentTransaction.php', + 'PonderQuestionCreateMailReceiver' => 'applications/ponder/mail/PonderQuestionCreateMailReceiver.php', + 'PonderQuestionEditController' => 'applications/ponder/controller/PonderQuestionEditController.php', + 'PonderQuestionEditEngine' => 'applications/ponder/editor/PonderQuestionEditEngine.php', + 'PonderQuestionEditor' => 'applications/ponder/editor/PonderQuestionEditor.php', + 'PonderQuestionFerretEngine' => 'applications/ponder/search/PonderQuestionFerretEngine.php', + 'PonderQuestionFulltextEngine' => 'applications/ponder/search/PonderQuestionFulltextEngine.php', + 'PonderQuestionHistoryController' => 'applications/ponder/controller/PonderQuestionHistoryController.php', + 'PonderQuestionListController' => 'applications/ponder/controller/PonderQuestionListController.php', + 'PonderQuestionMailReceiver' => 'applications/ponder/mail/PonderQuestionMailReceiver.php', + 'PonderQuestionPHIDType' => 'applications/ponder/phid/PonderQuestionPHIDType.php', + 'PonderQuestionQuery' => 'applications/ponder/query/PonderQuestionQuery.php', + 'PonderQuestionReplyHandler' => 'applications/ponder/mail/PonderQuestionReplyHandler.php', + 'PonderQuestionSearchEngine' => 'applications/ponder/query/PonderQuestionSearchEngine.php', + 'PonderQuestionStatus' => 'applications/ponder/constants/PonderQuestionStatus.php', + 'PonderQuestionStatusController' => 'applications/ponder/controller/PonderQuestionStatusController.php', + 'PonderQuestionStatusTransaction' => 'applications/ponder/xaction/PonderQuestionStatusTransaction.php', + 'PonderQuestionTitleTransaction' => 'applications/ponder/xaction/PonderQuestionTitleTransaction.php', + 'PonderQuestionTransaction' => 'applications/ponder/storage/PonderQuestionTransaction.php', + 'PonderQuestionTransactionComment' => 'applications/ponder/storage/PonderQuestionTransactionComment.php', + 'PonderQuestionTransactionQuery' => 'applications/ponder/query/PonderQuestionTransactionQuery.php', + 'PonderQuestionTransactionType' => 'applications/ponder/xaction/PonderQuestionTransactionType.php', + 'PonderQuestionViewController' => 'applications/ponder/controller/PonderQuestionViewController.php', + 'PonderRemarkupRule' => 'applications/ponder/remarkup/PonderRemarkupRule.php', + 'PonderSchemaSpec' => 'applications/ponder/storage/PonderSchemaSpec.php', + 'ProjectAddProjectsEmailCommand' => 'applications/project/command/ProjectAddProjectsEmailCommand.php', + 'ProjectBoardTaskCard' => 'applications/project/view/ProjectBoardTaskCard.php', + 'ProjectCanLockProjectsCapability' => 'applications/project/capability/ProjectCanLockProjectsCapability.php', + 'ProjectColumnSearchConduitAPIMethod' => 'applications/project/conduit/ProjectColumnSearchConduitAPIMethod.php', + 'ProjectConduitAPIMethod' => 'applications/project/conduit/ProjectConduitAPIMethod.php', + 'ProjectCreateConduitAPIMethod' => 'applications/project/conduit/ProjectCreateConduitAPIMethod.php', + 'ProjectCreateProjectsCapability' => 'applications/project/capability/ProjectCreateProjectsCapability.php', + 'ProjectDatasourceEngineExtension' => 'applications/project/engineextension/ProjectDatasourceEngineExtension.php', + 'ProjectDefaultEditCapability' => 'applications/project/capability/ProjectDefaultEditCapability.php', + 'ProjectDefaultJoinCapability' => 'applications/project/capability/ProjectDefaultJoinCapability.php', + 'ProjectDefaultViewCapability' => 'applications/project/capability/ProjectDefaultViewCapability.php', + 'ProjectEditConduitAPIMethod' => 'applications/project/conduit/ProjectEditConduitAPIMethod.php', + 'ProjectQueryConduitAPIMethod' => 'applications/project/conduit/ProjectQueryConduitAPIMethod.php', + 'ProjectRemarkupRule' => 'applications/project/remarkup/ProjectRemarkupRule.php', + 'ProjectRemarkupRuleTestCase' => 'applications/project/remarkup/__tests__/ProjectRemarkupRuleTestCase.php', + 'ProjectReplyHandler' => 'applications/project/mail/ProjectReplyHandler.php', + 'ProjectSearchConduitAPIMethod' => 'applications/project/conduit/ProjectSearchConduitAPIMethod.php', + 'QueryFormattingTestCase' => 'infrastructure/storage/__tests__/QueryFormattingTestCase.php', + 'QueryFuture' => 'infrastructure/storage/future/QueryFuture.php', + 'RemarkupProcessConduitAPIMethod' => 'applications/remarkup/conduit/RemarkupProcessConduitAPIMethod.php', + 'RemarkupValue' => 'applications/remarkup/RemarkupValue.php', + 'RepositoryConduitAPIMethod' => 'applications/repository/conduit/RepositoryConduitAPIMethod.php', + 'RepositoryQueryConduitAPIMethod' => 'applications/repository/conduit/RepositoryQueryConduitAPIMethod.php', + 'ShellLogView' => 'applications/harbormaster/view/ShellLogView.php', + 'SlowvoteConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteConduitAPIMethod.php', + 'SlowvoteEmbedView' => 'applications/slowvote/view/SlowvoteEmbedView.php', + 'SlowvoteInfoConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteInfoConduitAPIMethod.php', + 'SlowvotePollResponseVisibility' => 'applications/slowvote/constants/SlowvotePollResponseVisibility.php', + 'SlowvotePollStatus' => 'applications/slowvote/constants/SlowvotePollStatus.php', + 'SlowvotePollVotingMethod' => 'applications/slowvote/constants/SlowvotePollVotingMethod.php', + 'SlowvoteRemarkupRule' => 'applications/slowvote/remarkup/SlowvoteRemarkupRule.php', + 'SlowvoteSearchConduitAPIMethod' => 'applications/slowvote/conduit/SlowvoteSearchConduitAPIMethod.php', + 'SubscriptionListDialogBuilder' => 'applications/subscriptions/view/SubscriptionListDialogBuilder.php', + 'SubscriptionListStringBuilder' => 'applications/subscriptions/view/SubscriptionListStringBuilder.php', + 'TokenConduitAPIMethod' => 'applications/tokens/conduit/TokenConduitAPIMethod.php', + 'TokenGiveConduitAPIMethod' => 'applications/tokens/conduit/TokenGiveConduitAPIMethod.php', + 'TokenGivenConduitAPIMethod' => 'applications/tokens/conduit/TokenGivenConduitAPIMethod.php', + 'TokenQueryConduitAPIMethod' => 'applications/tokens/conduit/TokenQueryConduitAPIMethod.php', + 'TransactionSearchConduitAPIMethod' => 'applications/transactions/conduit/TransactionSearchConduitAPIMethod.php', + 'UserConduitAPIMethod' => 'applications/people/conduit/UserConduitAPIMethod.php', + 'UserDisableConduitAPIMethod' => 'applications/people/conduit/UserDisableConduitAPIMethod.php', + 'UserEditConduitAPIMethod' => 'applications/people/conduit/UserEditConduitAPIMethod.php', + 'UserEnableConduitAPIMethod' => 'applications/people/conduit/UserEnableConduitAPIMethod.php', + 'UserFindConduitAPIMethod' => 'applications/people/conduit/UserFindConduitAPIMethod.php', + 'UserQueryConduitAPIMethod' => 'applications/people/conduit/UserQueryConduitAPIMethod.php', + 'UserSearchConduitAPIMethod' => 'applications/people/conduit/UserSearchConduitAPIMethod.php', + 'UserWhoAmIConduitAPIMethod' => 'applications/people/conduit/UserWhoAmIConduitAPIMethod.php', ), - 'function' => - array( - '_phabricator_date_format' => 'view/viewutils.php', - '_qsprintf_check_scalar_type' => 'storage/qsprintf.php', - '_qsprintf_check_type' => 'storage/qsprintf.php', - 'celerity_generate_unique_node_id' => 'infrastructure/celerity/api.php', - 'celerity_get_resource_uri' => 'infrastructure/celerity/api.php', - 'celerity_register_resource_map' => 'infrastructure/celerity/map.php', - 'javelin_render_tag' => 'infrastructure/javelin/markup.php', + 'function' => array( + 'celerity_generate_unique_node_id' => 'applications/celerity/api.php', + 'celerity_get_resource_uri' => 'applications/celerity/api.php', + 'hsprintf' => 'infrastructure/markup/render.php', + 'javelin_tag' => 'infrastructure/javelin/markup.php', + 'phabricator_absolute_datetime' => 'view/viewutils.php', 'phabricator_date' => 'view/viewutils.php', 'phabricator_datetime' => 'view/viewutils.php', - 'phabricator_format_bytes' => 'view/viewutils.php', + 'phabricator_datetimezone' => 'view/viewutils.php', + 'phabricator_dual_datetime' => 'view/viewutils.php', + 'phabricator_form' => 'infrastructure/javelin/markup.php', 'phabricator_format_local_time' => 'view/viewutils.php', - 'phabricator_format_relative_time' => 'view/viewutils.php', - 'phabricator_format_relative_time_detailed' => 'view/viewutils.php', - 'phabricator_format_units_generic' => 'view/viewutils.php', - 'phabricator_on_relative_date' => 'view/viewutils.php', - 'phabricator_parse_bytes' => 'view/viewutils.php', 'phabricator_relative_date' => 'view/viewutils.php', - 'phabricator_render_form' => 'infrastructure/javelin/markup.php', 'phabricator_time' => 'view/viewutils.php', + 'phid_get_subtype' => 'applications/phid/utils.php', 'phid_get_type' => 'applications/phid/utils.php', 'phid_group_by_type' => 'applications/phid/utils.php', - 'qsprintf' => 'storage/qsprintf.php', - 'queryfx' => 'storage/queryfx.php', - 'queryfx_all' => 'storage/queryfx.php', - 'queryfx_one' => 'storage/queryfx.php', - 'require_celerity_resource' => 'infrastructure/celerity/api.php', - 'vqsprintf' => 'storage/qsprintf.php', - 'vqueryfx' => 'storage/queryfx.php', - 'vqueryfx_all' => 'storage/queryfx.php', - 'xsprintf_query' => 'storage/qsprintf.php', + 'phutil_escape_html' => 'infrastructure/markup/render.php', + 'phutil_escape_html_newlines' => 'infrastructure/markup/render.php', + 'phutil_implode_html' => 'infrastructure/markup/render.php', + 'phutil_safe_html' => 'infrastructure/markup/render.php', + 'phutil_tag' => 'infrastructure/markup/render.php', + 'phutil_tag_div' => 'infrastructure/markup/render.php', + 'qsprintf' => 'infrastructure/storage/xsprintf/qsprintf.php', + 'qsprintf_check_scalar_type' => 'infrastructure/storage/xsprintf/qsprintf.php', + 'qsprintf_check_type' => 'infrastructure/storage/xsprintf/qsprintf.php', + 'queryfx' => 'infrastructure/storage/xsprintf/queryfx.php', + 'queryfx_all' => 'infrastructure/storage/xsprintf/queryfx.php', + 'queryfx_one' => 'infrastructure/storage/xsprintf/queryfx.php', + 'require_celerity_resource' => 'applications/celerity/api.php', + 'vqsprintf' => 'infrastructure/storage/xsprintf/qsprintf.php', + 'xsprintf_query' => 'infrastructure/storage/xsprintf/qsprintf.php', ), - 'xmap' => - array( + 'xmap' => array( + 'AlmanacAddress' => 'Phobject', + 'AlmanacBinding' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'AlmanacPropertyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'AlmanacBindingDeletePropertyTransaction' => 'AlmanacBindingTransactionType', + 'AlmanacBindingDisableController' => 'AlmanacServiceController', + 'AlmanacBindingDisableTransaction' => 'AlmanacBindingTransactionType', + 'AlmanacBindingEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacBindingEditController' => 'AlmanacServiceController', + 'AlmanacBindingEditEngine' => 'PhabricatorEditEngine', + 'AlmanacBindingEditor' => 'AlmanacEditor', + 'AlmanacBindingInterfaceTransaction' => 'AlmanacBindingTransactionType', + 'AlmanacBindingPHIDType' => 'PhabricatorPHIDType', + 'AlmanacBindingPropertyEditEngine' => 'AlmanacPropertyEditEngine', + 'AlmanacBindingQuery' => 'AlmanacQuery', + 'AlmanacBindingSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacBindingSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacBindingServiceTransaction' => 'AlmanacBindingTransactionType', + 'AlmanacBindingSetPropertyTransaction' => 'AlmanacBindingTransactionType', + 'AlmanacBindingTableView' => 'AphrontView', + 'AlmanacBindingTransaction' => 'AlmanacModularTransaction', + 'AlmanacBindingTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacBindingTransactionType' => 'AlmanacTransactionType', + 'AlmanacBindingViewController' => 'AlmanacServiceController', + 'AlmanacBindingsSearchEngineAttachment' => 'AlmanacSearchEngineAttachment', + 'AlmanacCacheEngineExtension' => 'PhabricatorCacheEngineExtension', + 'AlmanacClusterDatabaseServiceType' => 'AlmanacClusterServiceType', + 'AlmanacClusterRepositoryServiceType' => 'AlmanacClusterServiceType', + 'AlmanacClusterServiceType' => 'AlmanacServiceType', + 'AlmanacConsoleController' => 'AlmanacController', + 'AlmanacController' => 'PhabricatorController', + 'AlmanacCreateDevicesCapability' => 'PhabricatorPolicyCapability', + 'AlmanacCreateNamespacesCapability' => 'PhabricatorPolicyCapability', + 'AlmanacCreateNetworksCapability' => 'PhabricatorPolicyCapability', + 'AlmanacCreateServicesCapability' => 'PhabricatorPolicyCapability', + 'AlmanacCustomServiceType' => 'AlmanacServiceType', + 'AlmanacDAO' => 'PhabricatorLiskDAO', + 'AlmanacDeletePropertyEditField' => 'PhabricatorEditField', + 'AlmanacDeletePropertyEditType' => 'PhabricatorEditType', + 'AlmanacDevice' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorProjectInterface', + 'PhabricatorSSHPublicKeyInterface', + 'AlmanacPropertyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'AlmanacDeviceController' => 'AlmanacController', + 'AlmanacDeviceDeletePropertyTransaction' => 'AlmanacDeviceTransactionType', + 'AlmanacDeviceEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacDeviceEditController' => 'AlmanacDeviceController', + 'AlmanacDeviceEditEngine' => 'PhabricatorEditEngine', + 'AlmanacDeviceEditor' => 'AlmanacEditor', + 'AlmanacDeviceListController' => 'AlmanacDeviceController', + 'AlmanacDeviceNameNgrams' => 'PhabricatorSearchNgrams', + 'AlmanacDeviceNameTransaction' => 'AlmanacDeviceTransactionType', + 'AlmanacDevicePHIDType' => 'PhabricatorPHIDType', + 'AlmanacDevicePropertyEditEngine' => 'AlmanacPropertyEditEngine', + 'AlmanacDeviceQuery' => 'AlmanacQuery', + 'AlmanacDeviceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacDeviceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacDeviceSetPropertyTransaction' => 'AlmanacDeviceTransactionType', + 'AlmanacDeviceStatus' => 'Phobject', + 'AlmanacDeviceStatusTransaction' => 'AlmanacDeviceTransactionType', + 'AlmanacDeviceTransaction' => 'AlmanacModularTransaction', + 'AlmanacDeviceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacDeviceTransactionType' => 'AlmanacTransactionType', + 'AlmanacDeviceViewController' => 'AlmanacDeviceController', + 'AlmanacDrydockPoolServiceType' => 'AlmanacServiceType', + 'AlmanacEditor' => 'PhabricatorApplicationTransactionEditor', + 'AlmanacInterface' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorConduitResultInterface', + ), + 'AlmanacInterfaceAddressTransaction' => 'AlmanacInterfaceTransactionType', + 'AlmanacInterfaceDatasource' => 'PhabricatorTypeaheadDatasource', + 'AlmanacInterfaceDeleteController' => 'AlmanacDeviceController', + 'AlmanacInterfaceDestroyTransaction' => 'AlmanacInterfaceTransactionType', + 'AlmanacInterfaceDeviceTransaction' => 'AlmanacInterfaceTransactionType', + 'AlmanacInterfaceEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacInterfaceEditController' => 'AlmanacDeviceController', + 'AlmanacInterfaceEditEngine' => 'PhabricatorEditEngine', + 'AlmanacInterfaceEditor' => 'AlmanacEditor', + 'AlmanacInterfaceNetworkTransaction' => 'AlmanacInterfaceTransactionType', + 'AlmanacInterfacePHIDType' => 'PhabricatorPHIDType', + 'AlmanacInterfacePortTransaction' => 'AlmanacInterfaceTransactionType', + 'AlmanacInterfaceQuery' => 'AlmanacQuery', + 'AlmanacInterfaceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacInterfaceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacInterfaceTableView' => 'AphrontView', + 'AlmanacInterfaceTransaction' => 'AlmanacModularTransaction', + 'AlmanacInterfaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacInterfaceTransactionType' => 'AlmanacTransactionType', + 'AlmanacKeys' => 'Phobject', + 'AlmanacManageClusterServicesCapability' => 'PhabricatorPolicyCapability', + 'AlmanacManagementRegisterWorkflow' => 'AlmanacManagementWorkflow', + 'AlmanacManagementTrustKeyWorkflow' => 'AlmanacManagementWorkflow', + 'AlmanacManagementUntrustKeyWorkflow' => 'AlmanacManagementWorkflow', + 'AlmanacManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'AlmanacModularTransaction' => 'PhabricatorModularTransaction', + 'AlmanacNames' => 'Phobject', + 'AlmanacNamesTestCase' => 'PhabricatorTestCase', + 'AlmanacNamespace' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorConduitResultInterface', + ), + 'AlmanacNamespaceController' => 'AlmanacController', + 'AlmanacNamespaceEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacNamespaceEditController' => 'AlmanacNamespaceController', + 'AlmanacNamespaceEditEngine' => 'PhabricatorEditEngine', + 'AlmanacNamespaceEditor' => 'AlmanacEditor', + 'AlmanacNamespaceListController' => 'AlmanacNamespaceController', + 'AlmanacNamespaceNameNgrams' => 'PhabricatorSearchNgrams', + 'AlmanacNamespaceNameTransaction' => 'AlmanacNamespaceTransactionType', + 'AlmanacNamespacePHIDType' => 'PhabricatorPHIDType', + 'AlmanacNamespaceQuery' => 'AlmanacQuery', + 'AlmanacNamespaceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacNamespaceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacNamespaceTransaction' => 'AlmanacModularTransaction', + 'AlmanacNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacNamespaceTransactionType' => 'AlmanacTransactionType', + 'AlmanacNamespaceViewController' => 'AlmanacNamespaceController', + 'AlmanacNetwork' => array( + 'AlmanacDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorConduitResultInterface', + ), + 'AlmanacNetworkController' => 'AlmanacController', + 'AlmanacNetworkEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacNetworkEditController' => 'AlmanacNetworkController', + 'AlmanacNetworkEditEngine' => 'PhabricatorEditEngine', + 'AlmanacNetworkEditor' => 'AlmanacEditor', + 'AlmanacNetworkListController' => 'AlmanacNetworkController', + 'AlmanacNetworkNameNgrams' => 'PhabricatorSearchNgrams', + 'AlmanacNetworkNameTransaction' => 'AlmanacNetworkTransactionType', + 'AlmanacNetworkPHIDType' => 'PhabricatorPHIDType', + 'AlmanacNetworkQuery' => 'AlmanacQuery', + 'AlmanacNetworkSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacNetworkSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacNetworkTransaction' => 'AlmanacModularTransaction', + 'AlmanacNetworkTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacNetworkTransactionType' => 'AlmanacTransactionType', + 'AlmanacNetworkViewController' => 'AlmanacNetworkController', + 'AlmanacPropertiesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'AlmanacPropertiesEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'AlmanacPropertiesSearchEngineAttachment' => 'AlmanacSearchEngineAttachment', + 'AlmanacProperty' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + ), + 'AlmanacPropertyController' => 'AlmanacController', + 'AlmanacPropertyDeleteController' => 'AlmanacPropertyController', + 'AlmanacPropertyEditController' => 'AlmanacPropertyController', + 'AlmanacPropertyEditEngine' => 'PhabricatorEditEngine', + 'AlmanacPropertyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'AlmanacQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'AlmanacSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'AlmanacSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'AlmanacService' => array( + 'AlmanacDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorProjectInterface', + 'AlmanacPropertyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'AlmanacServiceController' => 'AlmanacController', + 'AlmanacServiceDatasource' => 'PhabricatorTypeaheadDatasource', + 'AlmanacServiceDeletePropertyTransaction' => 'AlmanacServiceTransactionType', + 'AlmanacServiceEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'AlmanacServiceEditController' => 'AlmanacServiceController', + 'AlmanacServiceEditEngine' => 'PhabricatorEditEngine', + 'AlmanacServiceEditor' => 'AlmanacEditor', + 'AlmanacServiceListController' => 'AlmanacServiceController', + 'AlmanacServiceNameNgrams' => 'PhabricatorSearchNgrams', + 'AlmanacServiceNameTransaction' => 'AlmanacServiceTransactionType', + 'AlmanacServicePHIDType' => 'PhabricatorPHIDType', + 'AlmanacServicePropertyEditEngine' => 'AlmanacPropertyEditEngine', + 'AlmanacServiceQuery' => 'AlmanacQuery', + 'AlmanacServiceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'AlmanacServiceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'AlmanacServiceSetPropertyTransaction' => 'AlmanacServiceTransactionType', + 'AlmanacServiceTransaction' => 'AlmanacModularTransaction', + 'AlmanacServiceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'AlmanacServiceTransactionType' => 'AlmanacTransactionType', + 'AlmanacServiceType' => 'Phobject', + 'AlmanacServiceTypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'AlmanacServiceTypeTestCase' => 'PhabricatorTestCase', + 'AlmanacServiceTypeTransaction' => 'AlmanacServiceTransactionType', + 'AlmanacServiceViewController' => 'AlmanacServiceController', + 'AlmanacSetPropertyEditField' => 'PhabricatorEditField', + 'AlmanacSetPropertyEditType' => 'PhabricatorEditType', + 'AlmanacTransactionType' => 'PhabricatorModularTransactionType', + 'AphlictDropdownDataQuery' => 'Phobject', 'Aphront304Response' => 'AphrontResponse', 'Aphront400Response' => 'AphrontResponse', - 'Aphront403Response' => 'AphrontWebpageResponse', - 'Aphront404Response' => 'AphrontWebpageResponse', + 'Aphront403Response' => 'AphrontHTMLResponse', + 'Aphront404Response' => 'AphrontHTMLResponse', + 'AphrontAccessDeniedQueryException' => 'AphrontQueryException', 'AphrontAjaxResponse' => 'AphrontResponse', - 'AphrontAttachedFileView' => 'AphrontView', - 'AphrontCSRFException' => 'AphrontException', + 'AphrontApplicationConfiguration' => 'Phobject', + 'AphrontAutoIDView' => 'AphrontView', + 'AphrontBarView' => 'AphrontView', + 'AphrontBaseMySQLDatabaseConnection' => 'AphrontDatabaseConnection', + 'AphrontBoolHTTPParameterType' => 'AphrontHTTPParameterType', 'AphrontCalendarEventView' => 'AphrontView', - 'AphrontCalendarMonthView' => 'AphrontView', - 'AphrontContextBarView' => 'AphrontView', - 'AphrontCrumbsView' => 'AphrontView', - 'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration', + 'AphrontCharacterSetQueryException' => 'AphrontQueryException', + 'AphrontConnectionLostQueryException' => 'AphrontRecoverableQueryException', + 'AphrontConnectionQueryException' => 'AphrontQueryException', + 'AphrontController' => 'Phobject', + 'AphrontCountQueryException' => 'AphrontQueryException', + 'AphrontCursorPagerView' => 'AphrontView', + 'AphrontDatabaseConnection' => array( + 'Phobject', + 'PhutilQsprintfInterface', + ), + 'AphrontDatabaseTableRef' => array( + 'Phobject', + 'AphrontDatabaseTableRefInterface', + ), + 'AphrontDatabaseTransactionState' => 'Phobject', + 'AphrontDeadlockQueryException' => 'AphrontRecoverableQueryException', 'AphrontDialogResponse' => 'AphrontResponse', - 'AphrontDialogView' => 'AphrontView', - 'AphrontErrorView' => 'AphrontView', + 'AphrontDialogView' => array( + 'AphrontView', + 'AphrontResponseProducerInterface', + ), + 'AphrontDuplicateKeyQueryException' => 'AphrontQueryException', + 'AphrontEpochHTTPParameterType' => 'AphrontHTTPParameterType', 'AphrontException' => 'Exception', - 'AphrontFilePreviewView' => 'AphrontView', + 'AphrontFileHTTPParameterType' => 'AphrontHTTPParameterType', 'AphrontFileResponse' => 'AphrontResponse', 'AphrontFormCheckboxControl' => 'AphrontFormControl', 'AphrontFormControl' => 'AphrontView', 'AphrontFormDateControl' => 'AphrontFormControl', + 'AphrontFormDateControlValue' => 'Phobject', 'AphrontFormDividerControl' => 'AphrontFormControl', - 'AphrontFormDragAndDropUploadControl' => 'AphrontFormControl', 'AphrontFormFileControl' => 'AphrontFormControl', - 'AphrontFormInsetView' => 'AphrontView', - 'AphrontFormLayoutView' => 'AphrontView', + 'AphrontFormHandlesControl' => 'AphrontFormControl', 'AphrontFormMarkupControl' => 'AphrontFormControl', 'AphrontFormPasswordControl' => 'AphrontFormControl', 'AphrontFormPolicyControl' => 'AphrontFormControl', @@ -1127,871 +6201,6600 @@ 'AphrontFormSubmitControl' => 'AphrontFormControl', 'AphrontFormTextAreaControl' => 'AphrontFormControl', 'AphrontFormTextControl' => 'AphrontFormControl', - 'AphrontFormToggleButtonsControl' => 'AphrontFormControl', + 'AphrontFormTextWithSubmitControl' => 'AphrontFormControl', 'AphrontFormTokenizerControl' => 'AphrontFormControl', + 'AphrontFormTypeaheadControl' => 'AphrontFormControl', 'AphrontFormView' => 'AphrontView', + 'AphrontGlyphBarView' => 'AphrontBarView', + 'AphrontHTMLResponse' => 'AphrontResponse', + 'AphrontHTTPHeaderParser' => 'Phobject', + 'AphrontHTTPHeaderParserTestCase' => 'PhutilTestCase', + 'AphrontHTTPParameterType' => 'Phobject', + 'AphrontHTTPProxyResponse' => 'AphrontResponse', + 'AphrontHTTPSink' => 'Phobject', 'AphrontHTTPSinkTestCase' => 'PhabricatorTestCase', - 'AphrontHeadsupActionListView' => 'AphrontView', - 'AphrontHeadsupActionView' => 'AphrontView', - 'AphrontHeadsupView' => 'AphrontView', - 'AphrontIDPagerView' => 'AphrontView', + 'AphrontIntHTTPParameterType' => 'AphrontHTTPParameterType', + 'AphrontInvalidCredentialsQueryException' => 'AphrontQueryException', 'AphrontIsolatedDatabaseConnection' => 'AphrontDatabaseConnection', 'AphrontIsolatedDatabaseConnectionTestCase' => 'PhabricatorTestCase', 'AphrontIsolatedHTTPSink' => 'AphrontHTTPSink', + 'AphrontJSONHTTPParameterType' => 'AphrontHTTPParameterType', 'AphrontJSONResponse' => 'AphrontResponse', 'AphrontJavelinView' => 'AphrontView', 'AphrontKeyboardShortcutsAvailableView' => 'AphrontView', 'AphrontListFilterView' => 'AphrontView', - 'AphrontMiniPanelView' => 'AphrontView', + 'AphrontListHTTPParameterType' => 'AphrontHTTPParameterType', + 'AphrontLockTimeoutQueryException' => 'AphrontRecoverableQueryException', + 'AphrontMalformedRequestException' => 'AphrontException', 'AphrontMoreView' => 'AphrontView', - 'AphrontMySQLDatabaseConnection' => 'AphrontMySQLDatabaseConnectionBase', - 'AphrontMySQLDatabaseConnectionBase' => 'AphrontDatabaseConnection', + 'AphrontMultiColumnView' => 'AphrontView', + 'AphrontMultipartParser' => 'Phobject', + 'AphrontMultipartParserTestCase' => 'PhutilTestCase', + 'AphrontMultipartPart' => 'Phobject', + 'AphrontMySQLDatabaseConnection' => 'AphrontBaseMySQLDatabaseConnection', 'AphrontMySQLDatabaseConnectionTestCase' => 'PhabricatorTestCase', - 'AphrontMySQLiDatabaseConnection' => 'AphrontMySQLDatabaseConnectionBase', + 'AphrontMySQLiDatabaseConnection' => 'AphrontBaseMySQLDatabaseConnection', + 'AphrontNotSupportedQueryException' => 'AphrontQueryException', 'AphrontNullView' => 'AphrontView', + 'AphrontObjectMissingQueryException' => 'AphrontQueryException', + 'AphrontPHIDHTTPParameterType' => 'AphrontHTTPParameterType', + 'AphrontPHIDListHTTPParameterType' => 'AphrontListHTTPParameterType', 'AphrontPHPHTTPSink' => 'AphrontHTTPSink', 'AphrontPageView' => 'AphrontView', - 'AphrontPagerView' => 'AphrontView', - 'AphrontPanelView' => 'AphrontView', + 'AphrontParameterQueryException' => 'AphrontQueryException', 'AphrontPlainTextResponse' => 'AphrontResponse', - 'AphrontProxyResponse' => 'AphrontResponse', - 'AphrontQueryAccessDeniedException' => 'AphrontQueryRecoverableException', - 'AphrontQueryConnectionException' => 'AphrontQueryException', - 'AphrontQueryConnectionLostException' => 'AphrontQueryRecoverableException', - 'AphrontQueryCountException' => 'AphrontQueryException', - 'AphrontQueryDeadlockException' => 'AphrontQueryRecoverableException', - 'AphrontQueryDuplicateKeyException' => 'AphrontQueryException', + 'AphrontProgressBarView' => 'AphrontBarView', + 'AphrontProjectListHTTPParameterType' => 'AphrontListHTTPParameterType', + 'AphrontProxyResponse' => array( + 'AphrontResponse', + 'AphrontResponseProducerInterface', + ), 'AphrontQueryException' => 'Exception', - 'AphrontQueryObjectMissingException' => 'AphrontQueryException', - 'AphrontQueryParameterException' => 'AphrontQueryException', - 'AphrontQueryRecoverableException' => 'AphrontQueryException', - 'AphrontQuerySchemaException' => 'AphrontQueryException', - 'AphrontRedirectException' => 'AphrontException', + 'AphrontQueryTimeoutQueryException' => 'AphrontRecoverableQueryException', + 'AphrontRecoverableQueryException' => 'AphrontQueryException', 'AphrontRedirectResponse' => 'AphrontResponse', + 'AphrontRedirectResponseTestCase' => 'PhabricatorTestCase', 'AphrontReloadResponse' => 'AphrontRedirectResponse', - 'AphrontRequestFailureView' => 'AphrontView', + 'AphrontRemarkupHTTPParameterType' => 'AphrontHTTPParameterType', + 'AphrontRequest' => 'Phobject', + 'AphrontRequestExceptionHandler' => 'Phobject', + 'AphrontRequestStream' => 'Phobject', 'AphrontRequestTestCase' => 'PhabricatorTestCase', + 'AphrontResponse' => 'Phobject', + 'AphrontRoutingMap' => 'Phobject', + 'AphrontRoutingMapTestCase' => 'PhabricatorTestCase', + 'AphrontRoutingResult' => 'Phobject', + 'AphrontSchemaQueryException' => 'AphrontQueryException', + 'AphrontScopedUnguardedWriteCapability' => 'Phobject', + 'AphrontSelectHTTPParameterType' => 'AphrontHTTPParameterType', 'AphrontSideNavFilterView' => 'AphrontView', - 'AphrontSideNavView' => 'AphrontView', + 'AphrontSite' => 'Phobject', + 'AphrontStackTraceView' => 'AphrontView', + 'AphrontStandaloneHTMLResponse' => 'AphrontHTMLResponse', + 'AphrontStringHTTPParameterType' => 'AphrontHTTPParameterType', + 'AphrontStringListHTTPParameterType' => 'AphrontListHTTPParameterType', 'AphrontTableView' => 'AphrontView', + 'AphrontTagView' => 'AphrontView', 'AphrontTokenizerTemplateView' => 'AphrontView', 'AphrontTypeaheadTemplateView' => 'AphrontView', - 'AphrontUsageException' => 'AphrontException', - 'AphrontWebpageResponse' => 'AphrontResponse', - 'CelerityResourceController' => 'AphrontController', + 'AphrontUnhandledExceptionResponse' => 'AphrontStandaloneHTMLResponse', + 'AphrontUserListHTTPParameterType' => 'AphrontListHTTPParameterType', + 'AphrontView' => array( + 'Phobject', + 'PhutilSafeHTMLProducerInterface', + ), + 'AphrontWebpageResponse' => 'AphrontHTMLResponse', + 'AphrontWriteGuard' => 'Phobject', + 'ArcanistConduitAPIMethod' => 'ConduitAPIMethod', + 'AuditConduitAPIMethod' => 'ConduitAPIMethod', + 'AuditQueryConduitAPIMethod' => 'AuditConduitAPIMethod', + 'AuthManageProvidersCapability' => 'PhabricatorPolicyCapability', + 'BulkParameterType' => 'Phobject', + 'BulkPointsParameterType' => 'BulkParameterType', + 'BulkRemarkupParameterType' => 'BulkParameterType', + 'BulkSelectParameterType' => 'BulkParameterType', + 'BulkStringParameterType' => 'BulkParameterType', + 'BulkTokenizerParameterType' => 'BulkParameterType', + 'CalendarTimeUtil' => 'Phobject', + 'CalendarTimeUtilTestCase' => 'PhabricatorTestCase', + 'CelerityAPI' => 'Phobject', + 'CelerityDarkModePostprocessor' => 'CelerityPostprocessor', + 'CelerityDefaultPostprocessor' => 'CelerityPostprocessor', + 'CelerityHighContrastPostprocessor' => 'CelerityPostprocessor', + 'CelerityLargeFontPostprocessor' => 'CelerityPostprocessor', + 'CelerityManagementMapWorkflow' => 'CelerityManagementWorkflow', + 'CelerityManagementSyntaxWorkflow' => 'CelerityManagementWorkflow', + 'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'CelerityPhabricatorResourceController' => 'CelerityResourceController', + 'CelerityPhabricatorResources' => 'CelerityResourcesOnDisk', + 'CelerityPhysicalResources' => 'CelerityResources', + 'CelerityPhysicalResourcesTestCase' => 'PhabricatorTestCase', + 'CelerityPostprocessor' => 'Phobject', + 'CelerityPostprocessorTestCase' => 'PhabricatorTestCase', + 'CelerityRedGreenPostprocessor' => 'CelerityPostprocessor', + 'CelerityResourceController' => 'PhabricatorController', 'CelerityResourceGraph' => 'AbstractDirectedGraph', + 'CelerityResourceMap' => 'Phobject', + 'CelerityResourceMapGenerator' => 'Phobject', + 'CelerityResourceTransformer' => 'Phobject', 'CelerityResourceTransformerTestCase' => 'PhabricatorTestCase', - 'ConduitAPI_arcanist_Method' => 'ConduitAPIMethod', - 'ConduitAPI_arcanist_projectinfo_Method' => 'ConduitAPI_arcanist_Method', - 'ConduitAPI_audit_Method' => 'ConduitAPIMethod', - 'ConduitAPI_audit_query_Method' => 'ConduitAPI_audit_Method', - 'ConduitAPI_chatlog_Method' => 'ConduitAPIMethod', - 'ConduitAPI_chatlog_query_Method' => 'ConduitAPI_chatlog_Method', - 'ConduitAPI_chatlog_record_Method' => 'ConduitAPI_chatlog_Method', - 'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod', - 'ConduitAPI_conduit_getcertificate_Method' => 'ConduitAPIMethod', - 'ConduitAPI_conduit_ping_Method' => 'ConduitAPIMethod', - 'ConduitAPI_daemon_launched_Method' => 'ConduitAPIMethod', - 'ConduitAPI_daemon_log_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_close_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_createcomment_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_creatediff_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_createrevision_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_find_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getalldiffs_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getrevision_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getrevisioncomments_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_getrevisionfeedback_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_query_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_updatetaskrevisionassoc_Method' => 'ConduitAPIMethod', - 'ConduitAPI_differential_updateunitresults_Method' => 'ConduitAPIMethod', - 'ConduitAPI_diffusion_findsymbols_Method' => 'ConduitAPIMethod', - 'ConduitAPI_diffusion_getcommits_Method' => 'ConduitAPIMethod', - 'ConduitAPI_diffusion_getrecentcommitsbypath_Method' => 'ConduitAPIMethod', - 'ConduitAPI_feed_publish_Method' => 'ConduitAPIMethod', - 'ConduitAPI_feed_query_Method' => 'ConduitAPIMethod', - 'ConduitAPI_file_download_Method' => 'ConduitAPIMethod', - 'ConduitAPI_file_info_Method' => 'ConduitAPIMethod', - 'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod', - 'ConduitAPI_flag_Method' => 'ConduitAPIMethod', - 'ConduitAPI_flag_query_Method' => 'ConduitAPI_flag_Method', - 'ConduitAPI_macro_Method' => 'ConduitAPIMethod', - 'ConduitAPI_macro_query_Method' => 'ConduitAPI_macro_Method', - 'ConduitAPI_maniphest_Method' => 'ConduitAPIMethod', - 'ConduitAPI_maniphest_createtask_Method' => 'ConduitAPI_maniphest_Method', - 'ConduitAPI_maniphest_find_Method' => 'ConduitAPI_maniphest_Method', - 'ConduitAPI_maniphest_gettasktransactions_Method' => 'ConduitAPI_maniphest_Method', - 'ConduitAPI_maniphest_info_Method' => 'ConduitAPI_maniphest_Method', - 'ConduitAPI_maniphest_update_Method' => 'ConduitAPI_maniphest_Method', - 'ConduitAPI_owners_query_Method' => 'ConduitAPIMethod', - 'ConduitAPI_paste_Method' => 'ConduitAPIMethod', - 'ConduitAPI_paste_create_Method' => 'ConduitAPI_paste_Method', - 'ConduitAPI_paste_info_Method' => 'ConduitAPI_paste_Method', - 'ConduitAPI_path_getowners_Method' => 'ConduitAPIMethod', - 'ConduitAPI_phid_Method' => 'ConduitAPIMethod', - 'ConduitAPI_phid_info_Method' => 'ConduitAPI_phid_Method', - 'ConduitAPI_phid_query_Method' => 'ConduitAPI_phid_Method', - 'ConduitAPI_phriction_Method' => 'ConduitAPIMethod', - 'ConduitAPI_phriction_edit_Method' => 'ConduitAPI_phriction_Method', - 'ConduitAPI_phriction_history_Method' => 'ConduitAPI_phriction_Method', - 'ConduitAPI_phriction_info_Method' => 'ConduitAPI_phriction_Method', - 'ConduitAPI_project_Method' => 'ConduitAPIMethod', - 'ConduitAPI_project_query_Method' => 'ConduitAPI_project_Method', - 'ConduitAPI_remarkup_process_Method' => 'ConduitAPIMethod', - 'ConduitAPI_repository_Method' => 'ConduitAPIMethod', - 'ConduitAPI_repository_create_Method' => 'ConduitAPI_repository_Method', - 'ConduitAPI_repository_query_Method' => 'ConduitAPI_repository_Method', - 'ConduitAPI_slowvote_info_Method' => 'ConduitAPIMethod', - 'ConduitAPI_user_Method' => 'ConduitAPIMethod', - 'ConduitAPI_user_addstatus_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_disable_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_find_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_info_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_query_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_removestatus_Method' => 'ConduitAPI_user_Method', - 'ConduitAPI_user_whoami_Method' => 'ConduitAPI_user_Method', + 'CelerityResources' => 'Phobject', + 'CelerityResourcesOnDisk' => 'CelerityPhysicalResources', + 'CeleritySpriteGenerator' => 'Phobject', + 'CelerityStaticResourceResponse' => 'Phobject', + 'ChatLogConduitAPIMethod' => 'ConduitAPIMethod', + 'ChatLogQueryConduitAPIMethod' => 'ChatLogConduitAPIMethod', + 'ChatLogRecordConduitAPIMethod' => 'ChatLogConduitAPIMethod', + 'ConduitAPIDocumentationPage' => 'Phobject', + 'ConduitAPIMethod' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + ), + 'ConduitAPIMethodTestCase' => 'PhabricatorTestCase', + 'ConduitAPIRequest' => 'Phobject', + 'ConduitAPIResponse' => 'Phobject', + 'ConduitApplicationNotInstalledException' => 'ConduitMethodNotFoundException', + 'ConduitBoolParameterType' => 'ConduitParameterType', + 'ConduitCall' => 'Phobject', 'ConduitCallTestCase' => 'PhabricatorTestCase', + 'ConduitColumnsParameterType' => 'ConduitParameterType', + 'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod', + 'ConduitConstantDescription' => 'Phobject', + 'ConduitEpochParameterType' => 'ConduitParameterType', 'ConduitException' => 'Exception', - 'DarkConsoleConfigPlugin' => 'DarkConsolePlugin', + 'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod', + 'ConduitGetCertificateConduitAPIMethod' => 'ConduitAPIMethod', + 'ConduitIntListParameterType' => 'ConduitListParameterType', + 'ConduitIntParameterType' => 'ConduitParameterType', + 'ConduitListParameterType' => 'ConduitParameterType', + 'ConduitLogGarbageCollector' => 'PhabricatorGarbageCollector', + 'ConduitMethodDoesNotExistException' => 'ConduitMethodNotFoundException', + 'ConduitMethodNotFoundException' => 'ConduitException', + 'ConduitPHIDListParameterType' => 'ConduitListParameterType', + 'ConduitPHIDParameterType' => 'ConduitParameterType', + 'ConduitParameterType' => 'Phobject', + 'ConduitPingConduitAPIMethod' => 'ConduitAPIMethod', + 'ConduitPointsParameterType' => 'ConduitParameterType', + 'ConduitProjectListParameterType' => 'ConduitListParameterType', + 'ConduitQueryConduitAPIMethod' => 'ConduitAPIMethod', + 'ConduitResultSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'ConduitSSHWorkflow' => 'PhabricatorSSHWorkflow', + 'ConduitStringListParameterType' => 'ConduitListParameterType', + 'ConduitStringParameterType' => 'ConduitParameterType', + 'ConduitTokenGarbageCollector' => 'PhabricatorGarbageCollector', + 'ConduitUserListParameterType' => 'ConduitListParameterType', + 'ConduitUserParameterType' => 'ConduitParameterType', + 'ConduitWildParameterType' => 'ConduitParameterType', + 'ConpherenceColumnViewController' => 'ConpherenceController', + 'ConpherenceConduitAPIMethod' => 'ConduitAPIMethod', + 'ConpherenceConstants' => 'Phobject', + 'ConpherenceController' => 'PhabricatorController', + 'ConpherenceCreateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod', + 'ConpherenceDAO' => 'PhabricatorLiskDAO', + 'ConpherenceDurableColumnView' => 'AphrontTagView', + 'ConpherenceEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'ConpherenceEditEngine' => 'PhabricatorEditEngine', + 'ConpherenceEditor' => 'PhabricatorApplicationTransactionEditor', + 'ConpherenceFulltextQuery' => 'PhabricatorOffsetPagedQuery', + 'ConpherenceIndex' => 'ConpherenceDAO', + 'ConpherenceLayoutView' => 'AphrontTagView', + 'ConpherenceListController' => 'ConpherenceController', + 'ConpherenceMenuItemView' => 'AphrontTagView', + 'ConpherenceNotificationPanelController' => 'ConpherenceController', + 'ConpherenceParticipant' => 'ConpherenceDAO', + 'ConpherenceParticipantController' => 'ConpherenceController', + 'ConpherenceParticipantCountQuery' => 'PhabricatorOffsetPagedQuery', + 'ConpherenceParticipantQuery' => 'PhabricatorOffsetPagedQuery', + 'ConpherenceParticipantView' => 'AphrontView', + 'ConpherenceQueryThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod', + 'ConpherenceQueryTransactionConduitAPIMethod' => 'ConpherenceConduitAPIMethod', + 'ConpherenceReplyHandler' => 'PhabricatorMailReplyHandler', + 'ConpherenceRoomEditController' => 'ConpherenceController', + 'ConpherenceRoomListController' => 'ConpherenceController', + 'ConpherenceRoomPictureController' => 'ConpherenceController', + 'ConpherenceRoomPreferencesController' => 'ConpherenceController', + 'ConpherenceRoomSettings' => 'ConpherenceConstants', + 'ConpherenceRoomTestCase' => 'ConpherenceTestCase', + 'ConpherenceSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'ConpherenceTestCase' => 'PhabricatorTestCase', + 'ConpherenceThread' => array( + 'ConpherenceDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorNgramsInterface', + ), + 'ConpherenceThreadDatasource' => 'PhabricatorTypeaheadDatasource', + 'ConpherenceThreadDateMarkerTransaction' => 'ConpherenceThreadTransactionType', + 'ConpherenceThreadIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'ConpherenceThreadListView' => 'AphrontView', + 'ConpherenceThreadMailReceiver' => 'PhabricatorObjectMailReceiver', + 'ConpherenceThreadMembersPolicyRule' => 'PhabricatorPolicyRule', + 'ConpherenceThreadParticipantsTransaction' => 'ConpherenceThreadTransactionType', + 'ConpherenceThreadPictureTransaction' => 'ConpherenceThreadTransactionType', + 'ConpherenceThreadQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'ConpherenceThreadRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'ConpherenceThreadSearchController' => 'ConpherenceController', + 'ConpherenceThreadSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'ConpherenceThreadTitleNgrams' => 'PhabricatorSearchNgrams', + 'ConpherenceThreadTitleTransaction' => 'ConpherenceThreadTransactionType', + 'ConpherenceThreadTopicTransaction' => 'ConpherenceThreadTransactionType', + 'ConpherenceThreadTransactionType' => 'PhabricatorModularTransactionType', + 'ConpherenceTransaction' => 'PhabricatorModularTransaction', + 'ConpherenceTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'ConpherenceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'ConpherenceTransactionRenderer' => 'Phobject', + 'ConpherenceTransactionView' => 'AphrontView', + 'ConpherenceUpdateActions' => 'ConpherenceConstants', + 'ConpherenceUpdateController' => 'ConpherenceController', + 'ConpherenceUpdateThreadConduitAPIMethod' => 'ConpherenceConduitAPIMethod', + 'ConpherenceViewController' => 'ConpherenceController', + 'CountdownEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'CountdownSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 'DarkConsoleController' => 'PhabricatorController', + 'DarkConsoleCore' => 'Phobject', + 'DarkConsoleDataController' => 'PhabricatorController', 'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin', + 'DarkConsoleErrorLogPluginAPI' => 'Phobject', 'DarkConsoleEventPlugin' => 'DarkConsolePlugin', - 'DarkConsoleEventPluginAPI' => 'PhutilEventListener', + 'DarkConsoleEventPluginAPI' => 'PhabricatorEventListener', + 'DarkConsolePlugin' => 'Phobject', + 'DarkConsoleRealtimePlugin' => 'DarkConsolePlugin', 'DarkConsoleRequestPlugin' => 'DarkConsolePlugin', 'DarkConsoleServicesPlugin' => 'DarkConsolePlugin', + 'DarkConsoleStartupPlugin' => 'DarkConsolePlugin', 'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin', - 'DefaultDatabaseConfigurationProvider' => 'DatabaseConfigurationProvider', - 'DifferentialActionHasNoEffectException' => 'DifferentialException', - 'DifferentialAddCommentView' => 'AphrontView', + 'DarkConsoleXHProfPluginAPI' => 'Phobject', + 'DifferentialAction' => 'Phobject', + 'DifferentialActionEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'DifferentialAdjustmentMapTestCase' => 'PhabricatorTestCase', 'DifferentialAffectedPath' => 'DifferentialDAO', - 'DifferentialApplyPatchFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialArcanistProjectFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialAuditorsFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialAuthorFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialAuxiliaryField' => 'DifferentialDAO', - 'DifferentialBlameRevisionFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail', - 'DifferentialCCsFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialChangeset' => 'DifferentialDAO', + 'DifferentialAffectedPathEngine' => 'Phobject', + 'DifferentialAsanaRepresentationField' => 'DifferentialCustomField', + 'DifferentialAuditorsCommitMessageField' => 'DifferentialCommitMessageCustomField', + 'DifferentialAuditorsField' => 'DifferentialStoredCustomField', + 'DifferentialBlameRevisionCommitMessageField' => 'DifferentialCommitMessageCustomField', + 'DifferentialBlameRevisionField' => 'DifferentialStoredCustomField', + 'DifferentialBlockHeraldAction' => 'HeraldAction', + 'DifferentialBlockingReviewerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialBranchField' => 'DifferentialCustomField', + 'DifferentialBuildableEngine' => 'HarbormasterBuildableEngine', + 'DifferentialChangeDetailMailView' => 'DifferentialMailView', + 'DifferentialChangeHeraldFieldGroup' => 'HeraldFieldGroup', + 'DifferentialChangeType' => 'Phobject', + 'DifferentialChangesSinceLastUpdateField' => 'DifferentialCustomField', + 'DifferentialChangeset' => array( + 'DifferentialDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), 'DifferentialChangesetDetailView' => 'AphrontView', + 'DifferentialChangesetEngine' => 'Phobject', + 'DifferentialChangesetHTMLRenderer' => 'DifferentialChangesetRenderer', + 'DifferentialChangesetListController' => 'DifferentialController', 'DifferentialChangesetListView' => 'AphrontView', + 'DifferentialChangesetOneUpMailRenderer' => 'DifferentialChangesetRenderer', + 'DifferentialChangesetOneUpRenderer' => 'DifferentialChangesetHTMLRenderer', + 'DifferentialChangesetOneUpTestRenderer' => 'DifferentialChangesetTestRenderer', + 'DifferentialChangesetPHIDType' => 'PhabricatorPHIDType', + 'DifferentialChangesetParser' => 'Phobject', + 'DifferentialChangesetParserTestCase' => 'PhabricatorTestCase', + 'DifferentialChangesetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DifferentialChangesetRenderer' => 'Phobject', + 'DifferentialChangesetSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DifferentialChangesetSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DifferentialChangesetTestRenderer' => 'DifferentialChangesetRenderer', + 'DifferentialChangesetTwoUpRenderer' => 'DifferentialChangesetHTMLRenderer', + 'DifferentialChangesetTwoUpTestRenderer' => 'DifferentialChangesetTestRenderer', 'DifferentialChangesetViewController' => 'DifferentialController', - 'DifferentialComment' => 'DifferentialDAO', - 'DifferentialCommentMail' => 'DifferentialMail', - 'DifferentialCommentPreviewController' => 'DifferentialController', - 'DifferentialCommentSaveController' => 'DifferentialController', - 'DifferentialCommitsFieldSpecification' => 'DifferentialFieldSpecification', + 'DifferentialCloseConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCommitMessageCustomField' => 'DifferentialCommitMessageField', + 'DifferentialCommitMessageField' => 'Phobject', + 'DifferentialCommitMessageFieldTestCase' => 'PhabricatorTestCase', + 'DifferentialCommitMessageParser' => 'Phobject', + 'DifferentialCommitMessageParserTestCase' => 'PhabricatorTestCase', + 'DifferentialCommitsField' => 'DifferentialCustomField', + 'DifferentialCommitsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'DifferentialConduitAPIMethod' => 'ConduitAPIMethod', + 'DifferentialConflictsCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialConstantsModule' => 'PhabricatorConfigModule', 'DifferentialController' => 'PhabricatorController', + 'DifferentialCoreCustomField' => 'DifferentialCustomField', + 'DifferentialCreateCommentConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCreateDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCreateInlineConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', + 'DifferentialCreateRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCreateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialCustomField' => 'PhabricatorCustomField', + 'DifferentialCustomFieldDependsOnParser' => 'PhabricatorCustomFieldMonogramParser', + 'DifferentialCustomFieldDependsOnParserTestCase' => 'PhabricatorTestCase', + 'DifferentialCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', + 'DifferentialCustomFieldRevertsParser' => 'PhabricatorCustomFieldMonogramParser', + 'DifferentialCustomFieldRevertsParserTestCase' => 'PhabricatorTestCase', + 'DifferentialCustomFieldStorage' => 'PhabricatorCustomFieldStorage', + 'DifferentialCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'DifferentialDAO' => 'PhabricatorLiskDAO', - 'DifferentialDateCreatedFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialDateModifiedFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialDefaultFieldSelector' => 'DifferentialFieldSelector', - 'DifferentialDependenciesFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialDiff' => 'DifferentialDAO', - 'DifferentialDiffContentMail' => 'DifferentialMail', + 'DifferentialDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'DifferentialDiff' => array( + 'DifferentialDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'HarbormasterBuildableInterface', + 'HarbormasterCircleCIBuildableInterface', + 'HarbormasterBuildkiteBuildableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'DifferentialDiffAffectedFilesHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffAuthorHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffAuthorProjectsHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffContentAddedHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffContentHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffContentRemovedHeraldField' => 'DifferentialDiffHeraldField', 'DifferentialDiffCreateController' => 'DifferentialController', + 'DifferentialDiffEditor' => 'PhabricatorApplicationTransactionEditor', + 'DifferentialDiffExtractionEngine' => 'Phobject', + 'DifferentialDiffHeraldField' => 'HeraldField', + 'DifferentialDiffHeraldFieldGroup' => 'HeraldFieldGroup', + 'DifferentialDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery', + 'DifferentialDiffPHIDType' => 'PhabricatorPHIDType', 'DifferentialDiffProperty' => 'DifferentialDAO', - 'DifferentialDiffTableOfContentsView' => 'AphrontView', + 'DifferentialDiffQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DifferentialDiffRepositoryHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffRepositoryProjectsHeraldField' => 'DifferentialDiffHeraldField', + 'DifferentialDiffSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DifferentialDiffSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DifferentialDiffTestCase' => 'PhutilTestCase', + 'DifferentialDiffTransaction' => 'PhabricatorApplicationTransaction', + 'DifferentialDiffTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'DifferentialDiffViewController' => 'DifferentialController', - 'DifferentialException' => 'Exception', - 'DifferentialExceptionMail' => 'DifferentialMail', - 'DifferentialExportPatchFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialFieldDataNotAvailableException' => 'Exception', + 'DifferentialDoorkeeperRevisionFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher', + 'DifferentialDraftField' => 'DifferentialCoreCustomField', + 'DifferentialExactUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', 'DifferentialFieldParseException' => 'Exception', - 'DifferentialFieldSpecificationIncompleteException' => 'Exception', 'DifferentialFieldValidationException' => 'Exception', - 'DifferentialGitSVNIDFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialHostFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialHunk' => 'DifferentialDAO', - 'DifferentialInlineComment' => - array( - 0 => 'DifferentialDAO', - 1 => 'PhabricatorInlineCommentInterface', + 'DifferentialFileTreeEngine' => 'Phobject', + 'DifferentialGetAllDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetCommitPathsConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetRawDiffConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetRevisionCommentsConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialGetWorkingCopy' => 'Phobject', + 'DifferentialGitSVNIDCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialHarbormasterField' => 'DifferentialCustomField', + 'DifferentialHeraldStateReasons' => 'HeraldStateReasons', + 'DifferentialHiddenComment' => 'DifferentialDAO', + 'DifferentialHostField' => 'DifferentialCustomField', + 'DifferentialHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', + 'DifferentialHunk' => array( + 'DifferentialDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', ), + 'DifferentialHunkParser' => 'Phobject', + 'DifferentialHunkParserTestCase' => 'PhabricatorTestCase', + 'DifferentialHunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DifferentialHunkTestCase' => 'PhutilTestCase', + 'DifferentialInlineComment' => 'PhabricatorInlineComment', 'DifferentialInlineCommentEditController' => 'PhabricatorInlineCommentController', - 'DifferentialInlineCommentEditView' => 'AphrontView', - 'DifferentialInlineCommentPreviewController' => 'DifferentialController', - 'DifferentialInlineCommentView' => 'AphrontView', - 'DifferentialLinesFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialLintFieldSpecification' => 'DifferentialFieldSpecification', + 'DifferentialInlineCommentMailView' => 'DifferentialMailView', + 'DifferentialJIRAIssuesCommitMessageField' => 'DifferentialCommitMessageCustomField', + 'DifferentialJIRAIssuesField' => 'DifferentialStoredCustomField', + 'DifferentialLegacyQuery' => 'Phobject', + 'DifferentialLineAdjustmentMap' => 'Phobject', + 'DifferentialLintField' => 'DifferentialHarbormasterField', + 'DifferentialLintStatus' => 'Phobject', 'DifferentialLocalCommitsView' => 'AphrontView', - 'DifferentialManiphestTasksFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail', - 'DifferentialPathFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialPrimaryPaneView' => 'AphrontView', - 'DifferentialReplyHandler' => 'PhabricatorMailReplyHandler', - 'DifferentialResultsTableView' => 'AphrontView', - 'DifferentialRevertPlanFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialReviewRequestMail' => 'DifferentialMail', - 'DifferentialReviewedByFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialReviewersFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialRevision' => 'DifferentialDAO', - 'DifferentialRevisionCommentListView' => 'AphrontView', - 'DifferentialRevisionCommentView' => 'AphrontView', - 'DifferentialRevisionDetailView' => 'AphrontView', + 'DifferentialMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'DifferentialMailView' => 'Phobject', + 'DifferentialManiphestTasksField' => 'DifferentialCoreCustomField', + 'DifferentialNoReviewersDatasource' => 'PhabricatorTypeaheadDatasource', + 'DifferentialParseCacheGarbageCollector' => 'PhabricatorGarbageCollector', + 'DifferentialParseCommitMessageConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialParseRenderTestCase' => 'PhabricatorTestCase', + 'DifferentialPathField' => 'DifferentialCustomField', + 'DifferentialProjectReviewersField' => 'DifferentialCustomField', + 'DifferentialQueryConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialQueryDiffsConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialRawDiffRenderer' => 'Phobject', + 'DifferentialRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'DifferentialReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'DifferentialRepositoryField' => 'DifferentialCoreCustomField', + 'DifferentialRepositoryLookup' => 'Phobject', + 'DifferentialRequiredSignaturesField' => 'DifferentialCoreCustomField', + 'DifferentialResponsibleDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialResponsibleUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialResponsibleViewerFunctionDatasource' => 'PhabricatorTypeaheadDatasource', + 'DifferentialRevertPlanCommitMessageField' => 'DifferentialCommitMessageCustomField', + 'DifferentialRevertPlanField' => 'DifferentialStoredCustomField', + 'DifferentialReviewedByCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialReviewer' => 'DifferentialDAO', + 'DifferentialReviewerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialReviewerForRevisionEdgeType' => 'PhabricatorEdgeType', + 'DifferentialReviewerFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialReviewerStatus' => 'Phobject', + 'DifferentialReviewersAddBlockingReviewersHeraldAction' => 'DifferentialReviewersHeraldAction', + 'DifferentialReviewersAddBlockingSelfHeraldAction' => 'DifferentialReviewersHeraldAction', + 'DifferentialReviewersAddReviewersHeraldAction' => 'DifferentialReviewersHeraldAction', + 'DifferentialReviewersAddSelfHeraldAction' => 'DifferentialReviewersHeraldAction', + 'DifferentialReviewersCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialReviewersField' => 'DifferentialCoreCustomField', + 'DifferentialReviewersHeraldAction' => 'HeraldAction', + 'DifferentialReviewersSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'DifferentialReviewersView' => 'AphrontView', + 'DifferentialRevision' => array( + 'DifferentialDAO', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhrequentTrackableInterface', + 'HarbormasterBuildableInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorTimelineInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorProjectInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorDraftInterface', + ), + 'DifferentialRevisionAbandonTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionAcceptTransaction' => 'DifferentialRevisionReviewTransaction', + 'DifferentialRevisionActionTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionAffectedFilesHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionAffectedPathsController' => 'DifferentialController', + 'DifferentialRevisionAuthorHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionAuthorPackagesHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionAuthorProjectsHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionAuthorTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionBuildableTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionCloseDetailsController' => 'DifferentialController', + 'DifferentialRevisionCloseTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionClosedStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'DifferentialRevisionCommandeerTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionContentAddedHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionContentHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionContentRemovedHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionControlSystem' => 'Phobject', + 'DifferentialRevisionDependedOnByRevisionEdgeType' => 'PhabricatorEdgeType', + 'DifferentialRevisionDependsOnRevisionEdgeType' => 'PhabricatorEdgeType', + 'DifferentialRevisionDraftEngine' => 'PhabricatorDraftEngine', + 'DifferentialRevisionEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 'DifferentialRevisionEditController' => 'DifferentialController', - 'DifferentialRevisionIDFieldParserTestCase' => 'PhabricatorTestCase', - 'DifferentialRevisionIDFieldSpecification' => 'DifferentialFieldSpecification', + 'DifferentialRevisionEditEngine' => 'PhabricatorEditEngine', + 'DifferentialRevisionFerretEngine' => 'PhabricatorFerretEngine', + 'DifferentialRevisionFulltextEngine' => 'PhabricatorFulltextEngine', + 'DifferentialRevisionGraph' => 'PhabricatorObjectGraph', + 'DifferentialRevisionHasChildRelationship' => 'DifferentialRevisionRelationship', + 'DifferentialRevisionHasCommitEdgeType' => 'PhabricatorEdgeType', + 'DifferentialRevisionHasCommitRelationship' => 'DifferentialRevisionRelationship', + 'DifferentialRevisionHasParentRelationship' => 'DifferentialRevisionRelationship', + 'DifferentialRevisionHasReviewerEdgeType' => 'PhabricatorEdgeType', + 'DifferentialRevisionHasTaskEdgeType' => 'PhabricatorEdgeType', + 'DifferentialRevisionHasTaskRelationship' => 'DifferentialRevisionRelationship', + 'DifferentialRevisionHeraldField' => 'HeraldField', + 'DifferentialRevisionHeraldFieldGroup' => 'HeraldFieldGroup', + 'DifferentialRevisionHoldDraftTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionIDCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialRevisionInlineTransaction' => 'PhabricatorModularTransactionType', + 'DifferentialRevisionInlinesController' => 'DifferentialController', + 'DifferentialRevisionJIRAIssueURIsHeraldField' => 'DifferentialRevisionHeraldField', 'DifferentialRevisionListController' => 'DifferentialController', 'DifferentialRevisionListView' => 'AphrontView', - 'DifferentialRevisionStatsController' => 'DifferentialController', - 'DifferentialRevisionStatsView' => 'AphrontView', - 'DifferentialRevisionStatusFieldSpecification' => 'DifferentialFieldSpecification', + 'DifferentialRevisionMailReceiver' => 'PhabricatorObjectMailReceiver', + 'DifferentialRevisionOpenStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'DifferentialRevisionOperationController' => 'DifferentialController', + 'DifferentialRevisionPHIDType' => 'PhabricatorPHIDType', + 'DifferentialRevisionPackageHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionPackageOwnerHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionPlanChangesTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DifferentialRevisionReclaimTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionRejectTransaction' => 'DifferentialRevisionReviewTransaction', + 'DifferentialRevisionRelationship' => 'PhabricatorObjectRelationship', + 'DifferentialRevisionRelationshipSource' => 'PhabricatorObjectRelationshipSource', + 'DifferentialRevisionReopenTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionRepositoryHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionRepositoryProjectsHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionRepositoryTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionRequestReviewTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionRequiredActionResultBucket' => 'DifferentialRevisionResultBucket', + 'DifferentialRevisionResignTransaction' => 'DifferentialRevisionReviewTransaction', + 'DifferentialRevisionResultBucket' => 'PhabricatorSearchResultBucket', + 'DifferentialRevisionReviewTransaction' => 'DifferentialRevisionActionTransaction', + 'DifferentialRevisionReviewersHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionReviewersTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DifferentialRevisionSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DifferentialRevisionStatus' => 'Phobject', + 'DifferentialRevisionStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'DifferentialRevisionStatusFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DifferentialRevisionStatusHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionStatusTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionSummaryHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionSummaryTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionTestPlanHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionTestPlanTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionTimelineEngine' => 'PhabricatorTimelineEngine', + 'DifferentialRevisionTitleHeraldField' => 'DifferentialRevisionHeraldField', + 'DifferentialRevisionTitleTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionTransactionType' => 'PhabricatorModularTransactionType', 'DifferentialRevisionUpdateHistoryView' => 'AphrontView', + 'DifferentialRevisionUpdateTransaction' => 'DifferentialRevisionTransactionType', 'DifferentialRevisionViewController' => 'DifferentialController', - 'DifferentialSubscribeController' => 'DifferentialController', - 'DifferentialSummaryFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialTestPlanFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialTitleFieldSpecification' => 'DifferentialFieldSpecification', - 'DifferentialUnitFieldSpecification' => 'DifferentialFieldSpecification', + 'DifferentialRevisionVoidTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionWrongBuildsTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialRevisionWrongStateTransaction' => 'DifferentialRevisionTransactionType', + 'DifferentialSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'DifferentialSetDiffPropertyConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialStoredCustomField' => 'DifferentialCustomField', + 'DifferentialSubscribersCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialSummaryCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialSummaryField' => 'DifferentialCoreCustomField', + 'DifferentialTabReplacementTestCase' => 'PhabricatorTestCase', + 'DifferentialTagsCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialTasksCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialTestPlanCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialTestPlanField' => 'DifferentialCoreCustomField', + 'DifferentialTitleCommitMessageField' => 'DifferentialCommitMessageField', + 'DifferentialTransaction' => 'PhabricatorModularTransaction', + 'DifferentialTransactionComment' => array( + 'PhabricatorApplicationTransactionComment', + 'PhabricatorInlineCommentInterface', + ), + 'DifferentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'DifferentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'DifferentialTransactionView' => 'PhabricatorApplicationTransactionView', + 'DifferentialUnitField' => 'DifferentialCustomField', + 'DifferentialUnitStatus' => 'Phobject', + 'DifferentialUnitTestResult' => 'Phobject', + 'DifferentialUpdateRevisionConduitAPIMethod' => 'DifferentialConduitAPIMethod', + 'DifferentialViewState' => array( + 'DifferentialDAO', + 'PhabricatorPolicyInterface', + ), + 'DifferentialViewStateGarbageCollector' => 'PhabricatorGarbageCollector', + 'DifferentialViewStateQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DiffusionAuditorDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DiffusionAuditorFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DiffusionAuditorsAddAuditorsHeraldAction' => 'DiffusionAuditorsHeraldAction', + 'DiffusionAuditorsAddSelfHeraldAction' => 'DiffusionAuditorsHeraldAction', + 'DiffusionAuditorsHeraldAction' => 'HeraldAction', + 'DiffusionAuditorsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'DiffusionBlameConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionBlameController' => 'DiffusionController', + 'DiffusionBlameQuery' => 'DiffusionQuery', + 'DiffusionBlockHeraldAction' => 'HeraldAction', + 'DiffusionBranchListView' => 'DiffusionView', + 'DiffusionBranchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 'DiffusionBranchTableController' => 'DiffusionController', - 'DiffusionBranchTableView' => 'DiffusionView', 'DiffusionBrowseController' => 'DiffusionController', - 'DiffusionBrowseFileController' => 'DiffusionController', + 'DiffusionBrowseQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionBrowseResultSet' => 'Phobject', 'DiffusionBrowseTableView' => 'DiffusionView', + 'DiffusionBuildableEngine' => 'HarbormasterBuildableEngine', + 'DiffusionCacheEngineExtension' => 'PhabricatorCacheEngineExtension', + 'DiffusionCachedResolveRefsQuery' => 'DiffusionLowLevelQuery', 'DiffusionChangeController' => 'DiffusionController', - 'DiffusionCommentListView' => 'AphrontView', - 'DiffusionCommentView' => 'AphrontView', - 'DiffusionCommitChangeTableView' => 'DiffusionView', + 'DiffusionChangeHeraldFieldGroup' => 'HeraldFieldGroup', + 'DiffusionCloneController' => 'DiffusionController', + 'DiffusionCloneURIView' => 'AphrontView', + 'DiffusionCommandEngine' => 'Phobject', + 'DiffusionCommandEngineTestCase' => 'PhabricatorTestCase', + 'DiffusionCommitAcceptTransaction' => 'DiffusionCommitAuditTransaction', + 'DiffusionCommitActionTransaction' => 'DiffusionCommitTransactionType', + 'DiffusionCommitAffectedFilesHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitAuditStatus' => 'Phobject', + 'DiffusionCommitAuditTransaction' => 'DiffusionCommitActionTransaction', + 'DiffusionCommitAuditorsHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitAuditorsTransaction' => 'DiffusionCommitTransactionType', + 'DiffusionCommitAuthorHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitAuthorPackagesHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitAuthorProjectsHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitAutocloseHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitBranchesController' => 'DiffusionController', + 'DiffusionCommitBranchesHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitBuildableTransaction' => 'DiffusionCommitTransactionType', + 'DiffusionCommitCommitterHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitCommitterPackagesHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitCommitterProjectsHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitConcernTransaction' => 'DiffusionCommitAuditTransaction', 'DiffusionCommitController' => 'DiffusionController', - 'DiffusionCommitParentsQuery' => 'DiffusionQuery', - 'DiffusionCommitTagsQuery' => 'DiffusionQuery', - 'DiffusionContainsQuery' => 'DiffusionQuery', + 'DiffusionCommitDiffContentAddedHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitDiffContentHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitDiffContentRemovedHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitDiffEnormousHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitDraftEngine' => 'PhabricatorDraftEngine', + 'DiffusionCommitEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'DiffusionCommitEditController' => 'DiffusionController', + 'DiffusionCommitEditEngine' => 'PhabricatorEditEngine', + 'DiffusionCommitFerretEngine' => 'PhabricatorFerretEngine', + 'DiffusionCommitFulltextEngine' => 'PhabricatorFulltextEngine', + 'DiffusionCommitGraphView' => 'DiffusionView', + 'DiffusionCommitHasPackageEdgeType' => 'PhabricatorEdgeType', + 'DiffusionCommitHasRevisionEdgeType' => 'PhabricatorEdgeType', + 'DiffusionCommitHasRevisionRelationship' => 'DiffusionCommitRelationship', + 'DiffusionCommitHasTaskEdgeType' => 'PhabricatorEdgeType', + 'DiffusionCommitHasTaskRelationship' => 'DiffusionCommitRelationship', + 'DiffusionCommitHash' => 'Phobject', + 'DiffusionCommitHeraldField' => 'HeraldField', + 'DiffusionCommitHeraldFieldGroup' => 'HeraldFieldGroup', + 'DiffusionCommitHintQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DiffusionCommitHookEngine' => 'Phobject', + 'DiffusionCommitHookRejectException' => 'Exception', + 'DiffusionCommitListController' => 'DiffusionController', + 'DiffusionCommitMergeHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitMessageHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitPackageAuditHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitPackageHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitPackageOwnerHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitParentsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionCommitQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DiffusionCommitRef' => 'Phobject', + 'DiffusionCommitRelationship' => 'PhabricatorObjectRelationship', + 'DiffusionCommitRelationshipSource' => 'PhabricatorObjectRelationshipSource', + 'DiffusionCommitRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'DiffusionCommitRemarkupRuleTestCase' => 'PhabricatorTestCase', + 'DiffusionCommitRepositoryHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRepositoryProjectsHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRequiredActionResultBucket' => 'DiffusionCommitResultBucket', + 'DiffusionCommitResignTransaction' => 'DiffusionCommitAuditTransaction', + 'DiffusionCommitResultBucket' => 'PhabricatorSearchResultBucket', + 'DiffusionCommitRevertedByCommitEdgeType' => 'PhabricatorEdgeType', + 'DiffusionCommitRevertsCommitEdgeType' => 'PhabricatorEdgeType', + 'DiffusionCommitReviewerHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRevisionAcceptedHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRevisionAcceptingReviewersHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRevisionHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRevisionQuery' => 'Phobject', + 'DiffusionCommitRevisionReviewersHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitRevisionSubscribersHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCommitSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DiffusionCommitStateTransaction' => 'DiffusionCommitTransactionType', + 'DiffusionCommitTagsController' => 'DiffusionController', + 'DiffusionCommitTimelineEngine' => 'PhabricatorTimelineEngine', + 'DiffusionCommitTransactionType' => 'PhabricatorModularTransactionType', + 'DiffusionCommitVerifyTransaction' => 'DiffusionCommitAuditTransaction', + 'DiffusionCommitWrongBuildsHeraldField' => 'DiffusionCommitHeraldField', + 'DiffusionCompareController' => 'DiffusionController', + 'DiffusionConduitAPIMethod' => 'ConduitAPIMethod', 'DiffusionController' => 'PhabricatorController', + 'DiffusionCreateRepositoriesCapability' => 'PhabricatorPolicyCapability', + 'DiffusionDaemonLockException' => 'Exception', + 'DiffusionDatasourceEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'DiffusionDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'DiffusionDefaultPushCapability' => 'PhabricatorPolicyCapability', + 'DiffusionDefaultViewCapability' => 'PhabricatorPolicyCapability', 'DiffusionDiffController' => 'DiffusionController', - 'DiffusionDiffQuery' => 'DiffusionQuery', + 'DiffusionDiffInlineCommentQuery' => 'PhabricatorDiffInlineCommentQuery', + 'DiffusionDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionDocumentController' => 'DiffusionController', + 'DiffusionDocumentRenderingEngine' => 'PhabricatorDocumentRenderingEngine', + 'DiffusionDoorkeeperCommitFeedStoryPublisher' => 'DoorkeeperFeedStoryPublisher', 'DiffusionEmptyResultView' => 'DiffusionView', + 'DiffusionExistsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 'DiffusionExternalController' => 'DiffusionController', - 'DiffusionFileContentQuery' => 'DiffusionQuery', - 'DiffusionGitBranchQuery' => 'DiffusionBranchQuery', - 'DiffusionGitBranchQueryTestCase' => 'PhabricatorTestCase', - 'DiffusionGitBrowseQuery' => 'DiffusionBrowseQuery', - 'DiffusionGitCommitParentsQuery' => 'DiffusionCommitParentsQuery', - 'DiffusionGitCommitTagsQuery' => 'DiffusionCommitTagsQuery', - 'DiffusionGitContainsQuery' => 'DiffusionContainsQuery', - 'DiffusionGitDiffQuery' => 'DiffusionDiffQuery', + 'DiffusionExternalSymbolQuery' => 'Phobject', + 'DiffusionExternalSymbolsSource' => 'Phobject', + 'DiffusionFileContentQuery' => 'DiffusionFileFutureQuery', + 'DiffusionFileContentQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionFileFutureQuery' => 'DiffusionQuery', + 'DiffusionFindSymbolsConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionGetLintMessagesConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionGetRecentCommitsByPathConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionGitBlameQuery' => 'DiffusionBlameQuery', + 'DiffusionGitBranch' => 'Phobject', + 'DiffusionGitBranchTestCase' => 'PhabricatorTestCase', + 'DiffusionGitCommandEngine' => 'DiffusionCommandEngine', 'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery', - 'DiffusionGitHistoryQuery' => 'DiffusionHistoryQuery', - 'DiffusionGitLastModifiedQuery' => 'DiffusionLastModifiedQuery', - 'DiffusionGitMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', + 'DiffusionGitLFSAuthenticateWorkflow' => 'DiffusionGitSSHWorkflow', + 'DiffusionGitLFSResponse' => 'AphrontResponse', + 'DiffusionGitLFSTemporaryTokenType' => 'PhabricatorAuthTemporaryTokenType', 'DiffusionGitRawDiffQuery' => 'DiffusionRawDiffQuery', - 'DiffusionGitRenameHistoryQuery' => 'DiffusionRenameHistoryQuery', + 'DiffusionGitReceivePackSSHWorkflow' => 'DiffusionGitSSHWorkflow', 'DiffusionGitRequest' => 'DiffusionRequest', - 'DiffusionGitTagListQuery' => 'DiffusionTagListQuery', + 'DiffusionGitResponse' => 'AphrontResponse', + 'DiffusionGitSSHWorkflow' => array( + 'DiffusionSSHWorkflow', + 'DiffusionRepositoryClusterEngineLogInterface', + ), + 'DiffusionGitUploadPackSSHWorkflow' => 'DiffusionGitSSHWorkflow', + 'DiffusionGitUploadPackWireProtocol' => 'DiffusionGitWireProtocol', + 'DiffusionGitWireProtocol' => 'Phobject', + 'DiffusionGitWireProtocolCapabilities' => 'Phobject', + 'DiffusionGitWireProtocolRef' => 'Phobject', + 'DiffusionGitWireProtocolRefList' => 'Phobject', 'DiffusionHistoryController' => 'DiffusionController', - 'DiffusionHistoryQuery' => 'DiffusionQuery', - 'DiffusionHistoryTableView' => 'DiffusionView', - 'DiffusionHomeController' => 'DiffusionController', + 'DiffusionHistoryQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', + 'DiffusionIdentityAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DiffusionIdentityAssigneeEditField' => 'PhabricatorTokenizerEditField', + 'DiffusionIdentityAssigneeSearchField' => 'PhabricatorSearchTokenizerField', + 'DiffusionIdentityEditController' => 'DiffusionController', + 'DiffusionIdentityListController' => 'DiffusionController', + 'DiffusionIdentityUnassignedDatasource' => 'PhabricatorTypeaheadDatasource', + 'DiffusionIdentityViewController' => 'DiffusionController', 'DiffusionInlineCommentController' => 'PhabricatorInlineCommentController', + 'DiffusionInternalAncestorsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionInternalCommitSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DiffusionInternalCommitSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DiffusionInternalGitRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', 'DiffusionLastModifiedController' => 'DiffusionController', - 'DiffusionLastModifiedQuery' => 'DiffusionQuery', - 'DiffusionMercurialBranchQuery' => 'DiffusionBranchQuery', - 'DiffusionMercurialBrowseQuery' => 'DiffusionBrowseQuery', - 'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery', - 'DiffusionMercurialCommitTagsQuery' => 'DiffusionCommitTagsQuery', - 'DiffusionMercurialContainsQuery' => 'DiffusionContainsQuery', - 'DiffusionMercurialDiffQuery' => 'DiffusionDiffQuery', + 'DiffusionLastModifiedQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionLintController' => 'DiffusionController', + 'DiffusionLintCountQuery' => 'PhabricatorQuery', + 'DiffusionLintSaveRunner' => 'Phobject', + 'DiffusionLocalRepositoryFilter' => 'Phobject', + 'DiffusionLogController' => 'DiffusionController', + 'DiffusionLookSoonConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionLowLevelCommitFieldsQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelCommitQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelFilesizeQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelGitRefQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelMercurialBranchesQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelMercurialPathsQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelParentsQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelQuery' => 'Phobject', + 'DiffusionLowLevelResolveRefsQuery' => 'DiffusionLowLevelQuery', + 'DiffusionMercurialBlameQuery' => 'DiffusionBlameQuery', + 'DiffusionMercurialCommandEngine' => 'DiffusionCommandEngine', + 'DiffusionMercurialCommandEngineTests' => 'PhabricatorTestCase', 'DiffusionMercurialFileContentQuery' => 'DiffusionFileContentQuery', - 'DiffusionMercurialHistoryQuery' => 'DiffusionHistoryQuery', - 'DiffusionMercurialLastModifiedQuery' => 'DiffusionLastModifiedQuery', - 'DiffusionMercurialMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', + 'DiffusionMercurialFlagInjectionException' => 'Exception', 'DiffusionMercurialRawDiffQuery' => 'DiffusionRawDiffQuery', - 'DiffusionMercurialRenameHistoryQuery' => 'DiffusionRenameHistoryQuery', 'DiffusionMercurialRequest' => 'DiffusionRequest', - 'DiffusionMercurialTagListQuery' => 'DiffusionTagListQuery', - 'DiffusionMergedCommitsQuery' => 'DiffusionQuery', + 'DiffusionMercurialResponse' => 'AphrontResponse', + 'DiffusionMercurialSSHWorkflow' => 'DiffusionSSHWorkflow', + 'DiffusionMercurialServeSSHWorkflow' => 'DiffusionMercurialSSHWorkflow', + 'DiffusionMercurialWireClientSSHProtocolChannel' => 'PhutilProtocolChannel', + 'DiffusionMercurialWireProtocol' => 'Phobject', + 'DiffusionMercurialWireProtocolTests' => 'PhabricatorTestCase', + 'DiffusionMercurialWireSSHTestCase' => 'PhabricatorTestCase', + 'DiffusionMergedCommitsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionPathChange' => 'Phobject', + 'DiffusionPathChangeQuery' => 'Phobject', 'DiffusionPathCompleteController' => 'DiffusionController', + 'DiffusionPathIDQuery' => 'Phobject', + 'DiffusionPathQuery' => 'Phobject', 'DiffusionPathQueryTestCase' => 'PhabricatorTestCase', + 'DiffusionPathTreeController' => 'DiffusionController', 'DiffusionPathValidateController' => 'DiffusionController', - 'DiffusionRawDiffQuery' => 'DiffusionQuery', - 'DiffusionRenameHistoryQuery' => 'DiffusionQuery', + 'DiffusionPatternSearchView' => 'DiffusionView', + 'DiffusionPhpExternalSymbolsSource' => 'DiffusionExternalSymbolsSource', + 'DiffusionPreCommitContentAffectedFilesHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentAuthorHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentAuthorPackagesHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentAuthorProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentAuthorRawHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentBranchesHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentCommitterPackagesHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentCommitterProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentCommitterRawHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentDiffContentAddedHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentDiffContentHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentDiffContentRemovedHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentDiffEnormousHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentHeraldField' => 'HeraldField', + 'DiffusionPreCommitContentMergeHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentMessageHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentPackageHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentPackageOwnerHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentPusherHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentPusherIsCommitterHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentPusherProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRepositoryHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRepositoryProjectsHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRevisionAcceptedHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRevisionAcceptingReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRevisionHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRevisionReviewersHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentRevisionSubscribersHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitContentWrongBuildsHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPreCommitRefChangeHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefHeraldField' => 'HeraldField', + 'DiffusionPreCommitRefHeraldFieldGroup' => 'HeraldFieldGroup', + 'DiffusionPreCommitRefNameHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefPusherHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefPusherProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefRepositoryHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefRepositoryProjectsHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitRefTypeHeraldField' => 'DiffusionPreCommitRefHeraldField', + 'DiffusionPreCommitUsesGitLFSHeraldField' => 'DiffusionPreCommitContentHeraldField', + 'DiffusionPullEventGarbageCollector' => 'PhabricatorGarbageCollector', + 'DiffusionPullLogListController' => 'DiffusionLogController', + 'DiffusionPullLogListView' => 'AphrontView', + 'DiffusionPullLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DiffusionPushCapability' => 'PhabricatorPolicyCapability', + 'DiffusionPushEventViewController' => 'DiffusionLogController', + 'DiffusionPushLogListController' => 'DiffusionLogController', + 'DiffusionPushLogListView' => 'AphrontView', + 'DiffusionPythonExternalSymbolsSource' => 'DiffusionExternalSymbolsSource', + 'DiffusionQuery' => 'PhabricatorQuery', + 'DiffusionQueryCommitsConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionQueryConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionQueryPathsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionRawDiffQuery' => 'DiffusionFileFutureQuery', + 'DiffusionRawDiffQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionReadmeView' => 'DiffusionView', + 'DiffusionRefDatasource' => 'PhabricatorTypeaheadDatasource', + 'DiffusionRefNotFoundException' => 'Exception', + 'DiffusionRefTableController' => 'DiffusionController', + 'DiffusionRefsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionRenameHistoryQuery' => 'Phobject', + 'DiffusionRepositoryAutomationManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryBasicsManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryBranchesManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryByIDRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'DiffusionRepositoryClusterEngine' => 'Phobject', 'DiffusionRepositoryController' => 'DiffusionController', - 'DiffusionSetupException' => 'AphrontUsageException', - 'DiffusionSvnBrowseQuery' => 'DiffusionBrowseQuery', - 'DiffusionSvnCommitParentsQuery' => 'DiffusionCommitParentsQuery', - 'DiffusionSvnCommitTagsQuery' => 'DiffusionCommitTagsQuery', - 'DiffusionSvnContainsQuery' => 'DiffusionContainsQuery', - 'DiffusionSvnDiffQuery' => 'DiffusionDiffQuery', + 'DiffusionRepositoryDatasource' => 'PhabricatorTypeaheadDatasource', + 'DiffusionRepositoryDefaultController' => 'DiffusionController', + 'DiffusionRepositoryEditActivateController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'DiffusionRepositoryEditController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditDangerousController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditDeleteController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditEngine' => 'PhabricatorEditEngine', + 'DiffusionRepositoryEditEnormousController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditPublishingController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryEditUpdateController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DiffusionRepositoryHistoryManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryIdentityDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'DiffusionRepositoryIdentityEditor' => 'PhabricatorApplicationTransactionEditor', + 'DiffusionRepositoryIdentityEngine' => 'Phobject', + 'DiffusionRepositoryIdentitySearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DiffusionRepositoryLimitsManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryListController' => 'DiffusionController', + 'DiffusionRepositoryManageController' => 'DiffusionController', + 'DiffusionRepositoryManagePanelsController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryManagementBuildsPanelGroup' => 'DiffusionRepositoryManagementPanelGroup', + 'DiffusionRepositoryManagementIntegrationsPanelGroup' => 'DiffusionRepositoryManagementPanelGroup', + 'DiffusionRepositoryManagementMainPanelGroup' => 'DiffusionRepositoryManagementPanelGroup', + 'DiffusionRepositoryManagementOtherPanelGroup' => 'DiffusionRepositoryManagementPanelGroup', + 'DiffusionRepositoryManagementPanel' => 'Phobject', + 'DiffusionRepositoryManagementPanelGroup' => 'Phobject', + 'DiffusionRepositoryMetricsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'DiffusionRepositoryPath' => 'Phobject', + 'DiffusionRepositoryPoliciesManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryProfilePictureController' => 'DiffusionController', + 'DiffusionRepositoryRef' => 'Phobject', + 'DiffusionRepositoryRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'DiffusionRepositorySearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DiffusionRepositoryStagingManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryStorageManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositorySubversionManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositorySymbolsManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryTag' => 'Phobject', + 'DiffusionRepositoryTestAutomationController' => 'DiffusionRepositoryManageController', + 'DiffusionRepositoryURICredentialController' => 'DiffusionController', + 'DiffusionRepositoryURIDisableController' => 'DiffusionController', + 'DiffusionRepositoryURIEditController' => 'DiffusionController', + 'DiffusionRepositoryURIViewController' => 'DiffusionController', + 'DiffusionRepositoryURIsIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'DiffusionRepositoryURIsManagementPanel' => 'DiffusionRepositoryManagementPanel', + 'DiffusionRepositoryURIsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'DiffusionRequest' => 'Phobject', + 'DiffusionResolveRefsConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionResolveUserQuery' => 'Phobject', + 'DiffusionSSHWorkflow' => 'PhabricatorSSHWorkflow', + 'DiffusionSearchQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionServeController' => 'DiffusionController', + 'DiffusionServiceRef' => 'Phobject', + 'DiffusionSetPasswordSettingsPanel' => 'PhabricatorSettingsPanel', + 'DiffusionSetupException' => 'Exception', + 'DiffusionSourceHyperlinkEngineExtension' => 'PhabricatorRemarkupHyperlinkEngineExtension', + 'DiffusionSourceLinkRemarkupRule' => 'PhutilRemarkupRule', + 'DiffusionSourceLinkView' => 'AphrontView', + 'DiffusionSubversionCommandEngine' => 'DiffusionCommandEngine', + 'DiffusionSubversionSSHWorkflow' => 'DiffusionSSHWorkflow', + 'DiffusionSubversionServeSSHWorkflow' => 'DiffusionSubversionSSHWorkflow', + 'DiffusionSubversionWireProtocol' => 'Phobject', + 'DiffusionSubversionWireProtocolTestCase' => 'PhabricatorTestCase', + 'DiffusionSvnBlameQuery' => 'DiffusionBlameQuery', 'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery', - 'DiffusionSvnHistoryQuery' => 'DiffusionHistoryQuery', - 'DiffusionSvnLastModifiedQuery' => 'DiffusionLastModifiedQuery', - 'DiffusionSvnMergedCommitsQuery' => 'DiffusionMergedCommitsQuery', 'DiffusionSvnRawDiffQuery' => 'DiffusionRawDiffQuery', - 'DiffusionSvnRenameHistoryQuery' => 'DiffusionRenameHistoryQuery', 'DiffusionSvnRequest' => 'DiffusionRequest', - 'DiffusionSvnTagListQuery' => 'DiffusionTagListQuery', 'DiffusionSymbolController' => 'DiffusionController', + 'DiffusionSymbolDatasource' => 'PhabricatorTypeaheadDatasource', + 'DiffusionSymbolQuery' => 'PhabricatorOffsetPagedQuery', + 'DiffusionSyncLogListController' => 'DiffusionLogController', + 'DiffusionSyncLogListView' => 'AphrontView', + 'DiffusionSyncLogSearchEngine' => 'PhabricatorApplicationSearchEngine', 'DiffusionTagListController' => 'DiffusionController', - 'DiffusionTagListQuery' => 'DiffusionQuery', 'DiffusionTagListView' => 'DiffusionView', - 'DiffusionURITestCase' => 'ArcanistPhutilTestCase', + 'DiffusionTaggedRepositoriesFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'DiffusionTagsQueryConduitAPIMethod' => 'DiffusionQueryConduitAPIMethod', + 'DiffusionURIEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'DiffusionURIEditEngine' => 'PhabricatorEditEngine', + 'DiffusionURIEditor' => 'PhabricatorApplicationTransactionEditor', + 'DiffusionURITestCase' => 'PhutilTestCase', + 'DiffusionUpdateCoverageConduitAPIMethod' => 'DiffusionConduitAPIMethod', + 'DiffusionUpdateObjectAfterCommitWorker' => 'PhabricatorWorker', 'DiffusionView' => 'AphrontView', - 'DrydockAllocatorWorker' => 'PhabricatorWorker', - 'DrydockApacheWebrootBlueprint' => 'DrydockBlueprint', + 'DivinerArticleAtomizer' => 'DivinerAtomizer', + 'DivinerAtom' => 'Phobject', + 'DivinerAtomCache' => 'DivinerDiskCache', + 'DivinerAtomController' => 'DivinerController', + 'DivinerAtomListController' => 'DivinerController', + 'DivinerAtomPHIDType' => 'PhabricatorPHIDType', + 'DivinerAtomQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DivinerAtomRef' => 'Phobject', + 'DivinerAtomSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DivinerAtomizeWorkflow' => 'DivinerWorkflow', + 'DivinerAtomizer' => 'Phobject', + 'DivinerBookController' => 'DivinerController', + 'DivinerBookDatasource' => 'PhabricatorTypeaheadDatasource', + 'DivinerBookEditController' => 'DivinerController', + 'DivinerBookItemView' => 'AphrontTagView', + 'DivinerBookPHIDType' => 'PhabricatorPHIDType', + 'DivinerBookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DivinerController' => 'PhabricatorController', + 'DivinerDAO' => 'PhabricatorLiskDAO', + 'DivinerDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'DivinerDefaultRenderer' => 'DivinerRenderer', + 'DivinerDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'DivinerDiskCache' => 'Phobject', + 'DivinerFileAtomizer' => 'DivinerAtomizer', + 'DivinerFindController' => 'DivinerController', + 'DivinerGenerateWorkflow' => 'DivinerWorkflow', + 'DivinerLiveAtom' => 'DivinerDAO', + 'DivinerLiveBook' => array( + 'DivinerDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFulltextInterface', + ), + 'DivinerLiveBookEditor' => 'PhabricatorApplicationTransactionEditor', + 'DivinerLiveBookFulltextEngine' => 'PhabricatorFulltextEngine', + 'DivinerLiveBookTransaction' => 'PhabricatorApplicationTransaction', + 'DivinerLiveBookTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'DivinerLivePublisher' => 'DivinerPublisher', + 'DivinerLiveSymbol' => array( + 'DivinerDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorFulltextInterface', + ), + 'DivinerLiveSymbolFulltextEngine' => 'PhabricatorFulltextEngine', + 'DivinerMainController' => 'DivinerController', + 'DivinerPHPAtomizer' => 'DivinerAtomizer', + 'DivinerParameterTableView' => 'AphrontTagView', + 'DivinerPublishCache' => 'DivinerDiskCache', + 'DivinerPublisher' => 'Phobject', + 'DivinerRenderer' => 'Phobject', + 'DivinerReturnTableView' => 'AphrontTagView', + 'DivinerSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'DivinerSectionView' => 'AphrontTagView', + 'DivinerStaticPublisher' => 'DivinerPublisher', + 'DivinerSymbolRemarkupRule' => 'PhutilRemarkupRule', + 'DivinerWorkflow' => 'PhabricatorManagementWorkflow', + 'DoorkeeperAsanaFeedWorker' => 'DoorkeeperFeedWorker', + 'DoorkeeperBridge' => 'Phobject', + 'DoorkeeperBridgeAsana' => 'DoorkeeperBridge', + 'DoorkeeperBridgeGitHub' => 'DoorkeeperBridge', + 'DoorkeeperBridgeGitHubIssue' => 'DoorkeeperBridgeGitHub', + 'DoorkeeperBridgeGitHubUser' => 'DoorkeeperBridgeGitHub', + 'DoorkeeperBridgeJIRA' => 'DoorkeeperBridge', + 'DoorkeeperBridgeJIRATestCase' => 'PhabricatorTestCase', + 'DoorkeeperBridgedObjectCurtainExtension' => 'PHUICurtainExtension', + 'DoorkeeperDAO' => 'PhabricatorLiskDAO', + 'DoorkeeperExternalObject' => array( + 'DoorkeeperDAO', + 'PhabricatorPolicyInterface', + ), + 'DoorkeeperExternalObjectPHIDType' => 'PhabricatorPHIDType', + 'DoorkeeperExternalObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DoorkeeperFeedStoryPublisher' => 'Phobject', + 'DoorkeeperFeedWorker' => 'FeedPushWorker', + 'DoorkeeperHyperlinkEngineExtension' => 'PhabricatorRemarkupHyperlinkEngineExtension', + 'DoorkeeperImportEngine' => 'Phobject', + 'DoorkeeperJIRAFeedWorker' => 'DoorkeeperFeedWorker', + 'DoorkeeperMissingLinkException' => 'Exception', + 'DoorkeeperObjectRef' => 'Phobject', + 'DoorkeeperSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'DoorkeeperTagView' => 'AphrontView', + 'DoorkeeperTagsController' => 'PhabricatorController', + 'DoorkeeperURIRef' => 'Phobject', + 'DrydockAcquiredBrokenResourceException' => 'Exception', + 'DrydockAlmanacServiceHostBlueprintImplementation' => 'DrydockBlueprintImplementation', 'DrydockApacheWebrootInterface' => 'DrydockWebrootInterface', + 'DrydockAuthorization' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'DrydockAuthorizationAuthorizeController' => 'DrydockController', + 'DrydockAuthorizationListController' => 'DrydockController', + 'DrydockAuthorizationListView' => 'AphrontView', + 'DrydockAuthorizationPHIDType' => 'PhabricatorPHIDType', + 'DrydockAuthorizationQuery' => 'DrydockQuery', + 'DrydockAuthorizationSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DrydockAuthorizationSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockAuthorizationViewController' => 'DrydockController', + 'DrydockBlueprint' => array( + 'DrydockDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorProjectInterface', + 'PhabricatorConduitResultInterface', + ), + 'DrydockBlueprintController' => 'DrydockController', + 'DrydockBlueprintCoreCustomField' => array( + 'DrydockBlueprintCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), + 'DrydockBlueprintCustomField' => 'PhabricatorCustomField', + 'DrydockBlueprintDatasource' => 'PhabricatorTypeaheadDatasource', + 'DrydockBlueprintDisableController' => 'DrydockBlueprintController', + 'DrydockBlueprintDisableTransaction' => 'DrydockBlueprintTransactionType', + 'DrydockBlueprintEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'DrydockBlueprintEditController' => 'DrydockBlueprintController', + 'DrydockBlueprintEditEngine' => 'PhabricatorEditEngine', + 'DrydockBlueprintEditor' => 'PhabricatorApplicationTransactionEditor', + 'DrydockBlueprintImplementation' => 'Phobject', + 'DrydockBlueprintImplementationTestCase' => 'PhabricatorTestCase', + 'DrydockBlueprintListController' => 'DrydockBlueprintController', + 'DrydockBlueprintNameNgrams' => 'PhabricatorSearchNgrams', + 'DrydockBlueprintNameTransaction' => 'DrydockBlueprintTransactionType', + 'DrydockBlueprintPHIDType' => 'PhabricatorPHIDType', + 'DrydockBlueprintQuery' => 'DrydockQuery', + 'DrydockBlueprintSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DrydockBlueprintSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockBlueprintTransaction' => 'PhabricatorModularTransaction', + 'DrydockBlueprintTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'DrydockBlueprintTransactionType' => 'PhabricatorModularTransactionType', + 'DrydockBlueprintTypeTransaction' => 'DrydockBlueprintTransactionType', + 'DrydockBlueprintViewController' => 'DrydockBlueprintController', + 'DrydockCommand' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + ), + 'DrydockCommandError' => 'Phobject', 'DrydockCommandInterface' => 'DrydockInterface', + 'DrydockCommandQuery' => 'DrydockQuery', + 'DrydockConsoleController' => 'DrydockController', 'DrydockController' => 'PhabricatorController', + 'DrydockCreateBlueprintsCapability' => 'PhabricatorPolicyCapability', 'DrydockDAO' => 'PhabricatorLiskDAO', - 'DrydockEC2HostBlueprint' => 'DrydockRemoteHostBlueprint', - 'DrydockLease' => 'DrydockDAO', - 'DrydockLeaseListController' => 'DrydockController', - 'DrydockLeaseStatus' => 'DrydockConstants', - 'DrydockLocalCommandInterface' => 'DrydockCommandInterface', - 'DrydockLocalHostBlueprint' => 'DrydockBlueprint', - 'DrydockLog' => 'DrydockDAO', + 'DrydockDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'DrydockDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'DrydockFilesystemInterface' => 'DrydockInterface', + 'DrydockInterface' => 'Phobject', + 'DrydockLandRepositoryOperation' => 'DrydockRepositoryOperationType', + 'DrydockLease' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'DrydockLeaseAcquiredLogType' => 'DrydockLogType', + 'DrydockLeaseActivatedLogType' => 'DrydockLogType', + 'DrydockLeaseActivationFailureLogType' => 'DrydockLogType', + 'DrydockLeaseActivationYieldLogType' => 'DrydockLogType', + 'DrydockLeaseAllocationFailureLogType' => 'DrydockLogType', + 'DrydockLeaseController' => 'DrydockController', + 'DrydockLeaseDatasource' => 'PhabricatorTypeaheadDatasource', + 'DrydockLeaseDestroyedLogType' => 'DrydockLogType', + 'DrydockLeaseListController' => 'DrydockLeaseController', + 'DrydockLeaseListView' => 'AphrontView', + 'DrydockLeaseNoAuthorizationsLogType' => 'DrydockLogType', + 'DrydockLeaseNoBlueprintsLogType' => 'DrydockLogType', + 'DrydockLeasePHIDType' => 'PhabricatorPHIDType', + 'DrydockLeaseQuery' => 'DrydockQuery', + 'DrydockLeaseQueuedLogType' => 'DrydockLogType', + 'DrydockLeaseReacquireLogType' => 'DrydockLogType', + 'DrydockLeaseReclaimLogType' => 'DrydockLogType', + 'DrydockLeaseReleaseController' => 'DrydockLeaseController', + 'DrydockLeaseReleasedLogType' => 'DrydockLogType', + 'DrydockLeaseSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DrydockLeaseSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockLeaseStatus' => 'PhabricatorObjectStatus', + 'DrydockLeaseUpdateWorker' => 'DrydockWorker', + 'DrydockLeaseViewController' => 'DrydockLeaseController', + 'DrydockLeaseWaitingForActivationLogType' => 'DrydockLogType', + 'DrydockLeaseWaitingForReclamationLogType' => 'DrydockLogType', + 'DrydockLeaseWaitingForResourcesLogType' => 'DrydockLogType', + 'DrydockLog' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + ), 'DrydockLogController' => 'DrydockController', - 'DrydockLogQuery' => 'PhabricatorOffsetPagedQuery', - 'DrydockPhabricatorApplicationBlueprint' => 'DrydockBlueprint', - 'DrydockRemoteHostBlueprint' => 'DrydockBlueprint', - 'DrydockResource' => 'DrydockDAO', - 'DrydockResourceAllocateController' => 'DrydockController', - 'DrydockResourceListController' => 'DrydockController', - 'DrydockResourceStatus' => 'DrydockConstants', + 'DrydockLogGarbageCollector' => 'PhabricatorGarbageCollector', + 'DrydockLogListController' => 'DrydockLogController', + 'DrydockLogListView' => 'AphrontView', + 'DrydockLogQuery' => 'DrydockQuery', + 'DrydockLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockLogType' => 'Phobject', + 'DrydockManagementCommandWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementLeaseWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementReclaimWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementReleaseLeaseWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementReleaseResourceWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementUpdateLeaseWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementUpdateResourceWorkflow' => 'DrydockManagementWorkflow', + 'DrydockManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'DrydockObjectAuthorizationView' => 'AphrontView', + 'DrydockOperationWorkLogType' => 'DrydockLogType', + 'DrydockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'DrydockRepositoryOperation' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + ), + 'DrydockRepositoryOperationController' => 'DrydockController', + 'DrydockRepositoryOperationDismissController' => 'DrydockRepositoryOperationController', + 'DrydockRepositoryOperationListController' => 'DrydockRepositoryOperationController', + 'DrydockRepositoryOperationPHIDType' => 'PhabricatorPHIDType', + 'DrydockRepositoryOperationQuery' => 'DrydockQuery', + 'DrydockRepositoryOperationSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockRepositoryOperationStatusController' => 'DrydockRepositoryOperationController', + 'DrydockRepositoryOperationStatusView' => 'AphrontView', + 'DrydockRepositoryOperationType' => 'Phobject', + 'DrydockRepositoryOperationUpdateWorker' => 'DrydockWorker', + 'DrydockRepositoryOperationViewController' => 'DrydockRepositoryOperationController', + 'DrydockResource' => array( + 'DrydockDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'DrydockResourceActivationFailureLogType' => 'DrydockLogType', + 'DrydockResourceActivationYieldLogType' => 'DrydockLogType', + 'DrydockResourceAllocationFailureLogType' => 'DrydockLogType', + 'DrydockResourceController' => 'DrydockController', + 'DrydockResourceDatasource' => 'PhabricatorTypeaheadDatasource', + 'DrydockResourceListController' => 'DrydockResourceController', + 'DrydockResourceListView' => 'AphrontView', + 'DrydockResourceLockException' => 'Exception', + 'DrydockResourcePHIDType' => 'PhabricatorPHIDType', + 'DrydockResourceQuery' => 'DrydockQuery', + 'DrydockResourceReclaimLogType' => 'DrydockLogType', + 'DrydockResourceReleaseController' => 'DrydockResourceController', + 'DrydockResourceSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'DrydockResourceStatus' => 'PhabricatorObjectStatus', + 'DrydockResourceUpdateWorker' => 'DrydockWorker', + 'DrydockResourceViewController' => 'DrydockResourceController', + 'DrydockSFTPFilesystemInterface' => 'DrydockFilesystemInterface', 'DrydockSSHCommandInterface' => 'DrydockCommandInterface', + 'DrydockSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'DrydockSlotLock' => 'DrydockDAO', + 'DrydockSlotLockException' => 'Exception', + 'DrydockSlotLockFailureLogType' => 'DrydockLogType', + 'DrydockTestRepositoryOperation' => 'DrydockRepositoryOperationType', + 'DrydockTextLogType' => 'DrydockLogType', 'DrydockWebrootInterface' => 'DrydockInterface', + 'DrydockWorker' => 'PhabricatorWorker', + 'DrydockWorkingCopyBlueprintImplementation' => 'DrydockBlueprintImplementation', + 'EdgeSearchConduitAPIMethod' => 'ConduitAPIMethod', + 'FeedConduitAPIMethod' => 'ConduitAPIMethod', + 'FeedPublisherHTTPWorker' => 'FeedPushWorker', + 'FeedPublisherWorker' => 'FeedPushWorker', + 'FeedPushWorker' => 'PhabricatorWorker', + 'FeedQueryConduitAPIMethod' => 'FeedConduitAPIMethod', + 'FeedStoryNotificationGarbageCollector' => 'PhabricatorGarbageCollector', + 'FerretConfigurableSearchFunction' => 'FerretSearchFunction', + 'FerretSearchFunction' => 'Phobject', + 'FileAllocateConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileConduitAPIMethod' => 'ConduitAPIMethod', + 'FileCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', + 'FileDeletionWorker' => 'PhabricatorWorker', + 'FileDownloadConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileInfoConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileMailReceiver' => 'PhabricatorObjectMailReceiver', + 'FileQueryChunksConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'FileTypeIcon' => 'Phobject', + 'FileUploadChunkConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileUploadConduitAPIMethod' => 'FileConduitAPIMethod', + 'FileUploadHashConduitAPIMethod' => 'FileConduitAPIMethod', + 'FilesDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'FlagConduitAPIMethod' => 'ConduitAPIMethod', + 'FlagDeleteConduitAPIMethod' => 'FlagConduitAPIMethod', + 'FlagEditConduitAPIMethod' => 'FlagConduitAPIMethod', + 'FlagQueryConduitAPIMethod' => 'FlagConduitAPIMethod', + 'FuelComponentView' => 'FuelView', + 'FuelGridCellView' => 'FuelComponentView', + 'FuelGridRowView' => 'FuelView', + 'FuelGridView' => 'FuelComponentView', + 'FuelHandleListItemView' => 'FuelView', + 'FuelHandleListView' => 'FuelComponentView', + 'FuelMapItemView' => 'AphrontView', + 'FuelMapView' => 'FuelComponentView', + 'FuelMenuItemView' => 'FuelView', + 'FuelMenuView' => 'FuelComponentView', + 'FuelView' => 'AphrontView', + 'FundBacker' => array( + 'FundDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'FundBackerCart' => 'PhortuneCartImplementation', + 'FundBackerEditor' => 'PhabricatorApplicationTransactionEditor', + 'FundBackerListController' => 'FundController', + 'FundBackerPHIDType' => 'PhabricatorPHIDType', + 'FundBackerProduct' => 'PhortuneProductImplementation', + 'FundBackerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'FundBackerRefundTransaction' => 'FundBackerTransactionType', + 'FundBackerSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'FundBackerStatusTransaction' => 'FundBackerTransactionType', + 'FundBackerTransaction' => 'PhabricatorModularTransaction', + 'FundBackerTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'FundBackerTransactionType' => 'PhabricatorModularTransactionType', + 'FundController' => 'PhabricatorController', + 'FundCreateInitiativesCapability' => 'PhabricatorPolicyCapability', + 'FundDAO' => 'PhabricatorLiskDAO', + 'FundDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'FundInitiative' => array( + 'FundDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorProjectInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'FundInitiativeBackController' => 'FundController', + 'FundInitiativeBackerTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeCloseController' => 'FundController', + 'FundInitiativeDescriptionTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeEditController' => 'FundController', + 'FundInitiativeEditEngine' => 'PhabricatorEditEngine', + 'FundInitiativeEditor' => 'PhabricatorApplicationTransactionEditor', + 'FundInitiativeFerretEngine' => 'PhabricatorFerretEngine', + 'FundInitiativeFulltextEngine' => 'PhabricatorFulltextEngine', + 'FundInitiativeListController' => 'FundController', + 'FundInitiativeMerchantTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeNameTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativePHIDType' => 'PhabricatorPHIDType', + 'FundInitiativeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'FundInitiativeRefundTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'FundInitiativeReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'FundInitiativeRisksTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'FundInitiativeStatusTransaction' => 'FundInitiativeTransactionType', + 'FundInitiativeTransaction' => 'PhabricatorModularTransaction', + 'FundInitiativeTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'FundInitiativeTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'FundInitiativeTransactionType' => 'PhabricatorModularTransactionType', + 'FundInitiativeViewController' => 'FundController', + 'FundSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'HarbormasterAbortOlderBuildsBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterArcLintBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterArcUnitBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterArtifact' => 'Phobject', + 'HarbormasterArtifactSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterArtifactSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterAutotargetsTestCase' => 'PhabricatorTestCase', + 'HarbormasterBuild' => array( + 'HarbormasterDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorDestructibleInterface', + ), + 'HarbormasterBuildAbortedException' => 'Exception', + 'HarbormasterBuildActionController' => 'HarbormasterController', + 'HarbormasterBuildArcanistAutoplan' => 'HarbormasterBuildAutoplan', + 'HarbormasterBuildArtifact' => array( + 'HarbormasterDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'HarbormasterBuildArtifactPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildArtifactQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildAutoplan' => 'Phobject', + 'HarbormasterBuildDependencyDatasource' => 'PhabricatorTypeaheadDatasource', + 'HarbormasterBuildEditAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'HarbormasterBuildEditEngine' => 'PhabricatorEditEngine', + 'HarbormasterBuildEngine' => 'Phobject', + 'HarbormasterBuildFailureException' => 'Exception', + 'HarbormasterBuildGraph' => 'AbstractDirectedGraph', + 'HarbormasterBuildInitiatorDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'HarbormasterBuildLintMessage' => 'HarbormasterDAO', + 'HarbormasterBuildListController' => 'HarbormasterController', + 'HarbormasterBuildLog' => array( + 'HarbormasterDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'HarbormasterBuildLogChunk' => 'HarbormasterDAO', + 'HarbormasterBuildLogChunkIterator' => 'PhutilBufferedIterator', + 'HarbormasterBuildLogDownloadController' => 'HarbormasterController', + 'HarbormasterBuildLogPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildLogRenderController' => 'HarbormasterController', + 'HarbormasterBuildLogSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterBuildLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildLogTestCase' => 'PhabricatorTestCase', + 'HarbormasterBuildLogView' => 'AphrontView', + 'HarbormasterBuildLogViewController' => 'HarbormasterController', + 'HarbormasterBuildMessage' => array( + 'HarbormasterDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'HarbormasterBuildMessageAbortTransaction' => 'HarbormasterBuildMessageTransaction', + 'HarbormasterBuildMessagePauseTransaction' => 'HarbormasterBuildMessageTransaction', + 'HarbormasterBuildMessageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildMessageRestartTransaction' => 'HarbormasterBuildMessageTransaction', + 'HarbormasterBuildMessageResumeTransaction' => 'HarbormasterBuildMessageTransaction', + 'HarbormasterBuildMessageTransaction' => 'HarbormasterBuildTransactionType', + 'HarbormasterBuildPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildPlan' => array( + 'HarbormasterDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorNgramsInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorProjectInterface', + 'PhabricatorPolicyCodexInterface', + ), + 'HarbormasterBuildPlanBehavior' => 'Phobject', + 'HarbormasterBuildPlanBehaviorOption' => 'Phobject', + 'HarbormasterBuildPlanBehaviorTransaction' => 'HarbormasterBuildPlanTransactionType', + 'HarbormasterBuildPlanDatasource' => 'PhabricatorTypeaheadDatasource', + 'HarbormasterBuildPlanDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'HarbormasterBuildPlanDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'HarbormasterBuildPlanEditAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'HarbormasterBuildPlanEditEngine' => 'PhabricatorEditEngine', + 'HarbormasterBuildPlanEditor' => 'PhabricatorApplicationTransactionEditor', + 'HarbormasterBuildPlanNameNgrams' => 'PhabricatorSearchNgrams', + 'HarbormasterBuildPlanNameTransaction' => 'HarbormasterBuildPlanTransactionType', + 'HarbormasterBuildPlanPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildPlanPolicyCodex' => 'PhabricatorPolicyCodex', + 'HarbormasterBuildPlanQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildPlanSearchAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterBuildPlanSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildPlanStatusTransaction' => 'HarbormasterBuildPlanTransactionType', + 'HarbormasterBuildPlanTransaction' => 'PhabricatorModularTransaction', + 'HarbormasterBuildPlanTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HarbormasterBuildPlanTransactionType' => 'PhabricatorModularTransactionType', + 'HarbormasterBuildQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildRequest' => 'Phobject', + 'HarbormasterBuildSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterBuildSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildStatus' => 'Phobject', + 'HarbormasterBuildStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'HarbormasterBuildStep' => array( + 'HarbormasterDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorConduitResultInterface', + ), + 'HarbormasterBuildStepCoreCustomField' => array( + 'HarbormasterBuildStepCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), + 'HarbormasterBuildStepCustomField' => 'PhabricatorCustomField', + 'HarbormasterBuildStepEditAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'HarbormasterBuildStepEditEngine' => 'PhabricatorEditEngine', + 'HarbormasterBuildStepEditor' => 'PhabricatorApplicationTransactionEditor', + 'HarbormasterBuildStepGroup' => 'Phobject', + 'HarbormasterBuildStepImplementation' => 'Phobject', + 'HarbormasterBuildStepImplementationTestCase' => 'PhabricatorTestCase', + 'HarbormasterBuildStepPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildStepQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildStepSearchAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterBuildStepSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildStepTransaction' => 'PhabricatorApplicationTransaction', + 'HarbormasterBuildStepTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HarbormasterBuildTarget' => array( + 'HarbormasterDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'HarbormasterBuildTargetPHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildTargetQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildTargetSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildTransaction' => 'PhabricatorModularTransaction', + 'HarbormasterBuildTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'HarbormasterBuildTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HarbormasterBuildTransactionType' => 'PhabricatorModularTransactionType', + 'HarbormasterBuildUnitMessage' => array( + 'HarbormasterDAO', + 'PhabricatorPolicyInterface', + ), + 'HarbormasterBuildUnitMessageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildView' => 'AphrontView', + 'HarbormasterBuildViewController' => 'HarbormasterController', + 'HarbormasterBuildWorker' => 'HarbormasterWorker', + 'HarbormasterBuildable' => array( + 'HarbormasterDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'HarbormasterBuildableInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorDestructibleInterface', + ), + 'HarbormasterBuildableActionController' => 'HarbormasterController', + 'HarbormasterBuildableEditAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'HarbormasterBuildableEditEngine' => 'PhabricatorEditEngine', + 'HarbormasterBuildableEngine' => 'Phobject', + 'HarbormasterBuildableListController' => 'HarbormasterController', + 'HarbormasterBuildableMessageTransaction' => 'HarbormasterBuildableTransactionType', + 'HarbormasterBuildablePHIDType' => 'PhabricatorPHIDType', + 'HarbormasterBuildableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HarbormasterBuildableSearchAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterBuildableSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HarbormasterBuildableStatus' => 'Phobject', + 'HarbormasterBuildableTransaction' => 'PhabricatorModularTransaction', + 'HarbormasterBuildableTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'HarbormasterBuildableTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HarbormasterBuildableTransactionType' => 'PhabricatorModularTransactionType', + 'HarbormasterBuildableViewController' => 'HarbormasterController', + 'HarbormasterBuildkiteBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterBuildkiteHookController' => 'HarbormasterController', + 'HarbormasterBuiltinBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterCircleCIBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterCircleCIHookController' => 'HarbormasterController', + 'HarbormasterConduitAPIMethod' => 'ConduitAPIMethod', + 'HarbormasterControlBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterController' => 'PhabricatorController', + 'HarbormasterCreateArtifactConduitAPIMethod' => 'HarbormasterConduitAPIMethod', + 'HarbormasterCreatePlansCapability' => 'PhabricatorPolicyCapability', 'HarbormasterDAO' => 'PhabricatorLiskDAO', + 'HarbormasterDrydockBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterDrydockCommandBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterDrydockLeaseArtifact' => 'HarbormasterArtifact', + 'HarbormasterExecFuture' => 'Future', + 'HarbormasterExternalBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterFileArtifact' => 'HarbormasterArtifact', + 'HarbormasterHTTPRequestBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterHostArtifact' => 'HarbormasterDrydockLeaseArtifact', + 'HarbormasterLeaseWorkingCopyBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterLintMessagesController' => 'HarbormasterController', + 'HarbormasterLintPropertyView' => 'AphrontView', + 'HarbormasterLogWorker' => 'HarbormasterWorker', + 'HarbormasterManagementArchiveLogsWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementBuildWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementPublishWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementRebuildLogWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementRestartWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementUpdateWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'HarbormasterManagementWriteLogWorkflow' => 'HarbormasterManagementWorkflow', + 'HarbormasterMessageException' => 'Exception', + 'HarbormasterMessageType' => 'Phobject', + 'HarbormasterObject' => 'HarbormasterDAO', + 'HarbormasterOtherBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterPlanBehaviorController' => 'HarbormasterPlanController', + 'HarbormasterPlanController' => 'HarbormasterController', + 'HarbormasterPlanDisableController' => 'HarbormasterPlanController', + 'HarbormasterPlanEditController' => 'HarbormasterPlanController', + 'HarbormasterPlanListController' => 'HarbormasterPlanController', + 'HarbormasterPlanRunController' => 'HarbormasterPlanController', + 'HarbormasterPlanViewController' => 'HarbormasterPlanController', + 'HarbormasterPrototypeBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterQueryAutotargetsConduitAPIMethod' => 'HarbormasterConduitAPIMethod', + 'HarbormasterQueryBuildablesConduitAPIMethod' => 'HarbormasterConduitAPIMethod', + 'HarbormasterQueryBuildsConduitAPIMethod' => 'HarbormasterConduitAPIMethod', + 'HarbormasterQueryBuildsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'HarbormasterRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'HarbormasterRunBuildPlansHeraldAction' => 'HeraldAction', + 'HarbormasterSchemaSpec' => 'PhabricatorConfigSchemaSpec', 'HarbormasterScratchTable' => 'HarbormasterDAO', - 'HeraldAction' => 'HeraldDAO', - 'HeraldApplyTranscript' => 'HeraldDAO', - 'HeraldCommitAdapter' => 'HeraldObjectAdapter', + 'HarbormasterSendMessageConduitAPIMethod' => 'HarbormasterConduitAPIMethod', + 'HarbormasterSleepBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterStepAddController' => 'HarbormasterPlanController', + 'HarbormasterStepDeleteController' => 'HarbormasterPlanController', + 'HarbormasterStepEditController' => 'HarbormasterPlanController', + 'HarbormasterStepViewController' => 'HarbormasterPlanController', + 'HarbormasterString' => 'HarbormasterDAO', + 'HarbormasterTargetEngine' => 'Phobject', + 'HarbormasterTargetSearchAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'HarbormasterTargetWorker' => 'HarbormasterWorker', + 'HarbormasterTestBuildStepGroup' => 'HarbormasterBuildStepGroup', + 'HarbormasterThrowExceptionBuildStep' => 'HarbormasterBuildStepImplementation', + 'HarbormasterUIEventListener' => 'PhabricatorEventListener', + 'HarbormasterURIArtifact' => 'HarbormasterArtifact', + 'HarbormasterUnitMessageListController' => 'HarbormasterController', + 'HarbormasterUnitMessageViewController' => 'HarbormasterController', + 'HarbormasterUnitPropertyView' => 'AphrontView', + 'HarbormasterUnitStatus' => 'Phobject', + 'HarbormasterUnitSummaryView' => 'AphrontView', + 'HarbormasterUploadArtifactBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterWaitForPreviousBuildStepImplementation' => 'HarbormasterBuildStepImplementation', + 'HarbormasterWorker' => 'PhabricatorWorker', + 'HarbormasterWorkingCopyArtifact' => 'HarbormasterDrydockLeaseArtifact', + 'HeraldActingUserField' => 'HeraldField', + 'HeraldAction' => 'Phobject', + 'HeraldActionGroup' => 'HeraldGroup', + 'HeraldActionRecord' => 'HeraldDAO', + 'HeraldAdapter' => 'Phobject', + 'HeraldAdapterDatasource' => 'PhabricatorTypeaheadDatasource', + 'HeraldAlwaysField' => 'HeraldField', + 'HeraldAnotherRuleField' => 'HeraldField', + 'HeraldApplicationActionGroup' => 'HeraldActionGroup', + 'HeraldApplyTranscript' => 'Phobject', + 'HeraldBasicFieldGroup' => 'HeraldFieldGroup', + 'HeraldBoolFieldValue' => 'HeraldFieldValue', + 'HeraldBuildableState' => 'HeraldState', + 'HeraldCallWebhookAction' => 'HeraldAction', + 'HeraldCommentAction' => 'HeraldAction', + 'HeraldCommentContentField' => 'HeraldField', + 'HeraldCommitAdapter' => array( + 'HeraldAdapter', + 'HarbormasterBuildableAdapterInterface', + ), 'HeraldCondition' => 'HeraldDAO', + 'HeraldConditionResult' => 'HeraldTranscriptResult', + 'HeraldConditionTranscript' => 'Phobject', + 'HeraldContentSourceField' => 'HeraldField', 'HeraldController' => 'PhabricatorController', + 'HeraldCoreStateReasons' => 'HeraldStateReasons', + 'HeraldCreateWebhooksCapability' => 'PhabricatorPolicyCapability', 'HeraldDAO' => 'PhabricatorLiskDAO', - 'HeraldDeleteController' => 'HeraldController', - 'HeraldDifferentialRevisionAdapter' => 'HeraldObjectAdapter', - 'HeraldDryRunAdapter' => 'HeraldObjectAdapter', - 'HeraldEditLogQuery' => 'PhabricatorOffsetPagedQuery', - 'HeraldHomeController' => 'HeraldController', + 'HeraldDeprecatedFieldGroup' => 'HeraldFieldGroup', + 'HeraldDifferentialAdapter' => 'HeraldAdapter', + 'HeraldDifferentialDiffAdapter' => 'HeraldDifferentialAdapter', + 'HeraldDifferentialRevisionAdapter' => array( + 'HeraldDifferentialAdapter', + 'HarbormasterBuildableAdapterInterface', + ), + 'HeraldDisableController' => 'HeraldController', + 'HeraldDoNothingAction' => 'HeraldAction', + 'HeraldEditFieldGroup' => 'HeraldFieldGroup', + 'HeraldEffect' => 'Phobject', + 'HeraldEmptyFieldValue' => 'HeraldFieldValue', + 'HeraldEngine' => 'Phobject', + 'HeraldExactProjectsField' => 'HeraldField', + 'HeraldField' => 'Phobject', + 'HeraldFieldGroup' => 'HeraldGroup', + 'HeraldFieldTestCase' => 'PhutilTestCase', + 'HeraldFieldValue' => 'Phobject', + 'HeraldGroup' => 'Phobject', + 'HeraldInvalidActionException' => 'Exception', 'HeraldInvalidConditionException' => 'Exception', - 'HeraldInvalidFieldException' => 'Exception', + 'HeraldMailableState' => 'HeraldState', + 'HeraldManageGlobalRulesCapability' => 'PhabricatorPolicyCapability', + 'HeraldManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'HeraldManiphestTaskAdapter' => 'HeraldAdapter', 'HeraldNewController' => 'HeraldController', + 'HeraldNewObjectField' => 'HeraldField', + 'HeraldNotifyActionGroup' => 'HeraldActionGroup', + 'HeraldObjectTranscript' => 'Phobject', + 'HeraldPhameBlogAdapter' => 'HeraldAdapter', + 'HeraldPhamePostAdapter' => 'HeraldAdapter', + 'HeraldPholioMockAdapter' => 'HeraldAdapter', + 'HeraldPonderQuestionAdapter' => 'HeraldAdapter', + 'HeraldPreCommitAdapter' => 'HeraldAdapter', + 'HeraldPreCommitContentAdapter' => 'HeraldPreCommitAdapter', + 'HeraldPreCommitRefAdapter' => 'HeraldPreCommitAdapter', + 'HeraldPreventActionGroup' => 'HeraldActionGroup', + 'HeraldProjectsField' => 'PhabricatorProjectTagsField', 'HeraldRecursiveConditionsException' => 'Exception', - 'HeraldRule' => 'HeraldDAO', + 'HeraldRelatedFieldGroup' => 'HeraldFieldGroup', + 'HeraldRemarkupFieldValue' => 'HeraldFieldValue', + 'HeraldRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'HeraldRule' => array( + 'HeraldDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorIndexableInterface', + 'PhabricatorSubscribableInterface', + ), + 'HeraldRuleActionAffectsObjectEdgeType' => 'PhabricatorEdgeType', + 'HeraldRuleAdapter' => 'HeraldAdapter', + 'HeraldRuleAdapterField' => 'HeraldRuleField', 'HeraldRuleController' => 'HeraldController', - 'HeraldRuleEdit' => 'HeraldDAO', - 'HeraldRuleEditHistoryController' => 'HeraldController', - 'HeraldRuleEditHistoryView' => 'AphrontView', + 'HeraldRuleDatasource' => 'PhabricatorTypeaheadDatasource', + 'HeraldRuleDisableTransaction' => 'HeraldRuleTransactionType', + 'HeraldRuleEditTransaction' => 'HeraldRuleTransactionType', + 'HeraldRuleEditor' => 'PhabricatorApplicationTransactionEditor', + 'HeraldRuleEvaluationException' => 'Exception', + 'HeraldRuleField' => 'HeraldField', + 'HeraldRuleFieldGroup' => 'HeraldFieldGroup', + 'HeraldRuleIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension', + 'HeraldRuleListController' => 'HeraldController', 'HeraldRuleListView' => 'AphrontView', - 'HeraldRuleQuery' => 'PhabricatorOffsetPagedQuery', + 'HeraldRuleManagementWorkflow' => 'HeraldManagementWorkflow', + 'HeraldRuleNameTransaction' => 'HeraldRuleTransactionType', + 'HeraldRulePHIDType' => 'PhabricatorPHIDType', + 'HeraldRuleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HeraldRuleReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'HeraldRuleResult' => 'HeraldTranscriptResult', + 'HeraldRuleSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HeraldRuleSerializer' => 'Phobject', + 'HeraldRuleTestCase' => 'PhabricatorTestCase', + 'HeraldRuleTransaction' => 'PhabricatorModularTransaction', + 'HeraldRuleTransactionType' => 'PhabricatorModularTransactionType', + 'HeraldRuleTranscript' => 'Phobject', + 'HeraldRuleTypeConfig' => 'Phobject', + 'HeraldRuleTypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'HeraldRuleTypeField' => 'HeraldRuleField', + 'HeraldRuleViewController' => 'HeraldController', + 'HeraldSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'HeraldSelectFieldValue' => 'HeraldFieldValue', + 'HeraldSpaceField' => 'HeraldField', + 'HeraldState' => 'Phobject', + 'HeraldStateReasons' => 'Phobject', + 'HeraldSubscribersField' => 'HeraldField', + 'HeraldSupportActionGroup' => 'HeraldActionGroup', + 'HeraldSupportFieldGroup' => 'HeraldFieldGroup', 'HeraldTestConsoleController' => 'HeraldController', - 'HeraldTranscript' => 'HeraldDAO', + 'HeraldTestManagementWorkflow' => 'HeraldManagementWorkflow', + 'HeraldTextFieldValue' => 'HeraldFieldValue', + 'HeraldTokenizerFieldValue' => 'HeraldFieldValue', + 'HeraldTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HeraldTransactionsFieldGroup' => 'HeraldFieldGroup', + 'HeraldTranscript' => array( + 'HeraldDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), 'HeraldTranscriptController' => 'HeraldController', + 'HeraldTranscriptDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'HeraldTranscriptGarbageCollector' => 'PhabricatorGarbageCollector', 'HeraldTranscriptListController' => 'HeraldController', - 'JavelinReactorExample' => 'PhabricatorUIExample', - 'JavelinViewExample' => 'PhabricatorUIExample', - 'JavelinViewExampleServerView' => 'AphrontView', + 'HeraldTranscriptPHIDType' => 'PhabricatorPHIDType', + 'HeraldTranscriptQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HeraldTranscriptResult' => 'Phobject', + 'HeraldTranscriptSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HeraldTranscriptTestCase' => 'PhabricatorTestCase', + 'HeraldUtilityActionGroup' => 'HeraldActionGroup', + 'HeraldWebhook' => array( + 'HeraldDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorProjectInterface', + ), + 'HeraldWebhookCallManagementWorkflow' => 'HeraldWebhookManagementWorkflow', + 'HeraldWebhookController' => 'HeraldController', + 'HeraldWebhookDatasource' => 'PhabricatorTypeaheadDatasource', + 'HeraldWebhookEditController' => 'HeraldWebhookController', + 'HeraldWebhookEditEngine' => 'PhabricatorEditEngine', + 'HeraldWebhookEditor' => 'PhabricatorApplicationTransactionEditor', + 'HeraldWebhookKeyController' => 'HeraldWebhookController', + 'HeraldWebhookListController' => 'HeraldWebhookController', + 'HeraldWebhookManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'HeraldWebhookNameTransaction' => 'HeraldWebhookTransactionType', + 'HeraldWebhookPHIDType' => 'PhabricatorPHIDType', + 'HeraldWebhookQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HeraldWebhookRequest' => array( + 'HeraldDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'HeraldWebhookRequestGarbageCollector' => 'PhabricatorGarbageCollector', + 'HeraldWebhookRequestListView' => 'AphrontView', + 'HeraldWebhookRequestPHIDType' => 'PhabricatorPHIDType', + 'HeraldWebhookRequestQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'HeraldWebhookSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'HeraldWebhookStatusTransaction' => 'HeraldWebhookTransactionType', + 'HeraldWebhookTestController' => 'HeraldWebhookController', + 'HeraldWebhookTransaction' => 'PhabricatorModularTransaction', + 'HeraldWebhookTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'HeraldWebhookTransactionType' => 'PhabricatorModularTransactionType', + 'HeraldWebhookURITransaction' => 'HeraldWebhookTransactionType', + 'HeraldWebhookViewController' => 'HeraldWebhookController', + 'HeraldWebhookWorker' => 'PhabricatorWorker', + 'Javelin' => 'Phobject', + 'LegalpadController' => 'PhabricatorController', + 'LegalpadCreateDocumentsCapability' => 'PhabricatorPolicyCapability', + 'LegalpadDAO' => 'PhabricatorLiskDAO', + 'LegalpadDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'LegalpadDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'LegalpadDocument' => array( + 'LegalpadDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'LegalpadDocumentBody' => array( + 'LegalpadDAO', + 'PhabricatorMarkupInterface', + ), + 'LegalpadDocumentDatasource' => 'PhabricatorTypeaheadDatasource', + 'LegalpadDocumentDoneController' => 'LegalpadController', + 'LegalpadDocumentEditController' => 'LegalpadController', + 'LegalpadDocumentEditEngine' => 'PhabricatorEditEngine', + 'LegalpadDocumentEditor' => 'PhabricatorApplicationTransactionEditor', + 'LegalpadDocumentListController' => 'LegalpadController', + 'LegalpadDocumentManageController' => 'LegalpadController', + 'LegalpadDocumentPreambleTransaction' => 'LegalpadDocumentTransactionType', + 'LegalpadDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'LegalpadDocumentRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'LegalpadDocumentRequireSignatureTransaction' => 'LegalpadDocumentTransactionType', + 'LegalpadDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'LegalpadDocumentSignController' => 'LegalpadController', + 'LegalpadDocumentSignature' => array( + 'LegalpadDAO', + 'PhabricatorPolicyInterface', + ), + 'LegalpadDocumentSignatureAddController' => 'LegalpadController', + 'LegalpadDocumentSignatureListController' => 'LegalpadController', + 'LegalpadDocumentSignatureQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'LegalpadDocumentSignatureSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'LegalpadDocumentSignatureTypeTransaction' => 'LegalpadDocumentTransactionType', + 'LegalpadDocumentSignatureVerificationController' => 'LegalpadController', + 'LegalpadDocumentSignatureViewController' => 'LegalpadController', + 'LegalpadDocumentTextTransaction' => 'LegalpadDocumentTransactionType', + 'LegalpadDocumentTitleTransaction' => 'LegalpadDocumentTransactionType', + 'LegalpadDocumentTransactionType' => 'PhabricatorModularTransactionType', + 'LegalpadMailReceiver' => 'PhabricatorObjectMailReceiver', + 'LegalpadObjectNeedsSignatureEdgeType' => 'PhabricatorEdgeType', + 'LegalpadReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'LegalpadRequireSignatureHeraldAction' => 'HeraldAction', + 'LegalpadSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'LegalpadSignatureNeededByObjectEdgeType' => 'PhabricatorEdgeType', + 'LegalpadTransaction' => 'PhabricatorModularTransaction', + 'LegalpadTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'LegalpadTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'LiskChunkTestCase' => 'PhabricatorTestCase', + 'LiskDAO' => array( + 'Phobject', + 'AphrontDatabaseTableRefInterface', + ), + 'LiskDAOTestCase' => 'PhabricatorTestCase', 'LiskEphemeralObjectException' => 'Exception', 'LiskFixtureTestCase' => 'PhabricatorTestCase', 'LiskIsolationTestCase' => 'PhabricatorTestCase', 'LiskIsolationTestDAO' => 'LiskDAO', 'LiskIsolationTestDAOException' => 'Exception', - 'ManiphestAction' => 'ManiphestConstants', - 'ManiphestAuxiliaryFieldDefaultSpecification' => 'ManiphestAuxiliaryFieldSpecification', - 'ManiphestAuxiliaryFieldTypeException' => 'Exception', - 'ManiphestAuxiliaryFieldValidationException' => 'Exception', - 'ManiphestBatchEditController' => 'ManiphestController', + 'LiskMigrationIterator' => 'PhutilBufferedIterator', + 'LiskRawMigrationIterator' => 'PhutilBufferedIterator', + 'MacroConduitAPIMethod' => 'ConduitAPIMethod', + 'MacroCreateMemeConduitAPIMethod' => 'MacroConduitAPIMethod', + 'MacroEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'MacroEmojiExample' => 'PhabricatorUIExample', + 'MacroQueryConduitAPIMethod' => 'MacroConduitAPIMethod', + 'ManiphestAssignEmailCommand' => 'ManiphestEmailCommand', + 'ManiphestAssigneeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'ManiphestBulkEditCapability' => 'PhabricatorPolicyCapability', + 'ManiphestBulkEditController' => 'ManiphestController', + 'ManiphestClaimEmailCommand' => 'ManiphestEmailCommand', + 'ManiphestCloseEmailCommand' => 'ManiphestEmailCommand', + 'ManiphestConduitAPIMethod' => 'ConduitAPIMethod', + 'ManiphestConfiguredCustomField' => array( + 'ManiphestCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), + 'ManiphestConstants' => 'Phobject', 'ManiphestController' => 'PhabricatorController', + 'ManiphestCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', + 'ManiphestCreateTaskConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestCustomField' => 'PhabricatorCustomField', + 'ManiphestCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', + 'ManiphestCustomFieldStatusParser' => 'PhabricatorCustomFieldMonogramParser', + 'ManiphestCustomFieldStatusParserTestCase' => 'PhabricatorTestCase', + 'ManiphestCustomFieldStorage' => 'PhabricatorCustomFieldStorage', + 'ManiphestCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'ManiphestDAO' => 'PhabricatorLiskDAO', - 'ManiphestDefaultTaskExtensions' => 'ManiphestTaskExtensions', - 'ManiphestExportController' => 'ManiphestController', - 'ManiphestReplyHandler' => 'PhabricatorMailReplyHandler', + 'ManiphestDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'ManiphestDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'ManiphestEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'ManiphestEditEngine' => 'PhabricatorEditEngine', + 'ManiphestEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'ManiphestGetTaskTransactionsConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', + 'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'ManiphestNameIndex' => 'ManiphestDAO', + 'ManiphestPointsConfigType' => 'PhabricatorJSONConfigType', + 'ManiphestPrioritiesConfigType' => 'PhabricatorJSONConfigType', + 'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand', + 'ManiphestPrioritySearchConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestProjectNameFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'ManiphestReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', 'ManiphestReportController' => 'ManiphestController', - 'ManiphestSavedQuery' => 'ManiphestDAO', - 'ManiphestSavedQueryDeleteController' => 'ManiphestController', - 'ManiphestSavedQueryEditController' => 'ManiphestController', - 'ManiphestSavedQueryListController' => 'ManiphestController', - 'ManiphestSubpriorityController' => 'ManiphestController', - 'ManiphestTask' => 'ManiphestDAO', - 'ManiphestTaskAuxiliaryStorage' => 'ManiphestDAO', - 'ManiphestTaskDescriptionChangeController' => 'ManiphestController', - 'ManiphestTaskDescriptionPreviewController' => 'ManiphestController', + 'ManiphestSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'ManiphestSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'ManiphestStatusEmailCommand' => 'ManiphestEmailCommand', + 'ManiphestStatusSearchConduitAPIMethod' => 'ManiphestConduitAPIMethod', + 'ManiphestStatusesConfigType' => 'PhabricatorJSONConfigType', + 'ManiphestSubtypesConfigType' => 'PhabricatorJSONConfigType', + 'ManiphestTask' => array( + 'ManiphestDAO', + 'PhabricatorSubscribableInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorMentionableInterface', + 'PhrequentTrackableInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorProjectInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'DoorkeeperBridgedObjectInterface', + 'PhabricatorEditEngineSubtypeInterface', + 'PhabricatorEditEngineLockableInterface', + 'PhabricatorEditEngineMFAInterface', + 'PhabricatorPolicyCodexInterface', + 'PhabricatorUnlockableInterface', + ), + 'ManiphestTaskAssignHeraldAction' => 'HeraldAction', + 'ManiphestTaskAssignOtherHeraldAction' => 'ManiphestTaskAssignHeraldAction', + 'ManiphestTaskAssignSelfHeraldAction' => 'ManiphestTaskAssignHeraldAction', + 'ManiphestTaskAssigneeHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskAttachTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskAuthorHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskAuthorPolicyRule' => 'PhabricatorPolicyRule', + 'ManiphestTaskBulkEngine' => 'PhabricatorBulkEngine', + 'ManiphestTaskCloseAsDuplicateRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskClosedStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'ManiphestTaskCoverImageTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskDependedOnByTaskEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskDependsOnTaskEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskDescriptionHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskDescriptionTransaction' => 'ManiphestTaskTransactionType', 'ManiphestTaskDetailController' => 'ManiphestController', + 'ManiphestTaskEdgeTransaction' => 'ManiphestTaskTransactionType', 'ManiphestTaskEditController' => 'ManiphestController', + 'ManiphestTaskEditEngineLock' => 'PhabricatorEditEngineLock', + 'ManiphestTaskFerretEngine' => 'PhabricatorFerretEngine', + 'ManiphestTaskFulltextEngine' => 'PhabricatorFulltextEngine', + 'ManiphestTaskGraph' => 'PhabricatorObjectGraph', + 'ManiphestTaskGraphController' => 'ManiphestController', + 'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasCommitRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasDuplicateTaskEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasMockEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasMockRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasParentRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasRevisionEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasRevisionRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasSubtaskRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHeraldField' => 'HeraldField', + 'ManiphestTaskHeraldFieldGroup' => 'HeraldFieldGroup', + 'ManiphestTaskIsDuplicateOfTaskEdgeType' => 'PhabricatorEdgeType', 'ManiphestTaskListController' => 'ManiphestController', + 'ManiphestTaskListHTTPParameterType' => 'AphrontListHTTPParameterType', 'ManiphestTaskListView' => 'ManiphestView', - 'ManiphestTaskOwner' => 'ManiphestConstants', + 'ManiphestTaskMFAEngine' => 'PhabricatorEditEngineMFAEngine', + 'ManiphestTaskMailReceiver' => 'PhabricatorObjectMailReceiver', + 'ManiphestTaskMergeInRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskMergedFromTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskMergedIntoTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskOpenStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'ManiphestTaskOwnerTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskPHIDResolver' => 'PhabricatorPHIDResolver', + 'ManiphestTaskPHIDType' => 'PhabricatorPHIDType', + 'ManiphestTaskParentTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskPoints' => 'Phobject', + 'ManiphestTaskPointsTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskPolicyCodex' => 'PhabricatorPolicyCodex', 'ManiphestTaskPriority' => 'ManiphestConstants', - 'ManiphestTaskProject' => 'ManiphestDAO', - 'ManiphestTaskProjectsView' => 'ManiphestView', + 'ManiphestTaskPriorityDatasource' => 'PhabricatorTypeaheadDatasource', + 'ManiphestTaskPriorityHeraldAction' => 'HeraldAction', + 'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskPriorityTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'ManiphestTaskRelationship' => 'PhabricatorObjectRelationship', + 'ManiphestTaskRelationshipSource' => 'PhabricatorObjectRelationshipSource', + 'ManiphestTaskResultListView' => 'ManiphestView', + 'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine', 'ManiphestTaskStatus' => 'ManiphestConstants', - 'ManiphestTaskSubscriber' => 'ManiphestDAO', - 'ManiphestTaskSummaryView' => 'ManiphestView', - 'ManiphestTransaction' => 'ManiphestDAO', - 'ManiphestTransactionDetailView' => 'ManiphestView', - 'ManiphestTransactionListView' => 'ManiphestView', - 'ManiphestTransactionPreviewController' => 'ManiphestController', - 'ManiphestTransactionSaveController' => 'ManiphestController', - 'ManiphestTransactionType' => 'ManiphestConstants', + 'ManiphestTaskStatusDatasource' => 'PhabricatorTypeaheadDatasource', + 'ManiphestTaskStatusFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'ManiphestTaskStatusHeraldAction' => 'HeraldAction', + 'ManiphestTaskStatusHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskStatusTestCase' => 'PhabricatorTestCase', + 'ManiphestTaskStatusTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskSubpriorityTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskSubtaskController' => 'ManiphestController', + 'ManiphestTaskSubtypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'ManiphestTaskTitleHeraldField' => 'ManiphestTaskHeraldField', + 'ManiphestTaskTitleTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskTransactionType' => 'PhabricatorModularTransactionType', + 'ManiphestTaskUnblockTransaction' => 'ManiphestTaskTransactionType', + 'ManiphestTaskUnlockEngine' => 'PhabricatorUnlockEngine', + 'ManiphestTransaction' => 'PhabricatorModularTransaction', + 'ManiphestTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'ManiphestTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'ManiphestTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'ManiphestUpdateConduitAPIMethod' => 'ManiphestConduitAPIMethod', 'ManiphestView' => 'AphrontView', - 'MetaMTANotificationType' => 'MetaMTAConstants', + 'MetaMTAEmailTransactionCommand' => 'Phobject', + 'MetaMTAEmailTransactionCommandTestCase' => 'PhabricatorTestCase', + 'MetaMTAMailReceivedGarbageCollector' => 'PhabricatorGarbageCollector', + 'MetaMTAMailSentGarbageCollector' => 'PhabricatorGarbageCollector', + 'MetaMTAReceivedMailStatus' => 'Phobject', + 'MultimeterContext' => 'MultimeterDimension', + 'MultimeterControl' => 'Phobject', + 'MultimeterController' => 'PhabricatorController', + 'MultimeterDAO' => 'PhabricatorLiskDAO', + 'MultimeterDimension' => 'MultimeterDAO', + 'MultimeterEvent' => 'MultimeterDAO', + 'MultimeterEventGarbageCollector' => 'PhabricatorGarbageCollector', + 'MultimeterHost' => 'MultimeterDimension', + 'MultimeterLabel' => 'MultimeterDimension', + 'MultimeterSampleController' => 'MultimeterController', + 'MultimeterViewer' => 'MultimeterDimension', + 'NuanceCommandImplementation' => 'Phobject', + 'NuanceConduitAPIMethod' => 'ConduitAPIMethod', + 'NuanceConsoleController' => 'NuanceController', + 'NuanceContentSource' => 'PhabricatorContentSource', + 'NuanceController' => 'PhabricatorController', + 'NuanceDAO' => 'PhabricatorLiskDAO', + 'NuanceFormItemType' => 'NuanceItemType', + 'NuanceGitHubEventItemType' => 'NuanceItemType', + 'NuanceGitHubImportCursor' => 'NuanceImportCursor', + 'NuanceGitHubIssuesImportCursor' => 'NuanceGitHubImportCursor', + 'NuanceGitHubRawEvent' => 'Phobject', + 'NuanceGitHubRawEventTestCase' => 'PhabricatorTestCase', + 'NuanceGitHubRepositoryImportCursor' => 'NuanceGitHubImportCursor', + 'NuanceGitHubRepositorySourceDefinition' => 'NuanceSourceDefinition', + 'NuanceImportCursor' => 'Phobject', + 'NuanceImportCursorData' => array( + 'NuanceDAO', + 'PhabricatorPolicyInterface', + ), + 'NuanceImportCursorDataQuery' => 'NuanceQuery', + 'NuanceImportCursorPHIDType' => 'PhabricatorPHIDType', + 'NuanceItem' => array( + 'NuanceDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'NuanceItemActionController' => 'NuanceController', + 'NuanceItemCommand' => array( + 'NuanceDAO', + 'PhabricatorPolicyInterface', + ), + 'NuanceItemCommandQuery' => 'NuanceQuery', + 'NuanceItemCommandSpec' => 'Phobject', + 'NuanceItemCommandTransaction' => 'NuanceItemTransactionType', + 'NuanceItemController' => 'NuanceController', + 'NuanceItemEditor' => 'PhabricatorApplicationTransactionEditor', + 'NuanceItemListController' => 'NuanceItemController', + 'NuanceItemManageController' => 'NuanceController', + 'NuanceItemOwnerTransaction' => 'NuanceItemTransactionType', + 'NuanceItemPHIDType' => 'PhabricatorPHIDType', + 'NuanceItemPropertyTransaction' => 'NuanceItemTransactionType', + 'NuanceItemQuery' => 'NuanceQuery', + 'NuanceItemQueueTransaction' => 'NuanceItemTransactionType', + 'NuanceItemRequestorTransaction' => 'NuanceItemTransactionType', + 'NuanceItemSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'NuanceItemSourceTransaction' => 'NuanceItemTransactionType', + 'NuanceItemStatusTransaction' => 'NuanceItemTransactionType', + 'NuanceItemTransaction' => 'NuanceTransaction', + 'NuanceItemTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'NuanceItemTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'NuanceItemTransactionType' => 'PhabricatorModularTransactionType', + 'NuanceItemType' => 'Phobject', + 'NuanceItemUpdateWorker' => 'NuanceWorker', + 'NuanceItemViewController' => 'NuanceController', + 'NuanceManagementImportWorkflow' => 'NuanceManagementWorkflow', + 'NuanceManagementUpdateWorkflow' => 'NuanceManagementWorkflow', + 'NuanceManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'NuancePhabricatorFormSourceDefinition' => 'NuanceSourceDefinition', + 'NuanceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'NuanceQueue' => array( + 'NuanceDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'NuanceQueueController' => 'NuanceController', + 'NuanceQueueDatasource' => 'PhabricatorTypeaheadDatasource', + 'NuanceQueueEditController' => 'NuanceQueueController', + 'NuanceQueueEditEngine' => 'PhabricatorEditEngine', + 'NuanceQueueEditor' => 'PhabricatorApplicationTransactionEditor', + 'NuanceQueueListController' => 'NuanceQueueController', + 'NuanceQueueNameTransaction' => 'NuanceQueueTransactionType', + 'NuanceQueuePHIDType' => 'PhabricatorPHIDType', + 'NuanceQueueQuery' => 'NuanceQuery', + 'NuanceQueueSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'NuanceQueueTransaction' => 'NuanceTransaction', + 'NuanceQueueTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'NuanceQueueTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'NuanceQueueTransactionType' => 'PhabricatorModularTransactionType', + 'NuanceQueueViewController' => 'NuanceQueueController', + 'NuanceQueueWorkController' => 'NuanceQueueController', + 'NuanceSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'NuanceSource' => array( + 'NuanceDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorNgramsInterface', + ), + 'NuanceSourceActionController' => 'NuanceController', + 'NuanceSourceController' => 'NuanceController', + 'NuanceSourceDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'NuanceSourceDefaultQueueTransaction' => 'NuanceSourceTransactionType', + 'NuanceSourceDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'NuanceSourceDefinition' => 'Phobject', + 'NuanceSourceDefinitionTestCase' => 'PhabricatorTestCase', + 'NuanceSourceEditController' => 'NuanceSourceController', + 'NuanceSourceEditEngine' => 'PhabricatorEditEngine', + 'NuanceSourceEditor' => 'PhabricatorApplicationTransactionEditor', + 'NuanceSourceListController' => 'NuanceSourceController', + 'NuanceSourceManageCapability' => 'PhabricatorPolicyCapability', + 'NuanceSourceNameNgrams' => 'PhabricatorSearchNgrams', + 'NuanceSourceNameTransaction' => 'NuanceSourceTransactionType', + 'NuanceSourcePHIDType' => 'PhabricatorPHIDType', + 'NuanceSourceQuery' => 'NuanceQuery', + 'NuanceSourceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'NuanceSourceTransaction' => 'NuanceTransaction', + 'NuanceSourceTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'NuanceSourceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'NuanceSourceTransactionType' => 'PhabricatorModularTransactionType', + 'NuanceSourceViewController' => 'NuanceSourceController', + 'NuanceTransaction' => 'PhabricatorModularTransaction', + 'NuanceTrashCommand' => 'NuanceCommandImplementation', + 'NuanceWorker' => 'PhabricatorWorker', + 'OwnersConduitAPIMethod' => 'ConduitAPIMethod', + 'OwnersEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', 'OwnersPackageReplyHandler' => 'PhabricatorMailReplyHandler', - 'PackageCreateMail' => 'PackageMail', - 'PackageDeleteMail' => 'PackageMail', - 'PackageModifyMail' => 'PackageMail', + 'OwnersSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PHIDConduitAPIMethod' => 'ConduitAPIMethod', + 'PHIDInfoConduitAPIMethod' => 'PHIDConduitAPIMethod', + 'PHIDLookupConduitAPIMethod' => 'PHIDConduitAPIMethod', + 'PHIDQueryConduitAPIMethod' => 'PHIDConduitAPIMethod', + 'PHUI' => 'Phobject', + 'PHUIActionPanelExample' => 'PhabricatorUIExample', + 'PHUIActionPanelView' => 'AphrontTagView', + 'PHUIApplicationMenuView' => 'Phobject', + 'PHUIBadgeBoxView' => 'AphrontTagView', + 'PHUIBadgeExample' => 'PhabricatorUIExample', + 'PHUIBadgeMiniView' => 'AphrontTagView', + 'PHUIBadgeView' => 'AphrontTagView', + 'PHUIBigInfoExample' => 'PhabricatorUIExample', + 'PHUIBigInfoView' => 'AphrontTagView', + 'PHUIBoxExample' => 'PhabricatorUIExample', + 'PHUIBoxView' => 'AphrontTagView', + 'PHUIButtonBarExample' => 'PhabricatorUIExample', + 'PHUIButtonBarView' => 'AphrontTagView', + 'PHUIButtonExample' => 'PhabricatorUIExample', + 'PHUIButtonView' => 'AphrontTagView', + 'PHUICMSView' => 'AphrontTagView', + 'PHUICalendarDayView' => 'AphrontView', + 'PHUICalendarListView' => 'AphrontTagView', + 'PHUICalendarMonthView' => 'AphrontView', + 'PHUICalendarWeekView' => 'AphrontView', + 'PHUICalendarWidgetView' => 'AphrontTagView', + 'PHUIColor' => 'Phobject', + 'PHUIColorPalletteExample' => 'PhabricatorUIExample', + 'PHUICrumbView' => 'AphrontView', + 'PHUICrumbsView' => 'AphrontView', + 'PHUICurtainExtension' => 'Phobject', + 'PHUICurtainObjectRefListView' => 'AphrontTagView', + 'PHUICurtainObjectRefView' => 'AphrontTagView', + 'PHUICurtainPanelView' => 'AphrontTagView', + 'PHUICurtainView' => 'AphrontTagView', + 'PHUIDiffGraphView' => 'Phobject', + 'PHUIDiffGraphViewTestCase' => 'PhabricatorTestCase', + 'PHUIDiffInlineCommentDetailView' => 'PHUIDiffInlineCommentView', + 'PHUIDiffInlineCommentEditView' => 'PHUIDiffInlineCommentView', + 'PHUIDiffInlineCommentPreviewListView' => 'AphrontView', + 'PHUIDiffInlineCommentRowScaffold' => 'AphrontView', + 'PHUIDiffInlineCommentTableScaffold' => 'AphrontView', + 'PHUIDiffInlineCommentUndoView' => 'PHUIDiffInlineCommentView', + 'PHUIDiffInlineCommentView' => 'AphrontView', + 'PHUIDiffInlineThreader' => 'Phobject', + 'PHUIDiffOneUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold', + 'PHUIDiffRevealIconView' => 'AphrontView', + 'PHUIDiffTableOfContentsItemView' => 'AphrontView', + 'PHUIDiffTableOfContentsListView' => 'AphrontView', + 'PHUIDiffTwoUpInlineCommentRowScaffold' => 'PHUIDiffInlineCommentRowScaffold', + 'PHUIDocumentSummaryView' => 'AphrontTagView', + 'PHUIDocumentView' => 'AphrontTagView', + 'PHUIFeedStoryExample' => 'PhabricatorUIExample', + 'PHUIFeedStoryView' => 'AphrontView', + 'PHUIFormDividerControl' => 'AphrontFormControl', + 'PHUIFormFileControl' => 'AphrontFormControl', + 'PHUIFormFreeformDateControl' => 'AphrontFormControl', + 'PHUIFormIconSetControl' => 'AphrontFormControl', + 'PHUIFormInsetView' => 'AphrontView', + 'PHUIFormLayoutView' => 'AphrontView', + 'PHUIFormNumberControl' => 'AphrontFormControl', + 'PHUIFormTimerControl' => 'AphrontFormControl', + 'PHUIFormationColumnDynamicView' => 'PHUIFormationColumnView', + 'PHUIFormationColumnItem' => 'Phobject', + 'PHUIFormationColumnView' => 'AphrontAutoIDView', + 'PHUIFormationContentView' => 'PHUIFormationColumnView', + 'PHUIFormationExpanderView' => 'AphrontAutoIDView', + 'PHUIFormationFlankView' => 'PHUIFormationColumnDynamicView', + 'PHUIFormationResizerView' => 'PHUIFormationColumnView', + 'PHUIFormationView' => 'AphrontAutoIDView', + 'PHUIHandleListView' => 'AphrontTagView', + 'PHUIHandleTagListView' => 'AphrontTagView', + 'PHUIHandleView' => 'AphrontView', + 'PHUIHeadThingView' => 'AphrontTagView', + 'PHUIHeaderView' => 'AphrontTagView', + 'PHUIHomeView' => 'AphrontTagView', + 'PHUIHovercardUIExample' => 'PhabricatorUIExample', + 'PHUIHovercardView' => 'AphrontTagView', + 'PHUIIconCircleView' => 'AphrontTagView', + 'PHUIIconExample' => 'PhabricatorUIExample', + 'PHUIIconView' => 'AphrontTagView', + 'PHUIImageMaskExample' => 'PhabricatorUIExample', + 'PHUIImageMaskView' => 'AphrontTagView', + 'PHUIInfoExample' => 'PhabricatorUIExample', + 'PHUIInfoView' => 'AphrontTagView', + 'PHUIInvisibleCharacterTestCase' => 'PhabricatorTestCase', + 'PHUIInvisibleCharacterView' => 'AphrontView', + 'PHUILauncherView' => 'AphrontTagView', + 'PHUILeftRightExample' => 'PhabricatorUIExample', + 'PHUILeftRightView' => 'AphrontTagView', + 'PHUILinkView' => 'AphrontTagView', + 'PHUIListExample' => 'PhabricatorUIExample', + 'PHUIListItemView' => 'AphrontTagView', + 'PHUIListView' => 'AphrontTagView', + 'PHUIListViewTestCase' => 'PhabricatorTestCase', + 'PHUIObjectBoxView' => 'AphrontTagView', + 'PHUIObjectItemListExample' => 'PhabricatorUIExample', + 'PHUIObjectItemListView' => 'AphrontTagView', + 'PHUIObjectItemView' => 'AphrontTagView', + 'PHUIPagerView' => 'AphrontView', + 'PHUIPinboardItemView' => 'AphrontView', + 'PHUIPinboardView' => 'AphrontView', + 'PHUIPolicySectionView' => 'AphrontTagView', + 'PHUIPropertyGroupView' => 'AphrontTagView', + 'PHUIPropertyListExample' => 'PhabricatorUIExample', + 'PHUIPropertyListView' => 'AphrontView', + 'PHUIRemarkupImageView' => 'AphrontView', + 'PHUIRemarkupPreviewPanel' => 'AphrontTagView', + 'PHUIRemarkupView' => 'AphrontView', + 'PHUISegmentBarSegmentView' => 'AphrontTagView', + 'PHUISegmentBarView' => 'AphrontTagView', + 'PHUISpacesNamespaceContextView' => 'AphrontView', + 'PHUIStatusItemView' => 'AphrontTagView', + 'PHUIStatusListView' => 'AphrontTagView', + 'PHUITabGroupView' => 'AphrontTagView', + 'PHUITabView' => 'AphrontTagView', + 'PHUITagExample' => 'PhabricatorUIExample', + 'PHUITagView' => 'AphrontTagView', + 'PHUITimelineEventView' => 'AphrontView', + 'PHUITimelineExample' => 'PhabricatorUIExample', + 'PHUITimelineView' => 'AphrontView', + 'PHUITwoColumnView' => 'AphrontTagView', + 'PHUITypeaheadExample' => 'PhabricatorUIExample', + 'PHUIUserAvailabilityView' => 'AphrontTagView', + 'PHUIWorkboardView' => 'AphrontTagView', + 'PHUIWorkpanelView' => 'AphrontTagView', + 'PHUIXComponentsExample' => 'PhabricatorUIExample', + 'PassphraseAbstractKey' => 'Phobject', + 'PassphraseConduitAPIMethod' => 'ConduitAPIMethod', + 'PassphraseController' => 'PhabricatorController', + 'PassphraseCredential' => array( + 'PassphraseDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PassphraseCredentialAuthorPolicyRule' => 'PhabricatorPolicyRule', + 'PassphraseCredentialConduitController' => 'PassphraseController', + 'PassphraseCredentialConduitTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialControl' => 'AphrontFormControl', + 'PassphraseCredentialCreateController' => 'PassphraseController', + 'PassphraseCredentialDescriptionTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialDestroyController' => 'PassphraseController', + 'PassphraseCredentialDestroyTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialEditController' => 'PassphraseController', + 'PassphraseCredentialFerretEngine' => 'PhabricatorFerretEngine', + 'PassphraseCredentialFulltextEngine' => 'PhabricatorFulltextEngine', + 'PassphraseCredentialListController' => 'PassphraseController', + 'PassphraseCredentialLockController' => 'PassphraseController', + 'PassphraseCredentialLockTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialLookedAtTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialNameTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialPHIDType' => 'PhabricatorPHIDType', + 'PassphraseCredentialPublicController' => 'PassphraseController', + 'PassphraseCredentialQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PassphraseCredentialRevealController' => 'PassphraseController', + 'PassphraseCredentialSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PassphraseCredentialSecretIDTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialTransaction' => 'PhabricatorModularTransaction', + 'PassphraseCredentialTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PassphraseCredentialTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PassphraseCredentialTransactionType' => 'PhabricatorModularTransactionType', + 'PassphraseCredentialType' => 'Phobject', + 'PassphraseCredentialTypeTestCase' => 'PhabricatorTestCase', + 'PassphraseCredentialUsernameTransaction' => 'PassphraseCredentialTransactionType', + 'PassphraseCredentialViewController' => 'PassphraseController', + 'PassphraseDAO' => 'PhabricatorLiskDAO', + 'PassphraseDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PassphraseDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PassphraseNoteCredentialType' => 'PassphraseCredentialType', + 'PassphrasePasswordCredentialType' => 'PassphraseCredentialType', + 'PassphrasePasswordKey' => 'PassphraseAbstractKey', + 'PassphraseQueryConduitAPIMethod' => 'PassphraseConduitAPIMethod', + 'PassphraseRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PassphraseSSHGeneratedKeyCredentialType' => 'PassphraseSSHPrivateKeyCredentialType', + 'PassphraseSSHKey' => 'PassphraseAbstractKey', + 'PassphraseSSHPrivateKeyCredentialType' => 'PassphraseCredentialType', + 'PassphraseSSHPrivateKeyFileCredentialType' => 'PassphraseSSHPrivateKeyCredentialType', + 'PassphraseSSHPrivateKeyTextCredentialType' => 'PassphraseSSHPrivateKeyCredentialType', + 'PassphraseSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PassphraseSecret' => 'PassphraseDAO', + 'PassphraseTokenCredentialType' => 'PassphraseCredentialType', + 'PasteConduitAPIMethod' => 'ConduitAPIMethod', + 'PasteCreateConduitAPIMethod' => 'PasteConduitAPIMethod', + 'PasteCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', + 'PasteDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PasteDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PasteEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PasteEmbedView' => 'AphrontView', + 'PasteInfoConduitAPIMethod' => 'PasteConduitAPIMethod', + 'PasteLanguageSelectDatasource' => 'PhabricatorTypeaheadDatasource', + 'PasteMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PasteQueryConduitAPIMethod' => 'PasteConduitAPIMethod', + 'PasteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PasteSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PeopleBrowseUserDirectoryCapability' => 'PhabricatorPolicyCapability', + 'PeopleCreateUsersCapability' => 'PhabricatorPolicyCapability', + 'PeopleDisableUsersCapability' => 'PhabricatorPolicyCapability', + 'PeopleHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', + 'PeopleMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', + 'PeopleUserLogGarbageCollector' => 'PhabricatorGarbageCollector', 'Phabricator404Controller' => 'PhabricatorController', - 'PhabricatorAuditAddCommentController' => 'PhabricatorAuditController', - 'PhabricatorAuditComment' => 'PhabricatorAuditDAO', - 'PhabricatorAuditCommitListView' => 'AphrontView', + 'PhabricatorAWSConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorAWSSESFuture' => 'PhutilAWSFuture', + 'PhabricatorAccessControlTestCase' => 'PhabricatorTestCase', + 'PhabricatorAccessLog' => 'Phobject', + 'PhabricatorAccessLogConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorAccessibilitySetting' => 'PhabricatorSelectSetting', + 'PhabricatorAccumulateChartFunction' => 'PhabricatorHigherOrderChartFunction', + 'PhabricatorActionListView' => 'AphrontTagView', + 'PhabricatorActionView' => 'AphrontView', + 'PhabricatorActivitySettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorAddEmailUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorAddMultifactorUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorAdministratorsPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorAjaxRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorAlmanacApplication' => 'PhabricatorApplication', + 'PhabricatorAmazonAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorAmazonSNSFuture' => 'PhutilAWSFuture', + 'PhabricatorAnchorTestCase' => 'PhabricatorTestCase', + 'PhabricatorAnchorView' => 'AphrontView', + 'PhabricatorAphlictManagementDebugWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementNotifyWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementRestartWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementStartWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementStatusWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementStopWorkflow' => 'PhabricatorAphlictManagementWorkflow', + 'PhabricatorAphlictManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorAphlictSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorAphrontBarUIExample' => 'PhabricatorUIExample', + 'PhabricatorAphrontViewTestCase' => 'PhabricatorTestCase', + 'PhabricatorAppSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorApplication' => array( + 'PhabricatorLiskDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhabricatorApplicationApplicationPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorApplicationApplicationTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorApplicationApplicationTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorApplicationConfigOptions' => 'Phobject', + 'PhabricatorApplicationConfigurationPanel' => 'Phobject', + 'PhabricatorApplicationConfigurationPanelTestCase' => 'PhabricatorTestCase', + 'PhabricatorApplicationDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorApplicationDetailViewController' => 'PhabricatorApplicationsController', + 'PhabricatorApplicationEditController' => 'PhabricatorApplicationsController', + 'PhabricatorApplicationEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorApplicationEditHTTPParameterHelpView' => 'AphrontView', + 'PhabricatorApplicationEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorApplicationEmailCommandsController' => 'PhabricatorApplicationsController', + 'PhabricatorApplicationMailReceiver' => 'PhabricatorMailReceiver', + 'PhabricatorApplicationObjectMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'PhabricatorApplicationPanelController' => 'PhabricatorApplicationsController', + 'PhabricatorApplicationPolicyChangeTransaction' => 'PhabricatorApplicationTransactionType', + 'PhabricatorApplicationProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorApplicationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorApplicationSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorApplicationSearchController' => 'PhabricatorSearchBaseController', + 'PhabricatorApplicationSearchEngine' => 'Phobject', + 'PhabricatorApplicationSearchEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorApplicationSearchResultView' => 'Phobject', + 'PhabricatorApplicationTestCase' => 'PhabricatorTestCase', + 'PhabricatorApplicationTransaction' => array( + 'PhabricatorLiskDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorApplicationTransactionComment' => array( + 'PhabricatorLiskDAO', + 'PhabricatorMarkupInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorApplicationTransactionCommentEditController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionCommentEditor' => 'PhabricatorEditor', + 'PhabricatorApplicationTransactionCommentHistoryController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionCommentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorApplicationTransactionCommentQuoteController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionCommentRawController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionCommentRemoveController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionCommentView' => 'AphrontView', + 'PhabricatorApplicationTransactionController' => 'PhabricatorController', + 'PhabricatorApplicationTransactionDetailController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionDetailView' => 'AphrontView', + 'PhabricatorApplicationTransactionEditor' => 'PhabricatorEditor', + 'PhabricatorApplicationTransactionFeedStory' => 'PhabricatorFeedStory', + 'PhabricatorApplicationTransactionJSONDiffDetailView' => 'PhabricatorApplicationTransactionDetailView', + 'PhabricatorApplicationTransactionNoEffectException' => 'Exception', + 'PhabricatorApplicationTransactionNoEffectResponse' => 'AphrontProxyResponse', + 'PhabricatorApplicationTransactionPublishWorker' => 'PhabricatorWorker', + 'PhabricatorApplicationTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorApplicationTransactionRemarkupPreviewController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionReplyHandler' => 'PhabricatorMailReplyHandler', + 'PhabricatorApplicationTransactionResponse' => 'AphrontProxyResponse', + 'PhabricatorApplicationTransactionShowOlderController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionStructureException' => 'Exception', + 'PhabricatorApplicationTransactionTemplatedCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery', + 'PhabricatorApplicationTransactionTextDiffDetailView' => 'PhabricatorApplicationTransactionDetailView', + 'PhabricatorApplicationTransactionTransactionPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorApplicationTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorApplicationTransactionValidationError' => 'Phobject', + 'PhabricatorApplicationTransactionValidationException' => 'Exception', + 'PhabricatorApplicationTransactionValidationResponse' => 'AphrontProxyResponse', + 'PhabricatorApplicationTransactionValueController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorApplicationTransactionView' => 'AphrontView', + 'PhabricatorApplicationTransactionWarningException' => 'Exception', + 'PhabricatorApplicationTransactionWarningResponse' => 'AphrontProxyResponse', + 'PhabricatorApplicationUninstallController' => 'PhabricatorApplicationsController', + 'PhabricatorApplicationUninstallTransaction' => 'PhabricatorApplicationTransactionType', + 'PhabricatorApplicationsApplication' => 'PhabricatorApplication', + 'PhabricatorApplicationsController' => 'PhabricatorController', + 'PhabricatorApplicationsListController' => 'PhabricatorApplicationsController', + 'PhabricatorApplyEditField' => 'PhabricatorEditField', + 'PhabricatorAsanaAuthProvider' => array( + 'PhabricatorOAuth2AuthProvider', + 'DoorkeeperRemarkupURIInterface', + ), + 'PhabricatorAsanaConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorAsanaSubtaskHasObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorAsanaTaskHasObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorAudioDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorAuditActionConstants' => 'Phobject', + 'PhabricatorAuditApplication' => 'PhabricatorApplication', + 'PhabricatorAuditCommentEditor' => 'PhabricatorEditor', 'PhabricatorAuditController' => 'PhabricatorController', - 'PhabricatorAuditDAO' => 'PhabricatorLiskDAO', - 'PhabricatorAuditInlineComment' => - array( - 0 => 'PhabricatorAuditDAO', - 1 => 'PhabricatorInlineCommentInterface', - ), - 'PhabricatorAuditListController' => 'PhabricatorAuditController', - 'PhabricatorAuditListView' => 'AphrontView', - 'PhabricatorAuditPreviewController' => 'PhabricatorAuditController', - 'PhabricatorAuditReplyHandler' => 'PhabricatorMailReplyHandler', + 'PhabricatorAuditEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuditInlineComment' => 'PhabricatorInlineComment', + 'PhabricatorAuditMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorAuditManagementDeleteWorkflow' => 'PhabricatorAuditManagementWorkflow', + 'PhabricatorAuditManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorAuditReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorAuditRequestStatus' => 'Phobject', + 'PhabricatorAuditSynchronizeManagementWorkflow' => 'PhabricatorAuditManagementWorkflow', + 'PhabricatorAuditTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorAuditTransactionComment' => array( + 'PhabricatorApplicationTransactionComment', + 'PhabricatorInlineCommentInterface', + ), + 'PhabricatorAuditTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuditTransactionView' => 'PhabricatorApplicationTransactionView', + 'PhabricatorAuditUpdateOwnersManagementWorkflow' => 'PhabricatorAuditManagementWorkflow', + 'PhabricatorAuthAccountView' => 'AphrontView', + 'PhabricatorAuthApplication' => 'PhabricatorApplication', + 'PhabricatorAuthAuthFactorPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthAuthFactorProviderPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthAuthProviderPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthCSRFEngine' => 'Phobject', + 'PhabricatorAuthChallenge' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorAuthChallengeGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorAuthChallengePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthChallengeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthChallengeStatusController' => 'PhabricatorAuthController', + 'PhabricatorAuthChallengeUpdate' => 'Phobject', + 'PhabricatorAuthChangePasswordAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthChangeUsernameMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthConduitAPIMethod' => 'ConduitAPIMethod', + 'PhabricatorAuthConduitTokenRevoker' => 'PhabricatorAuthRevoker', + 'PhabricatorAuthConfirmLinkController' => 'PhabricatorAuthController', + 'PhabricatorAuthContactNumber' => array( + 'PhabricatorAuthDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorEditEngineMFAInterface', + ), + 'PhabricatorAuthContactNumberController' => 'PhabricatorAuthController', + 'PhabricatorAuthContactNumberDisableController' => 'PhabricatorAuthContactNumberController', + 'PhabricatorAuthContactNumberEditController' => 'PhabricatorAuthContactNumberController', + 'PhabricatorAuthContactNumberEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorAuthContactNumberEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthContactNumberMFAEngine' => 'PhabricatorEditEngineMFAEngine', + 'PhabricatorAuthContactNumberNumberTransaction' => 'PhabricatorAuthContactNumberTransactionType', + 'PhabricatorAuthContactNumberPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthContactNumberPrimaryController' => 'PhabricatorAuthContactNumberController', + 'PhabricatorAuthContactNumberPrimaryTransaction' => 'PhabricatorAuthContactNumberTransactionType', + 'PhabricatorAuthContactNumberQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthContactNumberStatusTransaction' => 'PhabricatorAuthContactNumberTransactionType', + 'PhabricatorAuthContactNumberTestController' => 'PhabricatorAuthContactNumberController', + 'PhabricatorAuthContactNumberTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorAuthContactNumberTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthContactNumberTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorAuthContactNumberViewController' => 'PhabricatorAuthContactNumberController', 'PhabricatorAuthController' => 'PhabricatorController', - 'PhabricatorBaseEnglishTranslation' => 'PhabricatorTranslation', + 'PhabricatorAuthDAO' => 'PhabricatorLiskDAO', + 'PhabricatorAuthDisableController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthDowngradeSessionController' => 'PhabricatorAuthController', + 'PhabricatorAuthEditController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthEmailLoginAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthEmailLoginMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthEmailSetPasswordMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthFactor' => 'Phobject', + 'PhabricatorAuthFactorConfig' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorAuthFactorConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthFactorProvider' => array( + 'PhabricatorAuthDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorEditEngineMFAInterface', + ), + 'PhabricatorAuthFactorProviderController' => 'PhabricatorAuthProviderController', + 'PhabricatorAuthFactorProviderDuoCredentialTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderDuoEnrollTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderDuoHostnameTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderDuoUsernamesTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderEditController' => 'PhabricatorAuthFactorProviderController', + 'PhabricatorAuthFactorProviderEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorAuthFactorProviderEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthFactorProviderEnrollMessageTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderListController' => 'PhabricatorAuthProviderController', + 'PhabricatorAuthFactorProviderMFAEngine' => 'PhabricatorEditEngineMFAEngine', + 'PhabricatorAuthFactorProviderMessageController' => 'PhabricatorAuthFactorProviderController', + 'PhabricatorAuthFactorProviderNameTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthFactorProviderStatus' => 'Phobject', + 'PhabricatorAuthFactorProviderStatusTransaction' => 'PhabricatorAuthFactorProviderTransactionType', + 'PhabricatorAuthFactorProviderTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorAuthFactorProviderTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthFactorProviderTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorAuthFactorProviderViewController' => 'PhabricatorAuthFactorProviderController', + 'PhabricatorAuthFactorResult' => 'Phobject', + 'PhabricatorAuthFactorTestCase' => 'PhabricatorTestCase', + 'PhabricatorAuthFinishController' => 'PhabricatorAuthController', + 'PhabricatorAuthHMACKey' => 'PhabricatorAuthDAO', + 'PhabricatorAuthHighSecurityRequiredException' => 'Exception', + 'PhabricatorAuthHighSecurityToken' => 'Phobject', + 'PhabricatorAuthInvite' => array( + 'PhabricatorUserDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorAuthInviteAccountException' => 'PhabricatorAuthInviteDialogException', + 'PhabricatorAuthInviteAction' => 'Phobject', + 'PhabricatorAuthInviteActionTableView' => 'AphrontView', + 'PhabricatorAuthInviteController' => 'PhabricatorAuthController', + 'PhabricatorAuthInviteDialogException' => 'PhabricatorAuthInviteException', + 'PhabricatorAuthInviteEngine' => 'Phobject', + 'PhabricatorAuthInviteException' => 'Exception', + 'PhabricatorAuthInviteInvalidException' => 'PhabricatorAuthInviteDialogException', + 'PhabricatorAuthInviteLoginException' => 'PhabricatorAuthInviteDialogException', + 'PhabricatorAuthInvitePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthInviteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthInviteRegisteredException' => 'PhabricatorAuthInviteException', + 'PhabricatorAuthInviteSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorAuthInviteTestCase' => 'PhabricatorTestCase', + 'PhabricatorAuthInviteVerifyException' => 'PhabricatorAuthInviteDialogException', + 'PhabricatorAuthInviteWorker' => 'PhabricatorWorker', + 'PhabricatorAuthLinkController' => 'PhabricatorAuthController', + 'PhabricatorAuthLinkMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthListController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthLoginController' => 'PhabricatorAuthController', + 'PhabricatorAuthLoginMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthLogoutConduitAPIMethod' => 'PhabricatorAuthConduitAPIMethod', + 'PhabricatorAuthMFAEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorAuthMFASyncTemporaryTokenType' => 'PhabricatorAuthTemporaryTokenType', + 'PhabricatorAuthMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', + 'PhabricatorAuthManagementCachePKCS8Workflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementLDAPWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementListFactorsWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementListMFAProvidersWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementLockWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementRecoverWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementRefreshWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementRevokeWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementStripWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementTrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementUnlimitWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementUnlockWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementUntrustOAuthClientWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementVerifyWorkflow' => 'PhabricatorAuthManagementWorkflow', + 'PhabricatorAuthManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorAuthMessage' => array( + 'PhabricatorAuthDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorAuthMessageController' => 'PhabricatorAuthProviderController', + 'PhabricatorAuthMessageEditController' => 'PhabricatorAuthMessageController', + 'PhabricatorAuthMessageEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorAuthMessageEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthMessageListController' => 'PhabricatorAuthProviderController', + 'PhabricatorAuthMessagePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthMessageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthMessageTextTransaction' => 'PhabricatorAuthMessageTransactionType', + 'PhabricatorAuthMessageTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorAuthMessageTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthMessageTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorAuthMessageType' => 'Phobject', + 'PhabricatorAuthMessageViewController' => 'PhabricatorAuthMessageController', + 'PhabricatorAuthNeedsApprovalController' => 'PhabricatorAuthController', + 'PhabricatorAuthNeedsMultiFactorController' => 'PhabricatorAuthController', + 'PhabricatorAuthNewController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthNewFactorAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthOldOAuthRedirectController' => 'PhabricatorAuthController', + 'PhabricatorAuthOneTimeLoginController' => 'PhabricatorAuthController', + 'PhabricatorAuthOneTimeLoginTemporaryTokenType' => 'PhabricatorAuthTemporaryTokenType', + 'PhabricatorAuthPassword' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhabricatorAuthPasswordEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthPasswordEngine' => 'Phobject', + 'PhabricatorAuthPasswordException' => 'Exception', + 'PhabricatorAuthPasswordPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthPasswordQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthPasswordResetTemporaryTokenType' => 'PhabricatorAuthTemporaryTokenType', + 'PhabricatorAuthPasswordRevokeTransaction' => 'PhabricatorAuthPasswordTransactionType', + 'PhabricatorAuthPasswordRevoker' => 'PhabricatorAuthRevoker', + 'PhabricatorAuthPasswordTestCase' => 'PhabricatorTestCase', + 'PhabricatorAuthPasswordTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorAuthPasswordTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthPasswordTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorAuthPasswordUpgradeTransaction' => 'PhabricatorAuthPasswordTransactionType', + 'PhabricatorAuthProvider' => 'Phobject', + 'PhabricatorAuthProviderConfig' => array( + 'PhabricatorAuthDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorAuthProviderConfigController' => 'PhabricatorAuthProviderController', + 'PhabricatorAuthProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthProviderConfigTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorAuthProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthProviderController' => 'PhabricatorAuthController', + 'PhabricatorAuthProviderViewController' => 'PhabricatorAuthProviderConfigController', + 'PhabricatorAuthProvidersGuidanceContext' => 'PhabricatorGuidanceContext', + 'PhabricatorAuthProvidersGuidanceEngineExtension' => 'PhabricatorGuidanceEngineExtension', + 'PhabricatorAuthQueryPublicKeysConduitAPIMethod' => 'PhabricatorAuthConduitAPIMethod', + 'PhabricatorAuthRegisterController' => 'PhabricatorAuthController', + 'PhabricatorAuthRevokeTokenController' => 'PhabricatorAuthController', + 'PhabricatorAuthRevoker' => 'Phobject', + 'PhabricatorAuthSSHKey' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhabricatorAuthSSHKeyController' => 'PhabricatorAuthController', + 'PhabricatorAuthSSHKeyEditController' => 'PhabricatorAuthSSHKeyController', + 'PhabricatorAuthSSHKeyEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorAuthSSHKeyGenerateController' => 'PhabricatorAuthSSHKeyController', + 'PhabricatorAuthSSHKeyListController' => 'PhabricatorAuthSSHKeyController', + 'PhabricatorAuthSSHKeyPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthSSHKeyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthSSHKeyReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorAuthSSHKeyRevokeController' => 'PhabricatorAuthSSHKeyController', + 'PhabricatorAuthSSHKeySearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorAuthSSHKeyTableView' => 'AphrontView', + 'PhabricatorAuthSSHKeyTestCase' => 'PhabricatorTestCase', + 'PhabricatorAuthSSHKeyTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorAuthSSHKeyTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorAuthSSHKeyViewController' => 'PhabricatorAuthSSHKeyController', + 'PhabricatorAuthSSHPrivateKey' => 'Phobject', + 'PhabricatorAuthSSHPrivateKeyException' => 'Exception', + 'PhabricatorAuthSSHPrivateKeyFormatException' => 'PhabricatorAuthSSHPrivateKeyException', + 'PhabricatorAuthSSHPrivateKeyIncorrectPassphraseException' => 'PhabricatorAuthSSHPrivateKeyPassphraseException', + 'PhabricatorAuthSSHPrivateKeyMissingPassphraseException' => 'PhabricatorAuthSSHPrivateKeyPassphraseException', + 'PhabricatorAuthSSHPrivateKeyPassphraseException' => 'PhabricatorAuthSSHPrivateKeyException', + 'PhabricatorAuthSSHPrivateKeySurplusPassphraseException' => 'PhabricatorAuthSSHPrivateKeyPassphraseException', + 'PhabricatorAuthSSHPrivateKeyUnknownException' => 'PhabricatorAuthSSHPrivateKeyException', + 'PhabricatorAuthSSHPublicKey' => 'Phobject', + 'PhabricatorAuthSSHRevoker' => 'PhabricatorAuthRevoker', + 'PhabricatorAuthSession' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorAuthSessionEngine' => 'Phobject', + 'PhabricatorAuthSessionEngineExtension' => 'Phobject', + 'PhabricatorAuthSessionEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorAuthSessionGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorAuthSessionInfo' => 'Phobject', + 'PhabricatorAuthSessionPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorAuthSessionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthSessionRevoker' => 'PhabricatorAuthRevoker', + 'PhabricatorAuthSetExternalController' => 'PhabricatorAuthController', + 'PhabricatorAuthSetPasswordController' => 'PhabricatorAuthController', + 'PhabricatorAuthSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorAuthStartController' => 'PhabricatorAuthController', + 'PhabricatorAuthTemporaryToken' => array( + 'PhabricatorAuthDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorAuthTemporaryTokenGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorAuthTemporaryTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorAuthTemporaryTokenRevoker' => 'PhabricatorAuthRevoker', + 'PhabricatorAuthTemporaryTokenType' => 'Phobject', + 'PhabricatorAuthTemporaryTokenTypeModule' => 'PhabricatorConfigModule', + 'PhabricatorAuthTerminateSessionController' => 'PhabricatorAuthController', + 'PhabricatorAuthTestSMSAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthTryEmailLoginAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthTryFactorAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthTryPasswordAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthTryPasswordWithoutCAPTCHAAction' => 'PhabricatorSystemAction', + 'PhabricatorAuthUnlinkController' => 'PhabricatorAuthController', + 'PhabricatorAuthValidateController' => 'PhabricatorAuthController', + 'PhabricatorAuthWaitForApprovalMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthWelcomeMailMessageType' => 'PhabricatorAuthMessageType', + 'PhabricatorAuthenticationConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorAutoEventListener' => 'PhabricatorEventListener', + 'PhabricatorBadgesApplication' => 'PhabricatorApplication', + 'PhabricatorBadgesArchiveController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesAward' => array( + 'PhabricatorBadgesDAO', + 'PhabricatorDestructibleInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorBadgesAwardController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesAwardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorBadgesAwardTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorBadgesBadge' => array( + 'PhabricatorBadgesDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorBadgesBadgeAwardTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeDescriptionTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeFlavorTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeIconTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeNameNgrams' => 'PhabricatorSearchNgrams', + 'PhabricatorBadgesBadgeNameTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeQualityTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeRevokeTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeStatusTransaction' => 'PhabricatorBadgesBadgeTransactionType', + 'PhabricatorBadgesBadgeTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorBadgesBadgeTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorBadgesCommentController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesController' => 'PhabricatorController', + 'PhabricatorBadgesCreateCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorBadgesDAO' => 'PhabricatorLiskDAO', + 'PhabricatorBadgesDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorBadgesDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorBadgesEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorBadgesEditController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorBadgesEditRecipientsController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorBadgesIconSet' => 'PhabricatorIconSet', + 'PhabricatorBadgesListController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesLootContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorBadgesMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorBadgesPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorBadgesProfileController' => 'PhabricatorController', + 'PhabricatorBadgesQuality' => 'Phobject', + 'PhabricatorBadgesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorBadgesRecipientsController' => 'PhabricatorBadgesProfileController', + 'PhabricatorBadgesRecipientsListView' => 'AphrontView', + 'PhabricatorBadgesRemoveRecipientsController' => 'PhabricatorBadgesController', + 'PhabricatorBadgesReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorBadgesSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorBadgesSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorBadgesSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorBadgesTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorBadgesTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorBadgesTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorBadgesViewController' => 'PhabricatorBadgesProfileController', + 'PhabricatorBarePageView' => 'AphrontPageView', + 'PhabricatorBaseURISetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorBcryptPasswordHasher' => 'PhabricatorPasswordHasher', + 'PhabricatorBinariesSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorBitbucketAuthProvider' => 'PhabricatorOAuth1AuthProvider', + 'PhabricatorBoardColumnsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorBoardLayoutEngine' => 'Phobject', + 'PhabricatorBoardRenderingEngine' => 'Phobject', + 'PhabricatorBoardResponseEngine' => 'Phobject', + 'PhabricatorBoolConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorBoolEditField' => 'PhabricatorEditField', + 'PhabricatorBoolMailStamp' => 'PhabricatorMailStamp', + 'PhabricatorBritishEnglishTranslation' => 'PhutilTranslation', + 'PhabricatorBuiltinDraftEngine' => 'PhabricatorDraftEngine', + 'PhabricatorBuiltinFileCachePurger' => 'PhabricatorCachePurger', 'PhabricatorBuiltinPatchList' => 'PhabricatorSQLPatchList', - 'PhabricatorCalendarBrowseController' => 'PhabricatorCalendarController', + 'PhabricatorBulkContentSource' => 'PhabricatorContentSource', + 'PhabricatorBulkEditGroup' => 'Phobject', + 'PhabricatorBulkEngine' => 'Phobject', + 'PhabricatorBulkManagementExportWorkflow' => 'PhabricatorBulkManagementWorkflow', + 'PhabricatorBulkManagementMakeSilentWorkflow' => 'PhabricatorBulkManagementWorkflow', + 'PhabricatorBulkManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorCSVExportFormat' => 'PhabricatorExportFormat', + 'PhabricatorCacheDAO' => 'PhabricatorLiskDAO', + 'PhabricatorCacheEngine' => 'Phobject', + 'PhabricatorCacheEngineExtension' => 'Phobject', + 'PhabricatorCacheGeneralGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorCacheManagementPurgeWorkflow' => 'PhabricatorCacheManagementWorkflow', + 'PhabricatorCacheManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorCacheMarkupGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorCachePurger' => 'Phobject', + 'PhabricatorCacheSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorCacheSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorCacheSpec' => 'Phobject', + 'PhabricatorCacheTTLGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorCachedClassMapQuery' => 'Phobject', + 'PhabricatorCaches' => 'Phobject', + 'PhabricatorCachesTestCase' => 'PhabricatorTestCase', + 'PhabricatorCalendarApplication' => 'PhabricatorApplication', 'PhabricatorCalendarController' => 'PhabricatorController', 'PhabricatorCalendarDAO' => 'PhabricatorLiskDAO', - 'PhabricatorCalendarHoliday' => 'PhabricatorCalendarDAO', - 'PhabricatorCalendarHolidayTestCase' => 'PhabricatorTestCase', + 'PhabricatorCalendarEvent' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorPolicyCodexInterface', + 'PhabricatorProjectInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhabricatorCalendarEventAcceptTransaction' => 'PhabricatorCalendarEventReplyTransaction', + 'PhabricatorCalendarEventAllDayTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventAvailabilityController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventCancelController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventCancelTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventDateTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventDeclineTransaction' => 'PhabricatorCalendarEventReplyTransaction', + 'PhabricatorCalendarEventDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorCalendarEventDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorCalendarEventDescriptionTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventDragController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorCalendarEventEditController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorCalendarEventEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorCalendarEventEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'PhabricatorCalendarEventEndDateTransaction' => 'PhabricatorCalendarEventDateTransaction', + 'PhabricatorCalendarEventExportController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorCalendarEventForkTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventFrequencyTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorCalendarEventHeraldAdapter' => 'HeraldAdapter', + 'PhabricatorCalendarEventHeraldField' => 'HeraldField', + 'PhabricatorCalendarEventHeraldFieldGroup' => 'HeraldFieldGroup', + 'PhabricatorCalendarEventHostPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorCalendarEventHostTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventIconTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventInviteTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventInvitee' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorCalendarEventInviteeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarEventInviteesPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorCalendarEventJoinController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventListController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarEventMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorCalendarEventNameHeraldField' => 'PhabricatorCalendarEventHeraldField', + 'PhabricatorCalendarEventNameTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventNotificationView' => 'Phobject', + 'PhabricatorCalendarEventPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorCalendarEventPolicyCodex' => 'PhabricatorPolicyCodex', + 'PhabricatorCalendarEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarEventRSVPEmailCommand' => 'PhabricatorCalendarEventEmailCommand', + 'PhabricatorCalendarEventRecurringTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventReplyTransaction' => 'PhabricatorCalendarEventTransactionType', + 'PhabricatorCalendarEventSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorCalendarEventSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCalendarEventStartDateTransaction' => 'PhabricatorCalendarEventDateTransaction', + 'PhabricatorCalendarEventTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorCalendarEventTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorCalendarEventTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorCalendarEventTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorCalendarEventUntilDateTransaction' => 'PhabricatorCalendarEventDateTransaction', + 'PhabricatorCalendarEventViewController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExport' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorCalendarExportDisableController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExportDisableTransaction' => 'PhabricatorCalendarExportTransactionType', + 'PhabricatorCalendarExportEditController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExportEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorCalendarExportEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorCalendarExportICSController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExportListController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExportModeTransaction' => 'PhabricatorCalendarExportTransactionType', + 'PhabricatorCalendarExportNameTransaction' => 'PhabricatorCalendarExportTransactionType', + 'PhabricatorCalendarExportPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorCalendarExportQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarExportQueryKeyTransaction' => 'PhabricatorCalendarExportTransactionType', + 'PhabricatorCalendarExportSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCalendarExportTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorCalendarExportTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorCalendarExportTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorCalendarExportViewController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarExternalInvitee' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorCalendarExternalInviteePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorCalendarExternalInviteeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarICSFileImportEngine' => 'PhabricatorCalendarICSImportEngine', + 'PhabricatorCalendarICSImportEngine' => 'PhabricatorCalendarImportEngine', + 'PhabricatorCalendarICSURIImportEngine' => 'PhabricatorCalendarICSImportEngine', + 'PhabricatorCalendarICSWriter' => 'Phobject', + 'PhabricatorCalendarIconSet' => 'PhabricatorIconSet', + 'PhabricatorCalendarImport' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorCalendarImportDefaultLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportDeleteController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportDeleteLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportDeleteTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportDisableController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportDisableTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportDropController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportDuplicateLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportEditController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorCalendarImportEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorCalendarImportEmptyLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportEngine' => 'Phobject', + 'PhabricatorCalendarImportEpochLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportFetchLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportFrequencyLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportFrequencyTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportICSFileTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportICSLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportICSURITransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportICSWarningLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportIgnoredNodeLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportListController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportLog' => array( + 'PhabricatorCalendarDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorCalendarImportLogListController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarImportLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCalendarImportLogType' => 'Phobject', + 'PhabricatorCalendarImportLogView' => 'AphrontView', + 'PhabricatorCalendarImportNameTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportOriginalLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportOrphanLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorCalendarImportQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCalendarImportQueueLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportReloadController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarImportReloadTransaction' => 'PhabricatorCalendarImportTransactionType', + 'PhabricatorCalendarImportReloadWorker' => 'PhabricatorWorker', + 'PhabricatorCalendarImportSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCalendarImportTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorCalendarImportTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorCalendarImportTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorCalendarImportTriggerLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportUpdateLogType' => 'PhabricatorCalendarImportLogType', + 'PhabricatorCalendarImportViewController' => 'PhabricatorCalendarController', + 'PhabricatorCalendarInviteeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorCalendarInviteeUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorCalendarInviteeViewerFunctionDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorCalendarManagementNotifyWorkflow' => 'PhabricatorCalendarManagementWorkflow', + 'PhabricatorCalendarManagementReloadWorkflow' => 'PhabricatorCalendarManagementWorkflow', + 'PhabricatorCalendarManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorCalendarNotification' => 'PhabricatorCalendarDAO', + 'PhabricatorCalendarNotificationEngine' => 'Phobject', + 'PhabricatorCalendarRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorCalendarReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorCalendarSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorCelerityApplication' => 'PhabricatorApplication', + 'PhabricatorCelerityTestCase' => 'PhabricatorTestCase', + 'PhabricatorChangeParserTestCase' => 'PhabricatorWorkingCopyTestCase', + 'PhabricatorChangePasswordUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorChangesetCachePurger' => 'PhabricatorCachePurger', 'PhabricatorChangesetResponse' => 'AphrontProxyResponse', + 'PhabricatorChangesetViewState' => 'Phobject', + 'PhabricatorChangesetViewStateEngine' => 'Phobject', + 'PhabricatorChartAxis' => 'Phobject', + 'PhabricatorChartDataQuery' => 'Phobject', + 'PhabricatorChartDataset' => 'Phobject', + 'PhabricatorChartDisplayData' => 'Phobject', + 'PhabricatorChartEngine' => 'Phobject', + 'PhabricatorChartFunction' => 'Phobject', + 'PhabricatorChartFunctionArgument' => 'Phobject', + 'PhabricatorChartFunctionArgumentParser' => 'Phobject', + 'PhabricatorChartFunctionLabel' => 'Phobject', + 'PhabricatorChartInterval' => 'Phobject', + 'PhabricatorChartRenderingEngine' => 'Phobject', + 'PhabricatorChartStackedAreaDataset' => 'PhabricatorChartDataset', + 'PhabricatorChatLogApplication' => 'PhabricatorApplication', + 'PhabricatorChatLogChannel' => array( + 'PhabricatorChatLogDAO', + 'PhabricatorPolicyInterface', + ), 'PhabricatorChatLogChannelListController' => 'PhabricatorChatLogController', 'PhabricatorChatLogChannelLogController' => 'PhabricatorChatLogController', + 'PhabricatorChatLogChannelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorChatLogController' => 'PhabricatorController', 'PhabricatorChatLogDAO' => 'PhabricatorLiskDAO', - 'PhabricatorChatLogEvent' => - array( - 0 => 'PhabricatorChatLogDAO', - 1 => 'PhabricatorPolicyInterface', + 'PhabricatorChatLogEvent' => array( + 'PhabricatorChatLogDAO', + 'PhabricatorPolicyInterface', ), - 'PhabricatorChatLogEventType' => 'PhabricatorChatLogConstants', - 'PhabricatorChatLogQuery' => 'PhabricatorIDPagedPolicyQuery', + 'PhabricatorChatLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCheckboxesEditField' => 'PhabricatorEditField', + 'PhabricatorChunkedFileStorageEngine' => 'PhabricatorFileStorageEngine', + 'PhabricatorClassConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorClusterConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorClusterDatabasesConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorClusterException' => 'Exception', + 'PhabricatorClusterExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorClusterImpossibleWriteException' => 'PhabricatorClusterException', + 'PhabricatorClusterImproperWriteException' => 'PhabricatorClusterException', + 'PhabricatorClusterMailersConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorClusterNoHostForRoleException' => 'Exception', + 'PhabricatorClusterSearchConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorClusterServiceHealthRecord' => 'Phobject', + 'PhabricatorClusterStrandedException' => 'PhabricatorClusterException', + 'PhabricatorColumnsEditField' => 'PhabricatorPHIDListEditField', + 'PhabricatorCommentEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorCommentEditField' => 'PhabricatorEditField', + 'PhabricatorCommentEditType' => 'PhabricatorEditType', + 'PhabricatorCommitBranchesField' => 'PhabricatorCommitCustomField', + 'PhabricatorCommitCustomField' => 'PhabricatorCustomField', + 'PhabricatorCommitMergedCommitsField' => 'PhabricatorCommitCustomField', + 'PhabricatorCommitRepositoryField' => 'PhabricatorCommitCustomField', + 'PhabricatorCommitSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCommitTagsField' => 'PhabricatorCommitCustomField', + 'PhabricatorCommonPasswords' => 'Phobject', + 'PhabricatorComposeChartFunction' => 'PhabricatorHigherOrderChartFunction', 'PhabricatorConduitAPIController' => 'PhabricatorConduitController', + 'PhabricatorConduitApplication' => 'PhabricatorApplication', + 'PhabricatorConduitCallManagementWorkflow' => 'PhabricatorConduitManagementWorkflow', + 'PhabricatorConduitCertificateFailureUserLogType' => 'PhabricatorUserLogType', 'PhabricatorConduitCertificateToken' => 'PhabricatorConduitDAO', - 'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO', + 'PhabricatorConduitCertificateUserLogType' => 'PhabricatorUserLogType', 'PhabricatorConduitConsoleController' => 'PhabricatorConduitController', + 'PhabricatorConduitContentSource' => 'PhabricatorContentSource', 'PhabricatorConduitController' => 'PhabricatorController', 'PhabricatorConduitDAO' => 'PhabricatorLiskDAO', + 'PhabricatorConduitEditField' => 'PhabricatorEditField', 'PhabricatorConduitListController' => 'PhabricatorConduitController', 'PhabricatorConduitLogController' => 'PhabricatorConduitController', - 'PhabricatorConduitMethodCallLog' => 'PhabricatorConduitDAO', + 'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorConduitLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorConduitManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorConduitMethodCallLog' => array( + 'PhabricatorConduitDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorConduitMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorConduitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorConduitResultInterface' => 'PhabricatorPHIDInterface', + 'PhabricatorConduitSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorConduitSearchFieldSpecification' => 'Phobject', + 'PhabricatorConduitTestCase' => 'PhabricatorTestCase', + 'PhabricatorConduitToken' => array( + 'PhabricatorConduitDAO', + 'PhabricatorPolicyInterface', + ), 'PhabricatorConduitTokenController' => 'PhabricatorConduitController', + 'PhabricatorConduitTokenEditController' => 'PhabricatorConduitController', + 'PhabricatorConduitTokenHandshakeController' => 'PhabricatorConduitController', + 'PhabricatorConduitTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorConduitTokenTerminateController' => 'PhabricatorConduitController', + 'PhabricatorConduitTokensSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorConfigApplication' => 'PhabricatorApplication', + 'PhabricatorConfigCacheController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigClusterDatabasesController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigClusterNotificationsController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigClusterRepositoriesController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigClusterSearchController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigCollectorsModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigColumnSchema' => 'PhabricatorConfigStorageSchema', + 'PhabricatorConfigConfigPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorConfigConsoleController' => 'PhabricatorConfigController', + 'PhabricatorConfigConstants' => 'Phobject', + 'PhabricatorConfigController' => 'PhabricatorController', + 'PhabricatorConfigCoreSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorConfigDatabaseController' => 'PhabricatorConfigServicesController', + 'PhabricatorConfigDatabaseIssueController' => 'PhabricatorConfigDatabaseController', + 'PhabricatorConfigDatabaseSchema' => 'PhabricatorConfigStorageSchema', + 'PhabricatorConfigDatabaseSource' => 'PhabricatorConfigProxySource', + 'PhabricatorConfigDatabaseStatusController' => 'PhabricatorConfigDatabaseController', + 'PhabricatorConfigDefaultSource' => 'PhabricatorConfigProxySource', + 'PhabricatorConfigDictionarySource' => 'PhabricatorConfigSource', + 'PhabricatorConfigEdgeModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigEditController' => 'PhabricatorConfigSettingsController', + 'PhabricatorConfigEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorConfigEntry' => array( + 'PhabricatorConfigEntryDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorConfigEntryDAO' => 'PhabricatorLiskDAO', + 'PhabricatorConfigEntryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorConfigFileSource' => 'PhabricatorConfigProxySource', + 'PhabricatorConfigGroupConstants' => 'PhabricatorConfigConstants', + 'PhabricatorConfigHTTPParameterTypesModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigIgnoreController' => 'PhabricatorConfigController', + 'PhabricatorConfigIssueListController' => 'PhabricatorConfigController', + 'PhabricatorConfigIssuePanelController' => 'PhabricatorConfigController', + 'PhabricatorConfigIssueViewController' => 'PhabricatorConfigController', + 'PhabricatorConfigJSON' => 'Phobject', + 'PhabricatorConfigJSONOptionType' => 'PhabricatorConfigOptionType', + 'PhabricatorConfigKeySchema' => 'PhabricatorConfigStorageSchema', + 'PhabricatorConfigLocalSource' => 'PhabricatorConfigProxySource', + 'PhabricatorConfigManagementDeleteWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementDoneWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementGetWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementListWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementMigrateWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementSetWorkflow' => 'PhabricatorConfigManagementWorkflow', + 'PhabricatorConfigManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorConfigManualActivity' => 'PhabricatorConfigEntryDAO', + 'PhabricatorConfigModule' => 'Phobject', + 'PhabricatorConfigModuleController' => 'PhabricatorConfigController', + 'PhabricatorConfigOption' => 'Phobject', + 'PhabricatorConfigOptionType' => 'Phobject', + 'PhabricatorConfigPHIDModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigProxySource' => 'PhabricatorConfigSource', + 'PhabricatorConfigPurgeCacheController' => 'PhabricatorConfigController', + 'PhabricatorConfigRegexOptionType' => 'PhabricatorConfigJSONOptionType', + 'PhabricatorConfigRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorConfigRequestExceptionHandlerModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigResponse' => 'AphrontStandaloneHTMLResponse', + 'PhabricatorConfigSchemaQuery' => 'Phobject', + 'PhabricatorConfigSchemaSpec' => 'Phobject', + 'PhabricatorConfigServerSchema' => 'PhabricatorConfigStorageSchema', + 'PhabricatorConfigServicesController' => 'PhabricatorConfigController', + 'PhabricatorConfigSettingsController' => 'PhabricatorConfigController', + 'PhabricatorConfigSettingsHistoryController' => 'PhabricatorConfigSettingsController', + 'PhabricatorConfigSettingsListController' => 'PhabricatorConfigSettingsController', + 'PhabricatorConfigSetupCheckModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigSiteModule' => 'PhabricatorConfigModule', + 'PhabricatorConfigSiteSource' => 'PhabricatorConfigProxySource', + 'PhabricatorConfigSource' => 'Phobject', + 'PhabricatorConfigStackSource' => 'PhabricatorConfigSource', + 'PhabricatorConfigStorageSchema' => 'Phobject', + 'PhabricatorConfigTableSchema' => 'PhabricatorConfigStorageSchema', + 'PhabricatorConfigTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorConfigType' => 'Phobject', + 'PhabricatorConfigValidationException' => 'Exception', + 'PhabricatorConpherenceApplication' => 'PhabricatorApplication', + 'PhabricatorConpherenceColumnMinimizeSetting' => 'PhabricatorInternalSetting', + 'PhabricatorConpherenceColumnVisibleSetting' => 'PhabricatorInternalSetting', + 'PhabricatorConpherenceNotificationsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorConpherencePreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorConpherenceProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorConpherenceRoomContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorConpherenceRoomTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorConpherenceSoundSetting' => 'PhabricatorSelectSetting', + 'PhabricatorConpherenceThreadPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorConpherenceWidgetVisibleSetting' => 'PhabricatorInternalSetting', + 'PhabricatorConsoleApplication' => 'PhabricatorApplication', + 'PhabricatorConsoleContentSource' => 'PhabricatorContentSource', + 'PhabricatorConstantChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorContactNumbersSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorContentSource' => 'Phobject', + 'PhabricatorContentSourceModule' => 'PhabricatorConfigModule', 'PhabricatorContentSourceView' => 'AphrontView', + 'PhabricatorContributedToObjectEdgeType' => 'PhabricatorEdgeType', 'PhabricatorController' => 'AphrontController', + 'PhabricatorCookies' => 'Phobject', + 'PhabricatorCoreConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorCoreCreateTransaction' => 'PhabricatorCoreTransactionType', + 'PhabricatorCoreTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorCoreVoidTransaction' => 'PhabricatorModularTransactionType', + 'PhabricatorCosChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorCountFact' => 'PhabricatorFact', + 'PhabricatorCountdown' => array( + 'PhabricatorCountdownDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhabricatorCountdownApplication' => 'PhabricatorApplication', 'PhabricatorCountdownController' => 'PhabricatorController', + 'PhabricatorCountdownCountdownPHIDType' => 'PhabricatorPHIDType', 'PhabricatorCountdownDAO' => 'PhabricatorLiskDAO', - 'PhabricatorCountdownDeleteController' => 'PhabricatorCountdownController', + 'PhabricatorCountdownDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorCountdownDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorCountdownDescriptionTransaction' => 'PhabricatorCountdownTransactionType', 'PhabricatorCountdownEditController' => 'PhabricatorCountdownController', + 'PhabricatorCountdownEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorCountdownEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorCountdownEpochTransaction' => 'PhabricatorCountdownTransactionType', 'PhabricatorCountdownListController' => 'PhabricatorCountdownController', + 'PhabricatorCountdownMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorCountdownQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorCountdownRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorCountdownReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorCountdownSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorCountdownSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorCountdownTitleTransaction' => 'PhabricatorCountdownTransactionType', + 'PhabricatorCountdownTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorCountdownTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorCountdownTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorCountdownTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorCountdownView' => 'AphrontView', 'PhabricatorCountdownViewController' => 'PhabricatorCountdownController', + 'PhabricatorCredentialEditField' => 'PhabricatorEditField', + 'PhabricatorCursorPagedPolicyAwareQuery' => 'PhabricatorPolicyAwareQuery', + 'PhabricatorCustomField' => 'Phobject', + 'PhabricatorCustomFieldApplicationSearchAnyFunctionDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorCustomFieldApplicationSearchDatasource' => 'PhabricatorTypeaheadProxyDatasource', + 'PhabricatorCustomFieldApplicationSearchNoneFunctionDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorCustomFieldAttachment' => 'Phobject', + 'PhabricatorCustomFieldConfigOptionType' => 'PhabricatorConfigOptionType', + 'PhabricatorCustomFieldDataNotAvailableException' => 'Exception', + 'PhabricatorCustomFieldEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorCustomFieldEditField' => 'PhabricatorEditField', + 'PhabricatorCustomFieldEditType' => 'PhabricatorEditType', + 'PhabricatorCustomFieldExportEngineExtension' => 'PhabricatorExportEngineExtension', + 'PhabricatorCustomFieldFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorCustomFieldHeraldAction' => 'HeraldAction', + 'PhabricatorCustomFieldHeraldActionGroup' => 'HeraldActionGroup', + 'PhabricatorCustomFieldHeraldField' => 'HeraldField', + 'PhabricatorCustomFieldHeraldFieldGroup' => 'HeraldFieldGroup', + 'PhabricatorCustomFieldImplementationIncompleteException' => 'Exception', + 'PhabricatorCustomFieldIndexStorage' => 'PhabricatorLiskDAO', + 'PhabricatorCustomFieldList' => 'Phobject', + 'PhabricatorCustomFieldMonogramParser' => 'Phobject', + 'PhabricatorCustomFieldNotAttachedException' => 'Exception', + 'PhabricatorCustomFieldNotProxyException' => 'Exception', + 'PhabricatorCustomFieldNumericIndexStorage' => 'PhabricatorCustomFieldIndexStorage', + 'PhabricatorCustomFieldSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorCustomFieldStorage' => 'PhabricatorLiskDAO', + 'PhabricatorCustomFieldStorageQuery' => 'Phobject', + 'PhabricatorCustomFieldStringIndexStorage' => 'PhabricatorCustomFieldIndexStorage', + 'PhabricatorCustomLogoConfigType' => 'PhabricatorConfigOptionType', + 'PhabricatorCustomUIFooterConfigType' => 'PhabricatorConfigJSONOptionType', 'PhabricatorDaemon' => 'PhutilDaemon', - 'PhabricatorDaemonCombinedLogController' => 'PhabricatorDaemonController', + 'PhabricatorDaemonBulkJobController' => 'PhabricatorDaemonController', + 'PhabricatorDaemonBulkJobListController' => 'PhabricatorDaemonBulkJobController', + 'PhabricatorDaemonBulkJobMonitorController' => 'PhabricatorDaemonBulkJobController', + 'PhabricatorDaemonBulkJobViewController' => 'PhabricatorDaemonBulkJobController', 'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController', + 'PhabricatorDaemonContentSource' => 'PhabricatorContentSource', 'PhabricatorDaemonController' => 'PhabricatorController', 'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO', - 'PhabricatorDaemonLog' => 'PhabricatorDaemonDAO', + 'PhabricatorDaemonEventListener' => 'PhabricatorEventListener', + 'PhabricatorDaemonLockLog' => 'PhabricatorDaemonDAO', + 'PhabricatorDaemonLockLogGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorDaemonLog' => array( + 'PhabricatorDaemonDAO', + 'PhabricatorPolicyInterface', + ), 'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO', - 'PhabricatorDaemonLogEventsView' => 'AphrontView', + 'PhabricatorDaemonLogEventGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorDaemonLogGarbageCollector' => 'PhabricatorGarbageCollector', 'PhabricatorDaemonLogListController' => 'PhabricatorDaemonController', 'PhabricatorDaemonLogListView' => 'AphrontView', + 'PhabricatorDaemonLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController', - 'PhabricatorDaemonTimelineConsoleController' => 'PhabricatorDaemonController', - 'PhabricatorDaemonTimelineEventController' => 'PhabricatorDaemonController', - 'PhabricatorDefaultFileStorageEngineSelector' => 'PhabricatorFileStorageEngineSelector', - 'PhabricatorDefaultSearchEngineSelector' => 'PhabricatorSearchEngineSelector', - 'PhabricatorDirectoryController' => 'PhabricatorController', - 'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController', + 'PhabricatorDaemonManagementDebugWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementLaunchWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementListWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementLogWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementReloadWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementRestartWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementStartWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementStatusWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementStopWorkflow' => 'PhabricatorDaemonManagementWorkflow', + 'PhabricatorDaemonManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorDaemonOverseerModule' => 'PhutilDaemonOverseerModule', + 'PhabricatorDaemonReference' => 'Phobject', + 'PhabricatorDaemonTaskGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorDaemonTasksTableView' => 'AphrontView', + 'PhabricatorDaemonsApplication' => 'PhabricatorApplication', + 'PhabricatorDaemonsSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorDailyRoutineTriggerClock' => 'PhabricatorTriggerClock', + 'PhabricatorDarkConsoleSetting' => 'PhabricatorSelectSetting', + 'PhabricatorDarkConsoleTabSetting' => 'PhabricatorInternalSetting', + 'PhabricatorDarkConsoleVisibleSetting' => 'PhabricatorInternalSetting', + 'PhabricatorDashboard' => array( + 'PhabricatorDashboardDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorProjectInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorDashboardPanelContainerInterface', + ), + 'PhabricatorDashboardAdjustController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardApplication' => 'PhabricatorApplication', + 'PhabricatorDashboardApplicationInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', + 'PhabricatorDashboardArchiveController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardChartPanelChartTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardChartPanelType' => 'PhabricatorDashboardPanelType', + 'PhabricatorDashboardColumn' => 'Phobject', + 'PhabricatorDashboardConsoleController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardController' => 'PhabricatorController', + 'PhabricatorDashboardDAO' => 'PhabricatorLiskDAO', + 'PhabricatorDashboardDashboardPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorDashboardDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorDashboardEditController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorDashboardFavoritesInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', + 'PhabricatorDashboardFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorDashboardFullLayoutMode' => 'PhabricatorDashboardLayoutMode', + 'PhabricatorDashboardFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorDashboardHalfLayoutMode' => 'PhabricatorDashboardLayoutMode', + 'PhabricatorDashboardHomeInstallWorkflow' => 'PhabricatorDashboardApplicationInstallWorkflow', + 'PhabricatorDashboardIconSet' => 'PhabricatorIconSet', + 'PhabricatorDashboardIconTransaction' => 'PhabricatorDashboardTransactionType', + 'PhabricatorDashboardInstallController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardInstallWorkflow' => 'Phobject', + 'PhabricatorDashboardLayoutMode' => 'Phobject', + 'PhabricatorDashboardLayoutTransaction' => 'PhabricatorDashboardTransactionType', + 'PhabricatorDashboardListController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardNameTransaction' => 'PhabricatorDashboardTransactionType', + 'PhabricatorDashboardObjectInstallWorkflow' => 'PhabricatorDashboardInstallWorkflow', + 'PhabricatorDashboardOneThirdLayoutMode' => 'PhabricatorDashboardLayoutMode', + 'PhabricatorDashboardPanel' => array( + 'PhabricatorDashboardDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorDashboardPanelContainerInterface', + ), + 'PhabricatorDashboardPanelArchiveController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelContainerIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension', + 'PhabricatorDashboardPanelDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorDashboardPanelEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorDashboardPanelEditController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorDashboardPanelFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorDashboardPanelFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorDashboardPanelListController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelNameTransaction' => 'PhabricatorDashboardPanelTransactionType', + 'PhabricatorDashboardPanelPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorDashboardPanelPropertyTransaction' => 'PhabricatorDashboardPanelTransactionType', + 'PhabricatorDashboardPanelQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorDashboardPanelRef' => 'Phobject', + 'PhabricatorDashboardPanelRefList' => 'Phobject', + 'PhabricatorDashboardPanelRenderController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelRenderingEngine' => 'Phobject', + 'PhabricatorDashboardPanelSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorDashboardPanelStatusTransaction' => 'PhabricatorDashboardPanelTransactionType', + 'PhabricatorDashboardPanelTabsController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorDashboardPanelTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorDashboardPanelTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorDashboardPanelTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorDashboardPanelType' => 'Phobject', + 'PhabricatorDashboardPanelUsedByObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorDashboardPanelViewController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPanelsTransaction' => 'PhabricatorDashboardTransactionType', + 'PhabricatorDashboardPortal' => array( + 'PhabricatorDashboardDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorProjectInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PhabricatorDashboardPortalController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardPortalDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorDashboardPortalEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorDashboardPortalEditController' => 'PhabricatorDashboardPortalController', + 'PhabricatorDashboardPortalEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorDashboardPortalEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorDashboardPortalFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorDashboardPortalFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorDashboardPortalInstallWorkflow' => 'PhabricatorDashboardObjectInstallWorkflow', + 'PhabricatorDashboardPortalListController' => 'PhabricatorDashboardPortalController', + 'PhabricatorDashboardPortalMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorDashboardPortalNameTransaction' => 'PhabricatorDashboardPortalTransactionType', + 'PhabricatorDashboardPortalPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorDashboardPortalProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorDashboardPortalQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorDashboardPortalSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorDashboardPortalSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorDashboardPortalStatus' => 'Phobject', + 'PhabricatorDashboardPortalTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorDashboardPortalTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorDashboardPortalTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorDashboardPortalViewController' => 'PhabricatorDashboardPortalController', + 'PhabricatorDashboardProfileController' => 'PhabricatorController', + 'PhabricatorDashboardProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorDashboardProjectInstallWorkflow' => 'PhabricatorDashboardObjectInstallWorkflow', + 'PhabricatorDashboardQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorDashboardQueryPanelApplicationEditField' => 'PhabricatorEditField', + 'PhabricatorDashboardQueryPanelApplicationTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardQueryPanelInstallController' => 'PhabricatorDashboardController', + 'PhabricatorDashboardQueryPanelLimitTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardQueryPanelQueryEditField' => 'PhabricatorEditField', + 'PhabricatorDashboardQueryPanelQueryTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardQueryPanelType' => 'PhabricatorDashboardPanelType', + 'PhabricatorDashboardRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorDashboardRenderingEngine' => 'Phobject', + 'PhabricatorDashboardSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorDashboardSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorDashboardStatusTransaction' => 'PhabricatorDashboardTransactionType', + 'PhabricatorDashboardTabsPanelTabsTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardTabsPanelType' => 'PhabricatorDashboardPanelType', + 'PhabricatorDashboardTextPanelTextTransaction' => 'PhabricatorDashboardPanelPropertyTransaction', + 'PhabricatorDashboardTextPanelType' => 'PhabricatorDashboardPanelType', + 'PhabricatorDashboardTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorDashboardTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorDashboardTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorDashboardTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorDashboardTwoThirdsLayoutMode' => 'PhabricatorDashboardLayoutMode', + 'PhabricatorDashboardViewController' => 'PhabricatorDashboardProfileController', + 'PhabricatorDataCacheSpec' => 'PhabricatorCacheSpec', + 'PhabricatorDataNotAttachedException' => 'Exception', + 'PhabricatorDatabaseRef' => 'Phobject', + 'PhabricatorDatabaseRefParser' => 'Phobject', + 'PhabricatorDatabaseSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorDatasourceApplicationEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'PhabricatorDatasourceEditField' => 'PhabricatorTokenizerEditField', + 'PhabricatorDatasourceEditType' => 'PhabricatorPHIDListEditType', + 'PhabricatorDatasourceEngine' => 'Phobject', + 'PhabricatorDatasourceEngineExtension' => 'Phobject', + 'PhabricatorDatasourceURIEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'PhabricatorDateFormatSetting' => 'PhabricatorSelectSetting', + 'PhabricatorDateTimeSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorDebugController' => 'PhabricatorController', + 'PhabricatorDefaultRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorDefaultSyntaxStyle' => 'PhabricatorSyntaxStyle', + 'PhabricatorDefaultUnlockEngine' => 'PhabricatorUnlockEngine', + 'PhabricatorDemoChartEngine' => 'PhabricatorChartEngine', + 'PhabricatorDestructibleCodex' => 'Phobject', + 'PhabricatorDestructionEngine' => 'Phobject', + 'PhabricatorDestructionEngineExtension' => 'Phobject', + 'PhabricatorDestructionEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorDeveloperConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorDeveloperPreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorDiffInlineCommentContentState' => 'PhabricatorInlineCommentContentState', + 'PhabricatorDiffInlineCommentContext' => 'PhabricatorInlineCommentContext', + 'PhabricatorDiffInlineCommentQuery' => 'PhabricatorApplicationTransactionCommentQuery', + 'PhabricatorDiffPreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorDiffScopeEngine' => 'Phobject', + 'PhabricatorDiffScopeEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorDifferenceEngine' => 'Phobject', + 'PhabricatorDifferentialApplication' => 'PhabricatorApplication', + 'PhabricatorDifferentialAttachCommitWorkflow' => 'PhabricatorDifferentialManagementWorkflow', + 'PhabricatorDifferentialConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorDifferentialExtractWorkflow' => 'PhabricatorDifferentialManagementWorkflow', + 'PhabricatorDifferentialManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorDifferentialMigrateHunkWorkflow' => 'PhabricatorDifferentialManagementWorkflow', + 'PhabricatorDifferentialRebuildChangesetsWorkflow' => 'PhabricatorDifferentialManagementWorkflow', + 'PhabricatorDifferentialRevisionTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorDiffusionApplication' => 'PhabricatorApplication', + 'PhabricatorDiffusionBlameSetting' => 'PhabricatorInternalSetting', + 'PhabricatorDiffusionConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorDisabledUserController' => 'PhabricatorAuthController', + 'PhabricatorDisplayPreferencesSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorDisqusAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorDividerEditField' => 'PhabricatorEditField', + 'PhabricatorDividerProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorDivinerApplication' => 'PhabricatorApplication', + 'PhabricatorDocumentEngine' => 'Phobject', + 'PhabricatorDocumentEngineBlock' => 'Phobject', + 'PhabricatorDocumentEngineBlockDiff' => 'Phobject', + 'PhabricatorDocumentEngineBlocks' => 'Phobject', + 'PhabricatorDocumentEngineParserException' => 'Exception', + 'PhabricatorDocumentRef' => 'Phobject', + 'PhabricatorDocumentRenderingEngine' => 'Phobject', + 'PhabricatorDoorkeeperApplication' => 'PhabricatorApplication', + 'PhabricatorDoubleExportField' => 'PhabricatorExportField', 'PhabricatorDraft' => 'PhabricatorDraftDAO', 'PhabricatorDraftDAO' => 'PhabricatorLiskDAO', + 'PhabricatorDraftEngine' => 'Phobject', + 'PhabricatorDrydockApplication' => 'PhabricatorApplication', + 'PhabricatorDuoAuthFactor' => 'PhabricatorAuthFactor', + 'PhabricatorDuoFuture' => 'FutureProxy', + 'PhabricatorEdgeChangeRecord' => 'Phobject', + 'PhabricatorEdgeChangeRecordTestCase' => 'PhabricatorTestCase', 'PhabricatorEdgeConfig' => 'PhabricatorEdgeConstants', + 'PhabricatorEdgeConstants' => 'Phobject', + 'PhabricatorEdgeCycleException' => 'Exception', + 'PhabricatorEdgeEditType' => 'PhabricatorPHIDListEditType', + 'PhabricatorEdgeEditor' => 'Phobject', + 'PhabricatorEdgeGraph' => 'AbstractDirectedGraph', + 'PhabricatorEdgeIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'PhabricatorEdgeObject' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorEdgeObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorEdgeQuery' => 'PhabricatorQuery', + 'PhabricatorEdgeTestCase' => 'PhabricatorTestCase', + 'PhabricatorEdgeType' => 'Phobject', + 'PhabricatorEdgeTypeTestCase' => 'PhabricatorTestCase', + 'PhabricatorEdgesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorEditEngine' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorEditEngineAPIMethod' => 'ConduitAPIMethod', + 'PhabricatorEditEngineBulkJobType' => 'PhabricatorWorkerBulkJobType', + 'PhabricatorEditEngineCheckboxesCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEngineColumnsCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEngineCommentAction' => 'Phobject', + 'PhabricatorEditEngineCommentActionGroup' => 'Phobject', + 'PhabricatorEditEngineConfiguration' => array( + 'PhabricatorSearchDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorEditEngineConfigurationDefaultCreateController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationDefaultsController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationDisableController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationEditController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorEditEngineConfigurationEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorEditEngineConfigurationIsEditController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationListController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationLockController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorEditEngineConfigurationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorEditEngineConfigurationReorderController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationSaveController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorEditEngineConfigurationSortController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationSubtypeController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineConfigurationTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorEditEngineConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorEditEngineConfigurationViewController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineController' => 'PhabricatorApplicationTransactionController', + 'PhabricatorEditEngineCreateOrderTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorEditEngineDefaultCreateTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineDefaultLock' => 'PhabricatorEditEngineLock', + 'PhabricatorEditEngineDefaultTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineDisableTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineEditOrderTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineExtension' => 'Phobject', + 'PhabricatorEditEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorEditEngineIsEditTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineListController' => 'PhabricatorEditEngineController', + 'PhabricatorEditEngineLock' => 'Phobject', + 'PhabricatorEditEngineLocksTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineMFAEngine' => 'Phobject', + 'PhabricatorEditEngineNameTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineOrderTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEnginePageState' => 'Phobject', + 'PhabricatorEditEnginePointsCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEnginePreambleTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorEditEngineQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorEditEngineSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorEditEngineSelectCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEngineSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorEditEngineStaticCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEngineSubtype' => 'Phobject', + 'PhabricatorEditEngineSubtypeHeraldField' => 'HeraldField', + 'PhabricatorEditEngineSubtypeMap' => 'Phobject', + 'PhabricatorEditEngineSubtypeTestCase' => 'PhabricatorTestCase', + 'PhabricatorEditEngineSubtypeTransaction' => 'PhabricatorEditEngineTransactionType', + 'PhabricatorEditEngineTokenizerCommentAction' => 'PhabricatorEditEngineCommentAction', + 'PhabricatorEditEngineTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorEditField' => 'Phobject', + 'PhabricatorEditPage' => 'Phobject', + 'PhabricatorEditType' => 'Phobject', + 'PhabricatorEditor' => 'Phobject', + 'PhabricatorEditorExtension' => 'Phobject', + 'PhabricatorEditorExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorEditorMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'PhabricatorEditorSetting' => 'PhabricatorStringSetting', + 'PhabricatorEditorURIEngine' => 'Phobject', + 'PhabricatorEditorURIEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorEditorURIParserException' => 'Exception', + 'PhabricatorElasticFulltextStorageEngine' => 'PhabricatorFulltextStorageEngine', + 'PhabricatorElasticsearchHost' => 'PhabricatorSearchHost', + 'PhabricatorElasticsearchSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorEmailAddressesSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorEmailContentSource' => 'PhabricatorContentSource', + 'PhabricatorEmailDeliverySettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorEmailFormatSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailFormatSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', 'PhabricatorEmailLoginController' => 'PhabricatorAuthController', - 'PhabricatorEmailTokenController' => 'PhabricatorAuthController', - 'PhabricatorEmailVerificationController' => 'PhabricatorPeopleController', - 'PhabricatorEnglishTranslation' => 'PhabricatorBaseEnglishTranslation', + 'PhabricatorEmailLoginUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorEmailNotificationsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailPreferencesSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorEmailRePrefixSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailSelfActionsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailStampsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailTagsSetting' => 'PhabricatorInternalSetting', + 'PhabricatorEmailVarySubjectsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorEmailVerificationController' => 'PhabricatorAuthController', + 'PhabricatorEmbedFileRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorEmojiDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorEmojiRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorEmojiTranslation' => 'PhutilTranslation', + 'PhabricatorEmptyQueryException' => 'Exception', + 'PhabricatorEnterHisecUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorEnumConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorEnv' => 'Phobject', 'PhabricatorEnvTestCase' => 'PhabricatorTestCase', - 'PhabricatorErrorExample' => 'PhabricatorUIExample', + 'PhabricatorEpochEditField' => 'PhabricatorEditField', + 'PhabricatorEpochExportField' => 'PhabricatorExportField', 'PhabricatorEvent' => 'PhutilEvent', + 'PhabricatorEventEngine' => 'Phobject', + 'PhabricatorEventListener' => 'PhutilEventListener', 'PhabricatorEventType' => 'PhutilEventType', + 'PhabricatorExampleEventListener' => 'PhabricatorEventListener', + 'PhabricatorExcelExportFormat' => 'PhabricatorExportFormat', + 'PhabricatorExecFutureFileUploadSource' => 'PhabricatorFileUploadSource', + 'PhabricatorExitHisecUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorExportEngine' => 'Phobject', + 'PhabricatorExportEngineBulkJobType' => 'PhabricatorWorkerSingleBulkJobType', + 'PhabricatorExportEngineExtension' => 'Phobject', + 'PhabricatorExportField' => 'Phobject', + 'PhabricatorExportFormat' => 'Phobject', + 'PhabricatorExportFormatSetting' => 'PhabricatorInternalSetting', + 'PhabricatorExtendingPhabricatorConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorExtensionsSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorExternalAccount' => array( + 'PhabricatorUserDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorExternalAccountIdentifier' => array( + 'PhabricatorUserDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorExternalAccountIdentifierQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorExternalAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorExternalAccountsSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorExternalEditorSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorExtraConfigSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorFacebookAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorFact' => 'Phobject', + 'PhabricatorFactAggregate' => 'PhabricatorFactDAO', + 'PhabricatorFactApplication' => 'PhabricatorApplication', + 'PhabricatorFactChart' => array( + 'PhabricatorFactDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorFactChartController' => 'PhabricatorFactController', + 'PhabricatorFactChartFunction' => 'PhabricatorChartFunction', + 'PhabricatorFactController' => 'PhabricatorController', + 'PhabricatorFactCursor' => 'PhabricatorFactDAO', + 'PhabricatorFactDAO' => 'PhabricatorLiskDAO', + 'PhabricatorFactDaemon' => 'PhabricatorDaemon', + 'PhabricatorFactDatapointQuery' => 'Phobject', + 'PhabricatorFactDimension' => 'PhabricatorFactDAO', + 'PhabricatorFactEngine' => 'Phobject', + 'PhabricatorFactEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorFactHomeController' => 'PhabricatorFactController', + 'PhabricatorFactIntDatapoint' => 'PhabricatorFactDAO', + 'PhabricatorFactKeyDimension' => 'PhabricatorFactDimension', + 'PhabricatorFactManagementAnalyzeWorkflow' => 'PhabricatorFactManagementWorkflow', + 'PhabricatorFactManagementCursorsWorkflow' => 'PhabricatorFactManagementWorkflow', + 'PhabricatorFactManagementDestroyWorkflow' => 'PhabricatorFactManagementWorkflow', + 'PhabricatorFactManagementListWorkflow' => 'PhabricatorFactManagementWorkflow', + 'PhabricatorFactManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorFactObjectController' => 'PhabricatorFactController', + 'PhabricatorFactObjectDimension' => 'PhabricatorFactDimension', + 'PhabricatorFactRaw' => 'PhabricatorFactDAO', + 'PhabricatorFactUpdateIterator' => 'PhutilBufferedIterator', + 'PhabricatorFailHisecUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorFaviconController' => 'PhabricatorController', + 'PhabricatorFaviconRef' => 'Phobject', + 'PhabricatorFaviconRefQuery' => 'Phobject', + 'PhabricatorFavoritesApplication' => 'PhabricatorApplication', + 'PhabricatorFavoritesController' => 'PhabricatorController', + 'PhabricatorFavoritesMainMenuBarExtension' => 'PhabricatorMainMenuBarExtension', + 'PhabricatorFavoritesMenuItemController' => 'PhabricatorFavoritesController', + 'PhabricatorFavoritesProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorFaxContentSource' => 'PhabricatorContentSource', + 'PhabricatorFeedApplication' => 'PhabricatorApplication', + 'PhabricatorFeedBuilder' => 'Phobject', + 'PhabricatorFeedConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorFeedController' => 'PhabricatorController', 'PhabricatorFeedDAO' => 'PhabricatorLiskDAO', - 'PhabricatorFeedPublicStreamController' => 'PhabricatorFeedController', - 'PhabricatorFeedStoryAudit' => 'PhabricatorFeedStory', - 'PhabricatorFeedStoryData' => 'PhabricatorFeedDAO', - 'PhabricatorFeedStoryDifferential' => 'PhabricatorFeedStory', - 'PhabricatorFeedStoryManiphest' => 'PhabricatorFeedStory', + 'PhabricatorFeedDetailController' => 'PhabricatorFeedController', + 'PhabricatorFeedListController' => 'PhabricatorFeedController', + 'PhabricatorFeedManagementRepublishWorkflow' => 'PhabricatorFeedManagementWorkflow', + 'PhabricatorFeedManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorFeedQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFeedSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorFeedStory' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + 'PhabricatorMarkupInterface', + ), + 'PhabricatorFeedStoryData' => array( + 'PhabricatorFeedDAO', + 'PhabricatorDestructibleInterface', + ), 'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO', - 'PhabricatorFeedStoryPhriction' => 'PhabricatorFeedStory', - 'PhabricatorFeedStoryProject' => 'PhabricatorFeedStory', + 'PhabricatorFeedStoryPublisher' => 'Phobject', 'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO', - 'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory', - 'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants', - 'PhabricatorFeedStoryUnknown' => 'PhabricatorFeedStory', - 'PhabricatorFeedStoryView' => 'PhabricatorFeedView', - 'PhabricatorFeedView' => 'AphrontView', - 'PhabricatorFile' => 'PhabricatorFileDAO', + 'PhabricatorFeedTransactionListController' => 'PhabricatorFeedController', + 'PhabricatorFeedTransactionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFeedTransactionSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorFerretEngine' => 'Phobject', + 'PhabricatorFerretEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorFerretFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorFerretFulltextStorageEngine' => 'PhabricatorFulltextStorageEngine', + 'PhabricatorFerretMetadata' => 'Phobject', + 'PhabricatorFerretSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorFile' => array( + 'PhabricatorFileDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorIndexableInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorFileAES256StorageFormat' => 'PhabricatorFileStorageFormat', + 'PhabricatorFileAltTextTransaction' => 'PhabricatorFileTransactionType', + 'PhabricatorFileAttachment' => array( + 'PhabricatorFileDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PhabricatorFileAttachmentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFileBundleLoader' => 'Phobject', + 'PhabricatorFileChunk' => array( + 'PhabricatorFileDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorFileChunkIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhabricatorFileChunkQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFileComposeController' => 'PhabricatorFileController', 'PhabricatorFileController' => 'PhabricatorController', 'PhabricatorFileDAO' => 'PhabricatorLiskDAO', 'PhabricatorFileDataController' => 'PhabricatorFileController', 'PhabricatorFileDeleteController' => 'PhabricatorFileController', + 'PhabricatorFileDeleteTransaction' => 'PhabricatorFileTransactionType', + 'PhabricatorFileDetachController' => 'PhabricatorFileController', + 'PhabricatorFileDocumentController' => 'PhabricatorFileController', + 'PhabricatorFileDocumentRenderingEngine' => 'PhabricatorDocumentRenderingEngine', 'PhabricatorFileDropUploadController' => 'PhabricatorFileController', - 'PhabricatorFileImageMacro' => 'PhabricatorFileDAO', - 'PhabricatorFileInfoController' => 'PhabricatorFileController', + 'PhabricatorFileEditController' => 'PhabricatorFileController', + 'PhabricatorFileEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorFileEditField' => 'PhabricatorEditField', + 'PhabricatorFileEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorFileExternalRequest' => array( + 'PhabricatorFileDAO', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorFileExternalRequestGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorFileFilePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorFileIconSetSelectController' => 'PhabricatorFileController', + 'PhabricatorFileImageMacro' => array( + 'PhabricatorFileDAO', + 'PhabricatorSubscribableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorFileImageProxyController' => 'PhabricatorFileController', + 'PhabricatorFileImageTransform' => 'PhabricatorFileTransform', + 'PhabricatorFileIntegrityException' => 'Exception', + 'PhabricatorFileLightboxController' => 'PhabricatorFileController', + 'PhabricatorFileLinkView' => 'AphrontTagView', 'PhabricatorFileListController' => 'PhabricatorFileController', - 'PhabricatorFileMacroDeleteController' => 'PhabricatorFileController', - 'PhabricatorFileMacroEditController' => 'PhabricatorFileController', - 'PhabricatorFileMacroListController' => 'PhabricatorFileController', - 'PhabricatorFileProxyController' => 'PhabricatorFileController', - 'PhabricatorFileProxyImage' => 'PhabricatorFileDAO', - 'PhabricatorFileShortcutController' => 'PhabricatorFileController', - 'PhabricatorFileSideNavView' => 'AphrontView', + 'PhabricatorFileNameNgrams' => 'PhabricatorSearchNgrams', + 'PhabricatorFileNameTransaction' => 'PhabricatorFileTransactionType', + 'PhabricatorFileQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFileROT13StorageFormat' => 'PhabricatorFileStorageFormat', + 'PhabricatorFileRawStorageFormat' => 'PhabricatorFileStorageFormat', + 'PhabricatorFileSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorFileSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorFileSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO', 'PhabricatorFileStorageConfigurationException' => 'Exception', + 'PhabricatorFileStorageEngine' => 'Phobject', + 'PhabricatorFileStorageEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorFileStorageFormat' => 'Phobject', + 'PhabricatorFileStorageFormatTestCase' => 'PhabricatorTestCase', + 'PhabricatorFileTemporaryGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorFileTestCase' => 'PhabricatorTestCase', + 'PhabricatorFileTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorFileThumbnailTransform' => 'PhabricatorFileImageTransform', + 'PhabricatorFileTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorFileTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorFileTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorFileTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorFileTransform' => 'Phobject', 'PhabricatorFileTransformController' => 'PhabricatorFileController', + 'PhabricatorFileTransformListController' => 'PhabricatorFileController', + 'PhabricatorFileTransformTestCase' => 'PhabricatorTestCase', + 'PhabricatorFileUICurtainAttachController' => 'PhabricatorFileController', + 'PhabricatorFileUICurtainListController' => 'PhabricatorFileController', 'PhabricatorFileUploadController' => 'PhabricatorFileController', + 'PhabricatorFileUploadDialogController' => 'PhabricatorFileController', 'PhabricatorFileUploadException' => 'Exception', - 'PhabricatorFileUploadView' => 'AphrontView', - 'PhabricatorFlag' => 'PhabricatorFlagDAO', + 'PhabricatorFileUploadSource' => 'Phobject', + 'PhabricatorFileUploadSourceByteLimitException' => 'Exception', + 'PhabricatorFileViewController' => 'PhabricatorFileController', + 'PhabricatorFileinfoSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorFilesApplication' => 'PhabricatorApplication', + 'PhabricatorFilesApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel', + 'PhabricatorFilesBuiltinFile' => 'Phobject', + 'PhabricatorFilesComposeAvatarBuiltinFile' => 'PhabricatorFilesBuiltinFile', + 'PhabricatorFilesComposeIconBuiltinFile' => 'PhabricatorFilesBuiltinFile', + 'PhabricatorFilesConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorFilesCurtainExtension' => 'PHUICurtainExtension', + 'PhabricatorFilesManagementCatWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementCompactWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementCycleWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementEncodeWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementEnginesWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementGenerateKeyWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementIntegrityWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementMigrateWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementRebuildWorkflow' => 'PhabricatorFilesManagementWorkflow', + 'PhabricatorFilesManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorFilesOnDiskBuiltinFile' => 'PhabricatorFilesBuiltinFile', + 'PhabricatorFilesOutboundRequestAction' => 'PhabricatorSystemAction', + 'PhabricatorFiletreeVisibleSetting' => 'PhabricatorInternalSetting', + 'PhabricatorFiletreeWidthSetting' => 'PhabricatorInternalSetting', + 'PhabricatorFlag' => array( + 'PhabricatorFlagDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorFlagAddFlagHeraldAction' => 'PhabricatorFlagHeraldAction', 'PhabricatorFlagColor' => 'PhabricatorFlagConstants', + 'PhabricatorFlagConstants' => 'Phobject', 'PhabricatorFlagController' => 'PhabricatorController', 'PhabricatorFlagDAO' => 'PhabricatorLiskDAO', 'PhabricatorFlagDeleteController' => 'PhabricatorFlagController', + 'PhabricatorFlagDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', 'PhabricatorFlagEditController' => 'PhabricatorFlagController', + 'PhabricatorFlagHeraldAction' => 'HeraldAction', 'PhabricatorFlagListController' => 'PhabricatorFlagController', - 'PhabricatorFlagListView' => 'AphrontView', - 'PhabricatorFormExample' => 'PhabricatorUIExample', - 'PhabricatorGarbageCollectorDaemon' => 'PhabricatorDaemon', - 'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker', + 'PhabricatorFlagQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorFlagRemoveFlagHeraldAction' => 'PhabricatorFlagHeraldAction', + 'PhabricatorFlagSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorFlagSelectControl' => 'AphrontFormControl', + 'PhabricatorFlaggableInterface' => 'PhabricatorPHIDInterface', + 'PhabricatorFlagsApplication' => 'PhabricatorApplication', + 'PhabricatorFlagsUIEventListener' => 'PhabricatorEventListener', + 'PhabricatorFullLoginUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorFulltextEngine' => 'Phobject', + 'PhabricatorFulltextEngineExtension' => 'Phobject', + 'PhabricatorFulltextEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorFulltextIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'PhabricatorFulltextInterface' => 'PhabricatorIndexableInterface', + 'PhabricatorFulltextResultSet' => 'Phobject', + 'PhabricatorFulltextStorageEngine' => 'Phobject', + 'PhabricatorFulltextToken' => 'Phobject', + 'PhabricatorFundApplication' => 'PhabricatorApplication', + 'PhabricatorGDSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorGarbageCollector' => 'Phobject', + 'PhabricatorGarbageCollectorManagementCollectWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow', + 'PhabricatorGarbageCollectorManagementCompactEdgesWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow', + 'PhabricatorGarbageCollectorManagementSetPolicyWorkflow' => 'PhabricatorGarbageCollectorManagementWorkflow', + 'PhabricatorGarbageCollectorManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorGeneralCachePurger' => 'PhabricatorCachePurger', + 'PhabricatorGestureUIExample' => 'PhabricatorUIExample', + 'PhabricatorGitGraphStream' => 'PhabricatorRepositoryGraphStream', + 'PhabricatorGitHubAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorGlobalLock' => 'PhutilLock', + 'PhabricatorGlobalLockTestCase' => 'PhabricatorTestCase', + 'PhabricatorGlobalUploadTargetView' => 'AphrontView', + 'PhabricatorGoogleAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorGuidanceContext' => 'Phobject', + 'PhabricatorGuidanceEngine' => 'Phobject', + 'PhabricatorGuidanceEngineExtension' => 'Phobject', + 'PhabricatorGuidanceMessage' => 'Phobject', + 'PhabricatorGuideApplication' => 'PhabricatorApplication', + 'PhabricatorGuideController' => 'PhabricatorController', + 'PhabricatorGuideInstallModule' => 'PhabricatorGuideModule', + 'PhabricatorGuideItemView' => 'Phobject', + 'PhabricatorGuideListView' => 'AphrontView', + 'PhabricatorGuideModule' => 'Phobject', + 'PhabricatorGuideModuleController' => 'PhabricatorGuideController', + 'PhabricatorGuideQuickStartModule' => 'PhabricatorGuideModule', + 'PhabricatorHMACTestCase' => 'PhabricatorTestCase', + 'PhabricatorHTTPParameterTypeTableView' => 'AphrontView', + 'PhabricatorHandleList' => array( + 'Phobject', + 'Iterator', + 'ArrayAccess', + 'Countable', + ), + 'PhabricatorHandleObjectSelectorDataView' => 'Phobject', + 'PhabricatorHandlePool' => 'Phobject', + 'PhabricatorHandlePoolTestCase' => 'PhabricatorTestCase', + 'PhabricatorHandleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorHandleRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorHandlesEditField' => 'PhabricatorPHIDListEditField', + 'PhabricatorHarbormasterApplication' => 'PhabricatorApplication', + 'PhabricatorHash' => 'Phobject', + 'PhabricatorHashTestCase' => 'PhabricatorTestCase', + 'PhabricatorHelpApplication' => 'PhabricatorApplication', 'PhabricatorHelpController' => 'PhabricatorController', + 'PhabricatorHelpDocumentationController' => 'PhabricatorHelpController', 'PhabricatorHelpKeyboardShortcutController' => 'PhabricatorHelpController', - 'PhabricatorIDPagedPolicyQuery' => 'PhabricatorPolicyQuery', - 'PhabricatorIRCBot' => 'PhabricatorDaemon', - 'PhabricatorIRCDifferentialNotificationHandler' => 'PhabricatorIRCHandler', - 'PhabricatorIRCLogHandler' => 'PhabricatorIRCHandler', - 'PhabricatorIRCMacroHandler' => 'PhabricatorIRCHandler', - 'PhabricatorIRCObjectNameHandler' => 'PhabricatorIRCHandler', - 'PhabricatorIRCProtocolHandler' => 'PhabricatorIRCHandler', - 'PhabricatorIRCWhatsNewHandler' => 'PhabricatorIRCHandler', + 'PhabricatorHeraldApplication' => 'PhabricatorApplication', + 'PhabricatorHeraldContentSource' => 'PhabricatorContentSource', + 'PhabricatorHexdumpDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorHighSecurityRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorHigherOrderChartFunction' => 'PhabricatorChartFunction', + 'PhabricatorHomeApplication' => 'PhabricatorApplication', + 'PhabricatorHomeConstants' => 'PhabricatorHomeController', + 'PhabricatorHomeController' => 'PhabricatorController', + 'PhabricatorHomeLauncherProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorHomeMenuItemController' => 'PhabricatorHomeController', + 'PhabricatorHomeProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorHomeProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorHovercardEngineExtension' => 'Phobject', + 'PhabricatorHovercardEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorIDExportField' => 'PhabricatorExportField', + 'PhabricatorIDsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorIDsSearchField' => 'PhabricatorSearchField', + 'PhabricatorIconDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorIconRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorIconSet' => 'Phobject', + 'PhabricatorIconSetEditField' => 'PhabricatorEditField', + 'PhabricatorIconSetIcon' => 'Phobject', + 'PhabricatorImageDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorImageMacroRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorImageRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorImageTransformer' => 'Phobject', + 'PhabricatorImagemagickSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorInFlightErrorView' => 'AphrontView', + 'PhabricatorIndexEngine' => 'Phobject', + 'PhabricatorIndexEngineExtension' => 'Phobject', + 'PhabricatorIndexEngineExtensionModule' => 'PhabricatorConfigModule', 'PhabricatorInfrastructureTestCase' => 'PhabricatorTestCase', + 'PhabricatorInlineComment' => array( + 'Phobject', + 'PhabricatorMarkupInterface', + ), + 'PhabricatorInlineCommentAdjustmentEngine' => 'Phobject', + 'PhabricatorInlineCommentContentState' => 'Phobject', + 'PhabricatorInlineCommentContext' => 'Phobject', 'PhabricatorInlineCommentController' => 'PhabricatorController', 'PhabricatorInlineSummaryView' => 'AphrontView', + 'PhabricatorInstructionsEditField' => 'PhabricatorEditField', + 'PhabricatorIntConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorIntEditField' => 'PhabricatorEditField', + 'PhabricatorIntExportField' => 'PhabricatorExportField', + 'PhabricatorInternalSetting' => 'PhabricatorSetting', + 'PhabricatorInternationalizationManagementExtractWorkflow' => 'PhabricatorInternationalizationManagementWorkflow', + 'PhabricatorInternationalizationManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorInvalidConfigSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorInvalidQueryCursorException' => 'Exception', + 'PhabricatorIteratedMD5PasswordHasher' => 'PhabricatorPasswordHasher', + 'PhabricatorIteratedMD5PasswordHasherTestCase' => 'PhabricatorTestCase', + 'PhabricatorIteratorFileUploadSource' => 'PhabricatorFileUploadSource', + 'PhabricatorJIRAAuthProvider' => array( + 'PhabricatorOAuth1AuthProvider', + 'DoorkeeperRemarkupURIInterface', + ), + 'PhabricatorJSONConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorJSONDocumentEngine' => 'PhabricatorTextDocumentEngine', + 'PhabricatorJSONExportFormat' => 'PhabricatorExportFormat', 'PhabricatorJavelinLinter' => 'ArcanistLinter', - 'PhabricatorLDAPLoginController' => 'PhabricatorAuthController', - 'PhabricatorLDAPRegistrationController' => 'PhabricatorAuthController', - 'PhabricatorLDAPUnlinkController' => 'PhabricatorAuthController', - 'PhabricatorLintEngine' => 'PhutilLintEngine', + 'PhabricatorJiraIssueHasObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorJupyterDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorKeyValueDatabaseCache' => 'PhutilKeyValueCache', + 'PhabricatorKeyValueSerializingCacheProxy' => 'PhutilKeyValueCacheProxy', + 'PhabricatorKeyboardRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorKeyring' => 'Phobject', + 'PhabricatorKeyringConfigOptionType' => 'PhabricatorConfigJSONOptionType', + 'PhabricatorLDAPAuthProvider' => 'PhabricatorAuthProvider', + 'PhabricatorLabelProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorLanguageSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorLegalpadApplication' => 'PhabricatorApplication', + 'PhabricatorLegalpadDocumentPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorLegalpadSignaturePolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorLibraryTestCase' => 'PhutilLibraryTestCase', + 'PhabricatorLinkProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorLipsumArtist' => 'Phobject', + 'PhabricatorLipsumContentSource' => 'PhabricatorContentSource', + 'PhabricatorLipsumGenerateWorkflow' => 'PhabricatorLipsumManagementWorkflow', + 'PhabricatorLipsumManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorLipsumMondrianArtist' => 'PhabricatorLipsumArtist', 'PhabricatorLiskDAO' => 'LiskDAO', + 'PhabricatorLiskExportEngineExtension' => 'PhabricatorExportEngineExtension', + 'PhabricatorLiskFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorLiskSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorLiskSerializer' => 'Phobject', + 'PhabricatorListExportField' => 'PhabricatorExportField', 'PhabricatorLocalDiskFileStorageEngine' => 'PhabricatorFileStorageEngine', 'PhabricatorLocalTimeTestCase' => 'PhabricatorTestCase', - 'PhabricatorLoginController' => 'PhabricatorAuthController', - 'PhabricatorLoginValidateController' => 'PhabricatorAuthController', + 'PhabricatorLocaleScopeGuard' => 'Phobject', + 'PhabricatorLocaleScopeGuardTestCase' => 'PhabricatorTestCase', + 'PhabricatorLockLogManagementWorkflow' => 'PhabricatorLockManagementWorkflow', + 'PhabricatorLockManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorLogTriggerAction' => 'PhabricatorTriggerAction', + 'PhabricatorLoginFailureUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorLoginUserLogType' => 'PhabricatorUserLogType', 'PhabricatorLogoutController' => 'PhabricatorAuthController', - 'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter', - 'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter', - 'PhabricatorMailImplementationSendGridAdapter' => 'PhabricatorMailImplementationAdapter', - 'PhabricatorMailImplementationTestAdapter' => 'PhabricatorMailImplementationAdapter', + 'PhabricatorLogoutUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorLunarPhasePolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorMacroApplication' => 'PhabricatorApplication', + 'PhabricatorMacroAudioBehaviorTransaction' => 'PhabricatorMacroTransactionType', + 'PhabricatorMacroAudioController' => 'PhabricatorMacroController', + 'PhabricatorMacroAudioTransaction' => 'PhabricatorMacroTransactionType', + 'PhabricatorMacroController' => 'PhabricatorController', + 'PhabricatorMacroDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorMacroDisableController' => 'PhabricatorMacroController', + 'PhabricatorMacroDisabledTransaction' => 'PhabricatorMacroTransactionType', + 'PhabricatorMacroEditController' => 'PhameBlogController', + 'PhabricatorMacroEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorMacroEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorMacroFileTransaction' => 'PhabricatorMacroTransactionType', + 'PhabricatorMacroListController' => 'PhabricatorMacroController', + 'PhabricatorMacroMacroPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorMacroMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorMacroManageCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorMacroMemeController' => 'PhabricatorMacroController', + 'PhabricatorMacroMemeDialogController' => 'PhabricatorMacroController', + 'PhabricatorMacroNameTransaction' => 'PhabricatorMacroTransactionType', + 'PhabricatorMacroQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorMacroReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorMacroSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorMacroTestCase' => 'PhabricatorTestCase', + 'PhabricatorMacroTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorMacroTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorMacroTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorMacroTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorMacroViewController' => 'PhabricatorMacroController', + 'PhabricatorMailAdapter' => 'Phobject', + 'PhabricatorMailAdapterTestCase' => 'PhabricatorTestCase', + 'PhabricatorMailAmazonSESAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailAmazonSNSAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailAttachment' => 'Phobject', + 'PhabricatorMailConfigTestCase' => 'PhabricatorTestCase', + 'PhabricatorMailEmailEngine' => 'PhabricatorMailMessageEngine', + 'PhabricatorMailEmailHeraldField' => 'HeraldField', + 'PhabricatorMailEmailHeraldFieldGroup' => 'HeraldFieldGroup', + 'PhabricatorMailEmailMessage' => 'PhabricatorMailExternalMessage', + 'PhabricatorMailEmailSubjectHeraldField' => 'PhabricatorMailEmailHeraldField', + 'PhabricatorMailEngineExtension' => 'Phobject', + 'PhabricatorMailExternalMessage' => 'Phobject', + 'PhabricatorMailHeader' => 'Phobject', + 'PhabricatorMailMailgunAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailManagementListInboundWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementListOutboundWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementReceiveTestWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementResendWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementSendTestWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementShowInboundWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementShowOutboundWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementUnverifyWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementVolumeWorkflow' => 'PhabricatorMailManagementWorkflow', + 'PhabricatorMailManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorMailMessageEngine' => 'Phobject', + 'PhabricatorMailMustEncryptHeraldAction' => 'HeraldAction', + 'PhabricatorMailOutboundMailHeraldAdapter' => 'HeraldAdapter', + 'PhabricatorMailOutboundRoutingHeraldAction' => 'HeraldAction', + 'PhabricatorMailOutboundRoutingSelfEmailHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction', + 'PhabricatorMailOutboundRoutingSelfNotificationHeraldAction' => 'PhabricatorMailOutboundRoutingHeraldAction', + 'PhabricatorMailOutboundStatus' => 'Phobject', + 'PhabricatorMailPostmarkAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailPropertiesDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorMailReceiver' => 'Phobject', + 'PhabricatorMailReceiverTestCase' => 'PhabricatorTestCase', + 'PhabricatorMailReplyHandler' => 'Phobject', + 'PhabricatorMailRoutingRule' => 'Phobject', + 'PhabricatorMailSMSEngine' => 'PhabricatorMailMessageEngine', + 'PhabricatorMailSMSMessage' => 'PhabricatorMailExternalMessage', + 'PhabricatorMailSMTPAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailSendGridAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailSendmailAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorMailStamp' => 'Phobject', + 'PhabricatorMailTarget' => 'Phobject', + 'PhabricatorMailTestAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailTwilioAdapter' => 'PhabricatorMailAdapter', + 'PhabricatorMailUtil' => 'Phobject', + 'PhabricatorMainMenuBarExtension' => 'Phobject', + 'PhabricatorMainMenuSearchView' => 'AphrontView', + 'PhabricatorMainMenuView' => 'AphrontView', + 'PhabricatorManageProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorManagementWorkflow' => 'PhutilArgumentWorkflow', + 'PhabricatorManiphestApplication' => 'PhabricatorApplication', + 'PhabricatorManiphestConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorManiphestTaskFactEngine' => 'PhabricatorTransactionFactEngine', + 'PhabricatorManiphestTaskTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorManualActivitySetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorMarkupCache' => 'PhabricatorCacheDAO', + 'PhabricatorMarkupEngine' => 'Phobject', + 'PhabricatorMarkupEngineTestCase' => 'PhabricatorTestCase', + 'PhabricatorMarkupOneOff' => array( + 'Phobject', + 'PhabricatorMarkupInterface', + ), + 'PhabricatorMarkupPreviewController' => 'PhabricatorController', + 'PhabricatorMaxChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorMemeEngine' => 'Phobject', + 'PhabricatorMemeRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorMentionRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorMercurialGraphStream' => 'PhabricatorRepositoryGraphStream', + 'PhabricatorMetaMTAActor' => 'Phobject', + 'PhabricatorMetaMTAActorQuery' => 'PhabricatorQuery', + 'PhabricatorMetaMTAApplication' => 'PhabricatorApplication', + 'PhabricatorMetaMTAApplicationEmail' => array( + 'PhabricatorMetaMTADAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', + ), + 'PhabricatorMetaMTAApplicationEmailDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorMetaMTAApplicationEmailEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorMetaMTAApplicationEmailHeraldField' => 'HeraldField', + 'PhabricatorMetaMTAApplicationEmailPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorMetaMTAApplicationEmailPanel' => 'PhabricatorApplicationConfigurationPanel', + 'PhabricatorMetaMTAApplicationEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorMetaMTAApplicationEmailTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorMetaMTAApplicationEmailTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorMetaMTAConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorMetaMTAController' => 'PhabricatorController', 'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO', + 'PhabricatorMetaMTAEmailBodyParser' => 'Phobject', 'PhabricatorMetaMTAEmailBodyParserTestCase' => 'PhabricatorTestCase', - 'PhabricatorMetaMTAListController' => 'PhabricatorMetaMTAController', - 'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO', + 'PhabricatorMetaMTAEmailHeraldAction' => 'HeraldAction', + 'PhabricatorMetaMTAEmailOthersHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction', + 'PhabricatorMetaMTAEmailSelfHeraldAction' => 'PhabricatorMetaMTAEmailHeraldAction', + 'PhabricatorMetaMTAErrorMailAction' => 'PhabricatorSystemAction', + 'PhabricatorMetaMTAMail' => array( + 'PhabricatorMetaMTADAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorMetaMTAMailBody' => 'Phobject', + 'PhabricatorMetaMTAMailBodyTestCase' => 'PhabricatorTestCase', + 'PhabricatorMetaMTAMailHasRecipientEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorMetaMTAMailListController' => 'PhabricatorMetaMTAController', + 'PhabricatorMetaMTAMailPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorMetaMTAMailProperties' => array( + 'PhabricatorMetaMTADAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorMetaMTAMailPropertiesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorMetaMTAMailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorMetaMTAMailSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorMetaMTAMailSection' => 'Phobject', 'PhabricatorMetaMTAMailTestCase' => 'PhabricatorTestCase', - 'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO', - 'PhabricatorMetaMTAMailingListEditController' => 'PhabricatorMetaMTAController', - 'PhabricatorMetaMTAMailingListsController' => 'PhabricatorMetaMTAController', - 'PhabricatorMetaMTAReceiveController' => 'PhabricatorMetaMTAController', - 'PhabricatorMetaMTAReceivedListController' => 'PhabricatorMetaMTAController', + 'PhabricatorMetaMTAMailViewController' => 'PhabricatorMetaMTAController', + 'PhabricatorMetaMTAMailableDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorMetaMTAMailableFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorMetaMTAMailgunReceiveController' => 'PhabricatorMetaMTAController', + 'PhabricatorMetaMTAMemberQuery' => 'PhabricatorQuery', + 'PhabricatorMetaMTAPermanentFailureException' => 'Exception', + 'PhabricatorMetaMTAPostmarkReceiveController' => 'PhabricatorMetaMTAController', 'PhabricatorMetaMTAReceivedMail' => 'PhabricatorMetaMTADAO', - 'PhabricatorMetaMTASendController' => 'PhabricatorMetaMTAController', + 'PhabricatorMetaMTAReceivedMailProcessingException' => 'Exception', + 'PhabricatorMetaMTAReceivedMailTestCase' => 'PhabricatorTestCase', + 'PhabricatorMetaMTASchemaSpec' => 'PhabricatorConfigSchemaSpec', 'PhabricatorMetaMTASendGridReceiveController' => 'PhabricatorMetaMTAController', - 'PhabricatorMetaMTAViewController' => 'PhabricatorMetaMTAController', 'PhabricatorMetaMTAWorker' => 'PhabricatorWorker', + 'PhabricatorMetronome' => 'Phobject', + 'PhabricatorMetronomeTestCase' => 'PhabricatorTestCase', + 'PhabricatorMetronomicTriggerClock' => 'PhabricatorTriggerClock', + 'PhabricatorMinChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorModularTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorModularTransactionType' => 'Phobject', + 'PhabricatorMonogramDatasourceEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'PhabricatorMonospacedFontSetting' => 'PhabricatorStringSetting', + 'PhabricatorMonospacedTextareasSetting' => 'PhabricatorSelectSetting', + 'PhabricatorMotivatorProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorMultiColumnUIExample' => 'PhabricatorUIExample', + 'PhabricatorMultiFactorSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorMultimeterApplication' => 'PhabricatorApplication', 'PhabricatorMustVerifyEmailController' => 'PhabricatorAuthController', + 'PhabricatorMutedByEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorMutedEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorMySQLConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorMySQLFileStorageEngine' => 'PhabricatorFileStorageEngine', + 'PhabricatorMySQLSearchHost' => 'PhabricatorSearchHost', + 'PhabricatorMySQLSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorNamedQuery' => array( + 'PhabricatorSearchDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorNamedQueryConfig' => array( + 'PhabricatorSearchDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorNamedQueryConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorNamedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorNavigationRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorNeverTriggerClock' => 'PhabricatorTriggerClock', + 'PhabricatorNgramsIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'PhabricatorNgramsInterface' => 'PhabricatorIndexableInterface', + 'PhabricatorNotificationBuilder' => 'Phobject', + 'PhabricatorNotificationClearController' => 'PhabricatorNotificationController', + 'PhabricatorNotificationClient' => 'Phobject', + 'PhabricatorNotificationConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorNotificationController' => 'PhabricatorController', + 'PhabricatorNotificationDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', 'PhabricatorNotificationIndividualController' => 'PhabricatorNotificationController', 'PhabricatorNotificationListController' => 'PhabricatorNotificationController', 'PhabricatorNotificationPanelController' => 'PhabricatorNotificationController', - 'PhabricatorNotificationQuery' => 'PhabricatorOffsetPagedQuery', - 'PhabricatorNotificationStatusController' => 'PhabricatorNotificationController', - 'PhabricatorNotificationStoryView' => 'PhabricatorNotificationView', - 'PhabricatorNotificationView' => 'AphrontView', - 'PhabricatorOAuthClientAuthorization' => 'PhabricatorOAuthServerDAO', - 'PhabricatorOAuthClientAuthorizationBaseController' => 'PhabricatorOAuthServerController', - 'PhabricatorOAuthClientAuthorizationDeleteController' => 'PhabricatorOAuthClientAuthorizationBaseController', - 'PhabricatorOAuthClientAuthorizationEditController' => 'PhabricatorOAuthClientAuthorizationBaseController', - 'PhabricatorOAuthClientAuthorizationListController' => 'PhabricatorOAuthClientAuthorizationBaseController', - 'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorOffsetPagedQuery', - 'PhabricatorOAuthClientBaseController' => 'PhabricatorOAuthServerController', - 'PhabricatorOAuthClientDeleteController' => 'PhabricatorOAuthClientBaseController', - 'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientBaseController', - 'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientBaseController', - 'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientBaseController', - 'PhabricatorOAuthDefaultRegistrationController' => 'PhabricatorOAuthRegistrationController', - 'PhabricatorOAuthDiagnosticsController' => 'PhabricatorAuthController', - 'PhabricatorOAuthFailureView' => 'AphrontView', - 'PhabricatorOAuthLoginController' => 'PhabricatorAuthController', - 'PhabricatorOAuthProviderDisqus' => 'PhabricatorOAuthProvider', - 'PhabricatorOAuthProviderException' => 'Exception', - 'PhabricatorOAuthProviderFacebook' => 'PhabricatorOAuthProvider', - 'PhabricatorOAuthProviderGitHub' => 'PhabricatorOAuthProvider', - 'PhabricatorOAuthProviderGoogle' => 'PhabricatorOAuthProvider', - 'PhabricatorOAuthProviderPhabricator' => 'PhabricatorOAuthProvider', - 'PhabricatorOAuthRegistrationController' => 'PhabricatorAuthController', + 'PhabricatorNotificationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorNotificationSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorNotificationServerRef' => 'Phobject', + 'PhabricatorNotificationServersConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorNotificationStatusView' => 'AphrontTagView', + 'PhabricatorNotificationTestController' => 'PhabricatorNotificationController', + 'PhabricatorNotificationUIExample' => 'PhabricatorUIExample', + 'PhabricatorNotificationsApplication' => 'PhabricatorApplication', + 'PhabricatorNotificationsSetting' => 'PhabricatorInternalSetting', + 'PhabricatorNotificationsSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorNuanceApplication' => 'PhabricatorApplication', + 'PhabricatorOAuth1AuthProvider' => 'PhabricatorOAuthAuthProvider', + 'PhabricatorOAuth1SecretTemporaryTokenType' => 'PhabricatorAuthTemporaryTokenType', + 'PhabricatorOAuth2AuthProvider' => 'PhabricatorOAuthAuthProvider', + 'PhabricatorOAuthAuthProvider' => 'PhabricatorAuthProvider', + 'PhabricatorOAuthClientAuthorization' => array( + 'PhabricatorOAuthServerDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorOAuthClientAuthorizationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorOAuthClientController' => 'PhabricatorOAuthServerController', + 'PhabricatorOAuthClientDisableController' => 'PhabricatorOAuthClientController', + 'PhabricatorOAuthClientEditController' => 'PhabricatorOAuthClientController', + 'PhabricatorOAuthClientListController' => 'PhabricatorOAuthClientController', + 'PhabricatorOAuthClientSecretController' => 'PhabricatorOAuthClientController', + 'PhabricatorOAuthClientTestController' => 'PhabricatorOAuthClientController', + 'PhabricatorOAuthClientViewController' => 'PhabricatorOAuthClientController', 'PhabricatorOAuthResponse' => 'AphrontResponse', + 'PhabricatorOAuthServer' => 'Phobject', 'PhabricatorOAuthServerAccessToken' => 'PhabricatorOAuthServerDAO', - 'PhabricatorOAuthServerAuthController' => 'PhabricatorAuthController', + 'PhabricatorOAuthServerApplication' => 'PhabricatorApplication', + 'PhabricatorOAuthServerAuthController' => 'PhabricatorOAuthServerController', 'PhabricatorOAuthServerAuthorizationCode' => 'PhabricatorOAuthServerDAO', - 'PhabricatorOAuthServerClient' => 'PhabricatorOAuthServerDAO', - 'PhabricatorOAuthServerClientQuery' => 'PhabricatorOffsetPagedQuery', + 'PhabricatorOAuthServerAuthorizationsSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorOAuthServerClient' => array( + 'PhabricatorOAuthServerDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorOAuthServerClientAuthorizationPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorOAuthServerClientPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorOAuthServerClientQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorOAuthServerClientSearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorOAuthServerController' => 'PhabricatorController', + 'PhabricatorOAuthServerCreateClientsCapability' => 'PhabricatorPolicyCapability', 'PhabricatorOAuthServerDAO' => 'PhabricatorLiskDAO', + 'PhabricatorOAuthServerEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorOAuthServerEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorOAuthServerSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorOAuthServerScope' => 'Phobject', 'PhabricatorOAuthServerTestCase' => 'PhabricatorTestCase', - 'PhabricatorOAuthServerTestController' => 'PhabricatorOAuthServerController', - 'PhabricatorOAuthServerTokenController' => 'PhabricatorAuthController', - 'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController', + 'PhabricatorOAuthServerTokenController' => 'PhabricatorOAuthServerController', + 'PhabricatorOAuthServerTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorOAuthServerTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'PhabricatorObjectGraph' => 'AbstractDirectedGraph', - 'PhabricatorObjectHandleStatus' => 'PhabricatorObjectHandleConstants', + 'PhabricatorObjectHandle' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorObjectHasAsanaSubtaskEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasAsanaTaskEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasContributorEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasDraftEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasJiraIssueEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasSubscriberEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasUnsubscriberEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectHasWatcherEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectListQuery' => 'Phobject', + 'PhabricatorObjectListQueryTestCase' => 'PhabricatorTestCase', + 'PhabricatorObjectMailReceiver' => 'PhabricatorMailReceiver', + 'PhabricatorObjectMailReceiverTestCase' => 'PhabricatorTestCase', + 'PhabricatorObjectMentionedByObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectMentionsObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorObjectRelationship' => 'Phobject', + 'PhabricatorObjectRelationshipList' => 'Phobject', + 'PhabricatorObjectRelationshipSource' => 'Phobject', + 'PhabricatorObjectRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorObjectSelectorDialog' => 'Phobject', + 'PhabricatorObjectStatus' => 'Phobject', + 'PhabricatorObjectUsesDashboardPanelEdgeType' => 'PhabricatorEdgeType', 'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery', + 'PhabricatorOldWorldContentSource' => 'PhabricatorContentSource', + 'PhabricatorOlderInlinesSetting' => 'PhabricatorSelectSetting', + 'PhabricatorOneTimeTriggerClock' => 'PhabricatorTriggerClock', + 'PhabricatorOpcodeCacheSpec' => 'PhabricatorCacheSpec', + 'PhabricatorOptionExportField' => 'PhabricatorExportField', + 'PhabricatorOptionGroupSetting' => 'PhabricatorSetting', + 'PhabricatorOwnerPathQuery' => 'Phobject', + 'PhabricatorOwnersApplication' => 'PhabricatorApplication', + 'PhabricatorOwnersArchiveController' => 'PhabricatorOwnersController', + 'PhabricatorOwnersAuditRule' => 'Phobject', + 'PhabricatorOwnersConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorOwnersConfiguredCustomField' => array( + 'PhabricatorOwnersCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), 'PhabricatorOwnersController' => 'PhabricatorController', + 'PhabricatorOwnersCustomField' => 'PhabricatorCustomField', + 'PhabricatorOwnersCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', + 'PhabricatorOwnersCustomFieldStorage' => 'PhabricatorCustomFieldStorage', + 'PhabricatorOwnersCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'PhabricatorOwnersDAO' => 'PhabricatorLiskDAO', - 'PhabricatorOwnersDeleteController' => 'PhabricatorOwnersController', + 'PhabricatorOwnersDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorOwnersDefaultViewCapability' => 'PhabricatorPolicyCapability', 'PhabricatorOwnersDetailController' => 'PhabricatorOwnersController', 'PhabricatorOwnersEditController' => 'PhabricatorOwnersController', + 'PhabricatorOwnersHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', 'PhabricatorOwnersListController' => 'PhabricatorOwnersController', 'PhabricatorOwnersOwner' => 'PhabricatorOwnersDAO', - 'PhabricatorOwnersPackage' => 'PhabricatorOwnersDAO', + 'PhabricatorOwnersPackage' => array( + 'PhabricatorOwnersDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorOwnersPackageAuditingTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageAuthorityTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageAutoreviewTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorOwnersPackageDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorOwnersPackageDescriptionTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageDominionTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorOwnersPackageFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorOwnersPackageFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorOwnersPackageFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorOwnersPackageIgnoredTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageNameNgrams' => 'PhabricatorSearchNgrams', + 'PhabricatorOwnersPackageNameTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorOwnersPackageOwnersTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackagePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorOwnersPackagePathsTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackagePrimaryTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorOwnersPackageRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorOwnersPackageSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorOwnersPackageStatusTransaction' => 'PhabricatorOwnersPackageTransactionType', + 'PhabricatorOwnersPackageTestCase' => 'PhabricatorTestCase', + 'PhabricatorOwnersPackageTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorOwnersPackageTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorOwnersPackageTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorOwnersPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorOwnersPackageTransactionType' => 'PhabricatorModularTransactionType', 'PhabricatorOwnersPath' => 'PhabricatorOwnersDAO', - 'PhabricatorPHIDController' => 'PhabricatorController', - 'PhabricatorPHIDLookupController' => 'PhabricatorPHIDController', - 'PhabricatorPaste' => - array( - 0 => 'PhabricatorPasteDAO', - 1 => 'PhabricatorPolicyInterface', + 'PhabricatorOwnersPathContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorOwnersPathsController' => 'PhabricatorOwnersController', + 'PhabricatorOwnersPathsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorOwnersSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorOwnersSearchField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorPDFCatalogObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFContentsObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorPDFFontObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFFragment' => 'Phobject', + 'PhabricatorPDFFragmentOffset' => 'Phobject', + 'PhabricatorPDFGenerator' => 'Phobject', + 'PhabricatorPDFHeadFragment' => 'PhabricatorPDFFragment', + 'PhabricatorPDFInfoObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFIterator' => array( + 'Phobject', + 'Iterator', + ), + 'PhabricatorPDFObject' => 'PhabricatorPDFFragment', + 'PhabricatorPDFPageObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFPagesObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFResourcesObject' => 'PhabricatorPDFObject', + 'PhabricatorPDFTailFragment' => 'PhabricatorPDFFragment', + 'PhabricatorPHDConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorPHID' => 'Phobject', + 'PhabricatorPHIDConstants' => 'Phobject', + 'PhabricatorPHIDExportField' => 'PhabricatorExportField', + 'PhabricatorPHIDListEditField' => 'PhabricatorEditField', + 'PhabricatorPHIDListEditType' => 'PhabricatorEditType', + 'PhabricatorPHIDListExportField' => 'PhabricatorListExportField', + 'PhabricatorPHIDMailStamp' => 'PhabricatorMailStamp', + 'PhabricatorPHIDResolver' => 'Phobject', + 'PhabricatorPHIDType' => 'Phobject', + 'PhabricatorPHIDTypeTestCase' => 'PhutilTestCase', + 'PhabricatorPHIDsSearchField' => 'PhabricatorSearchField', + 'PhabricatorPHPASTApplication' => 'PhabricatorApplication', + 'PhabricatorPHPConfigSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorPHPPreflightSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorPackagesApplication' => 'PhabricatorApplication', + 'PhabricatorPackagesController' => 'PhabricatorController', + 'PhabricatorPackagesCreatePublisherCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPackagesDAO' => 'PhabricatorLiskDAO', + 'PhabricatorPackagesEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorPackagesEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorPackagesNgrams' => 'PhabricatorSearchNgrams', + 'PhabricatorPackagesPackage' => array( + 'PhabricatorPackagesDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorPackagesPackageController' => 'PhabricatorPackagesController', + 'PhabricatorPackagesPackageDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPackagesPackageDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPackagesPackageDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPackagesPackageEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorPackagesPackageEditController' => 'PhabricatorPackagesPackageController', + 'PhabricatorPackagesPackageEditEngine' => 'PhabricatorPackagesEditEngine', + 'PhabricatorPackagesPackageEditor' => 'PhabricatorPackagesEditor', + 'PhabricatorPackagesPackageKeyTransaction' => 'PhabricatorPackagesPackageTransactionType', + 'PhabricatorPackagesPackageListController' => 'PhabricatorPackagesPackageController', + 'PhabricatorPackagesPackageListView' => 'PhabricatorPackagesView', + 'PhabricatorPackagesPackageNameNgrams' => 'PhabricatorPackagesNgrams', + 'PhabricatorPackagesPackageNameTransaction' => 'PhabricatorPackagesPackageTransactionType', + 'PhabricatorPackagesPackagePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPackagesPackagePublisherTransaction' => 'PhabricatorPackagesPackageTransactionType', + 'PhabricatorPackagesPackageQuery' => 'PhabricatorPackagesQuery', + 'PhabricatorPackagesPackageSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorPackagesPackageSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPackagesPackageTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorPackagesPackageTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPackagesPackageTransactionType' => 'PhabricatorPackagesTransactionType', + 'PhabricatorPackagesPackageViewController' => 'PhabricatorPackagesPackageController', + 'PhabricatorPackagesPublisher' => array( + 'PhabricatorPackagesDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', ), + 'PhabricatorPackagesPublisherController' => 'PhabricatorPackagesController', + 'PhabricatorPackagesPublisherDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPackagesPublisherDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPackagesPublisherEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorPackagesPublisherEditController' => 'PhabricatorPackagesPublisherController', + 'PhabricatorPackagesPublisherEditEngine' => 'PhabricatorPackagesEditEngine', + 'PhabricatorPackagesPublisherEditor' => 'PhabricatorPackagesEditor', + 'PhabricatorPackagesPublisherKeyTransaction' => 'PhabricatorPackagesPublisherTransactionType', + 'PhabricatorPackagesPublisherListController' => 'PhabricatorPackagesPublisherController', + 'PhabricatorPackagesPublisherListView' => 'PhabricatorPackagesView', + 'PhabricatorPackagesPublisherNameNgrams' => 'PhabricatorPackagesNgrams', + 'PhabricatorPackagesPublisherNameTransaction' => 'PhabricatorPackagesPublisherTransactionType', + 'PhabricatorPackagesPublisherPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPackagesPublisherQuery' => 'PhabricatorPackagesQuery', + 'PhabricatorPackagesPublisherSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorPackagesPublisherSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPackagesPublisherTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorPackagesPublisherTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPackagesPublisherTransactionType' => 'PhabricatorPackagesTransactionType', + 'PhabricatorPackagesPublisherViewController' => 'PhabricatorPackagesPublisherController', + 'PhabricatorPackagesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPackagesSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorPackagesTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorPackagesVersion' => array( + 'PhabricatorPackagesDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorPackagesVersionController' => 'PhabricatorPackagesController', + 'PhabricatorPackagesVersionEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorPackagesVersionEditController' => 'PhabricatorPackagesVersionController', + 'PhabricatorPackagesVersionEditEngine' => 'PhabricatorPackagesEditEngine', + 'PhabricatorPackagesVersionEditor' => 'PhabricatorPackagesEditor', + 'PhabricatorPackagesVersionListController' => 'PhabricatorPackagesVersionController', + 'PhabricatorPackagesVersionListView' => 'PhabricatorPackagesView', + 'PhabricatorPackagesVersionNameNgrams' => 'PhabricatorPackagesNgrams', + 'PhabricatorPackagesVersionNameTransaction' => 'PhabricatorPackagesVersionTransactionType', + 'PhabricatorPackagesVersionPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPackagesVersionPackageTransaction' => 'PhabricatorPackagesVersionTransactionType', + 'PhabricatorPackagesVersionQuery' => 'PhabricatorPackagesQuery', + 'PhabricatorPackagesVersionSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorPackagesVersionSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPackagesVersionTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorPackagesVersionTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPackagesVersionTransactionType' => 'PhabricatorPackagesTransactionType', + 'PhabricatorPackagesVersionViewController' => 'PhabricatorPackagesVersionController', + 'PhabricatorPackagesView' => 'AphrontView', + 'PhabricatorPagerUIExample' => 'PhabricatorUIExample', + 'PhabricatorPartialLoginUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorPassphraseApplication' => 'PhabricatorApplication', + 'PhabricatorPasswordAuthProvider' => 'PhabricatorAuthProvider', + 'PhabricatorPasswordDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorPasswordHasher' => 'Phobject', + 'PhabricatorPasswordHasherTestCase' => 'PhabricatorTestCase', + 'PhabricatorPasswordHasherUnavailableException' => 'Exception', + 'PhabricatorPasswordSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorPaste' => array( + 'PhabricatorPasteDAO', + 'PhabricatorSubscribableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorFerretInterface', + 'PhabricatorFulltextInterface', + ), + 'PhabricatorPasteApplication' => 'PhabricatorApplication', + 'PhabricatorPasteArchiveController' => 'PhabricatorPasteController', + 'PhabricatorPasteContentSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorPasteContentTransaction' => 'PhabricatorPasteTransactionType', 'PhabricatorPasteController' => 'PhabricatorController', 'PhabricatorPasteDAO' => 'PhabricatorLiskDAO', + 'PhabricatorPasteEditController' => 'PhabricatorPasteController', + 'PhabricatorPasteEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorPasteEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorPasteFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorPasteFilenameContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorPasteFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorPasteLanguageTransaction' => 'PhabricatorPasteTransactionType', 'PhabricatorPasteListController' => 'PhabricatorPasteController', - 'PhabricatorPasteQuery' => 'PhabricatorIDPagedPolicyQuery', + 'PhabricatorPastePastePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPasteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPasteRawController' => 'PhabricatorPasteController', + 'PhabricatorPasteRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorPasteSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorPasteSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPasteSnippet' => 'Phobject', + 'PhabricatorPasteStatusTransaction' => 'PhabricatorPasteTransactionType', + 'PhabricatorPasteTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorPasteTitleTransaction' => 'PhabricatorPasteTransactionType', + 'PhabricatorPasteTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorPasteTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorPasteTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPasteTransactionType' => 'PhabricatorModularTransactionType', 'PhabricatorPasteViewController' => 'PhabricatorPasteController', + 'PhabricatorPathSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorPeopleAnyOwnerDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPeopleApplication' => 'PhabricatorApplication', + 'PhabricatorPeopleApproveController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleAvailabilitySearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorPeopleBadgesProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleCommitsProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorPeopleController' => 'PhabricatorController', - 'PhabricatorPeopleEditController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleCreateController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleCreateGuidanceContext' => 'PhabricatorGuidanceContext', + 'PhabricatorPeopleDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPeopleDatasourceEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'PhabricatorPeopleDeleteController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleDetailsProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleDisableController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleEmailLoginMailEngine' => 'PhabricatorPeopleMailEngine', + 'PhabricatorPeopleEmpowerController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleExternalIdentifierPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPeopleExternalPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPeopleIconSet' => 'PhabricatorIconSet', + 'PhabricatorPeopleInviteController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleInviteListController' => 'PhabricatorPeopleInviteController', + 'PhabricatorPeopleInviteSendController' => 'PhabricatorPeopleInviteController', 'PhabricatorPeopleListController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPeopleLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPeopleLogViewController' => 'PhabricatorPeopleController', 'PhabricatorPeopleLogsController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleMailEngine' => 'Phobject', + 'PhabricatorPeopleMailEngineException' => 'Exception', + 'PhabricatorPeopleManageProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleManagementApproveWorkflow' => 'PhabricatorPeopleManagementWorkflow', + 'PhabricatorPeopleManagementEmpowerWorkflow' => 'PhabricatorPeopleManagementWorkflow', + 'PhabricatorPeopleManagementEnableWorkflow' => 'PhabricatorPeopleManagementWorkflow', + 'PhabricatorPeopleManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorPeopleNewController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleNoOwnerDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPeopleOwnerDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorPeoplePictureProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleProfileBadgesController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileCommitsController' => 'PhabricatorPeopleProfileController', 'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController', - 'PhabricatorPeopleQuery' => 'PhabricatorOffsetPagedQuery', + 'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileManageController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorPeopleProfilePictureController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileRevisionsController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileTasksController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleProfileViewController' => 'PhabricatorPeopleProfileController', + 'PhabricatorPeopleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPeopleRenameController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleRevisionsProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPeopleTasksProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorPeopleTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorPeopleTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPeopleUserEmailPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPeopleUserEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPeopleUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorPeopleUserPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPeopleUsernameMailEngine' => 'PhabricatorPeopleMailEngine', + 'PhabricatorPeopleWelcomeController' => 'PhabricatorPeopleController', + 'PhabricatorPeopleWelcomeMailEngine' => 'PhabricatorPeopleMailEngine', + 'PhabricatorPhabricatorAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorPhameApplication' => 'PhabricatorApplication', + 'PhabricatorPhameBlogPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPhamePostPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPhluxApplication' => 'PhabricatorApplication', + 'PhabricatorPholioApplication' => 'PhabricatorApplication', + 'PhabricatorPholioMockTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorPhoneNumber' => 'Phobject', + 'PhabricatorPhoneNumberTestCase' => 'PhabricatorTestCase', + 'PhabricatorPhortuneApplication' => 'PhabricatorApplication', + 'PhabricatorPhortuneContentSource' => 'PhabricatorContentSource', + 'PhabricatorPhortuneManagementInvoiceWorkflow' => 'PhabricatorPhortuneManagementWorkflow', + 'PhabricatorPhortuneManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorPhortuneTestCase' => 'PhabricatorTestCase', + 'PhabricatorPhrequentApplication' => 'PhabricatorApplication', + 'PhabricatorPhrictionApplication' => 'PhabricatorApplication', + 'PhabricatorPhurlApplication' => 'PhabricatorApplication', + 'PhabricatorPhurlConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorPhurlController' => 'PhabricatorController', + 'PhabricatorPhurlDAO' => 'PhabricatorLiskDAO', + 'PhabricatorPhurlLinkRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorPhurlRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorPhurlSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorPhurlShortURLController' => 'PhabricatorPhurlController', + 'PhabricatorPhurlShortURLDefaultController' => 'PhabricatorPhurlController', + 'PhabricatorPhurlURL' => array( + 'PhabricatorPhurlDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorProjectInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorNgramsInterface', + ), + 'PhabricatorPhurlURLAccessController' => 'PhabricatorPhurlController', + 'PhabricatorPhurlURLAliasTransaction' => 'PhabricatorPhurlURLTransactionType', + 'PhabricatorPhurlURLCreateCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPhurlURLDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorPhurlURLDescriptionTransaction' => 'PhabricatorPhurlURLTransactionType', + 'PhabricatorPhurlURLEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhabricatorPhurlURLEditController' => 'PhabricatorPhurlController', + 'PhabricatorPhurlURLEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorPhurlURLEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorPhurlURLListController' => 'PhabricatorPhurlController', + 'PhabricatorPhurlURLLongURLTransaction' => 'PhabricatorPhurlURLTransactionType', + 'PhabricatorPhurlURLMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhabricatorPhurlURLNameNgrams' => 'PhabricatorSearchNgrams', + 'PhabricatorPhurlURLNameTransaction' => 'PhabricatorPhurlURLTransactionType', + 'PhabricatorPhurlURLPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorPhurlURLQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPhurlURLReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorPhurlURLSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhabricatorPhurlURLSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorPhurlURLTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorPhurlURLTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorPhurlURLTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorPhurlURLTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorPhurlURLViewController' => 'PhabricatorPhurlController', + 'PhabricatorPinnedApplicationsSetting' => 'PhabricatorInternalSetting', + 'PhabricatorPirateEnglishTranslation' => 'PhutilTranslation', + 'PhabricatorPlatform404Controller' => 'PhabricatorController', + 'PhabricatorPlatformSite' => 'PhabricatorSite', + 'PhabricatorPointsEditField' => 'PhabricatorEditField', + 'PhabricatorPointsFact' => 'PhabricatorFact', 'PhabricatorPolicies' => 'PhabricatorPolicyConstants', - 'PhabricatorPolicyCapability' => 'PhabricatorPolicyConstants', + 'PhabricatorPolicy' => array( + 'PhabricatorPolicyDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorPolicyApplication' => 'PhabricatorApplication', + 'PhabricatorPolicyAwareQuery' => 'PhabricatorOffsetPagedQuery', + 'PhabricatorPolicyAwareTestQuery' => 'PhabricatorPolicyAwareQuery', + 'PhabricatorPolicyCanEditCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPolicyCanInteractCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPolicyCanJoinCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPolicyCanViewCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorPolicyCapability' => 'Phobject', + 'PhabricatorPolicyCapabilityTestCase' => 'PhabricatorTestCase', + 'PhabricatorPolicyCodex' => 'Phobject', + 'PhabricatorPolicyCodexRuleDescription' => 'Phobject', + 'PhabricatorPolicyConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorPolicyConstants' => 'Phobject', + 'PhabricatorPolicyController' => 'PhabricatorController', + 'PhabricatorPolicyDAO' => 'PhabricatorLiskDAO', + 'PhabricatorPolicyDataTestCase' => 'PhabricatorTestCase', + 'PhabricatorPolicyEditController' => 'PhabricatorPolicyController', + 'PhabricatorPolicyEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorPolicyEditField' => 'PhabricatorEditField', 'PhabricatorPolicyException' => 'Exception', - 'PhabricatorPolicyQuery' => 'PhabricatorQuery', + 'PhabricatorPolicyExplainController' => 'PhabricatorPolicyController', + 'PhabricatorPolicyFavoritesSetting' => 'PhabricatorInternalSetting', + 'PhabricatorPolicyFilter' => 'Phobject', + 'PhabricatorPolicyFilterSet' => 'Phobject', + 'PhabricatorPolicyInterface' => 'PhabricatorPHIDInterface', + 'PhabricatorPolicyManagementShowWorkflow' => 'PhabricatorPolicyManagementWorkflow', + 'PhabricatorPolicyManagementUnlockWorkflow' => 'PhabricatorPolicyManagementWorkflow', + 'PhabricatorPolicyManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorPolicyPHIDTypePolicy' => 'PhabricatorPHIDType', + 'PhabricatorPolicyQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorPolicyRef' => 'Phobject', + 'PhabricatorPolicyRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorPolicyRule' => 'Phobject', + 'PhabricatorPolicyRulesView' => 'AphrontView', + 'PhabricatorPolicySearchEngineExtension' => 'PhabricatorSearchEngineExtension', 'PhabricatorPolicyTestCase' => 'PhabricatorTestCase', - 'PhabricatorPolicyTestObject' => 'PhabricatorPolicyInterface', - 'PhabricatorPolicyTestQuery' => 'PhabricatorPolicyQuery', - 'PhabricatorProfileHeaderView' => 'AphrontView', - 'PhabricatorProject' => 'PhabricatorProjectDAO', - 'PhabricatorProjectAffiliation' => 'PhabricatorProjectDAO', + 'PhabricatorPolicyTestObject' => array( + 'Phobject', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PhabricatorPolicyType' => 'PhabricatorPolicyConstants', + 'PhabricatorPonderApplication' => 'PhabricatorApplication', + 'PhabricatorPreambleTestCase' => 'PhabricatorTestCase', + 'PhabricatorPrimaryEmailUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorProfileMenuEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorProfileMenuEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorProfileMenuEngine' => 'Phobject', + 'PhabricatorProfileMenuItem' => 'Phobject', + 'PhabricatorProfileMenuItemAffectsObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProfileMenuItemConfiguration' => array( + 'PhabricatorSearchDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorIndexableInterface', + ), + 'PhabricatorProfileMenuItemConfigurationQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorProfileMenuItemConfigurationTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorProfileMenuItemConfigurationTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorProfileMenuItemIconSet' => 'PhabricatorIconSet', + 'PhabricatorProfileMenuItemIndexEngineExtension' => 'PhabricatorEdgeIndexEngineExtension', + 'PhabricatorProfileMenuItemPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorProfileMenuItemView' => 'Phobject', + 'PhabricatorProfileMenuItemViewList' => 'Phobject', + 'PhabricatorProject' => array( + 'PhabricatorProjectDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorColumnProxyInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorEditEngineSubtypeInterface', + 'PhabricatorWorkboardInterface', + ), + 'PhabricatorProjectActivityChartEngine' => 'PhabricatorChartEngine', + 'PhabricatorProjectAddHeraldAction' => 'PhabricatorProjectHeraldAction', + 'PhabricatorProjectApplication' => 'PhabricatorApplication', + 'PhabricatorProjectArchiveController' => 'PhabricatorProjectController', + 'PhabricatorProjectBoardBackgroundController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardController' => 'PhabricatorProjectController', + 'PhabricatorProjectBoardDefaultController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardDisableController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardFilterController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardImportController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardManageController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardReloadController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardReorderController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBoardViewController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectBuiltinsExample' => 'PhabricatorUIExample', + 'PhabricatorProjectBurndownChartEngine' => 'PhabricatorChartEngine', + 'PhabricatorProjectCardView' => 'AphrontTagView', + 'PhabricatorProjectColorTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectColorsConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorProjectColumn' => array( + 'PhabricatorProjectDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhabricatorProjectColumnAuthorOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnBulkEditController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnBulkMoveController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnCreatedOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnDetailController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnEditController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnHeader' => 'Phobject', + 'PhabricatorProjectColumnHideController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnLimitTransaction' => 'PhabricatorProjectColumnTransactionType', + 'PhabricatorProjectColumnNameTransaction' => 'PhabricatorProjectColumnTransactionType', + 'PhabricatorProjectColumnNaturalOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnOrder' => 'Phobject', + 'PhabricatorProjectColumnOwnerOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorProjectColumnPointsOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnPosition' => array( + 'PhabricatorProjectDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorProjectColumnPositionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorProjectColumnPriorityOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorProjectColumnRemoveTriggerController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectColumnSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorProjectColumnStatusOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnStatusTransaction' => 'PhabricatorProjectColumnTransactionType', + 'PhabricatorProjectColumnTitleOrder' => 'PhabricatorProjectColumnOrder', + 'PhabricatorProjectColumnTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorProjectColumnTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorProjectColumnTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorProjectColumnTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorProjectColumnTriggerTransaction' => 'PhabricatorProjectColumnTransactionType', + 'PhabricatorProjectColumnViewQueryController' => 'PhabricatorProjectBoardController', + 'PhabricatorProjectConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorProjectConfiguredCustomField' => array( + 'PhabricatorProjectStandardCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), 'PhabricatorProjectController' => 'PhabricatorController', - 'PhabricatorProjectCreateController' => 'PhabricatorProjectController', + 'PhabricatorProjectCoreTestCase' => 'PhabricatorTestCase', + 'PhabricatorProjectCoverController' => 'PhabricatorProjectController', + 'PhabricatorProjectCustomField' => 'PhabricatorCustomField', + 'PhabricatorProjectCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', + 'PhabricatorProjectCustomFieldStorage' => 'PhabricatorCustomFieldStorage', + 'PhabricatorProjectCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'PhabricatorProjectDAO' => 'PhabricatorLiskDAO', + 'PhabricatorProjectDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorProjectDescriptionField' => 'PhabricatorProjectStandardCustomField', + 'PhabricatorProjectDetailsProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectDropEffect' => 'Phobject', + 'PhabricatorProjectEditController' => 'PhabricatorProjectController', + 'PhabricatorProjectEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorProjectEditPictureController' => 'PhabricatorProjectController', + 'PhabricatorProjectFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorProjectFilterTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorProjectHeraldAction' => 'HeraldAction', + 'PhabricatorProjectHeraldAdapter' => 'HeraldAdapter', + 'PhabricatorProjectHeraldFieldGroup' => 'HeraldFieldGroup', + 'PhabricatorProjectHovercardEngineExtension' => 'PhabricatorHovercardEngineExtension', + 'PhabricatorProjectIconSet' => 'PhabricatorIconSet', + 'PhabricatorProjectIconTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectIconsConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorProjectImageTransaction' => 'PhabricatorProjectTransactionType', 'PhabricatorProjectListController' => 'PhabricatorProjectController', - 'PhabricatorProjectNameCollisionException' => 'Exception', - 'PhabricatorProjectProfile' => 'PhabricatorProjectDAO', + 'PhabricatorProjectListView' => 'AphrontView', + 'PhabricatorProjectLockController' => 'PhabricatorProjectController', + 'PhabricatorProjectLockTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectLogicalAncestorDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectLogicalDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectLogicalOnlyDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorProjectLogicalOrNotDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectLogicalUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectLogicalViewerDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorProjectManageController' => 'PhabricatorProjectController', + 'PhabricatorProjectManageProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectMaterializedMemberEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectMemberListView' => 'PhabricatorProjectUserListView', + 'PhabricatorProjectMemberOfProjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectMembersAddController' => 'PhabricatorProjectController', + 'PhabricatorProjectMembersDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectMembersPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorProjectMembersProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectMembersRemoveController' => 'PhabricatorProjectController', + 'PhabricatorProjectMembersViewController' => 'PhabricatorProjectController', + 'PhabricatorProjectMenuItemController' => 'PhabricatorProjectController', + 'PhabricatorProjectMilestoneTransaction' => 'PhabricatorProjectTypeTransaction', + 'PhabricatorProjectMoveController' => 'PhabricatorProjectController', + 'PhabricatorProjectNameContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhabricatorProjectNameTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectNoProjectsDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorProjectObjectHasProjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectOrUserDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectOrUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectPHIDResolver' => 'PhabricatorPHIDResolver', + 'PhabricatorProjectParentTransaction' => 'PhabricatorProjectTypeTransaction', + 'PhabricatorProjectPictureProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectPointsProfileMenuItem' => 'PhabricatorProfileMenuItem', 'PhabricatorProjectProfileController' => 'PhabricatorProjectController', - 'PhabricatorProjectProfileEditController' => 'PhabricatorProjectController', - 'PhabricatorProjectSubproject' => 'PhabricatorProjectDAO', - 'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO', - 'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants', + 'PhabricatorProjectProfileMenuEngine' => 'PhabricatorProfileMenuEngine', + 'PhabricatorProjectProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectProjectHasMemberEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectProjectHasObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectProjectPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorProjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorProjectRemoveHeraldAction' => 'PhabricatorProjectHeraldAction', + 'PhabricatorProjectReportsController' => 'PhabricatorProjectController', + 'PhabricatorProjectReportsProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorProjectSearchField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorProjectSilenceController' => 'PhabricatorProjectController', + 'PhabricatorProjectSilencedEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorProjectSlug' => 'PhabricatorProjectDAO', + 'PhabricatorProjectSlugsTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectSortTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectStandardCustomField' => array( + 'PhabricatorProjectCustomField', + 'PhabricatorStandardCustomFieldInterface', + ), + 'PhabricatorProjectStatus' => 'Phobject', + 'PhabricatorProjectStatusTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectSubprojectWarningController' => 'PhabricatorProjectController', + 'PhabricatorProjectSubprojectsController' => 'PhabricatorProjectController', + 'PhabricatorProjectSubprojectsProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectSubtypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorProjectSubtypesConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorProjectTagsAddedField' => 'PhabricatorProjectTagsField', + 'PhabricatorProjectTagsField' => 'HeraldField', + 'PhabricatorProjectTagsRemovedField' => 'PhabricatorProjectTagsField', + 'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator', + 'PhabricatorProjectTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorProjectTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorProjectTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorProjectTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorProjectTrigger' => array( + 'PhabricatorProjectDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorIndexableInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorProjectTriggerAddProjectsRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerController' => 'PhabricatorProjectController', + 'PhabricatorProjectTriggerCorruptionException' => 'Exception', + 'PhabricatorProjectTriggerEditController' => 'PhabricatorProjectTriggerController', + 'PhabricatorProjectTriggerEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorProjectTriggerInvalidRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerListController' => 'PhabricatorProjectTriggerController', + 'PhabricatorProjectTriggerManiphestOwnerRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerManiphestPriorityRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerManiphestStatusRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerNameTransaction' => 'PhabricatorProjectTriggerTransactionType', + 'PhabricatorProjectTriggerPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorProjectTriggerPlaySoundRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorProjectTriggerRemoveProjectsRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerRule' => 'Phobject', + 'PhabricatorProjectTriggerRuleRecord' => 'Phobject', + 'PhabricatorProjectTriggerRulesetTransaction' => 'PhabricatorProjectTriggerTransactionType', + 'PhabricatorProjectTriggerSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorProjectTriggerTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorProjectTriggerTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorProjectTriggerTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorProjectTriggerUnknownRule' => 'PhabricatorProjectTriggerRule', + 'PhabricatorProjectTriggerUsage' => 'PhabricatorProjectDAO', + 'PhabricatorProjectTriggerUsageIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'PhabricatorProjectTriggerViewController' => 'PhabricatorProjectTriggerController', + 'PhabricatorProjectTypeTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectUIEventListener' => 'PhabricatorEventListener', 'PhabricatorProjectUpdateController' => 'PhabricatorProjectController', + 'PhabricatorProjectUserFunctionDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorProjectUserListView' => 'AphrontView', + 'PhabricatorProjectViewController' => 'PhabricatorProjectController', + 'PhabricatorProjectWatchController' => 'PhabricatorProjectController', + 'PhabricatorProjectWatcherListView' => 'PhabricatorProjectUserListView', + 'PhabricatorProjectWorkboardBackgroundColor' => 'Phobject', + 'PhabricatorProjectWorkboardBackgroundTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectWorkboardProfileMenuItem' => 'PhabricatorProfileMenuItem', + 'PhabricatorProjectWorkboardTransaction' => 'PhabricatorProjectTransactionType', + 'PhabricatorProjectsAllPolicyRule' => 'PhabricatorProjectsBasePolicyRule', + 'PhabricatorProjectsAncestorsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorProjectsBasePolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorProjectsCurtainExtension' => 'PHUICurtainExtension', + 'PhabricatorProjectsEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorProjectsEditField' => 'PhabricatorTokenizerEditField', + 'PhabricatorProjectsExportEngineExtension' => 'PhabricatorExportEngineExtension', + 'PhabricatorProjectsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorProjectsMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'PhabricatorProjectsMembersSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorProjectsMembershipIndexEngineExtension' => 'PhabricatorIndexEngineExtension', + 'PhabricatorProjectsPolicyRule' => 'PhabricatorProjectsBasePolicyRule', + 'PhabricatorProjectsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorProjectsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorProjectsWatchersSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorPronounSetting' => 'PhabricatorSelectSetting', + 'PhabricatorProtocolLog' => 'Phobject', + 'PhabricatorPureChartFunction' => 'PhabricatorChartFunction', + 'PhabricatorPygmentSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorQuery' => 'Phobject', + 'PhabricatorQueryConstraint' => 'Phobject', + 'PhabricatorQueryCursor' => 'Phobject', + 'PhabricatorQueryIterator' => 'PhutilBufferedIterator', + 'PhabricatorQueryOrderItem' => 'Phobject', + 'PhabricatorQueryOrderTestCase' => 'PhabricatorTestCase', + 'PhabricatorQueryOrderVector' => array( + 'Phobject', + 'Iterator', + ), + 'PhabricatorRateLimitRequestExceptionHandler' => 'PhabricatorRequestExceptionHandler', + 'PhabricatorReassignEmailUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorRebuildIndexesWorker' => 'PhabricatorWorker', + 'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorRedirectController' => 'PhabricatorController', 'PhabricatorRefreshCSRFController' => 'PhabricatorAuthController', - 'PhabricatorRemarkupRuleDifferential' => 'PhabricatorRemarkupRuleObjectName', - 'PhabricatorRemarkupRuleDifferentialHandle' => 'PhabricatorRemarkupRuleObjectHandle', - 'PhabricatorRemarkupRuleDiffusion' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleEmbedFile' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleImageMacro' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleManiphest' => 'PhabricatorRemarkupRuleObjectName', - 'PhabricatorRemarkupRuleManiphestHandle' => 'PhabricatorRemarkupRuleObjectHandle', - 'PhabricatorRemarkupRuleMention' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleObjectHandle' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleObjectName' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRulePaste' => 'PhabricatorRemarkupRuleObjectName', - 'PhabricatorRemarkupRulePhriction' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleProxyImage' => 'PhutilRemarkupRule', - 'PhabricatorRemarkupRuleYoutube' => 'PhutilRemarkupRule', - 'PhabricatorRepository' => 'PhabricatorRepositoryDAO', - 'PhabricatorRepositoryArcanistProject' => 'PhabricatorRepositoryDAO', - 'PhabricatorRepositoryArcanistProjectEditController' => 'PhabricatorRepositoryController', - 'PhabricatorRepositoryAuditRequest' => 'PhabricatorRepositoryDAO', - 'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO', + 'PhabricatorRegexListConfigType' => 'PhabricatorTextListConfigType', + 'PhabricatorRegistrationProfile' => 'Phobject', + 'PhabricatorRemarkupCachePurger' => 'PhabricatorCachePurger', + 'PhabricatorRemarkupControl' => 'AphrontFormTextAreaControl', + 'PhabricatorRemarkupCowsayBlockInterpreter' => 'PhutilRemarkupBlockInterpreter', + 'PhabricatorRemarkupCustomBlockRule' => 'PhutilRemarkupBlockRule', + 'PhabricatorRemarkupCustomInlineRule' => 'PhutilRemarkupRule', + 'PhabricatorRemarkupDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorRemarkupEditField' => 'PhabricatorEditField', + 'PhabricatorRemarkupFigletBlockInterpreter' => 'PhutilRemarkupBlockInterpreter', + 'PhabricatorRemarkupHyperlinkEngineExtension' => 'PhutilRemarkupHyperlinkEngineExtension', + 'PhabricatorRemarkupUIExample' => 'PhabricatorUIExample', + 'PhabricatorRemoveEmailUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorRemoveMultifactorUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorRepositoriesSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorRepository' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorDestructibleCodexInterface', + 'PhabricatorProjectInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PhabricatorRepositoryActivateTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryAuditRequest' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryBlueprintsTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryBranch' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositoryCallsignTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryCommit' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorMentionableInterface', + 'HarbormasterBuildableInterface', + 'HarbormasterCircleCIBuildableInterface', + 'HarbormasterBuildkiteBuildableInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorTimelineInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorDraftInterface', + ), 'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker', 'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO', - 'PhabricatorRepositoryCommitHeraldWorker' => 'PhabricatorRepositoryCommitParserWorker', + 'PhabricatorRepositoryCommitHint' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), 'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker', - 'PhabricatorRepositoryCommitOwnersWorker' => 'PhabricatorRepositoryCommitParserWorker', + 'PhabricatorRepositoryCommitPHIDType' => 'PhabricatorPHIDType', 'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker', - 'PhabricatorRepositoryController' => 'PhabricatorController', - 'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController', + 'PhabricatorRepositoryCommitPublishWorker' => 'PhabricatorRepositoryCommitParserWorker', + 'PhabricatorRepositoryCommitRef' => 'Phobject', + 'PhabricatorRepositoryCommitTestCase' => 'PhabricatorTestCase', + 'PhabricatorRepositoryConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorRepositoryCopyTimeLimitTransaction' => 'PhabricatorRepositoryTransactionType', 'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO', - 'PhabricatorRepositoryDefaultCommitMessageDetailParser' => 'PhabricatorRepositoryCommitMessageDetailParser', - 'PhabricatorRepositoryDeleteController' => 'PhabricatorRepositoryController', - 'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController', + 'PhabricatorRepositoryDangerousTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryDefaultBranchTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryDescriptionTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryDestructibleCodex' => 'PhabricatorDestructibleCodex', + 'PhabricatorRepositoryDiscoveryEngine' => 'PhabricatorRepositoryEngine', + 'PhabricatorRepositoryEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorRepositoryEncodingTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryEngine' => 'Phobject', + 'PhabricatorRepositoryEnormousTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorRepositoryFetchRefsTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryFilesizeLimitTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryFulltextEngine' => 'PhabricatorFulltextEngine', 'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', 'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', - 'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController', + 'PhabricatorRepositoryGitLFSRef' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorRepositoryGitLFSRefQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryGraphCache' => 'Phobject', + 'PhabricatorRepositoryGraphStream' => 'Phobject', + 'PhabricatorRepositoryIdentity' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhabricatorRepositoryIdentityAssignTransaction' => 'PhabricatorRepositoryIdentityTransactionType', + 'PhabricatorRepositoryIdentityChangeWorker' => 'PhabricatorWorker', + 'PhabricatorRepositoryIdentityEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorRepositoryIdentityFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorRepositoryIdentityPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryIdentityQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryIdentityTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorRepositoryIdentityTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorRepositoryIdentityTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorRepositoryMaintenanceTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryManagementCacheWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementClusterizeWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementDiscoverWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementHintWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementImportingWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementListPathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementListWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementLockWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementMaintenanceWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementMarkImportedWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementMarkReachableWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementMirrorWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementMovePathsWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementParentsWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementPullWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementRebuildIdentitiesWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementRefsWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementReparseWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementThawWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementUnpublishWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementUpdateWorkflow' => 'PhabricatorRepositoryManagementWorkflow', + 'PhabricatorRepositoryManagementWorkflow' => 'PhabricatorManagementWorkflow', 'PhabricatorRepositoryMercurialCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', + 'PhabricatorRepositoryMirror' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositoryMirrorEngine' => 'PhabricatorRepositoryEngine', + 'PhabricatorRepositoryNameTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryNotifyTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryOldRef' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryParsedChange' => 'Phobject', + 'PhabricatorRepositoryPermanentRefsTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryPublisher' => 'Phobject', + 'PhabricatorRepositoryPublisherHoldReason' => 'Phobject', + 'PhabricatorRepositoryPullEngine' => 'PhabricatorRepositoryEngine', + 'PhabricatorRepositoryPullEvent' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryPullEventPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryPullEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorDaemon', - 'PhabricatorRepositoryPullLocalDaemonTestCase' => 'PhabricatorTestCase', - 'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositoryPullLocalDaemonModule' => 'PhutilDaemonOverseerModule', + 'PhabricatorRepositoryPushEvent' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryPushEventPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryPushEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryPushLog' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryPushLogPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryPushLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryPushLogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorRepositoryPushMailWorker' => 'PhabricatorWorker', + 'PhabricatorRepositoryPushPolicyTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryPushReplyHandler' => 'PhabricatorMailReplyHandler', + 'PhabricatorRepositoryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryRefCursor' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositoryRefCursorPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryRefCursorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryRefEngine' => 'PhabricatorRepositoryEngine', + 'PhabricatorRepositoryRefPosition' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositoryRepositoryPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositorySVNSubpathTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositorySchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorRepositorySearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorRepositoryServiceTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositorySlugTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryStagingURITransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryStatusMessage' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', 'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', 'PhabricatorRepositorySymbol' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositorySymbolLanguagesTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositorySymbolSourcesTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositorySyncEvent' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorRepositorySyncEventPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositorySyncEventQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorRepositoryTestCase' => 'PhabricatorTestCase', + 'PhabricatorRepositoryTouchLimitTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryTrackOnlyTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorRepositoryTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorRepositoryTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorRepositoryType' => 'Phobject', + 'PhabricatorRepositoryURI' => array( + 'PhabricatorRepositoryDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhabricatorRepositoryURIIndex' => 'PhabricatorRepositoryDAO', + 'PhabricatorRepositoryURIPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositoryURIQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorRepositoryURITestCase' => 'PhabricatorTestCase', + 'PhabricatorRepositoryURITransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorRepositoryURITransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorRepositoryVCSTransaction' => 'PhabricatorRepositoryTransactionType', + 'PhabricatorRepositoryWorkingCopyVersion' => 'PhabricatorRepositoryDAO', + 'PhabricatorRequestExceptionHandler' => 'AphrontRequestExceptionHandler', + 'PhabricatorResetPasswordUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorResourceSite' => 'PhabricatorSite', + 'PhabricatorRobotsBlogController' => 'PhabricatorRobotsController', + 'PhabricatorRobotsController' => 'PhabricatorController', + 'PhabricatorRobotsPlatformController' => 'PhabricatorRobotsController', + 'PhabricatorRobotsResourceController' => 'PhabricatorRobotsController', + 'PhabricatorRobotsShortController' => 'PhabricatorRobotsController', 'PhabricatorS3FileStorageEngine' => 'PhabricatorFileStorageEngine', - 'PhabricatorSearchAttachController' => 'PhabricatorSearchBaseController', + 'PhabricatorSMSAuthFactor' => 'PhabricatorAuthFactor', + 'PhabricatorSQLPatchList' => 'Phobject', + 'PhabricatorSSHKeyGenerator' => 'Phobject', + 'PhabricatorSSHKeysSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorSSHLog' => 'Phobject', + 'PhabricatorSSHPassthruCommand' => 'Phobject', + 'PhabricatorSSHWorkflow' => 'PhutilArgumentWorkflow', + 'PhabricatorSavedQuery' => array( + 'PhabricatorSearchDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorSavedQueryQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorScaleChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorScheduleTaskTriggerAction' => 'PhabricatorTriggerAction', + 'PhabricatorScopedEnv' => 'Phobject', + 'PhabricatorSearchAbstractDocument' => 'Phobject', + 'PhabricatorSearchApplication' => 'PhabricatorApplication', + 'PhabricatorSearchApplicationSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorSearchApplicationStorageEnginePanel' => 'PhabricatorApplicationConfigurationPanel', 'PhabricatorSearchBaseController' => 'PhabricatorController', - 'PhabricatorSearchCommitIndexer' => 'PhabricatorSearchDocumentIndexer', + 'PhabricatorSearchCheckboxesField' => 'PhabricatorSearchField', + 'PhabricatorSearchConstraintException' => 'Exception', 'PhabricatorSearchController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchCustomFieldProxyField' => 'PhabricatorSearchField', 'PhabricatorSearchDAO' => 'PhabricatorLiskDAO', - 'PhabricatorSearchDifferentialIndexer' => 'PhabricatorSearchDocumentIndexer', + 'PhabricatorSearchDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorSearchDatasourceField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorSearchDateControlField' => 'PhabricatorSearchField', + 'PhabricatorSearchDateField' => 'PhabricatorSearchField', + 'PhabricatorSearchDefaultController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchDeleteController' => 'PhabricatorSearchBaseController', 'PhabricatorSearchDocument' => 'PhabricatorSearchDAO', - 'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO', + 'PhabricatorSearchDocumentFieldType' => 'Phobject', + 'PhabricatorSearchDocumentQuery' => 'PhabricatorPolicyAwareQuery', 'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO', - 'PhabricatorSearchEngineElastic' => 'PhabricatorSearchEngine', - 'PhabricatorSearchEngineMySQL' => 'PhabricatorSearchEngine', - 'PhabricatorSearchIndexController' => 'PhabricatorSearchBaseController', - 'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer', - 'PhabricatorSearchPhrictionIndexer' => 'PhabricatorSearchDocumentIndexer', - 'PhabricatorSearchQuery' => 'PhabricatorSearchDAO', + 'PhabricatorSearchDocumentTypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorSearchEditController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchEngineAPIMethod' => 'ConduitAPIMethod', + 'PhabricatorSearchEngineAttachment' => 'Phobject', + 'PhabricatorSearchEngineExtension' => 'Phobject', + 'PhabricatorSearchEngineExtensionModule' => 'PhabricatorConfigModule', + 'PhabricatorSearchFerretNgramGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorSearchField' => 'Phobject', + 'PhabricatorSearchHandleController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchHost' => 'Phobject', + 'PhabricatorSearchHovercardController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchIndexVersion' => 'PhabricatorSearchDAO', + 'PhabricatorSearchIndexVersionDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorSearchIntField' => 'PhabricatorSearchField', + 'PhabricatorSearchManagementIndexWorkflow' => 'PhabricatorSearchManagementWorkflow', + 'PhabricatorSearchManagementInitWorkflow' => 'PhabricatorSearchManagementWorkflow', + 'PhabricatorSearchManagementNgramsWorkflow' => 'PhabricatorSearchManagementWorkflow', + 'PhabricatorSearchManagementQueryWorkflow' => 'PhabricatorSearchManagementWorkflow', + 'PhabricatorSearchManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorSearchNgramEngine' => 'Phobject', + 'PhabricatorSearchNgrams' => 'PhabricatorSearchDAO', + 'PhabricatorSearchNgramsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorSearchOrderController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchOrderField' => 'PhabricatorSearchField', + 'PhabricatorSearchRelationship' => 'Phobject', + 'PhabricatorSearchRelationshipController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchRelationshipSourceController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchResultBucket' => 'Phobject', + 'PhabricatorSearchResultBucketGroup' => 'Phobject', 'PhabricatorSearchResultView' => 'AphrontView', - 'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController', - 'PhabricatorSearchUserIndexer' => 'PhabricatorSearchDocumentIndexer', + 'PhabricatorSearchSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorSearchScopeSetting' => 'PhabricatorSelectSetting', + 'PhabricatorSearchSelectField' => 'PhabricatorSearchField', + 'PhabricatorSearchService' => 'Phobject', + 'PhabricatorSearchSettingsPanel' => 'PhabricatorEditEngineSettingsPanel', + 'PhabricatorSearchStringListField' => 'PhabricatorSearchField', + 'PhabricatorSearchSubscribersField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorSearchTextField' => 'PhabricatorSearchField', + 'PhabricatorSearchThreeStateField' => 'PhabricatorSearchField', + 'PhabricatorSearchTokenizerField' => 'PhabricatorSearchField', + 'PhabricatorSearchWorker' => 'PhabricatorWorker', + 'PhabricatorSecurityConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorSecuritySetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorSelectEditField' => 'PhabricatorEditField', + 'PhabricatorSelectSetting' => 'PhabricatorSetting', + 'PhabricatorSelfHyperlinkEngineExtension' => 'PhabricatorRemarkupHyperlinkEngineExtension', + 'PhabricatorSessionsSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorSetConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorSetting' => 'Phobject', + 'PhabricatorSettingsAccountPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsAddEmailAction' => 'PhabricatorSystemAction', + 'PhabricatorSettingsAdjustController' => 'PhabricatorController', + 'PhabricatorSettingsApplication' => 'PhabricatorApplication', + 'PhabricatorSettingsApplicationsPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsAuthenticationPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsDeveloperPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorSettingsEmailPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsIssueController' => 'PhabricatorController', + 'PhabricatorSettingsListController' => 'PhabricatorController', + 'PhabricatorSettingsLogsPanelGroup' => 'PhabricatorSettingsPanelGroup', + 'PhabricatorSettingsMainController' => 'PhabricatorController', + 'PhabricatorSettingsPanel' => 'Phobject', + 'PhabricatorSettingsPanelGroup' => 'Phobject', + 'PhabricatorSettingsTimezoneController' => 'PhabricatorController', + 'PhabricatorSetupCheck' => 'Phobject', + 'PhabricatorSetupCheckTestCase' => 'PhabricatorTestCase', + 'PhabricatorSetupEngine' => 'Phobject', + 'PhabricatorSetupIssue' => 'Phobject', + 'PhabricatorSetupIssueUIExample' => 'PhabricatorUIExample', + 'PhabricatorSetupIssueView' => 'AphrontView', + 'PhabricatorShiftChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorShortSite' => 'PhabricatorSite', + 'PhabricatorSignDocumentsUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorSimpleEditType' => 'PhabricatorEditType', + 'PhabricatorSinChartFunction' => 'PhabricatorPureChartFunction', + 'PhabricatorSite' => 'AphrontSite', + 'PhabricatorSlackAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorSlowvoteApplication' => 'PhabricatorApplication', 'PhabricatorSlowvoteChoice' => 'PhabricatorSlowvoteDAO', - 'PhabricatorSlowvoteComment' => 'PhabricatorSlowvoteDAO', + 'PhabricatorSlowvoteCloseController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvoteCommentController' => 'PhabricatorSlowvoteController', 'PhabricatorSlowvoteController' => 'PhabricatorController', - 'PhabricatorSlowvoteCreateController' => 'PhabricatorSlowvoteController', 'PhabricatorSlowvoteDAO' => 'PhabricatorLiskDAO', + 'PhabricatorSlowvoteDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PhabricatorSlowvoteDescriptionTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlowvoteEditController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvoteEditor' => 'PhabricatorApplicationTransactionEditor', 'PhabricatorSlowvoteListController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvoteMailReceiver' => 'PhabricatorObjectMailReceiver', 'PhabricatorSlowvoteOption' => 'PhabricatorSlowvoteDAO', - 'PhabricatorSlowvotePoll' => 'PhabricatorSlowvoteDAO', + 'PhabricatorSlowvotePoll' => array( + 'PhabricatorSlowvoteDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorConduitResultInterface', + ), 'PhabricatorSlowvotePollController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvotePollPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorSlowvoteQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorSlowvoteQuestionTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlowvoteReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhabricatorSlowvoteResponsesTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlowvoteSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorSlowvoteSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorSlowvoteShuffleTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlowvoteStatusTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlowvoteTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorSlowvoteTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhabricatorSlowvoteTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorSlowvoteTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorSlowvoteVoteController' => 'PhabricatorSlowvoteController', + 'PhabricatorSlowvoteVotingMethodTransaction' => 'PhabricatorSlowvoteTransactionType', + 'PhabricatorSlug' => 'Phobject', 'PhabricatorSlugTestCase' => 'PhabricatorTestCase', - 'PhabricatorSortTableExample' => 'PhabricatorUIExample', - 'PhabricatorStandardPageView' => 'AphrontPageView', + 'PhabricatorSourceCodeView' => 'AphrontView', + 'PhabricatorSourceDocumentEngine' => 'PhabricatorTextDocumentEngine', + 'PhabricatorSpaceEditField' => 'PhabricatorEditField', + 'PhabricatorSpacesApplication' => 'PhabricatorApplication', + 'PhabricatorSpacesArchiveController' => 'PhabricatorSpacesController', + 'PhabricatorSpacesCapabilityCreateSpaces' => 'PhabricatorPolicyCapability', + 'PhabricatorSpacesCapabilityDefaultEdit' => 'PhabricatorPolicyCapability', + 'PhabricatorSpacesCapabilityDefaultView' => 'PhabricatorPolicyCapability', + 'PhabricatorSpacesController' => 'PhabricatorController', + 'PhabricatorSpacesDAO' => 'PhabricatorLiskDAO', + 'PhabricatorSpacesEditController' => 'PhabricatorSpacesController', + 'PhabricatorSpacesExportEngineExtension' => 'PhabricatorExportEngineExtension', + 'PhabricatorSpacesInterface' => 'PhabricatorPHIDInterface', + 'PhabricatorSpacesListController' => 'PhabricatorSpacesController', + 'PhabricatorSpacesMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'PhabricatorSpacesNamespace' => array( + 'PhabricatorSpacesDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorSpacesNamespaceArchiveTransaction' => 'PhabricatorSpacesNamespaceTransactionType', + 'PhabricatorSpacesNamespaceDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorSpacesNamespaceDefaultTransaction' => 'PhabricatorSpacesNamespaceTransactionType', + 'PhabricatorSpacesNamespaceDescriptionTransaction' => 'PhabricatorSpacesNamespaceTransactionType', + 'PhabricatorSpacesNamespaceEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorSpacesNamespaceNameTransaction' => 'PhabricatorSpacesNamespaceTransactionType', + 'PhabricatorSpacesNamespacePHIDType' => 'PhabricatorPHIDType', + 'PhabricatorSpacesNamespaceQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorSpacesNamespaceSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorSpacesNamespaceTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorSpacesNamespaceTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorSpacesNamespaceTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorSpacesNoAccessController' => 'PhabricatorSpacesController', + 'PhabricatorSpacesRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhabricatorSpacesSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorSpacesSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorSpacesSearchField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorSpacesTestCase' => 'PhabricatorTestCase', + 'PhabricatorSpacesViewController' => 'PhabricatorSpacesController', + 'PhabricatorStandardCustomField' => 'PhabricatorCustomField', + 'PhabricatorStandardCustomFieldBlueprints' => 'PhabricatorStandardCustomFieldTokenizer', + 'PhabricatorStandardCustomFieldBool' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldCredential' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldDatasource' => 'PhabricatorStandardCustomFieldTokenizer', + 'PhabricatorStandardCustomFieldDate' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldHeader' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldInt' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldLink' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldPHIDs' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldRemarkup' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldSelect' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldText' => 'PhabricatorStandardCustomField', + 'PhabricatorStandardCustomFieldTokenizer' => 'PhabricatorStandardCustomFieldPHIDs', + 'PhabricatorStandardCustomFieldUsers' => 'PhabricatorStandardCustomFieldTokenizer', + 'PhabricatorStandardPageView' => array( + 'PhabricatorBarePageView', + 'AphrontResponseProducerInterface', + ), + 'PhabricatorStandardSelectCustomFieldDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorStandardTimelineEngine' => 'PhabricatorTimelineEngine', + 'PhabricatorStaticEditField' => 'PhabricatorEditField', 'PhabricatorStatusController' => 'PhabricatorController', + 'PhabricatorStatusUIExample' => 'PhabricatorUIExample', + 'PhabricatorStorageFixtureScopeGuard' => 'Phobject', + 'PhabricatorStorageManagementAPI' => 'Phobject', + 'PhabricatorStorageManagementAdjustWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementAnalyzeWorkflow' => 'PhabricatorStorageManagementWorkflow', 'PhabricatorStorageManagementDatabasesWorkflow' => 'PhabricatorStorageManagementWorkflow', 'PhabricatorStorageManagementDestroyWorkflow' => 'PhabricatorStorageManagementWorkflow', 'PhabricatorStorageManagementDumpWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementOptimizeWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementPartitionWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementProbeWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementQuickstartWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementRenamespaceWorkflow' => 'PhabricatorStorageManagementWorkflow', + 'PhabricatorStorageManagementShellWorkflow' => 'PhabricatorStorageManagementWorkflow', 'PhabricatorStorageManagementStatusWorkflow' => 'PhabricatorStorageManagementWorkflow', 'PhabricatorStorageManagementUpgradeWorkflow' => 'PhabricatorStorageManagementWorkflow', - 'PhabricatorStorageManagementWorkflow' => 'PhutilArgumentWorkflow', - 'PhabricatorSymbolNameLinter' => 'ArcanistXHPASTLintNamingHook', + 'PhabricatorStorageManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorStoragePatch' => 'Phobject', + 'PhabricatorStorageSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorStorageSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorStringConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorStringExportField' => 'PhabricatorExportField', + 'PhabricatorStringListConfigType' => 'PhabricatorTextListConfigType', + 'PhabricatorStringListEditField' => 'PhabricatorEditField', + 'PhabricatorStringListExportField' => 'PhabricatorListExportField', + 'PhabricatorStringMailStamp' => 'PhabricatorMailStamp', + 'PhabricatorStringSetting' => 'PhabricatorSetting', + 'PhabricatorSubmitEditField' => 'PhabricatorEditField', + 'PhabricatorSubscribedToObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorSubscribersEditField' => 'PhabricatorTokenizerEditField', + 'PhabricatorSubscribersQuery' => 'PhabricatorQuery', + 'PhabricatorSubscriptionTriggerClock' => 'PhabricatorTriggerClock', + 'PhabricatorSubscriptionsAddSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction', + 'PhabricatorSubscriptionsAddSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction', + 'PhabricatorSubscriptionsApplication' => 'PhabricatorApplication', + 'PhabricatorSubscriptionsCurtainExtension' => 'PHUICurtainExtension', + 'PhabricatorSubscriptionsEditController' => 'PhabricatorController', + 'PhabricatorSubscriptionsEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorSubscriptionsEditor' => 'PhabricatorEditor', + 'PhabricatorSubscriptionsExportEngineExtension' => 'PhabricatorExportEngineExtension', + 'PhabricatorSubscriptionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorSubscriptionsHeraldAction' => 'HeraldAction', + 'PhabricatorSubscriptionsListController' => 'PhabricatorController', + 'PhabricatorSubscriptionsMailEngineExtension' => 'PhabricatorMailEngineExtension', + 'PhabricatorSubscriptionsMuteController' => 'PhabricatorController', + 'PhabricatorSubscriptionsRemoveSelfHeraldAction' => 'PhabricatorSubscriptionsHeraldAction', + 'PhabricatorSubscriptionsRemoveSubscribersHeraldAction' => 'PhabricatorSubscriptionsHeraldAction', + 'PhabricatorSubscriptionsSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', + 'PhabricatorSubscriptionsSearchEngineExtension' => 'PhabricatorSearchEngineExtension', + 'PhabricatorSubscriptionsSubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'PhabricatorSubscriptionsSubscribersPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorSubscriptionsTransactionController' => 'PhabricatorController', + 'PhabricatorSubscriptionsUIEventListener' => 'PhabricatorEventListener', + 'PhabricatorSubscriptionsUnsubscribeEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'PhabricatorSubtypeEditEngineExtension' => 'PhabricatorEditEngineExtension', + 'PhabricatorSumChartFunction' => 'PhabricatorHigherOrderChartFunction', + 'PhabricatorSupportApplication' => 'PhabricatorApplication', + 'PhabricatorSyntaxHighlighter' => 'Phobject', + 'PhabricatorSyntaxHighlightingConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorSyntaxStyle' => 'Phobject', + 'PhabricatorSystemAction' => 'Phobject', + 'PhabricatorSystemActionEngine' => 'Phobject', + 'PhabricatorSystemActionGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorSystemActionLog' => 'PhabricatorSystemDAO', + 'PhabricatorSystemActionRateLimitException' => 'Exception', + 'PhabricatorSystemApplication' => 'PhabricatorApplication', + 'PhabricatorSystemDAO' => 'PhabricatorLiskDAO', + 'PhabricatorSystemDebugUIEventListener' => 'PhabricatorEventListener', + 'PhabricatorSystemDestructionGarbageCollector' => 'PhabricatorGarbageCollector', + 'PhabricatorSystemDestructionLog' => 'PhabricatorSystemDAO', + 'PhabricatorSystemObjectController' => 'PhabricatorController', + 'PhabricatorSystemReadOnlyController' => 'PhabricatorController', + 'PhabricatorSystemRemoveDestroyWorkflow' => 'PhabricatorSystemRemoveWorkflow', + 'PhabricatorSystemRemoveLogWorkflow' => 'PhabricatorSystemRemoveWorkflow', + 'PhabricatorSystemRemoveWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorSystemSelectEncodingController' => 'PhabricatorController', + 'PhabricatorSystemSelectHighlightController' => 'PhabricatorController', + 'PhabricatorSystemSelectViewAsController' => 'PhabricatorController', + 'PhabricatorTOTPAuthFactor' => 'PhabricatorAuthFactor', + 'PhabricatorTOTPAuthFactorTestCase' => 'PhabricatorTestCase', 'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon', - 'PhabricatorTestCase' => 'ArcanistPhutilTestCase', - 'PhabricatorTimelineCursor' => 'PhabricatorTimelineDAO', - 'PhabricatorTimelineDAO' => 'PhabricatorLiskDAO', - 'PhabricatorTimelineEvent' => 'PhabricatorTimelineDAO', - 'PhabricatorTimelineEventData' => 'PhabricatorTimelineDAO', - 'PhabricatorTimelineIterator' => 'Iterator', - 'PhabricatorTimer' => 'PhabricatorCountdownDAO', - 'PhabricatorTransactionView' => 'AphrontView', + 'PhabricatorTaskmasterDaemonModule' => 'PhutilDaemonOverseerModule', + 'PhabricatorTestApplication' => 'PhabricatorApplication', + 'PhabricatorTestCase' => 'PhutilTestCase', + 'PhabricatorTestController' => 'PhabricatorController', + 'PhabricatorTestDataGenerator' => 'Phobject', + 'PhabricatorTestNoCycleEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorTestStorageEngine' => 'PhabricatorFileStorageEngine', + 'PhabricatorTestWorker' => 'PhabricatorWorker', + 'PhabricatorTextAreaEditField' => 'PhabricatorEditField', + 'PhabricatorTextConfigType' => 'PhabricatorConfigType', + 'PhabricatorTextDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorTextEditField' => 'PhabricatorEditField', + 'PhabricatorTextExportFormat' => 'PhabricatorExportFormat', + 'PhabricatorTextListConfigType' => 'PhabricatorTextConfigType', + 'PhabricatorTime' => 'Phobject', + 'PhabricatorTimeFormatSetting' => 'PhabricatorSelectSetting', + 'PhabricatorTimeGuard' => 'Phobject', + 'PhabricatorTimeTestCase' => 'PhabricatorTestCase', + 'PhabricatorTimelineEngine' => 'Phobject', + 'PhabricatorTimezoneIgnoreOffsetSetting' => 'PhabricatorInternalSetting', + 'PhabricatorTimezoneSetting' => 'PhabricatorOptionGroupSetting', + 'PhabricatorTimezoneSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorTitleGlyphsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorToken' => array( + 'PhabricatorTokenDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorTokenController' => 'PhabricatorController', + 'PhabricatorTokenCount' => 'PhabricatorTokenDAO', + 'PhabricatorTokenCountQuery' => 'PhabricatorOffsetPagedQuery', + 'PhabricatorTokenDAO' => 'PhabricatorLiskDAO', + 'PhabricatorTokenDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorTokenGiveController' => 'PhabricatorTokenController', + 'PhabricatorTokenGiven' => array( + 'PhabricatorTokenDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorTokenGivenController' => 'PhabricatorTokenController', + 'PhabricatorTokenGivenEditor' => 'PhabricatorEditor', + 'PhabricatorTokenGivenFeedStory' => 'PhabricatorFeedStory', + 'PhabricatorTokenGivenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorTokenLeaderController' => 'PhabricatorTokenController', + 'PhabricatorTokenQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorTokenReceiverQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorTokenTokenPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorTokenUIEventListener' => 'PhabricatorEventListener', + 'PhabricatorTokenizerEditField' => 'PhabricatorPHIDListEditField', + 'PhabricatorTokensApplication' => 'PhabricatorApplication', + 'PhabricatorTokensCurtainExtension' => 'PHUICurtainExtension', + 'PhabricatorTokensSettingsPanel' => 'PhabricatorSettingsPanel', + 'PhabricatorTokensToken' => array( + 'PhabricatorTokenDAO', + 'PhabricatorDestructibleInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhabricatorTransactionChange' => 'Phobject', + 'PhabricatorTransactionFactEngine' => 'PhabricatorFactEngine', + 'PhabricatorTransactionRemarkupChange' => 'PhabricatorTransactionChange', + 'PhabricatorTransactionWarning' => 'Phobject', + 'PhabricatorTransactions' => 'Phobject', + 'PhabricatorTransactionsApplication' => 'PhabricatorApplication', + 'PhabricatorTransactionsDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorTransactionsFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension', + 'PhabricatorTransactionsObjectTypeDatasource' => 'PhabricatorTypeaheadDatasource', 'PhabricatorTransformedFile' => 'PhabricatorFileDAO', + 'PhabricatorTranslationSetting' => 'PhabricatorOptionGroupSetting', + 'PhabricatorTranslationsConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorTriggerAction' => 'Phobject', + 'PhabricatorTriggerClock' => 'Phobject', + 'PhabricatorTriggerClockTestCase' => 'PhabricatorTestCase', + 'PhabricatorTriggerDaemon' => 'PhabricatorDaemon', 'PhabricatorTrivialTestCase' => 'PhabricatorTestCase', - 'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController', + 'PhabricatorTwilioFuture' => 'FutureProxy', + 'PhabricatorTwitchAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorTwitterAuthProvider' => 'PhabricatorOAuth1AuthProvider', + 'PhabricatorTypeaheadApplication' => 'PhabricatorApplication', + 'PhabricatorTypeaheadCompositeDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorTypeaheadDatasource' => 'Phobject', 'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController', - 'PhabricatorUIExampleController' => 'PhabricatorController', - 'PhabricatorUIExampleRenderController' => 'PhabricatorUIExampleController', - 'PhabricatorUIListFilterExample' => 'PhabricatorUIExample', - 'PhabricatorUINotificationExample' => 'PhabricatorUIExample', - 'PhabricatorUIPagerExample' => 'PhabricatorUIExample', - 'PhabricatorUITooltipExample' => 'PhabricatorUIExample', + 'PhabricatorTypeaheadDatasourceTestCase' => 'PhabricatorTestCase', + 'PhabricatorTypeaheadFunctionHelpController' => 'PhabricatorTypeaheadDatasourceController', + 'PhabricatorTypeaheadInvalidTokenException' => 'Exception', + 'PhabricatorTypeaheadModularDatasourceController' => 'PhabricatorTypeaheadDatasourceController', + 'PhabricatorTypeaheadMonogramDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorTypeaheadProxyDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorTypeaheadResult' => 'Phobject', + 'PhabricatorTypeaheadRuntimeCompositeDatasource' => 'PhabricatorTypeaheadCompositeDatasource', + 'PhabricatorTypeaheadTestNumbersDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorTypeaheadTokenView' => 'AphrontTagView', + 'PhabricatorUIConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorUIExample' => 'Phobject', + 'PhabricatorUIExampleRenderController' => 'PhabricatorController', + 'PhabricatorUIExamplesApplication' => 'PhabricatorApplication', + 'PhabricatorURIExportField' => 'PhabricatorExportField', + 'PhabricatorUSEnglishTranslation' => 'PhutilTranslation', + 'PhabricatorUnifiedDiffsSetting' => 'PhabricatorSelectSetting', + 'PhabricatorUnitTestContentSource' => 'PhabricatorContentSource', 'PhabricatorUnitsTestCase' => 'PhabricatorTestCase', - 'PhabricatorUser' => - array( - 0 => 'PhabricatorUserDAO', - 1 => 'PhutilPerson', + 'PhabricatorUnknownContentSource' => 'PhabricatorContentSource', + 'PhabricatorUnlockEngine' => 'Phobject', + 'PhabricatorUnsubscribedFromObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorUser' => array( + 'PhabricatorUserDAO', + 'PhutilPerson', + 'PhabricatorPolicyInterface', + 'PhabricatorCustomFieldInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSSHPublicKeyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorAuthPasswordHashInterface', + ), + 'PhabricatorUserApproveTransaction' => 'PhabricatorUserTransactionType', + 'PhabricatorUserBadgesCacheType' => 'PhabricatorUserCacheType', + 'PhabricatorUserBlurbField' => 'PhabricatorUserCustomField', + 'PhabricatorUserCache' => 'PhabricatorUserDAO', + 'PhabricatorUserCachePurger' => 'PhabricatorCachePurger', + 'PhabricatorUserCacheType' => 'Phobject', + 'PhabricatorUserCardView' => 'AphrontTagView', + 'PhabricatorUserConfigOptions' => 'PhabricatorApplicationConfigOptions', + 'PhabricatorUserConfiguredCustomField' => array( + 'PhabricatorUserCustomField', + 'PhabricatorStandardCustomFieldInterface', ), - 'PhabricatorUserAccountSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserConduitSettingsPanelController' => 'PhabricatorUserSettingsPanelController', + 'PhabricatorUserConfiguredCustomFieldStorage' => 'PhabricatorCustomFieldStorage', + 'PhabricatorUserCustomField' => 'PhabricatorCustomField', + 'PhabricatorUserCustomFieldNumericIndex' => 'PhabricatorCustomFieldNumericIndexStorage', + 'PhabricatorUserCustomFieldStringIndex' => 'PhabricatorCustomFieldStringIndexStorage', 'PhabricatorUserDAO' => 'PhabricatorLiskDAO', - 'PhabricatorUserEmail' => 'PhabricatorUserDAO', - 'PhabricatorUserEmailPreferenceSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserEmailSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserLDAPInfo' => 'PhabricatorUserDAO', - 'PhabricatorUserLDAPSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserLog' => 'PhabricatorUserDAO', - 'PhabricatorUserOAuthInfo' => 'PhabricatorUserDAO', - 'PhabricatorUserOAuthSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserPasswordSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserPreferenceSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserPreferences' => 'PhabricatorUserDAO', + 'PhabricatorUserDisableTransaction' => 'PhabricatorUserTransactionType', + 'PhabricatorUserEditEngine' => 'PhabricatorEditEngine', + 'PhabricatorUserEditor' => 'PhabricatorEditor', + 'PhabricatorUserEditorTestCase' => 'PhabricatorTestCase', + 'PhabricatorUserEmail' => array( + 'PhabricatorUserDAO', + 'PhabricatorDestructibleInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorUserEmailTestCase' => 'PhabricatorTestCase', + 'PhabricatorUserEmpowerTransaction' => 'PhabricatorUserTransactionType', + 'PhabricatorUserFerretEngine' => 'PhabricatorFerretEngine', + 'PhabricatorUserFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhabricatorUserIconField' => 'PhabricatorUserCustomField', + 'PhabricatorUserLog' => array( + 'PhabricatorUserDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorUserLogType' => 'Phobject', + 'PhabricatorUserLogTypeDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorUserLogView' => 'AphrontView', + 'PhabricatorUserMessageCountCacheType' => 'PhabricatorUserCacheType', + 'PhabricatorUserNotificationCountCacheType' => 'PhabricatorUserCacheType', + 'PhabricatorUserNotifyTransaction' => 'PhabricatorUserTransactionType', + 'PhabricatorUserPHIDResolver' => 'PhabricatorPHIDResolver', + 'PhabricatorUserPreferences' => array( + 'PhabricatorUserDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhabricatorUserPreferencesCacheType' => 'PhabricatorUserCacheType', + 'PhabricatorUserPreferencesEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorUserPreferencesPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorUserPreferencesQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorUserPreferencesSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorUserPreferencesTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorUserPreferencesTransactionQuery' => 'PhabricatorApplicationTransactionQuery', 'PhabricatorUserProfile' => 'PhabricatorUserDAO', - 'PhabricatorUserProfileSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserSSHKey' => 'PhabricatorUserDAO', - 'PhabricatorUserSSHKeysSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserSearchSettingsPanelController' => 'PhabricatorUserSettingsPanelController', - 'PhabricatorUserSettingsController' => 'PhabricatorPeopleController', - 'PhabricatorUserSettingsPanelController' => 'PhabricatorPeopleController', - 'PhabricatorUserStatus' => 'PhabricatorUserDAO', + 'PhabricatorUserProfileImageCacheType' => 'PhabricatorUserCacheType', + 'PhabricatorUserRealNameField' => 'PhabricatorUserCustomField', + 'PhabricatorUserRolesField' => 'PhabricatorUserCustomField', + 'PhabricatorUserSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorUserSinceField' => 'PhabricatorUserCustomField', + 'PhabricatorUserStatusField' => 'PhabricatorUserCustomField', 'PhabricatorUserTestCase' => 'PhabricatorTestCase', + 'PhabricatorUserTitleField' => 'PhabricatorUserCustomField', + 'PhabricatorUserTransaction' => 'PhabricatorModularTransaction', + 'PhabricatorUserTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorUserTransactionType' => 'PhabricatorModularTransactionType', + 'PhabricatorUserUsernameTransaction' => 'PhabricatorUserTransactionType', + 'PhabricatorUsersEditField' => 'PhabricatorTokenizerEditField', + 'PhabricatorUsersPolicyRule' => 'PhabricatorPolicyRule', + 'PhabricatorUsersSearchField' => 'PhabricatorSearchTokenizerField', + 'PhabricatorVCSResponse' => 'AphrontResponse', + 'PhabricatorVerifyEmailUserLogType' => 'PhabricatorUserLogType', + 'PhabricatorVersionedDraft' => 'PhabricatorDraftDAO', + 'PhabricatorVeryWowEnglishTranslation' => 'PhutilTranslation', + 'PhabricatorVideoDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorViewerDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhabricatorVoidDocumentEngine' => 'PhabricatorDocumentEngine', + 'PhabricatorWatcherHasObjectEdgeType' => 'PhabricatorEdgeType', + 'PhabricatorWebContentSource' => 'PhabricatorContentSource', + 'PhabricatorWebServerSetupCheck' => 'PhabricatorSetupCheck', + 'PhabricatorWeekStartDaySetting' => 'PhabricatorSelectSetting', + 'PhabricatorWildConfigType' => 'PhabricatorJSONConfigType', + 'PhabricatorWordPressAuthProvider' => 'PhabricatorOAuth2AuthProvider', + 'PhabricatorWorkboardViewState' => 'Phobject', + 'PhabricatorWorker' => 'Phobject', + 'PhabricatorWorkerActiveTask' => 'PhabricatorWorkerTask', + 'PhabricatorWorkerActiveTaskQuery' => 'PhabricatorWorkerTaskQuery', + 'PhabricatorWorkerArchiveTask' => 'PhabricatorWorkerTask', + 'PhabricatorWorkerArchiveTaskQuery' => 'PhabricatorWorkerTaskQuery', + 'PhabricatorWorkerBulkJob' => array( + 'PhabricatorWorkerDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorDestructibleInterface', + ), + 'PhabricatorWorkerBulkJobCreateWorker' => 'PhabricatorWorkerBulkJobWorker', + 'PhabricatorWorkerBulkJobEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhabricatorWorkerBulkJobPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorWorkerBulkJobQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorWorkerBulkJobSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorWorkerBulkJobTaskWorker' => 'PhabricatorWorkerBulkJobWorker', + 'PhabricatorWorkerBulkJobTestCase' => 'PhabricatorTestCase', + 'PhabricatorWorkerBulkJobTransaction' => 'PhabricatorApplicationTransaction', + 'PhabricatorWorkerBulkJobTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhabricatorWorkerBulkJobType' => 'Phobject', + 'PhabricatorWorkerBulkJobWorker' => 'PhabricatorWorker', + 'PhabricatorWorkerBulkTask' => 'PhabricatorWorkerDAO', 'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO', + 'PhabricatorWorkerDestructionEngineExtension' => 'PhabricatorDestructionEngineExtension', + 'PhabricatorWorkerLeaseQuery' => 'PhabricatorQuery', + 'PhabricatorWorkerManagementCancelWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementDelayWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementExecuteWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementFloodWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementFreeWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementPriorityWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementRetryWorkflow' => 'PhabricatorWorkerManagementWorkflow', + 'PhabricatorWorkerManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorWorkerPermanentFailureException' => 'Exception', + 'PhabricatorWorkerSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhabricatorWorkerSingleBulkJobType' => 'PhabricatorWorkerBulkJobType', 'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO', 'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO', 'PhabricatorWorkerTaskDetailController' => 'PhabricatorDaemonController', - 'PhabricatorWorkerTaskUpdateController' => 'PhabricatorDaemonController', + 'PhabricatorWorkerTaskQuery' => 'PhabricatorQuery', + 'PhabricatorWorkerTestCase' => 'PhabricatorTestCase', + 'PhabricatorWorkerTrigger' => array( + 'PhabricatorWorkerDAO', + 'PhabricatorDestructibleInterface', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorWorkerTriggerEvent' => 'PhabricatorWorkerDAO', + 'PhabricatorWorkerTriggerManagementFireWorkflow' => 'PhabricatorWorkerTriggerManagementWorkflow', + 'PhabricatorWorkerTriggerManagementWorkflow' => 'PhabricatorManagementWorkflow', + 'PhabricatorWorkerTriggerPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorWorkerTriggerQuery' => 'PhabricatorPolicyAwareQuery', + 'PhabricatorWorkerYieldException' => 'Exception', + 'PhabricatorWorkingCopyDiscoveryTestCase' => 'PhabricatorWorkingCopyTestCase', + 'PhabricatorWorkingCopyPullTestCase' => 'PhabricatorWorkingCopyTestCase', + 'PhabricatorWorkingCopyTestCase' => 'PhabricatorTestCase', + 'PhabricatorXHPASTDAO' => 'PhabricatorLiskDAO', + 'PhabricatorXHPASTParseTree' => 'PhabricatorXHPASTDAO', 'PhabricatorXHPASTViewController' => 'PhabricatorController', - 'PhabricatorXHPASTViewDAO' => 'PhabricatorLiskDAO', 'PhabricatorXHPASTViewFrameController' => 'PhabricatorXHPASTViewController', 'PhabricatorXHPASTViewFramesetController' => 'PhabricatorXHPASTViewController', 'PhabricatorXHPASTViewInputController' => 'PhabricatorXHPASTViewPanelController', 'PhabricatorXHPASTViewPanelController' => 'PhabricatorXHPASTViewController', - 'PhabricatorXHPASTViewParseTree' => 'PhabricatorXHPASTViewDAO', 'PhabricatorXHPASTViewRunController' => 'PhabricatorXHPASTViewController', 'PhabricatorXHPASTViewStreamController' => 'PhabricatorXHPASTViewPanelController', 'PhabricatorXHPASTViewTreeController' => 'PhabricatorXHPASTViewPanelController', + 'PhabricatorXHProfApplication' => 'PhabricatorApplication', 'PhabricatorXHProfController' => 'PhabricatorController', + 'PhabricatorXHProfDAO' => 'PhabricatorLiskDAO', + 'PhabricatorXHProfDropController' => 'PhabricatorXHProfController', 'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController', 'PhabricatorXHProfProfileSymbolView' => 'PhabricatorXHProfProfileView', 'PhabricatorXHProfProfileTopLevelView' => 'PhabricatorXHProfProfileView', 'PhabricatorXHProfProfileView' => 'AphrontView', + 'PhabricatorXHProfSample' => array( + 'PhabricatorXHProfDAO', + 'PhabricatorPolicyInterface', + ), + 'PhabricatorXHProfSampleListController' => 'PhabricatorXHProfController', + 'PhabricatorXHProfSampleQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorXHProfSampleSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhabricatorYoutubeRemarkupRule' => 'PhutilRemarkupRule', + 'PhabricatorZipSetupCheck' => 'PhabricatorSetupCheck', + 'Phame404Response' => 'AphrontHTMLResponse', + 'PhameBlog' => array( + 'PhameDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PhameBlog404Controller' => 'PhameLiveController', + 'PhameBlogArchiveController' => 'PhameBlogController', + 'PhameBlogController' => 'PhameController', + 'PhameBlogCreateCapability' => 'PhabricatorPolicyCapability', + 'PhameBlogDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhameBlogDescriptionTransaction' => 'PhameBlogTransactionType', + 'PhameBlogEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhameBlogEditController' => 'PhameBlogController', + 'PhameBlogEditEngine' => 'PhabricatorEditEngine', + 'PhameBlogEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhameBlogFeedController' => 'PhameBlogController', + 'PhameBlogFerretEngine' => 'PhabricatorFerretEngine', + 'PhameBlogFullDomainTransaction' => 'PhameBlogTransactionType', + 'PhameBlogFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhameBlogHeaderImageTransaction' => 'PhameBlogTransactionType', + 'PhameBlogHeaderPictureController' => 'PhameBlogController', + 'PhameBlogListController' => 'PhameBlogController', + 'PhameBlogListView' => 'AphrontTagView', + 'PhameBlogManageController' => 'PhameBlogController', + 'PhameBlogNameTransaction' => 'PhameBlogTransactionType', + 'PhameBlogParentDomainTransaction' => 'PhameBlogTransactionType', + 'PhameBlogParentSiteTransaction' => 'PhameBlogTransactionType', + 'PhameBlogProfileImageTransaction' => 'PhameBlogTransactionType', + 'PhameBlogProfilePictureController' => 'PhameBlogController', + 'PhameBlogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhameBlogReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhameBlogSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhameBlogSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhameBlogSite' => 'PhameSite', + 'PhameBlogStatusTransaction' => 'PhameBlogTransactionType', + 'PhameBlogSubtitleTransaction' => 'PhameBlogTransactionType', + 'PhameBlogTransaction' => 'PhabricatorModularTransaction', + 'PhameBlogTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhameBlogTransactionType' => 'PhabricatorModularTransactionType', + 'PhameBlogViewController' => 'PhameLiveController', + 'PhameConstants' => 'Phobject', 'PhameController' => 'PhabricatorController', 'PhameDAO' => 'PhabricatorLiskDAO', - 'PhameDraftListController' => 'PhamePostListBaseController', - 'PhamePost' => 'PhameDAO', - 'PhamePostDeleteController' => 'PhameController', - 'PhamePostDetailView' => 'AphrontView', - 'PhamePostEditController' => 'PhameController', - 'PhamePostListBaseController' => 'PhameController', - 'PhamePostListController' => 'PhamePostListBaseController', - 'PhamePostListView' => 'AphrontView', - 'PhamePostPreviewController' => 'PhameController', - 'PhamePostQuery' => 'PhabricatorOffsetPagedQuery', - 'PhamePostViewController' => 'PhameController', + 'PhameDescriptionView' => 'AphrontTagView', + 'PhameDraftListView' => 'AphrontTagView', + 'PhameHomeController' => 'PhamePostController', + 'PhameInheritBlogPolicyRule' => 'PhabricatorPolicyRule', + 'PhameLiveController' => 'PhameController', + 'PhameNextPostView' => 'AphrontTagView', + 'PhamePost' => array( + 'PhameDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorProjectInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorEditEngineLockableInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PhamePostArchiveController' => 'PhamePostController', + 'PhamePostBlogTransaction' => 'PhamePostTransactionType', + 'PhamePostBodyTransaction' => 'PhamePostTransactionType', + 'PhamePostController' => 'PhameController', + 'PhamePostEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'PhamePostEditController' => 'PhamePostController', + 'PhamePostEditEngine' => 'PhabricatorEditEngine', + 'PhamePostEditEngineLock' => 'PhabricatorEditEngineLock', + 'PhamePostEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhamePostFerretEngine' => 'PhabricatorFerretEngine', + 'PhamePostFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhamePostHeaderImageTransaction' => 'PhamePostTransactionType', + 'PhamePostHeaderPictureController' => 'PhamePostController', + 'PhamePostHistoryController' => 'PhamePostController', + 'PhamePostListController' => 'PhamePostController', + 'PhamePostListView' => 'AphrontTagView', + 'PhamePostMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PhamePostMoveController' => 'PhamePostController', + 'PhamePostPublishController' => 'PhamePostController', + 'PhamePostQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhamePostRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PhamePostReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhamePostSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhamePostSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhamePostSubtitleTransaction' => 'PhamePostTransactionType', + 'PhamePostTitleTransaction' => 'PhamePostTransactionType', + 'PhamePostTransaction' => 'PhabricatorModularTransaction', + 'PhamePostTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhamePostTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhamePostTransactionType' => 'PhabricatorModularTransactionType', + 'PhamePostViewController' => 'PhameLiveController', + 'PhamePostVisibilityTransaction' => 'PhamePostTransactionType', + 'PhameSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhameSite' => 'PhabricatorSite', + 'PhluxController' => 'PhabricatorController', + 'PhluxDAO' => 'PhabricatorLiskDAO', + 'PhluxEditController' => 'PhluxController', + 'PhluxListController' => 'PhluxController', + 'PhluxSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhluxTransaction' => 'PhabricatorApplicationTransaction', + 'PhluxTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhluxVariable' => array( + 'PhluxDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorPolicyInterface', + ), + 'PhluxVariableEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhluxVariablePHIDType' => 'PhabricatorPHIDType', + 'PhluxVariableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhluxViewController' => 'PhluxController', + 'PholioController' => 'PhabricatorController', + 'PholioDAO' => 'PhabricatorLiskDAO', + 'PholioDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'PholioDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PholioImage' => array( + 'PholioDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PholioImageDescriptionTransaction' => 'PholioImageTransactionType', + 'PholioImageFileTransaction' => 'PholioImageTransactionType', + 'PholioImageNameTransaction' => 'PholioImageTransactionType', + 'PholioImagePHIDType' => 'PhabricatorPHIDType', + 'PholioImageQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PholioImageReplaceTransaction' => 'PholioImageTransactionType', + 'PholioImageSequenceTransaction' => 'PholioImageTransactionType', + 'PholioImageTransactionType' => 'PholioTransactionType', + 'PholioImageUploadController' => 'PholioController', + 'PholioInlineController' => 'PholioController', + 'PholioInlineListController' => 'PholioController', + 'PholioMock' => array( + 'PholioDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorTimelineInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorMentionableInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PholioMockArchiveController' => 'PholioController', + 'PholioMockAuthorHeraldField' => 'PholioMockHeraldField', + 'PholioMockCommentController' => 'PholioController', + 'PholioMockDescriptionHeraldField' => 'PholioMockHeraldField', + 'PholioMockDescriptionTransaction' => 'PholioMockTransactionType', + 'PholioMockEditController' => 'PholioController', + 'PholioMockEditor' => 'PhabricatorApplicationTransactionEditor', + 'PholioMockEmbedView' => 'AphrontView', + 'PholioMockFerretEngine' => 'PhabricatorFerretEngine', + 'PholioMockFulltextEngine' => 'PhabricatorFulltextEngine', + 'PholioMockHasTaskEdgeType' => 'PhabricatorEdgeType', + 'PholioMockHasTaskRelationship' => 'PholioMockRelationship', + 'PholioMockHeraldField' => 'HeraldField', + 'PholioMockHeraldFieldGroup' => 'HeraldFieldGroup', + 'PholioMockImagesView' => 'AphrontView', + 'PholioMockInlineTransaction' => 'PholioMockTransactionType', + 'PholioMockListController' => 'PholioController', + 'PholioMockMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PholioMockNameHeraldField' => 'PholioMockHeraldField', + 'PholioMockNameTransaction' => 'PholioMockTransactionType', + 'PholioMockPHIDType' => 'PhabricatorPHIDType', + 'PholioMockQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PholioMockRelationship' => 'PhabricatorObjectRelationship', + 'PholioMockRelationshipSource' => 'PhabricatorObjectRelationshipSource', + 'PholioMockSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PholioMockStatusTransaction' => 'PholioMockTransactionType', + 'PholioMockThumbGridView' => 'AphrontView', + 'PholioMockTimelineEngine' => 'PhabricatorTimelineEngine', + 'PholioMockTransactionType' => 'PholioTransactionType', + 'PholioMockViewController' => 'PholioController', + 'PholioRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PholioReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PholioSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PholioTransaction' => 'PhabricatorModularTransaction', + 'PholioTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PholioTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PholioTransactionType' => 'PhabricatorModularTransactionType', + 'PholioTransactionView' => 'PhabricatorApplicationTransactionView', + 'PholioUploadedImageView' => 'AphrontView', + 'PhortuneAccount' => array( + 'PhortuneDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + ), + 'PhortuneAccountAddManagerController' => 'PhortuneAccountController', + 'PhortuneAccountBillingAddressTransaction' => 'PhortuneAccountTransactionType', + 'PhortuneAccountBillingNameTransaction' => 'PhortuneAccountTransactionType', + 'PhortuneAccountChargeListController' => 'PhortuneAccountProfileController', + 'PhortuneAccountChargesController' => 'PhortuneAccountProfileController', + 'PhortuneAccountController' => 'PhortuneController', + 'PhortuneAccountDetailsController' => 'PhortuneAccountProfileController', + 'PhortuneAccountEditController' => 'PhortuneController', + 'PhortuneAccountEditEngine' => 'PhabricatorEditEngine', + 'PhortuneAccountEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortuneAccountEmail' => array( + 'PhortuneDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PhortuneAccountEmailAddressTransaction' => 'PhortuneAccountEmailTransactionType', + 'PhortuneAccountEmailAddressesController' => 'PhortuneAccountProfileController', + 'PhortuneAccountEmailEditController' => 'PhortuneAccountController', + 'PhortuneAccountEmailEditEngine' => 'PhabricatorEditEngine', + 'PhortuneAccountEmailEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortuneAccountEmailPHIDType' => 'PhabricatorPHIDType', + 'PhortuneAccountEmailQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneAccountEmailRotateController' => 'PhortuneAccountController', + 'PhortuneAccountEmailRotateTransaction' => 'PhortuneAccountEmailTransactionType', + 'PhortuneAccountEmailStatus' => 'Phobject', + 'PhortuneAccountEmailStatusController' => 'PhortuneAccountController', + 'PhortuneAccountEmailStatusTransaction' => 'PhortuneAccountEmailTransactionType', + 'PhortuneAccountEmailTransaction' => 'PhabricatorModularTransaction', + 'PhortuneAccountEmailTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortuneAccountEmailTransactionType' => 'PhabricatorModularTransactionType', + 'PhortuneAccountEmailViewController' => 'PhortuneAccountController', + 'PhortuneAccountHasMemberEdgeType' => 'PhabricatorEdgeType', + 'PhortuneAccountHasMerchantEdgeType' => 'PhabricatorEdgeType', + 'PhortuneAccountListController' => 'PhortuneController', + 'PhortuneAccountManagersController' => 'PhortuneAccountProfileController', + 'PhortuneAccountNameTransaction' => 'PhortuneAccountTransactionType', + 'PhortuneAccountOrderListController' => 'PhortuneAccountProfileController', + 'PhortuneAccountOrdersController' => 'PhortuneAccountProfileController', + 'PhortuneAccountOverviewController' => 'PhortuneAccountProfileController', + 'PhortuneAccountPHIDType' => 'PhabricatorPHIDType', + 'PhortuneAccountPaymentMethodController' => 'PhortuneAccountProfileController', + 'PhortuneAccountPaymentMethodViewController' => 'PhortuneAccountController', + 'PhortuneAccountProfileController' => 'PhortuneAccountController', + 'PhortuneAccountQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneAccountSubscriptionAutopayController' => 'PhortuneAccountController', + 'PhortuneAccountSubscriptionController' => 'PhortuneAccountProfileController', + 'PhortuneAccountSubscriptionViewController' => 'PhortuneAccountController', + 'PhortuneAccountTransaction' => 'PhabricatorModularTransaction', + 'PhortuneAccountTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortuneAccountTransactionType' => 'PhabricatorModularTransactionType', + 'PhortuneAdHocCart' => 'PhortuneCartImplementation', + 'PhortuneAdHocProduct' => 'PhortuneProductImplementation', + 'PhortuneAddPaymentMethodAction' => 'PhabricatorSystemAction', + 'PhortuneCart' => array( + 'PhortuneDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PhortuneCartAcceptController' => 'PhortuneCartController', + 'PhortuneCartCancelController' => 'PhortuneCartController', + 'PhortuneCartCheckoutController' => 'PhortuneCartController', + 'PhortuneCartController' => 'PhortuneController', + 'PhortuneCartEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortuneCartImplementation' => 'Phobject', + 'PhortuneCartPHIDType' => 'PhabricatorPHIDType', + 'PhortuneCartQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneCartReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhortuneCartSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhortuneCartTransaction' => 'PhabricatorApplicationTransaction', + 'PhortuneCartTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortuneCartUpdateController' => 'PhortuneCartController', + 'PhortuneCartViewController' => 'PhortuneCartController', + 'PhortuneCartVoidController' => 'PhortuneCartController', + 'PhortuneCharge' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + ), + 'PhortuneChargePHIDType' => 'PhabricatorPHIDType', + 'PhortuneChargeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneChargeSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhortuneChargeTableView' => 'AphrontView', + 'PhortuneConstants' => 'Phobject', + 'PhortuneController' => 'PhabricatorController', + 'PhortuneCreditCardForm' => 'Phobject', + 'PhortuneCurrency' => 'Phobject', + 'PhortuneCurrencySerializer' => 'PhabricatorLiskSerializer', + 'PhortuneCurrencyTestCase' => 'PhabricatorTestCase', + 'PhortuneDAO' => 'PhabricatorLiskDAO', + 'PhortuneDisplayException' => 'Exception', + 'PhortuneErrCode' => 'PhortuneConstants', + 'PhortuneExternalController' => 'PhortuneController', + 'PhortuneExternalOrderController' => 'PhortuneExternalController', + 'PhortuneExternalOverviewController' => 'PhortuneExternalController', + 'PhortuneExternalUnsubscribeController' => 'PhortuneExternalController', + 'PhortuneLandingController' => 'PhortuneController', + 'PhortuneMemberHasAccountEdgeType' => 'PhabricatorEdgeType', + 'PhortuneMemberHasMerchantEdgeType' => 'PhabricatorEdgeType', + 'PhortuneMerchant' => array( + 'PhortuneDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorPolicyInterface', + ), + 'PhortuneMerchantAddManagerController' => 'PhortuneMerchantController', + 'PhortuneMerchantCapability' => 'PhabricatorPolicyCapability', + 'PhortuneMerchantContactInfoTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantController' => 'PhortuneController', + 'PhortuneMerchantDescriptionTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantDetailsController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantEditController' => 'PhortuneController', + 'PhortuneMerchantEditEngine' => 'PhabricatorEditEngine', + 'PhortuneMerchantEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortuneMerchantHasAccountEdgeType' => 'PhabricatorEdgeType', + 'PhortuneMerchantHasMemberEdgeType' => 'PhabricatorEdgeType', + 'PhortuneMerchantInvoiceCreateController' => 'PhortuneMerchantController', + 'PhortuneMerchantInvoiceEmailTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantInvoiceFooterTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantListController' => 'PhortuneController', + 'PhortuneMerchantManagersController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantNameTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantOrderListController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantOrdersController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantOverviewController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantPHIDType' => 'PhabricatorPHIDType', + 'PhortuneMerchantPictureController' => 'PhortuneMerchantController', + 'PhortuneMerchantPictureTransaction' => 'PhortuneMerchantTransactionType', + 'PhortuneMerchantProfileController' => 'PhortuneMerchantController', + 'PhortuneMerchantProviderDisableController' => 'PhortuneMerchantController', + 'PhortuneMerchantProviderEditController' => 'PhortuneMerchantController', + 'PhortuneMerchantProviderViewController' => 'PhortuneMerchantController', + 'PhortuneMerchantProvidersController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneMerchantSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhortuneMerchantSubscriptionListController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantSubscriptionsController' => 'PhortuneMerchantProfileController', + 'PhortuneMerchantTransaction' => 'PhabricatorModularTransaction', + 'PhortuneMerchantTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortuneMerchantTransactionType' => 'PhabricatorModularTransactionType', 'PhortuneMonthYearExpiryControl' => 'AphrontFormControl', - 'PhortuneStripeBaseController' => 'PhabricatorController', - 'PhortuneStripePaymentFormView' => 'AphrontView', - 'PhortuneStripeTestPaymentFormController' => 'PhortuneStripeBaseController', - 'PhrictionActionConstants' => 'PhrictionConstants', + 'PhortuneOrderDescriptionView' => 'AphrontView', + 'PhortuneOrderItemsView' => 'PhortuneOrderView', + 'PhortuneOrderSummaryView' => 'PhortuneOrderView', + 'PhortuneOrderTableView' => 'AphrontView', + 'PhortuneOrderView' => 'AphrontView', + 'PhortunePayPalPaymentProvider' => 'PhortunePaymentProvider', + 'PhortunePaymentMethod' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorPolicyCodexInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhortunePaymentMethodCreateController' => 'PhortuneController', + 'PhortunePaymentMethodDisableController' => 'PhortuneController', + 'PhortunePaymentMethodEditController' => 'PhortuneController', + 'PhortunePaymentMethodEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortunePaymentMethodNameTransaction' => 'PhortunePaymentMethodTransactionType', + 'PhortunePaymentMethodPHIDType' => 'PhabricatorPHIDType', + 'PhortunePaymentMethodPolicyCodex' => 'PhabricatorPolicyCodex', + 'PhortunePaymentMethodQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortunePaymentMethodStatusTransaction' => 'PhortunePaymentMethodTransactionType', + 'PhortunePaymentMethodTransaction' => 'PhabricatorModularTransaction', + 'PhortunePaymentMethodTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortunePaymentMethodTransactionType' => 'PhabricatorModularTransactionType', + 'PhortunePaymentProvider' => 'Phobject', + 'PhortunePaymentProviderConfig' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhortunePaymentProviderConfigEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortunePaymentProviderConfigQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortunePaymentProviderConfigTransaction' => 'PhabricatorApplicationTransaction', + 'PhortunePaymentProviderConfigTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortunePaymentProviderPHIDType' => 'PhabricatorPHIDType', + 'PhortunePaymentProviderTestCase' => 'PhabricatorTestCase', + 'PhortuneProduct' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + ), + 'PhortuneProductImplementation' => 'Phobject', + 'PhortuneProductListController' => 'PhabricatorController', + 'PhortuneProductPHIDType' => 'PhabricatorPHIDType', + 'PhortuneProductQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneProductViewController' => 'PhortuneController', + 'PhortuneProviderActionController' => 'PhortuneController', + 'PhortunePurchase' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + ), + 'PhortunePurchasePHIDType' => 'PhabricatorPHIDType', + 'PhortunePurchaseQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhortuneStripePaymentProvider' => 'PhortunePaymentProvider', + 'PhortuneSubscription' => array( + 'PhortuneDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorExtendedPolicyInterface', + 'PhabricatorPolicyCodexInterface', + 'PhabricatorApplicationTransactionInterface', + ), + 'PhortuneSubscriptionAutopayTransaction' => 'PhortuneSubscriptionTransactionType', + 'PhortuneSubscriptionCart' => 'PhortuneCartImplementation', + 'PhortuneSubscriptionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhortuneSubscriptionImplementation' => 'Phobject', + 'PhortuneSubscriptionPHIDType' => 'PhabricatorPHIDType', + 'PhortuneSubscriptionPolicyCodex' => 'PhabricatorPolicyCodex', + 'PhortuneSubscriptionProduct' => 'PhortuneProductImplementation', + 'PhortuneSubscriptionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhortuneSubscriptionSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhortuneSubscriptionTableView' => 'AphrontView', + 'PhortuneSubscriptionTransaction' => 'PhabricatorModularTransaction', + 'PhortuneSubscriptionTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhortuneSubscriptionTransactionType' => 'PhabricatorModularTransactionType', + 'PhortuneSubscriptionWorker' => 'PhabricatorWorker', + 'PhortuneTestPaymentProvider' => 'PhortunePaymentProvider', + 'PhrequentConduitAPIMethod' => 'ConduitAPIMethod', + 'PhrequentController' => 'PhabricatorController', + 'PhrequentCurtainExtension' => 'PHUICurtainExtension', + 'PhrequentDAO' => 'PhabricatorLiskDAO', + 'PhrequentListController' => 'PhrequentController', + 'PhrequentPopConduitAPIMethod' => 'PhrequentConduitAPIMethod', + 'PhrequentPushConduitAPIMethod' => 'PhrequentConduitAPIMethod', + 'PhrequentSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhrequentTimeBlock' => 'Phobject', + 'PhrequentTimeBlockTestCase' => 'PhabricatorTestCase', + 'PhrequentTimeSlices' => 'Phobject', + 'PhrequentTrackController' => 'PhrequentController', + 'PhrequentTrackingConduitAPIMethod' => 'PhrequentConduitAPIMethod', + 'PhrequentTrackingEditor' => 'PhabricatorEditor', + 'PhrequentUIEventListener' => 'PhabricatorEventListener', + 'PhrequentUserTime' => array( + 'PhrequentDAO', + 'PhabricatorPolicyInterface', + ), + 'PhrequentUserTimeQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhrictionChangeType' => 'PhrictionConstants', - 'PhrictionContent' => 'PhrictionDAO', + 'PhrictionConduitAPIMethod' => 'ConduitAPIMethod', + 'PhrictionConstants' => 'Phobject', + 'PhrictionContent' => array( + 'PhrictionDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorConduitResultInterface', + ), + 'PhrictionContentPHIDType' => 'PhabricatorPHIDType', + 'PhrictionContentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhrictionContentSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhrictionContentSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhrictionContentSearchEngineAttachment' => 'PhabricatorSearchEngineAttachment', 'PhrictionController' => 'PhabricatorController', + 'PhrictionCreateConduitAPIMethod' => 'PhrictionConduitAPIMethod', 'PhrictionDAO' => 'PhabricatorLiskDAO', + 'PhrictionDatasourceEngineExtension' => 'PhabricatorDatasourceEngineExtension', 'PhrictionDeleteController' => 'PhrictionController', 'PhrictionDiffController' => 'PhrictionController', - 'PhrictionDocument' => 'PhrictionDAO', + 'PhrictionDocument' => array( + 'PhrictionDAO', + 'PhabricatorPolicyInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + 'PhabricatorProjectInterface', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorConduitResultInterface', + 'PhabricatorPolicyCodexInterface', + 'PhabricatorSpacesInterface', + ), + 'PhrictionDocumentAuthorHeraldField' => 'PhrictionDocumentHeraldField', + 'PhrictionDocumentContentHeraldField' => 'PhrictionDocumentHeraldField', + 'PhrictionDocumentContentTransaction' => 'PhrictionDocumentEditTransaction', 'PhrictionDocumentController' => 'PhrictionController', - 'PhrictionDocumentPreviewController' => 'PhrictionController', - 'PhrictionDocumentStatus' => 'PhrictionConstants', - 'PhrictionDocumentTestCase' => 'PhabricatorTestCase', + 'PhrictionDocumentDatasource' => 'PhabricatorTypeaheadDatasource', + 'PhrictionDocumentDeleteTransaction' => 'PhrictionDocumentVersionTransaction', + 'PhrictionDocumentDraftTransaction' => 'PhrictionDocumentEditTransaction', + 'PhrictionDocumentEditEngine' => 'PhabricatorEditEngine', + 'PhrictionDocumentEditTransaction' => 'PhrictionDocumentVersionTransaction', + 'PhrictionDocumentFerretEngine' => 'PhabricatorFerretEngine', + 'PhrictionDocumentFulltextEngine' => 'PhabricatorFulltextEngine', + 'PhrictionDocumentHeraldAdapter' => 'HeraldAdapter', + 'PhrictionDocumentHeraldField' => 'HeraldField', + 'PhrictionDocumentHeraldFieldGroup' => 'HeraldFieldGroup', + 'PhrictionDocumentMoveAwayTransaction' => 'PhrictionDocumentVersionTransaction', + 'PhrictionDocumentMoveToTransaction' => 'PhrictionDocumentVersionTransaction', + 'PhrictionDocumentPHIDType' => 'PhabricatorPHIDType', + 'PhrictionDocumentPathHeraldField' => 'PhrictionDocumentHeraldField', + 'PhrictionDocumentPolicyCodex' => 'PhabricatorPolicyCodex', + 'PhrictionDocumentPublishTransaction' => 'PhrictionDocumentTransactionType', + 'PhrictionDocumentPublishedHeraldField' => 'PhrictionDocumentHeraldField', + 'PhrictionDocumentQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhrictionDocumentSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'PhrictionDocumentSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PhrictionDocumentStatus' => 'PhabricatorObjectStatus', + 'PhrictionDocumentTitleHeraldField' => 'PhrictionDocumentHeraldField', + 'PhrictionDocumentTitleTransaction' => 'PhrictionDocumentVersionTransaction', + 'PhrictionDocumentTransactionType' => 'PhabricatorModularTransactionType', + 'PhrictionDocumentVersionTransaction' => 'PhrictionDocumentTransactionType', + 'PhrictionEditConduitAPIMethod' => 'PhrictionConduitAPIMethod', 'PhrictionEditController' => 'PhrictionController', + 'PhrictionEditEngineController' => 'PhrictionController', + 'PhrictionHistoryConduitAPIMethod' => 'PhrictionConduitAPIMethod', 'PhrictionHistoryController' => 'PhrictionController', + 'PhrictionInfoConduitAPIMethod' => 'PhrictionConduitAPIMethod', 'PhrictionListController' => 'PhrictionController', + 'PhrictionMarkupPreviewController' => 'PhabricatorController', + 'PhrictionMoveController' => 'PhrictionController', + 'PhrictionNewController' => 'PhrictionController', + 'PhrictionPublishController' => 'PhrictionController', + 'PhrictionRemarkupRule' => 'PhutilRemarkupRule', + 'PhrictionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PhrictionSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'PhrictionTransaction' => 'PhabricatorModularTransaction', + 'PhrictionTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PhrictionTransactionEditor' => 'PhabricatorApplicationTransactionEditor', + 'PhrictionTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PhutilAPCKeyValueCache' => 'PhutilKeyValueCache', + 'PhutilAmazonAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilAsanaAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilAuthAdapter' => 'Phobject', + 'PhutilAuthConfigurationException' => 'PhutilAuthException', + 'PhutilAuthCredentialException' => 'PhutilAuthException', + 'PhutilAuthException' => 'Exception', + 'PhutilAuthUserAbortedException' => 'PhutilAuthException', + 'PhutilBitbucketAuthAdapter' => 'PhutilOAuth1AuthAdapter', + 'PhutilCLikeCodeSnippetContextFreeGrammar' => 'PhutilCodeSnippetContextFreeGrammar', + 'PhutilCalendarAbsoluteDateTime' => 'PhutilCalendarDateTime', + 'PhutilCalendarContainerNode' => 'PhutilCalendarNode', + 'PhutilCalendarDateTime' => 'Phobject', + 'PhutilCalendarDateTimeTestCase' => 'PhutilTestCase', + 'PhutilCalendarDocumentNode' => 'PhutilCalendarContainerNode', + 'PhutilCalendarDuration' => 'Phobject', + 'PhutilCalendarEventNode' => 'PhutilCalendarContainerNode', + 'PhutilCalendarNode' => 'Phobject', + 'PhutilCalendarProxyDateTime' => 'PhutilCalendarDateTime', + 'PhutilCalendarRawNode' => 'PhutilCalendarContainerNode', + 'PhutilCalendarRecurrenceList' => 'PhutilCalendarRecurrenceSource', + 'PhutilCalendarRecurrenceRule' => 'PhutilCalendarRecurrenceSource', + 'PhutilCalendarRecurrenceRuleTestCase' => 'PhutilTestCase', + 'PhutilCalendarRecurrenceSet' => 'Phobject', + 'PhutilCalendarRecurrenceSource' => 'Phobject', + 'PhutilCalendarRecurrenceTestCase' => 'PhutilTestCase', + 'PhutilCalendarRelativeDateTime' => 'PhutilCalendarProxyDateTime', + 'PhutilCalendarRootNode' => 'PhutilCalendarContainerNode', + 'PhutilCalendarUserNode' => 'PhutilCalendarNode', + 'PhutilCodeSnippetContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhutilConsoleSyntaxHighlighter' => 'Phobject', + 'PhutilContextFreeGrammar' => 'Phobject', + 'PhutilDaemon' => 'Phobject', + 'PhutilDaemonHandle' => 'Phobject', + 'PhutilDaemonOverseer' => 'Phobject', + 'PhutilDaemonOverseerModule' => 'Phobject', + 'PhutilDaemonPool' => 'Phobject', + 'PhutilDefaultSyntaxHighlighter' => 'Phobject', + 'PhutilDefaultSyntaxHighlighterEngine' => 'PhutilSyntaxHighlighterEngine', + 'PhutilDefaultSyntaxHighlighterEnginePygmentsFuture' => 'FutureProxy', + 'PhutilDefaultSyntaxHighlighterEngineTestCase' => 'PhutilTestCase', + 'PhutilDirectoryKeyValueCache' => 'PhutilKeyValueCache', + 'PhutilDisqusAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilDivinerSyntaxHighlighter' => 'Phobject', + 'PhutilEmptyAuthAdapter' => 'PhutilAuthAdapter', + 'PhutilFacebookAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilGitHubAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilGoogleAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilICSParser' => 'Phobject', + 'PhutilICSParserException' => 'Exception', + 'PhutilICSParserTestCase' => 'PhutilTestCase', + 'PhutilICSWriter' => 'Phobject', + 'PhutilICSWriterTestCase' => 'PhutilTestCase', + 'PhutilInRequestKeyValueCache' => 'PhutilKeyValueCache', + 'PhutilInvisibleSyntaxHighlighter' => 'Phobject', + 'PhutilJIRAAuthAdapter' => 'PhutilOAuth1AuthAdapter', + 'PhutilJSONFragmentLexerHighlighterTestCase' => 'PhutilTestCase', + 'PhutilJavaCodeSnippetContextFreeGrammar' => 'PhutilCLikeCodeSnippetContextFreeGrammar', + 'PhutilKeyValueCache' => 'Phobject', + 'PhutilKeyValueCacheNamespace' => 'PhutilKeyValueCacheProxy', + 'PhutilKeyValueCacheProfiler' => 'PhutilKeyValueCacheProxy', + 'PhutilKeyValueCacheProxy' => 'PhutilKeyValueCache', + 'PhutilKeyValueCacheStack' => 'PhutilKeyValueCache', + 'PhutilKeyValueCacheTestCase' => 'PhutilTestCase', + 'PhutilLDAPAuthAdapter' => 'PhutilAuthAdapter', + 'PhutilLexerSyntaxHighlighter' => 'PhutilSyntaxHighlighter', + 'PhutilLipsumContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhutilMarkupEngine' => 'Phobject', + 'PhutilMarkupTestCase' => 'PhutilTestCase', + 'PhutilMemcacheKeyValueCache' => 'PhutilKeyValueCache', + 'PhutilOAuth1AuthAdapter' => 'PhutilAuthAdapter', + 'PhutilOAuthAuthAdapter' => 'PhutilAuthAdapter', + 'PhutilOnDiskKeyValueCache' => 'PhutilKeyValueCache', + 'PhutilPHPCodeSnippetContextFreeGrammar' => 'PhutilCLikeCodeSnippetContextFreeGrammar', + 'PhutilPHPFragmentLexerHighlighterTestCase' => 'PhutilTestCase', + 'PhutilPhabricatorAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilProseDiff' => 'Phobject', + 'PhutilProseDiffTestCase' => 'PhabricatorTestCase', + 'PhutilProseDifferenceEngine' => 'Phobject', + 'PhutilPygmentizeParser' => 'Phobject', + 'PhutilPygmentizeParserTestCase' => 'PhutilTestCase', + 'PhutilPygmentsSyntaxHighlighter' => 'Phobject', + 'PhutilQueryString' => 'Phobject', + 'PhutilRainbowSyntaxHighlighter' => 'Phobject', + 'PhutilRealNameContextFreeGrammar' => 'PhutilContextFreeGrammar', + 'PhutilRemarkupAnchorRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupBlockInterpreter' => 'Phobject', + 'PhutilRemarkupBlockRule' => 'Phobject', + 'PhutilRemarkupBlockStorage' => 'Phobject', + 'PhutilRemarkupBoldRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupCodeBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupDefaultBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupDelRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupDocumentLinkRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupEngine' => 'PhutilMarkupEngine', + 'PhutilRemarkupEngineTestCase' => 'PhutilTestCase', + 'PhutilRemarkupEscapeRemarkupRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupEvalRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupHeaderBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupHighlightRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupHorizontalRuleBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupHyperlinkEngineExtension' => 'Phobject', + 'PhutilRemarkupHyperlinkRef' => 'Phobject', + 'PhutilRemarkupHyperlinkRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupInlineBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupInterpreterBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupItalicRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupLinebreaksRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupListBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupLiteralBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupMonospaceRule' => 'PhutilRemarkupRule', + 'PhutilRemarkupNoteBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupQuotedBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupQuotesBlockRule' => 'PhutilRemarkupQuotedBlockRule', + 'PhutilRemarkupReplyBlockRule' => 'PhutilRemarkupQuotedBlockRule', + 'PhutilRemarkupRule' => 'Phobject', + 'PhutilRemarkupSimpleTableBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupTableBlockRule' => 'PhutilRemarkupBlockRule', + 'PhutilRemarkupTestInterpreterRule' => 'PhutilRemarkupBlockInterpreter', + 'PhutilRemarkupUnderlineRule' => 'PhutilRemarkupRule', + 'PhutilSafeHTML' => 'Phobject', + 'PhutilSafeHTMLTestCase' => 'PhutilTestCase', + 'PhutilSearchQueryCompiler' => 'Phobject', + 'PhutilSearchQueryCompilerSyntaxException' => 'Exception', + 'PhutilSearchQueryCompilerTestCase' => 'PhutilTestCase', + 'PhutilSearchQueryToken' => 'Phobject', + 'PhutilSearchStemmer' => 'Phobject', + 'PhutilSearchStemmerTestCase' => 'PhutilTestCase', + 'PhutilSlackAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilSprite' => 'Phobject', + 'PhutilSpriteSheet' => 'Phobject', + 'PhutilSyntaxHighlighter' => 'Phobject', + 'PhutilSyntaxHighlighterEngine' => 'Phobject', + 'PhutilSyntaxHighlighterException' => 'Exception', + 'PhutilTranslatedHTMLTestCase' => 'PhutilTestCase', + 'PhutilTwitchAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilTwitterAuthAdapter' => 'PhutilOAuth1AuthAdapter', + 'PhutilWordPressAuthAdapter' => 'PhutilOAuthAuthAdapter', + 'PhutilXHPASTSyntaxHighlighter' => 'Phobject', + 'PhutilXHPASTSyntaxHighlighterFuture' => 'FutureProxy', + 'PhutilXHPASTSyntaxHighlighterTestCase' => 'PhutilTestCase', + 'PolicyLockOptionType' => 'PhabricatorConfigJSONOptionType', + 'PonderAddAnswerView' => 'AphrontView', + 'PonderAnswer' => array( + 'PonderDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorDestructibleInterface', + ), + 'PonderAnswerCommentController' => 'PonderController', + 'PonderAnswerContentTransaction' => 'PonderAnswerTransactionType', + 'PonderAnswerEditController' => 'PonderController', + 'PonderAnswerEditor' => 'PonderEditor', + 'PonderAnswerHistoryController' => 'PonderController', + 'PonderAnswerMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PonderAnswerPHIDType' => 'PhabricatorPHIDType', + 'PonderAnswerQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PonderAnswerQuestionIDTransaction' => 'PonderAnswerTransactionType', + 'PonderAnswerReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PonderAnswerSaveController' => 'PonderController', + 'PonderAnswerStatus' => 'PonderConstants', + 'PonderAnswerStatusTransaction' => 'PonderAnswerTransactionType', + 'PonderAnswerTransaction' => 'PhabricatorModularTransaction', + 'PonderAnswerTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PonderAnswerTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PonderAnswerTransactionType' => 'PhabricatorModularTransactionType', + 'PonderAnswerView' => 'AphrontTagView', + 'PonderConstants' => 'Phobject', + 'PonderController' => 'PhabricatorController', + 'PonderDAO' => 'PhabricatorLiskDAO', + 'PonderDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'PonderEditor' => 'PhabricatorApplicationTransactionEditor', + 'PonderFooterView' => 'AphrontTagView', + 'PonderModerateCapability' => 'PhabricatorPolicyCapability', + 'PonderQuestion' => array( + 'PonderDAO', + 'PhabricatorApplicationTransactionInterface', + 'PhabricatorMarkupInterface', + 'PhabricatorSubscribableInterface', + 'PhabricatorFlaggableInterface', + 'PhabricatorPolicyInterface', + 'PhabricatorTokenReceiverInterface', + 'PhabricatorProjectInterface', + 'PhabricatorDestructibleInterface', + 'PhabricatorSpacesInterface', + 'PhabricatorFulltextInterface', + 'PhabricatorFerretInterface', + ), + 'PonderQuestionAnswerTransaction' => 'PonderQuestionTransactionType', + 'PonderQuestionAnswerWikiTransaction' => 'PonderQuestionTransactionType', + 'PonderQuestionCommentController' => 'PonderController', + 'PonderQuestionContentTransaction' => 'PonderQuestionTransactionType', + 'PonderQuestionCreateMailReceiver' => 'PhabricatorApplicationMailReceiver', + 'PonderQuestionEditController' => 'PonderController', + 'PonderQuestionEditEngine' => 'PhabricatorEditEngine', + 'PonderQuestionEditor' => 'PonderEditor', + 'PonderQuestionFerretEngine' => 'PhabricatorFerretEngine', + 'PonderQuestionFulltextEngine' => 'PhabricatorFulltextEngine', + 'PonderQuestionHistoryController' => 'PonderController', + 'PonderQuestionListController' => 'PonderController', + 'PonderQuestionMailReceiver' => 'PhabricatorObjectMailReceiver', + 'PonderQuestionPHIDType' => 'PhabricatorPHIDType', + 'PonderQuestionQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PonderQuestionReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'PonderQuestionSearchEngine' => 'PhabricatorApplicationSearchEngine', + 'PonderQuestionStatus' => 'PonderConstants', + 'PonderQuestionStatusController' => 'PonderController', + 'PonderQuestionStatusTransaction' => 'PonderQuestionTransactionType', + 'PonderQuestionTitleTransaction' => 'PonderQuestionTransactionType', + 'PonderQuestionTransaction' => 'PhabricatorModularTransaction', + 'PonderQuestionTransactionComment' => 'PhabricatorApplicationTransactionComment', + 'PonderQuestionTransactionQuery' => 'PhabricatorApplicationTransactionQuery', + 'PonderQuestionTransactionType' => 'PhabricatorModularTransactionType', + 'PonderQuestionViewController' => 'PonderController', + 'PonderRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'PonderSchemaSpec' => 'PhabricatorConfigSchemaSpec', + 'ProjectAddProjectsEmailCommand' => 'MetaMTAEmailTransactionCommand', + 'ProjectBoardTaskCard' => 'Phobject', + 'ProjectCanLockProjectsCapability' => 'PhabricatorPolicyCapability', + 'ProjectColumnSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'ProjectConduitAPIMethod' => 'ConduitAPIMethod', + 'ProjectCreateConduitAPIMethod' => 'ProjectConduitAPIMethod', + 'ProjectCreateProjectsCapability' => 'PhabricatorPolicyCapability', + 'ProjectDatasourceEngineExtension' => 'PhabricatorDatasourceEngineExtension', + 'ProjectDefaultEditCapability' => 'PhabricatorPolicyCapability', + 'ProjectDefaultJoinCapability' => 'PhabricatorPolicyCapability', + 'ProjectDefaultViewCapability' => 'PhabricatorPolicyCapability', + 'ProjectEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'ProjectQueryConduitAPIMethod' => 'ProjectConduitAPIMethod', + 'ProjectRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'ProjectRemarkupRuleTestCase' => 'PhabricatorTestCase', + 'ProjectReplyHandler' => 'PhabricatorApplicationTransactionReplyHandler', + 'ProjectSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', 'QueryFormattingTestCase' => 'PhabricatorTestCase', + 'QueryFuture' => 'Future', + 'RemarkupProcessConduitAPIMethod' => 'ConduitAPIMethod', + 'RemarkupValue' => 'Phobject', + 'RepositoryConduitAPIMethod' => 'ConduitAPIMethod', + 'RepositoryQueryConduitAPIMethod' => 'RepositoryConduitAPIMethod', + 'ShellLogView' => 'AphrontView', + 'SlowvoteConduitAPIMethod' => 'ConduitAPIMethod', + 'SlowvoteEmbedView' => 'AphrontView', + 'SlowvoteInfoConduitAPIMethod' => 'SlowvoteConduitAPIMethod', + 'SlowvotePollResponseVisibility' => 'Phobject', + 'SlowvotePollStatus' => 'Phobject', + 'SlowvotePollVotingMethod' => 'Phobject', + 'SlowvoteRemarkupRule' => 'PhabricatorObjectRemarkupRule', + 'SlowvoteSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'SubscriptionListDialogBuilder' => 'Phobject', + 'SubscriptionListStringBuilder' => 'Phobject', + 'TokenConduitAPIMethod' => 'ConduitAPIMethod', + 'TokenGiveConduitAPIMethod' => 'TokenConduitAPIMethod', + 'TokenGivenConduitAPIMethod' => 'TokenConduitAPIMethod', + 'TokenQueryConduitAPIMethod' => 'TokenConduitAPIMethod', + 'TransactionSearchConduitAPIMethod' => 'ConduitAPIMethod', + 'UserConduitAPIMethod' => 'ConduitAPIMethod', + 'UserDisableConduitAPIMethod' => 'UserConduitAPIMethod', + 'UserEditConduitAPIMethod' => 'PhabricatorEditEngineAPIMethod', + 'UserEnableConduitAPIMethod' => 'UserConduitAPIMethod', + 'UserFindConduitAPIMethod' => 'UserConduitAPIMethod', + 'UserQueryConduitAPIMethod' => 'UserConduitAPIMethod', + 'UserSearchConduitAPIMethod' => 'PhabricatorSearchEngineAPIMethod', + 'UserWhoAmIConduitAPIMethod' => 'UserConduitAPIMethod', ), )); diff --git a/src/__tests__/PhabricatorCelerityTestCase.php b/src/__tests__/PhabricatorCelerityTestCase.php new file mode 100644 index 0000000000..a91b214502 --- /dev/null +++ b/src/__tests__/PhabricatorCelerityTestCase.php @@ -0,0 +1,36 @@ +generate(); + + // Don't actually compare these values with assertEqual(), since the diff + // isn't helpful and is often enormously huge. + + $maps_are_identical = + ($new_map->getNameMap() === $old_map->getNameMap()) && + ($new_map->getSymbolMap() === $old_map->getSymbolMap()) && + ($new_map->getRequiresMap() === $old_map->getRequiresMap()) && + ($new_map->getPackageMap() === $old_map->getPackageMap()); + + $this->assertTrue( + $maps_are_identical, + pht( + 'When this test fails, it means the Celerity resource map is out '. + 'of date. Run `%s` to rebuild it.', + 'bin/celerity map')); + } + } + +} diff --git a/src/__tests__/PhabricatorConduitTestCase.php b/src/__tests__/PhabricatorConduitTestCase.php new file mode 100644 index 0000000000..3a9c6911bc --- /dev/null +++ b/src/__tests__/PhabricatorConduitTestCase.php @@ -0,0 +1,19 @@ +setAncestorClass('ConduitAPIMethod') + ->execute(); + + // We're just looking for a side effect of ConduitCall construction + // here: it will throw if any methods define reserved parameter names. + + foreach ($methods as $method) { + new ConduitCall($method->getAPIMethodName(), array()); + } + + $this->assertTrue(true); + } +} diff --git a/src/__tests__/PhabricatorInfrastructureTestCase.php b/src/__tests__/PhabricatorInfrastructureTestCase.php new file mode 100644 index 0000000000..19d034eb34 --- /dev/null +++ b/src/__tests__/PhabricatorInfrastructureTestCase.php @@ -0,0 +1,42 @@ + true, + ); + } + + public function testApplicationsInstalled() { + $all = PhabricatorApplication::getAllApplications(); + $installed = PhabricatorApplication::getAllInstalledApplications(); + + $this->assertEqual( + count($all), + count($installed), + pht('In test cases, all applications should default to installed.')); + } + + public function testRejectMySQLNonUTF8Queries() { + $table = new HarbormasterScratchTable(); + $conn_r = $table->establishConnection('w'); + + $snowman = "\xE2\x98\x83"; + $invalid = "\xE6\x9D"; + + qsprintf($conn_r, 'SELECT %B', $snowman); + qsprintf($conn_r, 'SELECT %s', $snowman); + qsprintf($conn_r, 'SELECT %B', $invalid); + + $caught = null; + try { + qsprintf($conn_r, 'SELECT %s', $invalid); + } catch (AphrontCharacterSetQueryException $ex) { + $caught = $ex; + } + + $this->assertTrue($caught instanceof AphrontCharacterSetQueryException); + } + +} diff --git a/src/__tests__/PhabricatorLibraryTestCase.php b/src/__tests__/PhabricatorLibraryTestCase.php new file mode 100644 index 0000000000..61ffdb00a5 --- /dev/null +++ b/src/__tests__/PhabricatorLibraryTestCase.php @@ -0,0 +1,3 @@ +delegatingController = $delegating_controller; + return $this; + } + + public function getDelegatingController() { + return $this->delegatingController; + } public function willBeginExecution() { return; @@ -31,18 +24,84 @@ public function willProcessRequest(array $uri_data) { return; } - abstract public function processRequest(); + public function handleRequest(AphrontRequest $request) { + if (method_exists($this, 'processRequest')) { + return $this->processRequest(); + } + + throw new PhutilMethodNotImplementedException( + pht( + 'Controllers must implement either %s (recommended) '. + 'or %s (deprecated).', + 'handleRequest()', + 'processRequest()')); + } + + public function willSendResponse(AphrontResponse $response) { + return $response; + } - final public function __construct(AphrontRequest $request) { + final public function setRequest(AphrontRequest $request) { $this->request = $request; + return $this; } final public function getRequest() { + if (!$this->request) { + throw new PhutilInvalidStateException('setRequest'); + } return $this->request; } + final public function getViewer() { + return $this->getRequest()->getViewer(); + } + final public function delegateToController(AphrontController $controller) { - return $controller->processRequest(); + $request = $this->getRequest(); + + $controller->setDelegatingController($this); + $controller->setRequest($request); + + $application = $this->getCurrentApplication(); + if ($application) { + $controller->setCurrentApplication($application); + } + + return $controller->handleRequest($request); + } + + final public function setCurrentApplication( + PhabricatorApplication $current_application) { + + $this->currentApplication = $current_application; + return $this; + } + + final public function getCurrentApplication() { + return $this->currentApplication; + } + + public function getDefaultResourceSource() { + throw new PhutilMethodNotImplementedException( + pht( + 'A Controller must implement %s before you can invoke %s or %s.', + 'getDefaultResourceSource()', + 'requireResource()', + 'initBehavior()')); + } + + public function requireResource($symbol) { + $response = CelerityAPI::getStaticResourceResponse(); + $response->requireResource($symbol, $this->getDefaultResourceSource()); + return $this; + } + + public function initBehavior($name, $config = array()) { + Javelin::initBehavior( + $name, + $config, + $this->getDefaultResourceSource()); } } diff --git a/src/aphront/AphrontRequest.php b/src/aphront/AphrontRequest.php index 56d424ef36..56d9e85cc5 100644 --- a/src/aphront/AphrontRequest.php +++ b/src/aphront/AphrontRequest.php @@ -1,31 +1,14 @@ host = $host; $this->path = $path; } - final public function setApplicationConfiguration( + public function setURIMap(array $uri_data) { + $this->uriData = $uri_data; + return $this; + } + + public function getURIMap() { + return $this->uriData; + } + + public function getURIData($key, $default = null) { + return idx($this->uriData, $key, $default); + } + + /** + * Read line range parameter data from the request. + * + * Applications like Paste, Diffusion, and Harbormaster use "$12-14" in the + * URI to allow users to link to particular lines. + * + * @param string URI data key to pull line range information from. + * @param int|null Maximum length of the range. + * @return null|pair Null, or beginning and end of the range. + */ + public function getURILineRange($key, $limit) { + $range = $this->getURIData($key); + return self::parseURILineRange($range, $limit); + } + + public static function parseURILineRange($range, $limit) { + if ($range === null || !strlen($range)) { + return null; + } + + $range = explode('-', $range, 2); + + foreach ($range as $key => $value) { + $value = (int)$value; + if (!$value) { + // If either value is "0", discard the range. + return null; + } + $range[$key] = $value; + } + + // If the range is like "$10", treat it like "$10-10". + if (count($range) == 1) { + $range[] = head($range); + } + + // If the range is "$7-5", treat it like "$5-7". + if ($range[1] < $range[0]) { + $range = array_reverse($range); + } + + // If the user specified something like "$1-999999999" and we have a limit, + // clamp it to a more reasonable range. + if ($limit !== null) { + if ($range[1] - $range[0] > $limit) { + $range[1] = $range[0] + $limit; + } + } + + return $range; + } + + public function setApplicationConfiguration( $application_configuration) { $this->applicationConfiguration = $application_configuration; return $this; } - final public function getApplicationConfiguration() { + public function getApplicationConfiguration() { return $this->applicationConfiguration; } - final public function getPath() { + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { return $this->path; } - final public function getHost() { - return $this->host; + public function getHost() { + // The "Host" header may include a port number, or may be a malicious + // header in the form "realdomain.com:ignored@evil.com". Invoke the full + // parser to extract the real domain correctly. See here for coverage of + // a similar issue in Django: + // + // https://www.djangoproject.com/weblog/2012/oct/17/security/ + $uri = new PhutilURI('http://'.$this->host); + return $uri->getDomain(); + } + + public function setSite(AphrontSite $site) { + $this->site = $site; + return $this; + } + + public function getSite() { + return $this->site; + } + + public function setController(AphrontController $controller) { + $this->controller = $controller; + return $this; + } + + public function getController() { + return $this->controller; } @@ -71,7 +157,7 @@ final public function getHost() { /** * @task data */ - final public function setRequestData(array $request_data) { + public function setRequestData(array $request_data) { $this->requestData = $request_data; return $this; } @@ -80,7 +166,7 @@ final public function setRequestData(array $request_data) { /** * @task data */ - final public function getRequestData() { + public function getRequestData() { return $this->requestData; } @@ -88,8 +174,13 @@ final public function getRequestData() { /** * @task data */ - final public function getInt($name, $default = null) { + public function getInt($name, $default = null) { if (isset($this->requestData[$name])) { + // Converting from array to int is "undefined". Don't rely on whatever + // PHP decides to do. + if (is_array($this->requestData[$name])) { + return $default; + } return (int)$this->requestData[$name]; } else { return $default; @@ -100,7 +191,7 @@ final public function getInt($name, $default = null) { /** * @task data */ - final public function getBool($name, $default = null) { + public function getBool($name, $default = null) { if (isset($this->requestData[$name])) { if ($this->requestData[$name] === 'true') { return true; @@ -118,7 +209,7 @@ final public function getBool($name, $default = null) { /** * @task data */ - final public function getStr($name, $default = null) { + public function getStr($name, $default = null) { if (isset($this->requestData[$name])) { $str = (string)$this->requestData[$name]; // Normalize newline craziness. @@ -136,7 +227,44 @@ final public function getStr($name, $default = null) { /** * @task data */ - final public function getArr($name, $default = array()) { + public function getJSONMap($name, $default = array()) { + if (!isset($this->requestData[$name])) { + return $default; + } + + $raw_data = phutil_string_cast($this->requestData[$name]); + $raw_data = trim($raw_data); + if (!strlen($raw_data)) { + return $default; + } + + if ($raw_data[0] !== '{') { + throw new Exception( + pht( + 'Request parameter "%s" is not formatted properly. Expected a '. + 'JSON object, but value does not start with "{".', + $name)); + } + + try { + $json_object = phutil_json_decode($raw_data); + } catch (PhutilJSONParserException $ex) { + throw new Exception( + pht( + 'Request parameter "%s" is not formatted properly. Expected a '. + 'JSON object, but encountered a syntax error: %s.', + $name, + $ex->getMessage())); + } + + return $json_object; + } + + + /** + * @task data + */ + public function getArr($name, $default = array()) { if (isset($this->requestData[$name]) && is_array($this->requestData[$name])) { return $this->requestData[$name]; @@ -149,15 +277,12 @@ final public function getArr($name, $default = array()) { /** * @task data */ - final public function getStrList($name, $default = array()) { + public function getStrList($name, $default = array()) { if (!isset($this->requestData[$name])) { return $default; } $list = $this->getStr($name); - $list = preg_split('/[\s,]/', $list); - $list = array_map('trim', $list); - $list = array_filter($list, 'strlen'); - $list = array_values($list); + $list = preg_split('/[\s,]+/', $list, $limit = -1, PREG_SPLIT_NO_EMPTY); return $list; } @@ -165,23 +290,36 @@ final public function getStrList($name, $default = array()) { /** * @task data */ - final public function getExists($name) { + public function getExists($name) { return array_key_exists($name, $this->requestData); } - final public function isHTTPPost() { + public function getFileExists($name) { + return isset($_FILES[$name]) && + (idx($_FILES[$name], 'error') !== UPLOAD_ERR_NO_FILE); + } + + public function isHTTPGet() { + return ($_SERVER['REQUEST_METHOD'] == 'GET'); + } + + public function isHTTPPost() { return ($_SERVER['REQUEST_METHOD'] == 'POST'); } - final public function isAjax() { - return $this->getExists(self::TYPE_AJAX); + public function isAjax() { + return $this->getExists(self::TYPE_AJAX) && !$this->isQuicksand(); + } + + public function isWorkflow() { + return $this->getExists(self::TYPE_WORKFLOW) && !$this->isQuicksand(); } - final public function isJavelinWorkflow() { - return $this->getExists(self::TYPE_WORKFLOW); + public function isQuicksand() { + return $this->getExists(self::TYPE_QUICKSAND); } - final public function isConduit() { + public function isConduit() { return $this->getExists(self::TYPE_CONDUIT); } @@ -193,22 +331,18 @@ public static function getCSRFHeaderName() { return 'X-Phabricator-Csrf'; } - final public function validateCSRF() { + public static function getViaHeaderName() { + return 'X-Phabricator-Via'; + } + + public function validateCSRF() { $token_name = self::getCSRFTokenName(); $token = $this->getStr($token_name); // No token in the request, check the HTTP header which is added for Ajax // requests. if (empty($token)) { - - // PHP mangles HTTP headers by uppercasing them and replacing hyphens with - // underscores, then prepending 'HTTP_'. - $php_index = self::getCSRFHeaderName(); - $php_index = strtoupper($php_index); - $php_index = str_replace('-', '_', $php_index); - $php_index = 'HTTP_'.$php_index; - - $token = idx($_SERVER, $php_index); + $token = self::getHTTPHeader(self::getCSRFHeaderName()); } $valid = $this->getUser()->validateCSRFToken($token); @@ -217,38 +351,67 @@ final public function validateCSRF() { // Add some diagnostic details so we can figure out if some CSRF issues // are JS problems or people accessing Ajax URIs directly with their // browsers. - if ($token) { - $token_info = "with an invalid CSRF token"; + $info = array(); + + $info[] = pht( + 'You are trying to save some data to permanent storage, but the '. + 'request your browser made included an incorrect token. Reload the '. + 'page and try again. You may need to clear your cookies.'); + + if ($this->isAjax()) { + $info[] = pht('This was an Ajax request.'); } else { - $token_info = "without a CSRF token"; + $info[] = pht('This was a Web request.'); } - if ($this->isAjax()) { - $more_info = "(This was an Ajax request, {$token_info}.)"; + if ($token) { + $info[] = pht('This request had an invalid CSRF token.'); } else { - $more_info = "(This was a web request, {$token_info}.)"; + $info[] = pht('This request had no CSRF token.'); + } + + // Give a more detailed explanation of how to avoid the exception + // in developer mode. + if (PhabricatorEnv::getEnvConfig('phabricator.developer-mode')) { + // TODO: Clean this up, see T1921. + $info[] = pht( + "To avoid this error, use %s to construct forms. If you are already ". + "using %s, make sure the form 'action' uses a relative URI (i.e., ". + "begins with a '%s'). Forms using absolute URIs do not include CSRF ". + "tokens, to prevent leaking tokens to external sites.\n\n". + "If this page performs writes which do not require CSRF protection ". + "(usually, filling caches or logging), you can use %s to ". + "temporarily bypass CSRF protection while writing. You should use ". + "this only for writes which can not be protected with normal CSRF ". + "mechanisms.\n\n". + "Some UI elements (like %s) also have methods which will allow you ". + "to render links as forms (like %s).", + 'phabricator_form()', + 'phabricator_form()', + '/', + 'AphrontWriteGuard::beginScopedUnguardedWrites()', + 'PhabricatorActionListView', + 'setRenderAsForm(true)'); } + $message = implode("\n", $info); + // This should only be able to happen if you load a form, pull your // internet for 6 hours, and then reconnect and immediately submit, // but give the user some indication of what happened since the workflow // is incredibly confusing otherwise. - throw new AphrontCSRFException( - "The form you just submitted did not include a valid CSRF token. ". - "This token is a technical security measure which prevents a ". - "certain type of login hijacking attack. However, the token can ". - "become invalid if you leave a page open for more than six hours ". - "without a connection to the internet. To fix this problem: reload ". - "the page, and then resubmit it. All data inserted to the form will ". - "be lost in some browsers so copy them somewhere before reloading.\n\n". - $more_info); + throw new AphrontMalformedRequestException( + pht('Invalid Request (CSRF)'), + $message, + true); } return true; } - final public function isFormPost() { + public function isFormPost() { $post = $this->getExists(self::TYPE_FORM) && + !$this->getExists(self::TYPE_HISEC) && $this->isHTTPPost(); if (!$post) { @@ -258,74 +421,549 @@ final public function isFormPost() { return $this->validateCSRF(); } - final public function getCookie($name, $default = null) { - return idx($_COOKIE, $name, $default); + public function hasCSRF() { + try { + $this->validateCSRF(); + return true; + } catch (AphrontMalformedRequestException $ex) { + return false; + } } - final public function clearCookie($name) { - $this->setCookie($name, '', time() - (60 * 60 * 24 * 30)); + public function isFormOrHisecPost() { + $post = $this->getExists(self::TYPE_FORM) && + $this->isHTTPPost(); + + if (!$post) { + return false; + } + + return $this->validateCSRF(); } - final public function setCookie($name, $value, $expire = null) { - // Ensure cookies are only set on the configured domain. + public function setCookiePrefix($prefix) { + $this->cookiePrefix = $prefix; + return $this; + } + private function getPrefixedCookieName($name) { + if ($this->cookiePrefix !== null && strlen($this->cookiePrefix)) { + return $this->cookiePrefix.'_'.$name; + } + return $name; + } + + public function getCookie($name, $default = null) { + $name = $this->getPrefixedCookieName($name); + $value = idx($_COOKIE, $name, $default); + + // Internally, PHP deletes cookies by setting them to the value 'deleted' + // with an expiration date in the past. + + // At least in Safari, the browser may send this cookie anyway in some + // circumstances. After logging out, the 302'd GET to /login/ consistently + // includes deleted cookies on my local install. If a cookie value is + // literally 'deleted', pretend it does not exist. + + if ($value === 'deleted') { + return null; + } + + return $value; + } + + public function clearCookie($name) { + $this->setCookieWithExpiration($name, '', time() - (60 * 60 * 24 * 30)); + unset($_COOKIE[$name]); + } + + /** + * Get the domain which cookies should be set on for this request, or null + * if the request does not correspond to a valid cookie domain. + * + * @return PhutilURI|null Domain URI, or null if no valid domain exists. + * + * @task cookie + */ + private function getCookieDomainURI() { + if (PhabricatorEnv::getEnvConfig('security.require-https') && + !$this->isHTTPS()) { + return null; + } + + $host = $this->getHost(); + + // If there's no base domain configured, just use whatever the request + // domain is. This makes setup easier, and we'll tell administrators to + // configure a base domain during the setup process. $base_uri = PhabricatorEnv::getEnvConfig('phabricator.base-uri'); - $base_uri = new PhutilURI($base_uri); + if ($base_uri === null || !strlen($base_uri)) { + return new PhutilURI('http://'.$host.'/'); + } - $base_domain = $base_uri->getDomain(); - $base_protocol = $base_uri->getProtocol(); + $alternates = PhabricatorEnv::getEnvConfig('phabricator.allowed-uris'); + $allowed_uris = array_merge( + array($base_uri), + $alternates); - // The "Host" header may include a port number; if so, ignore it. We can't - // use PhutilURI since there's no URI scheme. - list($actual_host) = explode(':', $this->getHost(), 2); - if ($base_domain != $actual_host) { - throw new Exception( - "This install of Phabricator is configured as '{$base_domain}' but ". - "you are accessing it via '{$actual_host}'. Access Phabricator via ". - "the primary configured domain."); + foreach ($allowed_uris as $allowed_uri) { + $uri = new PhutilURI($allowed_uri); + if ($uri->getDomain() == $host) { + return $uri; + } } - if ($expire === null) { - $expire = time() + (60 * 60 * 24 * 365 * 5); + return null; + } + + /** + * Determine if security policy rules will allow cookies to be set when + * responding to the request. + * + * @return bool True if setCookie() will succeed. If this method returns + * false, setCookie() will throw. + * + * @task cookie + */ + public function canSetCookies() { + return (bool)$this->getCookieDomainURI(); + } + + + /** + * Set a cookie which does not expire for a long time. + * + * To set a temporary cookie, see @{method:setTemporaryCookie}. + * + * @param string Cookie name. + * @param string Cookie value. + * @return this + * @task cookie + */ + public function setCookie($name, $value) { + $far_future = time() + (60 * 60 * 24 * 365 * 5); + return $this->setCookieWithExpiration($name, $value, $far_future); + } + + + /** + * Set a cookie which expires soon. + * + * To set a durable cookie, see @{method:setCookie}. + * + * @param string Cookie name. + * @param string Cookie value. + * @return this + * @task cookie + */ + public function setTemporaryCookie($name, $value) { + return $this->setCookieWithExpiration($name, $value, 0); + } + + + /** + * Set a cookie with a given expiration policy. + * + * @param string Cookie name. + * @param string Cookie value. + * @param int Epoch timestamp for cookie expiration. + * @return this + * @task cookie + */ + private function setCookieWithExpiration( + $name, + $value, + $expire) { + + $is_secure = false; + + $base_domain_uri = $this->getCookieDomainURI(); + if (!$base_domain_uri) { + $configured_as = PhabricatorEnv::getEnvConfig('phabricator.base-uri'); + $accessed_as = $this->getHost(); + + throw new AphrontMalformedRequestException( + pht('Bad Host Header'), + pht( + 'This server is configured as "%s", but you are using the domain '. + 'name "%s" to access a page which is trying to set a cookie. '. + 'Access this service on the configured primary domain or a '. + 'configured alternate domain. Cookies will not be set on other '. + 'domains for security reasons.', + $configured_as, + $accessed_as), + true); } - $is_secure = ($base_protocol == 'https'); + $base_domain = $base_domain_uri->getDomain(); + $is_secure = ($base_domain_uri->getProtocol() == 'https'); + + $name = $this->getPrefixedCookieName($name); + + if (php_sapi_name() == 'cli') { + // Do nothing, to avoid triggering "Cannot modify header information" + // warnings. - setcookie( - $name, - $value, - $expire, - $path = '/', - $base_domain, - $is_secure, - $http_only = true); + // TODO: This is effectively a test for whether we're running in a unit + // test or not. Move this actual call to HTTPSink? + } else { + setcookie( + $name, + $value, + $expire, + $path = '/', + $base_domain, + $is_secure, + $http_only = true); + } + + $_COOKIE[$name] = $value; return $this; } - final public function setUser($user) { + public function setUser($user) { $this->user = $user; return $this; } - final public function getUser() { + public function getUser() { + return $this->user; + } + + public function getViewer() { return $this->user; } - final public function getRequestURI() { - $get = $_GET; - unset($get['__path__']); - $path = phutil_escape_uri($this->getPath()); - return id(new PhutilURI($path))->setQueryParams($get); + public function getRequestURI() { + $uri_path = phutil_escape_uri($this->getPath()); + $uri_query = idx($_SERVER, 'QUERY_STRING', ''); + + return id(new PhutilURI($uri_path.'?'.$uri_query)) + ->removeQueryParam('__path__'); + } + + public function getAbsoluteRequestURI() { + $uri = $this->getRequestURI(); + $uri->setDomain($this->getHost()); + + if ($this->isHTTPS()) { + $protocol = 'https'; + } else { + $protocol = 'http'; + } + + $uri->setProtocol($protocol); + + // If the request used a nonstandard port, preserve it while building the + // absolute URI. + + // First, get the default port for the request protocol. + $default_port = id(new PhutilURI($protocol.'://example.com/')) + ->getPortWithProtocolDefault(); + + // NOTE: See note in getHost() about malicious "Host" headers. This + // construction defuses some obscure potential attacks. + $port = id(new PhutilURI($protocol.'://'.$this->host)) + ->getPort(); + + if (($port !== null) && ($port !== $default_port)) { + $uri->setPort($port); + } + + return $uri; } - final public function isDialogFormPost() { + public function isDialogFormPost() { return $this->isFormPost() && $this->getStr('__dialog__'); } - final public function getRemoteAddr() { - return $_SERVER['REMOTE_ADDR']; + public function getRemoteAddress() { + $address = PhabricatorEnv::getRemoteAddress(); + + if (!$address) { + return null; + } + + return $address->getAddress(); + } + + public function isHTTPS() { + if (empty($_SERVER['HTTPS'])) { + return false; + } + if (!strcasecmp($_SERVER['HTTPS'], 'off')) { + return false; + } + return true; + } + + public function isContinueRequest() { + return $this->isFormOrHisecPost() && $this->getStr('__continue__'); + } + + public function isPreviewRequest() { + return $this->isFormPost() && $this->getStr('__preview__'); + } + + /** + * Get application request parameters in a flattened form suitable for + * inclusion in an HTTP request, excluding parameters with special meanings. + * This is primarily useful if you want to ask the user for more input and + * then resubmit their request. + * + * @return dict Original request parameters. + */ + public function getPassthroughRequestParameters($include_quicksand = false) { + return self::flattenData( + $this->getPassthroughRequestData($include_quicksand)); + } + + /** + * Get request data other than "magic" parameters. + * + * @return dict Request data, with magic filtered out. + */ + public function getPassthroughRequestData($include_quicksand = false) { + $data = $this->getRequestData(); + + // Remove magic parameters like __dialog__ and __ajax__. + foreach ($data as $key => $value) { + if ($include_quicksand && $key == self::TYPE_QUICKSAND) { + continue; + } + if (!strncmp($key, '__', 2)) { + unset($data[$key]); + } + } + + return $data; + } + + + /** + * Flatten an array of key-value pairs (possibly including arrays as values) + * into a list of key-value pairs suitable for submitting via HTTP request + * (with arrays flattened). + * + * @param dict Data to flatten. + * @return dict Flat data suitable for inclusion in an HTTP + * request. + */ + public static function flattenData(array $data) { + $result = array(); + foreach ($data as $key => $value) { + if (is_array($value)) { + foreach (self::flattenData($value) as $fkey => $fvalue) { + $fkey = '['.preg_replace('/(?=\[)|$/', ']', $fkey, $limit = 1); + $result[$key.$fkey] = $fvalue; + } + } else { + $result[$key] = (string)$value; + } + } + + ksort($result); + + return $result; + } + + + /** + * Read the value of an HTTP header from `$_SERVER`, or a similar datasource. + * + * This function accepts a canonical header name, like `"Accept-Encoding"`, + * and looks up the appropriate value in `$_SERVER` (in this case, + * `"HTTP_ACCEPT_ENCODING"`). + * + * @param string Canonical header name, like `"Accept-Encoding"`. + * @param wild Default value to return if header is not present. + * @param array? Read this instead of `$_SERVER`. + * @return string|wild Header value if present, or `$default` if not. + */ + public static function getHTTPHeader($name, $default = null, $data = null) { + // PHP mangles HTTP headers by uppercasing them and replacing hyphens with + // underscores, then prepending 'HTTP_'. + $php_index = strtoupper($name); + $php_index = str_replace('-', '_', $php_index); + + $try_names = array(); + + $try_names[] = 'HTTP_'.$php_index; + if ($php_index == 'CONTENT_TYPE' || $php_index == 'CONTENT_LENGTH') { + // These headers may be available under alternate names. See + // http://www.php.net/manual/en/reserved.variables.server.php#110763 + $try_names[] = $php_index; + } + + if ($data === null) { + $data = $_SERVER; + } + + foreach ($try_names as $try_name) { + if (array_key_exists($try_name, $data)) { + return $data[$try_name]; + } + } + + return $default; + } + + +/* -( Working With a Phabricator Cluster )--------------------------------- */ + + + /** + * Is this a proxied request originating from within the Phabricator cluster? + * + * IMPORTANT: This means the request is dangerous! + * + * These requests are **more dangerous** than normal requests (they can not + * be safely proxied, because proxying them may cause a loop). Cluster + * requests are not guaranteed to come from a trusted source, and should + * never be treated as safer than normal requests. They are strictly less + * safe. + */ + public function isProxiedClusterRequest() { + return (bool)self::getHTTPHeader('X-Phabricator-Cluster'); + } + + + /** + * Build a new @{class:HTTPSFuture} which proxies this request to another + * node in the cluster. + * + * IMPORTANT: This is very dangerous! + * + * The future forwards authentication information present in the request. + * Proxied requests must only be sent to trusted hosts. (We attempt to + * enforce this.) + * + * This is not a general-purpose proxying method; it is a specialized + * method with niche applications and severe security implications. + * + * @param string URI identifying the host we are proxying the request to. + * @return HTTPSFuture New proxy future. + * + * @phutil-external-symbol class PhabricatorStartup + */ + public function newClusterProxyFuture($uri) { + $uri = new PhutilURI($uri); + + $domain = $uri->getDomain(); + $ip = gethostbyname($domain); + if (!$ip) { + throw new Exception( + pht( + 'Unable to resolve domain "%s"!', + $domain)); + } + + if (!PhabricatorEnv::isClusterAddress($ip)) { + throw new Exception( + pht( + 'Refusing to proxy a request to IP address ("%s") which is not '. + 'in the cluster address block (this address was derived by '. + 'resolving the domain "%s").', + $ip, + $domain)); + } + + $uri->setPath($this->getPath()); + $uri->removeAllQueryParams(); + foreach (self::flattenData($_GET) as $query_key => $query_value) { + $uri->appendQueryParam($query_key, $query_value); + } + + $input = PhabricatorStartup::getRawInput(); + + $future = id(new HTTPSFuture($uri)) + ->addHeader('Host', self::getHost()) + ->addHeader('X-Phabricator-Cluster', true) + ->setMethod($_SERVER['REQUEST_METHOD']) + ->write($input); + + if (isset($_SERVER['PHP_AUTH_USER'])) { + $future->setHTTPBasicAuthCredentials( + $_SERVER['PHP_AUTH_USER'], + new PhutilOpaqueEnvelope(idx($_SERVER, 'PHP_AUTH_PW', ''))); + } + + $headers = array(); + $seen = array(); + + // NOTE: apache_request_headers() might provide a nicer way to do this, + // but isn't available under FCGI until PHP 5.4.0. + foreach ($_SERVER as $key => $value) { + if (!preg_match('/^HTTP_/', $key)) { + continue; + } + + // Unmangle the header as best we can. + $key = substr($key, strlen('HTTP_')); + $key = str_replace('_', ' ', $key); + $key = strtolower($key); + $key = ucwords($key); + $key = str_replace(' ', '-', $key); + + // By default, do not forward headers. + $should_forward = false; + + // Forward "X-Hgarg-..." headers. + if (preg_match('/^X-Hgarg-/', $key)) { + $should_forward = true; + } + + if ($should_forward) { + $headers[] = array($key, $value); + $seen[$key] = true; + } + } + + // In some situations, this may not be mapped into the HTTP_X constants. + // CONTENT_LENGTH is similarly affected, but we trust cURL to take care + // of that if it matters, since we're handing off a request body. + if (empty($seen['Content-Type'])) { + if (isset($_SERVER['CONTENT_TYPE'])) { + $headers[] = array('Content-Type', $_SERVER['CONTENT_TYPE']); + } + } + + foreach ($headers as $header) { + list($key, $value) = $header; + switch ($key) { + case 'Host': + case 'Authorization': + // Don't forward these headers, we've already handled them elsewhere. + unset($headers[$key]); + break; + default: + break; + } + } + + foreach ($headers as $header) { + list($key, $value) = $header; + $future->addHeader($key, $value); + } + + return $future; + } + + public function updateEphemeralCookies() { + $submit_cookie = PhabricatorCookies::COOKIE_SUBMIT; + + $submit_key = $this->getCookie($submit_cookie); + if ($submit_key !== null && strlen($submit_key)) { + $this->clearCookie($submit_cookie); + $this->submitKey = $submit_key; + } + + } + + public function getSubmitKey() { + return $this->submitKey; } } diff --git a/src/aphront/AphrontURIMapper.php b/src/aphront/AphrontURIMapper.php deleted file mode 100644 index bdda98bdf6..0000000000 --- a/src/aphront/AphrontURIMapper.php +++ /dev/null @@ -1,68 +0,0 @@ -map = $map; - } - - final public function mapPath($path) { - $map = $this->map; - foreach ($map as $rule => $value) { - list($controller, $data) = $this->tryRule($rule, $value, $path); - if ($controller) { - foreach ($data as $k => $v) { - if (is_numeric($k)) { - unset($data[$k]); - } - } - return array($controller, $data); - } - } - - return array(null, null); - } - - final private function tryRule($rule, $value, $path) { - $match = null; - $pattern = '#^'.$rule.(is_array($value) ? '' : '$').'#'; - if (!preg_match($pattern, $path, $match)) { - return array(null, null); - } - - if (!is_array($value)) { - return array($value, $match); - } - - $path = substr($path, strlen($match[0])); - foreach ($value as $srule => $sval) { - list($controller, $data) = $this->tryRule($srule, $sval, $path); - if ($controller) { - return array($controller, $data + $match); - } - } - - return array(null, null); - } -} diff --git a/src/aphront/__tests__/AphrontRequestTestCase.php b/src/aphront/__tests__/AphrontRequestTestCase.php index 2d781b3e1f..88fe97761f 100644 --- a/src/aphront/__tests__/AphrontRequestTestCase.php +++ b/src/aphront/__tests__/AphrontRequestTestCase.php @@ -1,25 +1,9 @@ setRequestData( array( 'str_empty' => '', @@ -78,4 +62,90 @@ public function testRequestDataAccess() { $this->assertEqual(false, $r->getExists('does-not-exist')); } + public function testHostAttacks() { + static $tests = array( + 'domain.com' => 'domain.com', + 'domain.com:80' => 'domain.com', + 'evil.com:evil.com@real.com' => 'real.com', + 'evil.com:evil.com@real.com:80' => 'real.com', + ); + + foreach ($tests as $input => $expect) { + $r = new AphrontRequest($input, '/'); + $this->assertEqual( + $expect, + $r->getHost(), + pht('Host: %s', $input)); + } + } + + public function testFlattenRequestData() { + $test_cases = array( + array( + 'a' => 'a', + 'b' => '1', + 'c' => '', + ), + array( + 'a' => 'a', + 'b' => '1', + 'c' => '', + ), + + array( + 'x' => array( + 0 => 'a', + 1 => 'b', + 2 => 'c', + ), + ), + array( + 'x[0]' => 'a', + 'x[1]' => 'b', + 'x[2]' => 'c', + ), + + array( + 'x' => array( + 'y' => array( + 'z' => array( + 40 => 'A', + 50 => 'B', + 'C' => 60, + ), + ), + ), + ), + array( + 'x[y][z][40]' => 'A', + 'x[y][z][50]' => 'B', + 'x[y][z][C]' => '60', + ), + ); + + for ($ii = 0; $ii < count($test_cases); $ii += 2) { + $input = $test_cases[$ii]; + $expect = $test_cases[$ii + 1]; + + $this->assertEqual($expect, AphrontRequest::flattenData($input)); + } + } + + public function testGetHTTPHeader() { + $server_data = array( + 'HTTP_ACCEPT_ENCODING' => 'duck/quack', + 'CONTENT_TYPE' => 'cow/moo', + ); + + $this->assertEqual( + 'duck/quack', + AphrontRequest::getHTTPHeader('AcCePt-EncOdING', null, $server_data)); + $this->assertEqual( + 'cow/moo', + AphrontRequest::getHTTPHeader('cONTent-TyPE', null, $server_data)); + $this->assertEqual( + null, + AphrontRequest::getHTTPHeader('Pie-Flavor', null, $server_data)); + } + } diff --git a/src/aphront/__tests__/AphrontRoutingMapTestCase.php b/src/aphront/__tests__/AphrontRoutingMapTestCase.php new file mode 100644 index 0000000000..42d79d1089 --- /dev/null +++ b/src/aphront/__tests__/AphrontRoutingMapTestCase.php @@ -0,0 +1,85 @@ +getRoutingMaps(); + foreach ($maps as $map) { + foreach ($map->getRoutes() as $rule => $value) { + $this->assertRoutable($site, $map, array(), $rule, $value); + $count++; + } + } + } + + if (!$count) { + $this->assertSkipped( + pht('No sites define any routing rules.')); + } + } + + private function assertRoutable( + AphrontSite $site, + AphrontRoutingMap $map, + array $path, + $rule, + $value) { + + $path[] = $rule; + + $site_description = $site->getDescription(); + $rule_path = implode(' > ', $path); + + $pattern = implode('', $path); + $pattern = '('.$pattern.')'; + $ok = @preg_match($pattern, ''); + + $this->assertTrue( + ($ok !== false), + pht( + 'Routing rule ("%s", for site "%s") does not compile into a '. + 'valid regular expression.', + $rule_path, + $site_description)); + + if (is_array($value)) { + $this->assertTrue( + (count($value) > 0), + pht( + 'Routing rule ("%s", for site "%s") does not have any targets.', + $rule_path, + $site_description)); + + foreach ($value as $sub_rule => $sub_value) { + $this->assertRoutable($site, $map, $path, $sub_rule, $sub_value); + } + return; + } + + if (is_string($value)) { + $this->assertTrue( + class_exists($value), + pht( + 'Routing rule ("%s", for site "%s") points at controller ("%s") '. + 'which does not exist.', + $rule_path, + $site_description, + $value)); + return; + } + + $this->assertFailure( + pht( + 'Routing rule ("%s", for site "%s") points at unknown value '. + '(of type "%s"), expected a controller class name string.', + $rule_path, + $site_description, + phutil_describe_type($value))); + } + +} diff --git a/src/aphront/configuration/AphrontApplicationConfiguration.php b/src/aphront/configuration/AphrontApplicationConfiguration.php index aa78186021..550a5a0316 100644 --- a/src/aphront/configuration/AphrontApplicationConfiguration.php +++ b/src/aphront/configuration/AphrontApplicationConfiguration.php @@ -1,115 +1,879 @@ parseQueryString(idx($_SERVER, 'QUERY_STRING', '')); + + $cookie_prefix = PhabricatorEnv::getEnvConfig('phabricator.cookie-prefix'); + + $request = new AphrontRequest($this->getHost(), $this->getPath()); + $request->setRequestData($data); + $request->setApplicationConfiguration($this); + $request->setCookiePrefix($cookie_prefix); + + $request->updateEphemeralCookies(); + + return $request; + } + + public function buildRedirectController($uri, $external) { + return array( + new PhabricatorRedirectController(), + array( + 'uri' => $uri, + 'external' => $external, + ), + ); + } - final public function setRequest(AphrontRequest $request) { + public function setRequest(AphrontRequest $request) { $this->request = $request; return $this; } - final public function getRequest() { + public function getRequest() { return $this->request; } - final public function getConsole() { + public function getConsole() { return $this->console; } - final public function setConsole($console) { + public function setConsole($console) { $this->console = $console; return $this; } - final public function buildController() { - $map = $this->getURIMap(); - $mapper = new AphrontURIMapper($map); + public function setHost($host) { + $this->host = $host; + return $this; + } + + public function getHost() { + return $this->host; + } + + public function setPath($path) { + $this->path = $path; + return $this; + } + + public function getPath() { + return $this->path; + } + + + /** + * @phutil-external-symbol class PhabricatorStartup + */ + public static function runHTTPRequest(AphrontHTTPSink $sink) { + if (isset($_SERVER['HTTP_X_SETUP_SELFCHECK'])) { + $response = self::newSelfCheckResponse(); + return self::writeResponse($sink, $response); + } + + PhabricatorStartup::beginStartupPhase('multimeter'); + $multimeter = MultimeterControl::newInstance(); + $multimeter->setEventContext(''); + $multimeter->setEventViewer(''); + + // Build a no-op write guard for the setup phase. We'll replace this with a + // real write guard later on, but we need to survive setup and build a + // request object first. + $write_guard = new AphrontWriteGuard('id'); + + PhabricatorStartup::beginStartupPhase('preflight'); + + $response = PhabricatorSetupCheck::willPreflightRequest(); + if ($response) { + return self::writeResponse($sink, $response); + } + + PhabricatorStartup::beginStartupPhase('env.init'); + + self::readHTTPPOSTData(); + + try { + PhabricatorEnv::initializeWebEnvironment(); + $database_exception = null; + } catch (PhabricatorClusterStrandedException $ex) { + $database_exception = $ex; + } + + // If we're in developer mode, set a flag so that top-level exception + // handlers can add more information. + if (PhabricatorEnv::getEnvConfig('phabricator.developer-mode')) { + $sink->setShowStackTraces(true); + } + + if ($database_exception) { + $issue = PhabricatorSetupIssue::newDatabaseConnectionIssue( + $database_exception, + true); + $response = PhabricatorSetupCheck::newIssueResponse($issue); + return self::writeResponse($sink, $response); + } + + $multimeter->setSampleRate( + PhabricatorEnv::getEnvConfig('debug.sample-rate')); + + $debug_time_limit = PhabricatorEnv::getEnvConfig('debug.time-limit'); + if ($debug_time_limit) { + PhabricatorStartup::setDebugTimeLimit($debug_time_limit); + } + + // This is the earliest we can get away with this, we need env config first. + PhabricatorStartup::beginStartupPhase('log.access'); + PhabricatorAccessLog::init(); + $access_log = PhabricatorAccessLog::getLog(); + PhabricatorStartup::setAccessLog($access_log); + + $address = PhabricatorEnv::getRemoteAddress(); + if ($address) { + $address_string = $address->getAddress(); + } else { + $address_string = '-'; + } + + $access_log->setData( + array( + 'R' => AphrontRequest::getHTTPHeader('Referer', '-'), + 'r' => $address_string, + 'M' => idx($_SERVER, 'REQUEST_METHOD', '-'), + )); + + DarkConsoleXHProfPluginAPI::hookProfiler(); + + // We just activated the profiler, so we don't need to keep track of + // startup phases anymore: it can take over from here. + PhabricatorStartup::beginStartupPhase('startup.done'); + + DarkConsoleErrorLogPluginAPI::registerErrorHandler(); + + $response = PhabricatorSetupCheck::willProcessRequest(); + if ($response) { + return self::writeResponse($sink, $response); + } + + $host = AphrontRequest::getHTTPHeader('Host'); + $path = PhabricatorStartup::getRequestPath(); + + $application = new self(); + + $application->setHost($host); + $application->setPath($path); + $request = $application->buildRequest(); + + // Now that we have a request, convert the write guard into one which + // actually checks CSRF tokens. + $write_guard->dispose(); + $write_guard = new AphrontWriteGuard(array($request, 'validateCSRF')); + + // Build the server URI implied by the request headers. If an administrator + // has not configured "phabricator.base-uri" yet, we'll use this to generate + // links. + + $request_protocol = ($request->isHTTPS() ? 'https' : 'http'); + $request_base_uri = "{$request_protocol}://{$host}/"; + PhabricatorEnv::setRequestBaseURI($request_base_uri); + + $access_log->setData( + array( + 'U' => (string)$request->getRequestURI()->getPath(), + )); + + $processing_exception = null; + try { + $response = $application->processRequest( + $request, + $access_log, + $sink, + $multimeter); + $response_code = $response->getHTTPResponseCode(); + } catch (Exception $ex) { + $processing_exception = $ex; + $response_code = 500; + } + + $write_guard->dispose(); + + $access_log->setData( + array( + 'c' => $response_code, + 'T' => PhabricatorStartup::getMicrosecondsSinceStart(), + )); + + $multimeter->newEvent( + MultimeterEvent::TYPE_REQUEST_TIME, + $multimeter->getEventContext(), + PhabricatorStartup::getMicrosecondsSinceStart()); + + $access_log->write(); + + $multimeter->saveEvents(); + + DarkConsoleXHProfPluginAPI::saveProfilerSample($access_log); + + PhabricatorStartup::disconnectRateLimits( + array( + 'viewer' => $request->getUser(), + )); + + if ($processing_exception) { + throw $processing_exception; + } + } + + + public function processRequest( + AphrontRequest $request, + PhutilDeferredLog $access_log, + AphrontHTTPSink $sink, + MultimeterControl $multimeter) { + + $this->setRequest($request); + + list($controller, $uri_data) = $this->buildController(); + + $controller_class = get_class($controller); + $access_log->setData( + array( + 'C' => $controller_class, + )); + $multimeter->setEventContext('web.'.$controller_class); + + $request->setController($controller); + $request->setURIMap($uri_data); + + $controller->setRequest($request); + + // If execution throws an exception and then trying to render that + // exception throws another exception, we want to show the original + // exception, as it is likely the root cause of the rendering exception. + $original_exception = null; + try { + $response = $controller->willBeginExecution(); + + if ($request->getUser() && $request->getUser()->getPHID()) { + $access_log->setData( + array( + 'u' => $request->getUser()->getUserName(), + 'P' => $request->getUser()->getPHID(), + )); + $multimeter->setEventViewer('user.'.$request->getUser()->getPHID()); + } + + if (!$response) { + $controller->willProcessRequest($uri_data); + $response = $controller->handleRequest($request); + $this->validateControllerResponse($controller, $response); + } + } catch (Exception $ex) { + $original_exception = $ex; + } catch (Throwable $ex) { + $original_exception = $ex; + } + + $response_exception = null; + try { + if ($original_exception) { + $response = $this->handleThrowable($original_exception); + } + + $response = $this->produceResponse($request, $response); + $response = $controller->willSendResponse($response); + $response->setRequest($request); + + self::writeResponse($sink, $response); + } catch (Exception $ex) { + $response_exception = $ex; + } catch (Throwable $ex) { + $response_exception = $ex; + } + + if ($response_exception) { + // If we encountered an exception while building a normal response, then + // encountered another exception while building a response for the first + // exception, throw an aggregate exception that will be unpacked by the + // higher-level handler. This is above our pay grade. + if ($original_exception) { + throw new PhutilAggregateException( + pht( + 'Encountered a processing exception, then another exception when '. + 'trying to build a response for the first exception.'), + array( + $response_exception, + $original_exception, + )); + } + + // If we built a response successfully and then ran into an exception + // trying to render it, try to handle and present that exception to the + // user using the standard handler. + + // The problem here might be in rendering (more common) or in the actual + // response mechanism (less common). If it's in rendering, we can likely + // still render a nice exception page: the majority of rendering issues + // are in main page content, not content shared with the exception page. + + $handling_exception = null; + try { + $response = $this->handleThrowable($response_exception); + + $response = $this->produceResponse($request, $response); + $response = $controller->willSendResponse($response); + $response->setRequest($request); + + self::writeResponse($sink, $response); + } catch (Exception $ex) { + $handling_exception = $ex; + } catch (Throwable $ex) { + $handling_exception = $ex; + } + + // If we didn't have any luck with that, raise the original response + // exception. As above, this is the root cause exception and more likely + // to be useful. This will go to the fallback error handler at top + // level. + + if ($handling_exception) { + throw $response_exception; + } + } + + return $response; + } + + private static function writeResponse( + AphrontHTTPSink $sink, + AphrontResponse $response) { + + $unexpected_output = PhabricatorStartup::endOutputCapture(); + if ($unexpected_output) { + $unexpected_output = pht( + "Unexpected output:\n\n%s", + $unexpected_output); + + phlog($unexpected_output); + + if ($response instanceof AphrontWebpageResponse) { + $response->setUnexpectedOutput($unexpected_output); + } + } + + $sink->writeResponse($response); + } + + +/* -( URI Routing )-------------------------------------------------------- */ + + + /** + * Build a controller to respond to the request. + * + * @return pair Controller and dictionary of request + * parameters. + * @task routing + */ + private function buildController() { $request = $this->getRequest(); - $path = $request->getPath(); - list($controller_class, $uri_data) = $mapper->mapPath($path); - - if (!$controller_class) { - if (!preg_match('@/$@', $path)) { - // If we failed to match anything but don't have a trailing slash, try - // to add a trailing slash and issue a redirect if that resolves. - list($controller_class, $uri_data) = $mapper->mapPath($path.'/'); - - // NOTE: For POST, just 404 instead of redirecting, since the redirect - // will be a GET without parameters. - if ($controller_class && !$request->isHTTPPost()) { - $uri = $request->getRequestURI()->setPath($path.'/'); - return $this->buildRedirectController($uri); + + // If we're configured to operate in cluster mode, reject requests which + // were not received on a cluster interface. + // + // For example, a host may have an internal address like "170.0.0.1", and + // also have a public address like "51.23.95.16". Assuming the cluster + // is configured on a range like "170.0.0.0/16", we want to reject the + // requests received on the public interface. + // + // Ideally, nodes in a cluster should only be listening on internal + // interfaces, but they may be configured in such a way that they also + // listen on external interfaces, since this is easy to forget about or + // get wrong. As a broad security measure, reject requests received on any + // interfaces which aren't on the whitelist. + + $cluster_addresses = PhabricatorEnv::getEnvConfig('cluster.addresses'); + if ($cluster_addresses) { + $server_addr = idx($_SERVER, 'SERVER_ADDR'); + if (!$server_addr) { + if (php_sapi_name() == 'cli') { + // This is a command line script (probably something like a unit + // test) so it's fine that we don't have SERVER_ADDR defined. + } else { + throw new AphrontMalformedRequestException( + pht('No %s', 'SERVER_ADDR'), + pht( + 'This service is configured to operate in cluster mode, but '. + '%s is not defined in the request context. Your webserver '. + 'configuration needs to forward %s to PHP so the software can '. + 'reject requests received on external interfaces.', + 'SERVER_ADDR', + 'SERVER_ADDR')); + } + } else { + if (!PhabricatorEnv::isClusterAddress($server_addr)) { + throw new AphrontMalformedRequestException( + pht('External Interface'), + pht( + 'This service is configured in cluster mode and the address '. + 'this request was received on ("%s") is not whitelisted as '. + 'a cluster address.', + $server_addr)); } } + } - return $this->build404Controller(); + $site = $this->buildSiteForRequest($request); + + if ($site->shouldRequireHTTPS()) { + if (!$request->isHTTPS()) { + + // Don't redirect intracluster requests: doing so drops headers and + // parameters, imposes a performance penalty, and indicates a + // misconfiguration. + if ($request->isProxiedClusterRequest()) { + throw new AphrontMalformedRequestException( + pht('HTTPS Required'), + pht( + 'This request reached a site which requires HTTPS, but the '. + 'request is not marked as HTTPS.')); + } + + $https_uri = $request->getRequestURI(); + $https_uri->setDomain($request->getHost()); + $https_uri->setProtocol('https'); + + // In this scenario, we'll be redirecting to HTTPS using an absolute + // URI, so we need to permit an external redirect. + return $this->buildRedirectController($https_uri, true); + } + } + + $maps = $site->getRoutingMaps(); + $path = $request->getPath(); + + $result = $this->routePath($maps, $path); + if ($result) { + return $result; + } + + // If we failed to match anything but don't have a trailing slash, try + // to add a trailing slash and issue a redirect if that resolves. + + // NOTE: We only do this for GET, since redirects switch to GET and drop + // data like POST parameters. + if (!preg_match('@/$@', $path) && $request->isHTTPGet()) { + $result = $this->routePath($maps, $path.'/'); + if ($result) { + $target_uri = $request->getAbsoluteRequestURI(); + + // We need to restore URI encoding because the webserver has + // interpreted it. For example, this allows us to redirect a path + // like `/tag/aa%20bb` to `/tag/aa%20bb/`, which may eventually be + // resolved meaningfully by an application. + $target_path = phutil_escape_uri($path.'/'); + $target_uri->setPath($target_path); + $target_uri = (string)$target_uri; + + return $this->buildRedirectController($target_uri, true); + } } - $controller = newv($controller_class, array($request)); + $result = $site->new404Controller($request); + if ($result) { + return array($result, array()); + } - return array($controller, $uri_data); + throw new Exception( + pht( + 'Aphront site ("%s") failed to build a 404 controller.', + get_class($site))); } - final public function setHost($host) { - $this->host = $host; - return $this; + /** + * Map a specific path to the corresponding controller. For a description + * of routing, see @{method:buildController}. + * + * @param list List of routing maps. + * @param string Path to route. + * @return pair Controller and dictionary of request + * parameters. + * @task routing + */ + private function routePath(array $maps, $path) { + foreach ($maps as $map) { + $result = $map->routePath($path); + if ($result) { + return array($result->getController(), $result->getURIData()); + } + } } - final public function getHost() { - return $this->host; + private function buildSiteForRequest(AphrontRequest $request) { + $sites = PhabricatorSite::getAllSites(); + + $site = null; + foreach ($sites as $candidate) { + $site = $candidate->newSiteForRequest($request); + if ($site) { + break; + } + } + + if (!$site) { + $path = $request->getPath(); + $host = $request->getHost(); + throw new AphrontMalformedRequestException( + pht('Site Not Found'), + pht( + 'This request asked for "%s" on host "%s", but no site is '. + 'configured which can serve this request.', + $path, + $host), + true); + } + + $request->setSite($site); + + return $site; } - final public function setPath($path) { - $this->path = $path; - return $this; + +/* -( Response Handling )-------------------------------------------------- */ + + + /** + * Tests if a response is of a valid type. + * + * @param wild Supposedly valid response. + * @return bool True if the object is of a valid type. + * @task response + */ + private function isValidResponseObject($response) { + if ($response instanceof AphrontResponse) { + return true; + } + + if ($response instanceof AphrontResponseProducerInterface) { + return true; + } + + return false; } - final public function getPath() { - return $this->path; + + /** + * Verifies that the return value from an @{class:AphrontController} is + * of an allowed type. + * + * @param AphrontController Controller which returned the response. + * @param wild Supposedly valid response. + * @return void + * @task response + */ + private function validateControllerResponse( + AphrontController $controller, + $response) { + + if ($this->isValidResponseObject($response)) { + return; + } + + throw new Exception( + pht( + 'Controller "%s" returned an invalid response from call to "%s". '. + 'This method must return an object of class "%s", or an object '. + 'which implements the "%s" interface.', + get_class($controller), + 'handleRequest()', + 'AphrontResponse', + 'AphrontResponseProducerInterface')); + } + + + /** + * Verifies that the return value from an + * @{class:AphrontResponseProducerInterface} is of an allowed type. + * + * @param AphrontResponseProducerInterface Object which produced + * this response. + * @param wild Supposedly valid response. + * @return void + * @task response + */ + private function validateProducerResponse( + AphrontResponseProducerInterface $producer, + $response) { + + if ($this->isValidResponseObject($response)) { + return; + } + + throw new Exception( + pht( + 'Producer "%s" returned an invalid response from call to "%s". '. + 'This method must return an object of class "%s", or an object '. + 'which implements the "%s" interface.', + get_class($producer), + 'produceAphrontResponse()', + 'AphrontResponse', + 'AphrontResponseProducerInterface')); + } + + + /** + * Verifies that the return value from an + * @{class:AphrontRequestExceptionHandler} is of an allowed type. + * + * @param AphrontRequestExceptionHandler Object which produced this + * response. + * @param wild Supposedly valid response. + * @return void + * @task response + */ + private function validateErrorHandlerResponse( + AphrontRequestExceptionHandler $handler, + $response) { + + if ($this->isValidResponseObject($response)) { + return; + } + + throw new Exception( + pht( + 'Exception handler "%s" returned an invalid response from call to '. + '"%s". This method must return an object of class "%s", or an object '. + 'which implements the "%s" interface.', + get_class($handler), + 'handleRequestException()', + 'AphrontResponse', + 'AphrontResponseProducerInterface')); } - final public function willBuildRequest() { + + /** + * Resolves a response object into an @{class:AphrontResponse}. + * + * Controllers are permitted to return actual responses of class + * @{class:AphrontResponse}, or other objects which implement + * @{interface:AphrontResponseProducerInterface} and can produce a response. + * + * If a controller returns a response producer, invoke it now and produce + * the real response. + * + * @param AphrontRequest Request being handled. + * @param AphrontResponse|AphrontResponseProducerInterface Response, or + * response producer. + * @return AphrontResponse Response after any required production. + * @task response + */ + private function produceResponse(AphrontRequest $request, $response) { + $original = $response; + + // Detect cycles on the exact same objects. It's still possible to produce + // infinite responses as long as they're all unique, but we can only + // reasonably detect cycles, not guarantee that response production halts. + + $seen = array(); + while (true) { + // NOTE: It is permissible for an object to be both a response and a + // response producer. If so, being a producer is "stronger". This is + // used by AphrontProxyResponse. + + // If this response is a valid response, hand over the request first. + if ($response instanceof AphrontResponse) { + $response->setRequest($request); + } + + // If this isn't a producer, we're all done. + if (!($response instanceof AphrontResponseProducerInterface)) { + break; + } + + $hash = spl_object_hash($response); + if (isset($seen[$hash])) { + throw new Exception( + pht( + 'Failure while producing response for object of class "%s": '. + 'encountered production cycle (identical object, of class "%s", '. + 'was produced twice).', + get_class($original), + get_class($response))); + } + + $seen[$hash] = true; + + $new_response = $response->produceAphrontResponse(); + $this->validateProducerResponse($response, $new_response); + $response = $new_response; + } + + return $response; } + +/* -( Error Handling )----------------------------------------------------- */ + + /** - * Hook for synchronizing account information from OAuth workflows. + * Convert an exception which has escaped the controller into a response. + * + * This method delegates exception handling to available subclasses of + * @{class:AphrontRequestExceptionHandler}. * - * @task hook + * @param Throwable Exception which needs to be handled. + * @return wild Response or response producer, or null if no available + * handler can produce a response. + * @task exception */ - public function willAuthenticateUserWithOAuth( - PhabricatorUser $user, - PhabricatorUserOAuthInfo $oauth_info, - PhabricatorOAuthProvider $provider) { - return; + private function handleThrowable($throwable) { + $handlers = AphrontRequestExceptionHandler::getAllHandlers(); + + $request = $this->getRequest(); + foreach ($handlers as $handler) { + if ($handler->canHandleRequestThrowable($request, $throwable)) { + $response = $handler->handleRequestThrowable($request, $throwable); + $this->validateErrorHandlerResponse($handler, $response); + return $response; + } + } + + throw $throwable; + } + + private static function newSelfCheckResponse() { + $path = PhabricatorStartup::getRequestPath(); + $query = idx($_SERVER, 'QUERY_STRING', ''); + + $pairs = id(new PhutilQueryStringParser()) + ->parseQueryStringToPairList($query); + + $params = array(); + foreach ($pairs as $v) { + $params[] = array( + 'name' => $v[0], + 'value' => $v[1], + ); + } + + $raw_input = @file_get_contents('php://input'); + if ($raw_input !== false) { + $base64_input = base64_encode($raw_input); + } else { + $base64_input = null; + } + + $result = array( + 'path' => $path, + 'params' => $params, + 'user' => idx($_SERVER, 'PHP_AUTH_USER'), + 'pass' => idx($_SERVER, 'PHP_AUTH_PW'), + + 'raw.base64' => $base64_input, + + // This just makes sure that the response compresses well, so reasonable + // algorithms should want to gzip or deflate it. + 'filler' => str_repeat('Q', 1024 * 16), + ); + + return id(new AphrontJSONResponse()) + ->setAddJSONShield(false) + ->setContent($result); + } + + private static function readHTTPPOSTData() { + $request_method = idx($_SERVER, 'REQUEST_METHOD'); + if ($request_method === 'PUT') { + // For PUT requests, do nothing: in particular, do NOT read input. This + // allows us to stream input later and process very large PUT requests, + // like those coming from Git LFS. + return; + } + + + // For POST requests, we're going to read the raw input ourselves here + // if we can. Among other things, this corrects variable names with + // the "." character in them, which PHP normally converts into "_". + + // If "enable_post_data_reading" is on, the documentation suggests we + // can not read the body. In practice, we seem to be able to. This may + // need to be resolved at some point, likely by instructing installs + // to disable this option. + + // If the content type is "multipart/form-data", we need to build both + // $_POST and $_FILES, which is involved. The body itself is also more + // difficult to parse than other requests. + + $raw_input = PhabricatorStartup::getRawInput(); + $parser = new PhutilQueryStringParser(); + + if (strlen($raw_input)) { + $content_type = idx($_SERVER, 'CONTENT_TYPE'); + $is_multipart = preg_match('@^multipart/form-data@i', $content_type); + if ($is_multipart) { + $multipart_parser = id(new AphrontMultipartParser()) + ->setContentType($content_type); + + $multipart_parser->beginParse(); + $multipart_parser->continueParse($raw_input); + $parts = $multipart_parser->endParse(); + + // We're building and then parsing a query string so that requests + // with arrays (like "x[]=apple&x[]=banana") work correctly. This also + // means we can't use "phutil_build_http_querystring()", since it + // can't build a query string with duplicate names. + + $query_string = array(); + foreach ($parts as $part) { + if (!$part->isVariable()) { + continue; + } + + $name = $part->getName(); + $value = $part->getVariableValue(); + $query_string[] = rawurlencode($name).'='.rawurlencode($value); + } + $query_string = implode('&', $query_string); + $post = $parser->parseQueryString($query_string); + + $files = array(); + foreach ($parts as $part) { + if ($part->isVariable()) { + continue; + } + + $files[$part->getName()] = $part->getPHPFileDictionary(); + } + $_FILES = $files; + } else { + $post = $parser->parseQueryString($raw_input); + } + + $_POST = $post; + PhabricatorStartup::rebuildRequest(); + } else if ($_POST) { + $post = filter_input_array(INPUT_POST, FILTER_UNSAFE_RAW); + if (is_array($post)) { + $_POST = $post; + PhabricatorStartup::rebuildRequest(); + } + } } } diff --git a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php b/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php deleted file mode 100644 index 0629bc7fd7..0000000000 --- a/src/aphront/configuration/AphrontDefaultApplicationConfiguration.php +++ /dev/null @@ -1,728 +0,0 @@ -getResourceURIMapRules() + array( - '/(?:(?P(?:jump|apps))/)?' => - 'PhabricatorDirectoryMainController', - '/(?:(?Pfeed)/)' => array( - 'public/' => 'PhabricatorFeedPublicStreamController', - '(?:(?P[^/]+)/)?' => - 'PhabricatorDirectoryMainController', - ), - '/F(?P\d+)' => 'PhabricatorFileShortcutController', - '/file/' => array( - '' => 'PhabricatorFileListController', - 'filter/(?P\w+)/' => 'PhabricatorFileListController', - 'upload/' => 'PhabricatorFileUploadController', - 'dropupload/' => 'PhabricatorFileDropUploadController', - 'delete/(?P\d+)/' => 'PhabricatorFileDeleteController', - 'info/(?P[^/]+)/' => 'PhabricatorFileInfoController', - - 'data/(?P[^/]+)/(?P[^/]+)/.*' - => 'PhabricatorFileDataController', - // TODO: This is a deprecated version of /data/. Remove it after - // old links have had a chance to rot. - 'alt/(?P[^/]+)/(?P[^/]+)/' - => 'PhabricatorFileDataController', - - 'macro/' => array( - '' => 'PhabricatorFileMacroListController', - 'edit/(?:(?P\d+)/)?' => 'PhabricatorFileMacroEditController', - 'delete/(?P\d+)/' => 'PhabricatorFileMacroDeleteController', - ), - 'proxy/' => 'PhabricatorFileProxyController', - 'xform/(?P[^/]+)/(?P[^/]+)/' - => 'PhabricatorFileTransformController', - ), - '/phid/' => array( - '' => 'PhabricatorPHIDLookupController', - ), - '/people/' => array( - '' => 'PhabricatorPeopleListController', - 'logs/' => 'PhabricatorPeopleLogsController', - 'edit/(?:(?P\d+)/(?:(?P\w+)/)?)?' - => 'PhabricatorPeopleEditController', - ), - '/p/(?P[\w._-]+)/(?:(?P\w+)/)?' - => 'PhabricatorPeopleProfileController', - '/conduit/' => array( - '' => 'PhabricatorConduitListController', - 'method/(?P[^/]+)/' => 'PhabricatorConduitConsoleController', - 'log/' => 'PhabricatorConduitLogController', - 'log/view/(?P[^/]+)/' => 'PhabricatorConduitLogController', - 'token/' => 'PhabricatorConduitTokenController', - ), - '/api/(?P[^/]+)' => 'PhabricatorConduitAPIController', - - '/D(?P\d+)' => 'DifferentialRevisionViewController', - '/differential/' => array( - '' => 'DifferentialRevisionListController', - 'filter/(?P\w+)/(?:(?P\w+)/)?' => - 'DifferentialRevisionListController', - 'stats/(?P\w+)/' => 'DifferentialRevisionStatsController', - 'diff/' => array( - '(?P\d+)/' => 'DifferentialDiffViewController', - 'create/' => 'DifferentialDiffCreateController', - ), - 'changeset/' => 'DifferentialChangesetViewController', - 'revision/edit/(?:(?P\d+)/)?' - => 'DifferentialRevisionEditController', - 'comment/' => array( - 'preview/(?P\d+)/' => 'DifferentialCommentPreviewController', - 'save/' => 'DifferentialCommentSaveController', - 'inline/' => array( - 'preview/(?P\d+)/' => - 'DifferentialInlineCommentPreviewController', - 'edit/(?P\d+)/' => 'DifferentialInlineCommentEditController', - ), - ), - 'subscribe/(?Padd|rem)/(?P\d+)/' - => 'DifferentialSubscribeController', - ), - - '/typeahead/' => array( - 'common/(?P\w+)/' - => 'PhabricatorTypeaheadCommonDatasourceController', - ), - - '/mail/' => array( - '' => 'PhabricatorMetaMTAListController', - 'send/' => 'PhabricatorMetaMTASendController', - 'view/(?P\d+)/' => 'PhabricatorMetaMTAViewController', - 'lists/' => 'PhabricatorMetaMTAMailingListsController', - 'lists/edit/(?:(?P\d+)/)?' - => 'PhabricatorMetaMTAMailingListEditController', - 'receive/' => 'PhabricatorMetaMTAReceiveController', - 'received/' => 'PhabricatorMetaMTAReceivedListController', - 'sendgrid/' => 'PhabricatorMetaMTASendGridReceiveController', - ), - - '/login/' => array( - '' => 'PhabricatorLoginController', - 'email/' => 'PhabricatorEmailLoginController', - 'etoken/(?P\w+)/' => 'PhabricatorEmailTokenController', - 'refresh/' => 'PhabricatorRefreshCSRFController', - 'validate/' => 'PhabricatorLoginValidateController', - 'mustverify/' => 'PhabricatorMustVerifyEmailController', - ), - - '/logout/' => 'PhabricatorLogoutController', - - '/oauth/' => array( - '(?P\w+)/' => array( - 'login/' => 'PhabricatorOAuthLoginController', - 'diagnose/' => 'PhabricatorOAuthDiagnosticsController', - 'unlink/' => 'PhabricatorOAuthUnlinkController', - ), - ), - - '/ldap/' => array( - 'login/' => 'PhabricatorLDAPLoginController', - 'unlink/' => 'PhabricatorLDAPUnlinkController', - ), - - '/oauthserver/' => array( - 'auth/' => 'PhabricatorOAuthServerAuthController', - 'test/' => 'PhabricatorOAuthServerTestController', - 'token/' => 'PhabricatorOAuthServerTokenController', - 'clientauthorization/' => array( - '' => 'PhabricatorOAuthClientAuthorizationListController', - 'delete/(?P[^/]+)/' => - 'PhabricatorOAuthClientAuthorizationDeleteController', - 'edit/(?P[^/]+)/' => - 'PhabricatorOAuthClientAuthorizationEditController', - ), - 'client/' => array( - '' => 'PhabricatorOAuthClientListController', - 'create/' => 'PhabricatorOAuthClientEditController', - 'delete/(?P[^/]+)/' => 'PhabricatorOAuthClientDeleteController', - 'edit/(?P[^/]+)/' => 'PhabricatorOAuthClientEditController', - 'view/(?P[^/]+)/' => 'PhabricatorOAuthClientViewController', - ), - ), - - '/xhprof/' => array( - 'profile/(?P[^/]+)/' => 'PhabricatorXHProfProfileController', - ), - - '/~/' => 'DarkConsoleController', - - '/settings/' => array( - '(?:page/(?P[^/]+)/)?' => 'PhabricatorUserSettingsController', - ), - - '/maniphest/' => array( - '' => 'ManiphestTaskListController', - 'view/(?P\w+)/' => 'ManiphestTaskListController', - 'report/(?:(?P\w+)/)?' => 'ManiphestReportController', - 'batch/' => 'ManiphestBatchEditController', - 'task/' => array( - 'create/' => 'ManiphestTaskEditController', - 'edit/(?P\d+)/' => 'ManiphestTaskEditController', - 'descriptionchange/(?:(?P\d+)/)?' => - 'ManiphestTaskDescriptionChangeController', - 'descriptionpreview/' => - 'ManiphestTaskDescriptionPreviewController', - ), - 'transaction/' => array( - 'save/' => 'ManiphestTransactionSaveController', - 'preview/(?P\d+)/' => 'ManiphestTransactionPreviewController', - ), - 'export/(?P[^/]+)/' => 'ManiphestExportController', - 'subpriority/' => 'ManiphestSubpriorityController', - 'custom/' => array( - '' => 'ManiphestSavedQueryListController', - 'edit/(?:(?P\d+)/)?' => 'ManiphestSavedQueryEditController', - 'delete/(?P\d+)/' => 'ManiphestSavedQueryDeleteController', - ), - ), - - '/T(?P\d+)' => 'ManiphestTaskDetailController', - - '/repository/' => array( - '' => 'PhabricatorRepositoryListController', - 'create/' => 'PhabricatorRepositoryCreateController', - 'edit/(?P\d+)/(?:(?P\w+)?/)?' => - 'PhabricatorRepositoryEditController', - 'delete/(?P\d+)/' => 'PhabricatorRepositoryDeleteController', - 'project/(?P\d+)/' => - 'PhabricatorRepositoryArcanistProjectEditController', - ), - - '/search/' => array( - '' => 'PhabricatorSearchController', - '(?P[^/]+)/' => 'PhabricatorSearchController', - 'attach/(?P[^/]+)/(?P\w+)/(?:(?P\w+)/)?' - => 'PhabricatorSearchAttachController', - 'select/(?P\w+)/' - => 'PhabricatorSearchSelectController', - 'index/(?P[^/]+)/' => 'PhabricatorSearchIndexController', - ), - - '/project/' => array( - '' => 'PhabricatorProjectListController', - 'filter/(?P[^/]+)/' => 'PhabricatorProjectListController', - 'edit/(?P\d+)/' => 'PhabricatorProjectProfileEditController', - 'view/(?P\d+)/(?:(?P\w+)/)?' - => 'PhabricatorProjectProfileController', - 'create/' => 'PhabricatorProjectCreateController', - 'update/(?P\d+)/(?P[^/]+)/' - => 'PhabricatorProjectUpdateController', - ), - - '/r(?P[A-Z]+)(?P[a-z0-9]+)' - => 'DiffusionCommitController', - '/diffusion/' => array( - '' => 'DiffusionHomeController', - '(?P[A-Z]+)/' => array( - '' => 'DiffusionRepositoryController', - - 'repository/(?P.*)' => 'DiffusionRepositoryController', - 'change/(?P.*)' => 'DiffusionChangeController', - 'history/(?P.*)' => 'DiffusionHistoryController', - 'browse/(?P.*)' => 'DiffusionBrowseController', - 'lastmodified/(?P.*)' => 'DiffusionLastModifiedController', - 'diff/' => 'DiffusionDiffController', - 'tags/(?P.*)' => 'DiffusionTagListController', - 'branches/(?P.*)' => 'DiffusionBranchTableController', - ), - 'inline/(?P[^/]+)/' => 'DiffusionInlineCommentController', - 'services/' => array( - 'path/' => array( - 'complete/' => 'DiffusionPathCompleteController', - 'validate/' => 'DiffusionPathValidateController', - ), - ), - 'symbol/(?P[^/]+)/' => 'DiffusionSymbolController', - 'external/' => 'DiffusionExternalController', - ), - - '/daemon/' => array( - 'task/(?P\d+)/' => 'PhabricatorWorkerTaskDetailController', - 'task/(?P\d+)/(?P[^/]+)/' - => 'PhabricatorWorkerTaskUpdateController', - 'log/' => array( - '' => 'PhabricatorDaemonLogListController', - 'combined/' => 'PhabricatorDaemonCombinedLogController', - '(?P\d+)/' => 'PhabricatorDaemonLogViewController', - ), - 'timeline/' => 'PhabricatorDaemonTimelineConsoleController', - 'timeline/(?P\d+)/' => 'PhabricatorDaemonTimelineEventController', - '' => 'PhabricatorDaemonConsoleController', - ), - - '/herald/' => array( - '' => 'HeraldHomeController', - 'view/(?P[^/]+)/(?:(?P[^/]+)/)?' - => 'HeraldHomeController', - 'new/(?:(?P[^/]+)/(?:(?P[^/]+)/)?)?' - => 'HeraldNewController', - 'rule/(?:(?P\d+)/)?' => 'HeraldRuleController', - 'history/(?:(?P\d+)/)?' => 'HeraldRuleEditHistoryController', - 'delete/(?P\d+)/' => 'HeraldDeleteController', - 'test/' => 'HeraldTestConsoleController', - 'transcript/' => 'HeraldTranscriptListController', - 'transcript/(?P\d+)/(?:(?P\w+)/)?' - => 'HeraldTranscriptController', - ), - - '/uiexample/' => array( - '' => 'PhabricatorUIExampleRenderController', - 'view/(?P[^/]+)/' => 'PhabricatorUIExampleRenderController', - ), - - '/owners/' => array( - '' => 'PhabricatorOwnersListController', - 'view/(?P[^/]+)/' => 'PhabricatorOwnersListController', - 'edit/(?P\d+)/' => 'PhabricatorOwnersEditController', - 'new/' => 'PhabricatorOwnersEditController', - 'package/(?P\d+)/' => 'PhabricatorOwnersDetailController', - 'delete/(?P\d+)/' => 'PhabricatorOwnersDeleteController', - ), - - '/audit/' => array( - '' => 'PhabricatorAuditListController', - 'view/(?P[^/]+)/(?:(?P[^/]+)/)?' - => 'PhabricatorAuditListController', - 'addcomment/' => 'PhabricatorAuditAddCommentController', - 'preview/(?P\d+)/' => 'PhabricatorAuditPreviewController', - ), - - '/xhpast/' => array( - '' => 'PhabricatorXHPASTViewRunController', - 'view/(?P\d+)/' - => 'PhabricatorXHPASTViewFrameController', - 'frameset/(?P\d+)/' - => 'PhabricatorXHPASTViewFramesetController', - 'input/(?P\d+)/' - => 'PhabricatorXHPASTViewInputController', - 'tree/(?P\d+)/' - => 'PhabricatorXHPASTViewTreeController', - 'stream/(?P\d+)/' - => 'PhabricatorXHPASTViewStreamController', - ), - - '/status/' => 'PhabricatorStatusController', - - '/paste/' => array( - '' => 'PhabricatorPasteListController', - 'filter/(?P\w+)/' => 'PhabricatorPasteListController', - ), - '/P(?P\d+)' => 'PhabricatorPasteViewController', - - '/help/' => array( - 'keyboardshortcut/' => 'PhabricatorHelpKeyboardShortcutController', - ), - - '/countdown/' => array( - '' - => 'PhabricatorCountdownListController', - '(?P\d+)/' - => 'PhabricatorCountdownViewController', - 'edit/(?:(?P\d+)/)?' - => 'PhabricatorCountdownEditController', - 'delete/(?P\d+)/' - => 'PhabricatorCountdownDeleteController' - ), - - '/V(?P\d+)' => 'PhabricatorSlowvotePollController', - '/vote/' => array( - '(?:view/(?P\w+)/)?' => 'PhabricatorSlowvoteListController', - 'create/' => 'PhabricatorSlowvoteCreateController', - ), - - // Match "/w/" with slug "/". - '/w(?P/)' => 'PhrictionDocumentController', - // Match "/w/x/y/z/" with slug "x/y/z/". - '/w/(?P.+/)' => 'PhrictionDocumentController', - - '/phriction/' => array( - '' => 'PhrictionListController', - 'list/(?P[^/]+)/' => 'PhrictionListController', - - 'history(?P/)' => 'PhrictionHistoryController', - 'history/(?P.+/)' => 'PhrictionHistoryController', - - 'edit/(?:(?P\d+)/)?' => 'PhrictionEditController', - 'delete/(?P\d+)/' => 'PhrictionDeleteController', - - 'preview/' => 'PhrictionDocumentPreviewController', - 'diff/(?P\d+)/' => 'PhrictionDiffController', - ), - - '/phame/' => array( - '' => 'PhamePostListController', - 'post/' => array( - '' => 'PhamePostListController', - 'delete/(?P[^/]+)/' => 'PhamePostDeleteController', - 'edit/(?P[^/]+)/' => 'PhamePostEditController', - 'new/' => 'PhamePostEditController', - 'preview/' => 'PhamePostPreviewController', - 'view/(?P[^/]+)/' => 'PhamePostViewController', - ), - 'draft/' => array( - '' => 'PhameDraftListController', - 'new/' => 'PhamePostEditController', - ), - 'posts/' => array( - '' => 'PhamePostListController', - '(?P\w+)/' => 'PhamePostListController', - '(?P\w+)/(?P.+/)' - => 'PhamePostViewController', - ), - ), - - '/calendar/' => array( - '' => 'PhabricatorCalendarBrowseController', - ), - - '/drydock/' => array( - '' => 'DrydockResourceListController', - 'resource/' => 'DrydockResourceListController', - 'resource/allocate/' => 'DrydockResourceAllocateController', - 'host/' => array( - '' => 'DrydockHostListController', - 'edit/' => 'DrydockHostEditController', - 'edit/(?P\d+)/' => 'DrydockhostEditController', - ), - 'lease/' => 'DrydockLeaseListController', - 'log/' => 'DrydockLogController', - ), - - '/chatlog/' => array( - '' => - 'PhabricatorChatLogChannelListController', - 'channel/(?P[^/]+)/' => - 'PhabricatorChatLogChannelLogController', - ), - - '/notification/' => array( - '' => 'PhabricatorNotificationListController', - 'panel/' => 'PhabricatorNotificationPanelController', - 'individual/' => 'PhabricatorNotificationIndividualController', - 'status/' => 'PhabricatorNotificationStatusController', - ), - - '/flag/' => array( - '' => 'PhabricatorFlagListController', - 'view/(?P[^/]+)/' => 'PhabricatorFlagListController', - 'edit/(?P[^/]+)/' => 'PhabricatorFlagEditController', - 'delete/(?P\d+)/' => 'PhabricatorFlagDeleteController', - ), - - '/phortune/' => array( - 'stripe/' => array( - 'testpaymentform/' => 'PhortuneStripeTestPaymentFormController', - ), - ), - - '/emailverify/(?P[^/]+)/' => - 'PhabricatorEmailVerificationController', - ); - } - - protected function getResourceURIMapRules() { - return array( - '/res/' => array( - '(?Ppkg/)?'. - '(?P[a-f0-9]{8})/'. - '(?P.+\.(?:css|js|jpg|png|swf|gif))' - => 'CelerityResourceController', - ), - ); - } - - public function buildRequest() { - $request = new AphrontRequest($this->getHost(), $this->getPath()); - $request->setRequestData($_GET + $_POST); - $request->setApplicationConfiguration($this); - return $request; - } - - public function handleException(Exception $ex) { - $request = $this->getRequest(); - - // For Conduit requests, return a Conduit response. - if ($request->isConduit()) { - $response = new ConduitAPIResponse(); - $response->setErrorCode(get_class($ex)); - $response->setErrorInfo($ex->getMessage()); - - return id(new AphrontJSONResponse()) - ->setContent($response->toDictionary()); - } - - // For non-workflow requests, return a Ajax response. - if ($request->isAjax() && !$request->isJavelinWorkflow()) { - $response = new AphrontAjaxResponse(); - $response->setError( - array( - 'code' => get_class($ex), - 'info' => $ex->getMessage(), - )); - return $response; - } - - $is_serious = PhabricatorEnv::getEnvConfig('phabricator.serious-business'); - - $user = $request->getUser(); - if (!$user) { - // If we hit an exception very early, we won't have a user. - $user = new PhabricatorUser(); - } - - if ($ex instanceof PhabricatorPolicyException) { - $content = - '
'. - phutil_escape_html($ex->getMessage()). - '
'; - - $dialog = new AphrontDialogView(); - $dialog - ->setTitle( - $is_serious - ? 'Access Denied' - : "You Shall Not Pass") - ->setClass('aphront-access-dialog') - ->setUser($user) - ->appendChild($content); - - if ($this->getRequest()->isAjax()) { - $dialog->addCancelButton('/', 'Close'); - } else { - $dialog->addCancelButton('/', $is_serious ? 'OK' : 'Away With Thee'); - } - - $response = new AphrontDialogResponse(); - $response->setDialog($dialog); - return $response; - } - - if ($ex instanceof AphrontUsageException) { - $error = new AphrontErrorView(); - $error->setTitle(phutil_escape_html($ex->getTitle())); - $error->appendChild(phutil_escape_html($ex->getMessage())); - - $view = new PhabricatorStandardPageView(); - $view->setRequest($this->getRequest()); - $view->appendChild($error); - - $response = new AphrontWebpageResponse(); - $response->setContent($view->render()); - - return $response; - } - - - // Always log the unhandled exception. - phlog($ex); - - $class = phutil_escape_html(get_class($ex)); - $message = phutil_escape_html($ex->getMessage()); - - if (PhabricatorEnv::getEnvConfig('phabricator.show-stack-traces')) { - $trace = $this->renderStackTrace($ex->getTrace(), $user); - } else { - $trace = null; - } - - $content = - '
'. - '
'.$message.'
'. - $trace. - '
'; - - $dialog = new AphrontDialogView(); - $dialog - ->setTitle('Unhandled Exception ("'.$class.'")') - ->setClass('aphront-exception-dialog') - ->setUser($user) - ->appendChild($content); - - if ($this->getRequest()->isAjax()) { - $dialog->addCancelButton('/', 'Close'); - } - - $response = new AphrontDialogResponse(); - $response->setDialog($dialog); - - return $response; - } - - public function willSendResponse(AphrontResponse $response) { - $request = $this->getRequest(); - $response->setRequest($request); - if ($response instanceof AphrontDialogResponse) { - if (!$request->isAjax()) { - $view = new PhabricatorStandardPageView(); - $view->setRequest($request); - $view->appendChild( - '
'. - $response->buildResponseString(). - '
'); - $response = new AphrontWebpageResponse(); - $response->setContent($view->render()); - return $response; - } else { - return id(new AphrontAjaxResponse()) - ->setContent(array( - 'dialog' => $response->buildResponseString(), - )); - } - } else if ($response instanceof AphrontRedirectResponse) { - if ($request->isAjax()) { - return id(new AphrontAjaxResponse()) - ->setContent( - array( - 'redirect' => $response->getURI(), - )); - } - } - - return $response; - } - - public function build404Controller() { - return array(new Phabricator404Controller($this->getRequest()), array()); - } - - public function buildRedirectController($uri) { - return array( - new PhabricatorRedirectController($this->getRequest()), - array( - 'uri' => $uri, - )); - } - - private function renderStackTrace($trace, PhabricatorUser $user) { - - $libraries = PhutilBootloader::getInstance()->getAllLibraries(); - - // TODO: Make this configurable? - $path = 'https://secure.phabricator.com/diffusion/%s/browse/master/src/'; - - $callsigns = array( - 'arcanist' => 'ARC', - 'phutil' => 'PHU', - 'phabricator' => 'P', - ); - - $rows = array(); - $depth = count($trace); - foreach ($trace as $part) { - $lib = null; - $file = idx($part, 'file'); - $relative = $file; - foreach ($libraries as $library) { - $root = phutil_get_library_root($library); - if (Filesystem::isDescendant($file, $root)) { - $lib = $library; - $relative = Filesystem::readablePath($file, $root); - break; - } - } - - $where = ''; - if (isset($part['class'])) { - $where .= $part['class'].'::'; - } - if (isset($part['function'])) { - $where .= $part['function'].'()'; - } - - if ($file) { - if (isset($callsigns[$lib])) { - $attrs = array('title' => $file); - try { - $attrs['href'] = $user->loadEditorLink( - '/src/'.$relative, - $part['line'], - $callsigns[$lib]); - } catch (Exception $ex) { - // The database can be inaccessible. - } - if (empty($attrs['href'])) { - $attrs['href'] = sprintf($path, $callsigns[$lib]). - str_replace(DIRECTORY_SEPARATOR, '/', $relative). - '$'.$part['line']; - $attrs['target'] = '_blank'; - } - $file_name = phutil_render_tag( - 'a', - $attrs, - phutil_escape_html($relative)); - } else { - $file_name = phutil_render_tag( - 'span', - array( - 'title' => $file, - ), - phutil_escape_html($relative)); - } - $file_name = $file_name.' : '.(int)$part['line']; - } else { - $file_name = '(Internal)'; - } - - - $rows[] = array( - $depth--, - phutil_escape_html($lib), - $file_name, - phutil_escape_html($where), - ); - } - $table = new AphrontTableView($rows); - $table->setHeaders( - array( - 'Depth', - 'Library', - 'File', - 'Where', - )); - $table->setColumnClasses( - array( - 'n', - '', - '', - 'wide', - )); - - return - '
'. - '
Stack Trace
'. - $table->render(). - '
'; - } - -} diff --git a/src/aphront/console/DarkConsoleController.php b/src/aphront/console/DarkConsoleController.php deleted file mode 100644 index 49e36c65b4..0000000000 --- a/src/aphront/console/DarkConsoleController.php +++ /dev/null @@ -1,60 +0,0 @@ -getRequest(); - $user = $request->getUser(); - - $visible = $request->getStr('visible'); - if (strlen($visible)) { - $user->setConsoleVisible((int)$visible); - $user->save(); - return id(new AphrontAjaxResponse())->setDisableConsole(true); - } - - $tab = $request->getStr('tab'); - if (strlen($tab)) { - $user->setConsoleTab($tab); - $user->save(); - return id(new AphrontAjaxResponse())->setDisableConsole(true); - } - - if (PhabricatorEnv::getEnvConfig('darkconsole.enabled')) { - $user->setConsoleEnabled(!$user->getConsoleEnabled()); - if ($user->getConsoleEnabled()) { - $user->setConsoleVisible(true); - } - $user->save(); - if ($request->isAjax()) { - return new AphrontRedirectResponse(); - } else { - return id(new AphrontRedirectResponse())->setURI('/'); - } - } - - } - -} diff --git a/src/aphront/console/DarkConsoleCore.php b/src/aphront/console/DarkConsoleCore.php deleted file mode 100644 index 2de892e03c..0000000000 --- a/src/aphront/console/DarkConsoleCore.php +++ /dev/null @@ -1,215 +0,0 @@ -plugins, $plugin_name); - } - - public function __construct() { - foreach (self::getPlugins() as $plugin_name) { - $plugin = self::newPlugin($plugin_name); - if ($plugin->isPermanent() || !isset($disabled[$plugin_name])) { - if ($plugin->shouldStartup()) { - $plugin->didStartup(); - $plugin->setConsoleCore($this); - $this->plugins[$plugin_name] = $plugin; - } - } - } - } - - public static function newPlugin($plugin) { - $class = 'DarkConsole'.$plugin.'Plugin'; - return newv($class, array()); - } - - public function getEnabledPlugins() { - return $this->plugins; - } - - public function render(AphrontRequest $request) { - - $user = $request->getUser(); - - $plugins = $this->getEnabledPlugins(); - - foreach ($plugins as $plugin) { - $plugin->setRequest($request); - $plugin->willShutdown(); - } - - foreach ($plugins as $plugin) { - $plugin->didShutdown(); - } - - foreach ($plugins as $plugin) { - $plugin->setData($plugin->generateData()); - } - - $selected = $user->getConsoleTab(); - $visible = $user->getConsoleVisible(); - - if (!isset($plugins[$selected])) { - $selected = head_key($plugins); - } - - $tabs = array(); - foreach ($plugins as $key => $plugin) { - $tabs[$key] = array( - 'name' => $plugin->getName(), - 'panel' => $plugin->render(), - ); - } - - $tabs_markup = array(); - $panel_markup = array(); - foreach ($tabs as $key => $data) { - $is_selected = ($key == $selected); - if ($is_selected) { - $style = null; - $tabclass = 'dark-console-tab-selected'; - } else { - $style = 'display: none;'; - $tabclass = null; - } - - $tabs_markup[] = javelin_render_tag( - 'a', - array( - 'class' => "dark-console-tab {$tabclass}", - 'sigil' => 'dark-console-tab', - 'id' => 'dark-console-tab-'.$key, - ), - (string)$data['name']); - - $panel_markup[] = javelin_render_tag( - 'div', - array( - 'class' => 'dark-console-panel dark-console-panel-'.$key, - 'style' => $style, - 'sigil' => 'dark-console-panel', - ), - (string)$data['panel']); - } - - $console = javelin_render_tag( - 'table', - array( - 'class' => 'dark-console', - 'sigil' => 'dark-console', - 'style' => $visible ? '' : 'display: none;', - ), - ''. - ''. - implode("\n", $tabs_markup). - ''. - ''.implode("\n", $panel_markup).''. - ''); - - if (!empty($_COOKIE['phsid'])) { - $console = str_replace( - $_COOKIE['phsid'], - phutil_escape_html(''), - $console); - } - - if ($request->isAjax()) { - - // for ajax this HTML gets updated on the client - $request_history = null; - - } else { - - $request_table_header = - '
'; - - $rows = array(); - - $table = new AphrontTableView($rows); - $table->setHeaders( - array( - 'Sequence', - 'Type', - 'URI', - )); - $table->setColumnClasses( - array( - '', - '', - 'wide', - )); - - $request_table = $request_table_header . $table->render(); - $request_history = javelin_render_tag( - 'table', - array( - 'class' => 'dark-console dark-console-request-log', - 'sigil' => 'dark-console-request-log', - 'style' => $visible ? '' : 'display: none;', - ), - ''. - ''. - javelin_render_tag( - 'a', - array( - 'class' => 'dark-console-tab dark-console-tab-selected', - ), - 'Request Log'). - ''. - ''. - javelin_render_tag( - 'div', - array( - 'class' => 'dark-console-panel', - ), - $request_table). - ''. - ''); - } - - return "\n\n\n\n".$console.$request_history."\n\n\n\n"; - } -} - diff --git a/src/aphront/console/plugin/DarkConsoleConfigPlugin.php b/src/aphront/console/plugin/DarkConsoleConfigPlugin.php deleted file mode 100644 index ad5d89ab8d..0000000000 --- a/src/aphront/console/plugin/DarkConsoleConfigPlugin.php +++ /dev/null @@ -1,113 +0,0 @@ -getAllLibraries() as $lib) { - $lib_data[$lib] = phutil_get_library_root($lib); - } - return array( - 'config' => PhabricatorEnv::getAllConfigKeys(), - 'libraries' => $lib_data, - ); - } - - public function render() { - - $data = $this->getData(); - - $lib_data = $data['libraries']; - - $lib_rows = array(); - foreach ($lib_data as $key => $value) { - $lib_rows[] = array( - phutil_escape_html($key), - phutil_escape_html($value), - ); - } - - $lib_table = new AphrontTableView($lib_rows); - $lib_table->setHeaders( - array( - 'Library', - 'Loaded From', - )); - $lib_table->setColumnClasses( - array( - 'header', - 'wide wrap', - )); - - $config_data = $data['config']; - ksort($config_data); - - $mask = PhabricatorEnv::getEnvConfig('darkconsole.config-mask'); - $mask = array_fill_keys($mask, true); - - foreach ($mask as $masked_key => $ignored) { - if (!PhabricatorEnv::envConfigExists($masked_key)) { - throw new Exception( - "Configuration 'darkconsole.config-mask' masks unknown ". - "configuration key '".$masked_key."'. If this key has been ". - "renamed, you might be accidentally exposing information which you ". - "don't intend to."); - } - } - - $rows = array(); - foreach ($config_data as $key => $value) { - if (empty($mask[$key])) { - $display_value = is_array($value) ? json_encode($value) : $value; - $display_value = phutil_escape_html($display_value); - } else { - $display_value = phutil_escape_html(''); - } - $rows[] = array( - phutil_escape_html($key), - $display_value, - ); - } - - $table = new AphrontTableView($rows); - $table->setHeaders( - array( - 'Key', - 'Value', - )); - $table->setColumnClasses( - array( - 'header', - 'wide wrap', - )); - - return $lib_table->render().$table->render(); - } -} diff --git a/src/aphront/console/plugin/DarkConsoleErrorLogPlugin.php b/src/aphront/console/plugin/DarkConsoleErrorLogPlugin.php deleted file mode 100644 index 8e4b70a770..0000000000 --- a/src/aphront/console/plugin/DarkConsoleErrorLogPlugin.php +++ /dev/null @@ -1,167 +0,0 @@ -getData()); - - if ($count) { - return - ' '. - "Error Log ({$count})"; - } - - return 'Error Log'; - } - - - public function getDescription() { - return 'Shows errors and warnings.'; - } - - - public function generateData() { - return DarkConsoleErrorLogPluginAPI::getErrors(); - } - - - public function render() { - - $data = $this->getData(); - - $rows = array(); - $details = ''; - - foreach ($data as $index => $row) { - $file = $row['file']; - $line = $row['line']; - - $tag = phutil_render_tag( - 'a', - array( - 'onclick' => jsprintf('show_details(%d)', $index), - ), - phutil_escape_html($row['str'].' at ['.basename($file).':'.$line.']')); - $rows[] = array($tag); - - $details .= - '
'. - phutil_escape_html($row['details'])."\n". - 'Stack trace:'."\n"; - - foreach ($row['trace'] as $key => $entry) { - $line = ''; - if (isset($entry['class'])) { - $line .= $entry['class'].'::'; - } - $line .= idx($entry, 'function', ''); - $href = null; - if (isset($entry['file'])) { - $line .= ' called at ['.$entry['file'].':'.$entry['line'].']'; - try { - $user = $this->getRequest()->getUser(); - $href = $user->loadEditorLink($entry['file'], $entry['line'], ''); - } catch (Exception $ex) { - // The database can be inaccessible. - } - } - - $details .= phutil_render_tag( - 'a', - array( - 'href' => $href, - ), - phutil_escape_html($line)); - $details .= "\n"; - } - - $details .= '
'; - } - - $table = new AphrontTableView($rows); - $table->setClassName('error-log'); - $table->setHeaders(array('Error')); - $table->setNoDataString('No errors.'); - - return '
'. - '
'.$table->render().'
'. - '
'.
-      $details.'
'. - '
'; - } -} - -/* - $data = $this->getData(); - if (!$data) { - return - -
No errors.
-
; - } - - $markup = ; - $alt = false; - foreach ($data as $error) { - $row = ; - - $text = $error['error']; - $text = preg_replace('/\(in .* on line \d+\)$/', '', trim($text)); - - $trace = $error['trace']; - $trace = explode("\n", $trace); - if (!$trace) { - $trace = array('unknown@0@unknown'); - } - - foreach ($trace as $idx => $traceline) { - list($file, $line, $where) = array_merge( - explode('@', $traceline), - array('?', '?', '?')); - if ($where == 'DarkConsole->addError' || - $where == 'debug_rlog') { - unset($trace[$idx]); - } - } - - $row->appendChild(); - - foreach ($trace as $traceline) { - list($file, $line, $where) = array_merge( - explode('@', $traceline), - array('?', '?', '?')); - $row->appendChild(); - $row->appendChild(); - $markup->appendChild($row); - $row = ; - } - - $alt = !$alt; - } - - return - -

Errors

-
{$markup}
-
; -*/ diff --git a/src/aphront/console/plugin/DarkConsoleEventPlugin.php b/src/aphront/console/plugin/DarkConsoleEventPlugin.php deleted file mode 100644 index eb5dbe5e43..0000000000 --- a/src/aphront/console/plugin/DarkConsoleEventPlugin.php +++ /dev/null @@ -1,117 +0,0 @@ -getAllListeners(); - foreach ($listeners as $key => $listener) { - $listeners[$key] = array( - 'id' => $listener->getListenerID(), - 'class' => get_class($listener), - ); - } - - $events = DarkConsoleEventPluginAPI::getEvents(); - foreach ($events as $key => $event) { - $events[$key] = array( - 'type' => $event->getType(), - 'stopped' => $event->isStopped(), - ); - } - - return array( - 'listeners' => $listeners, - 'events' => $events, - ); - } - - public function render() { - $data = $this->getData(); - - $out = array(); - - $out[] = - '
'. - '

Registered Event Listeners

'. - '
'; - - $rows = array(); - foreach ($data['listeners'] as $listener) { - $rows[] = array( - phutil_escape_html($listener['id']), - phutil_escape_html($listener['class']), - ); - } - - $table = new AphrontTableView($rows); - $table->setHeaders( - array( - 'Internal ID', - 'Listener Class', - )); - $table->setColumnClasses( - array( - '', - 'wide', - )); - - $out[] = $table->render(); - - $out[] = - '
'. - '

Event Log

'. - '
'; - - $rows = array(); - foreach ($data['events'] as $event) { - $rows[] = array( - phutil_escape_html($event['type']), - $event['stopped'] ? 'STOPPED' : null, - ); - } - - $table = new AphrontTableView($rows); - $table->setColumnClasses( - array( - 'wide', - )); - $table->setHeaders( - array( - 'Event Type', - 'Stopped', - )); - - $out[] = $table->render(); - - - return implode("\n", $out); - } -} diff --git a/src/aphront/console/plugin/DarkConsolePlugin.php b/src/aphront/console/plugin/DarkConsolePlugin.php deleted file mode 100644 index 142d1aafab..0000000000 --- a/src/aphront/console/plugin/DarkConsolePlugin.php +++ /dev/null @@ -1,95 +0,0 @@ -core = $core; - return $this; - } - - public function getConsoleCore() { - return $this->core; - } - - public function generateData() { - return null; - } - - public function setData($data) { - $this->data = $data; - return $this; - } - - public function getData() { - return $this->data; - } - - public function setRequest($request) { - $this->request = $request; - return $this; - } - - public function getRequest() { - return $this->request; - } - - public function getRequestURI() { - return $this->getRequest()->getRequestURI(); - } - - public function isPermanent() { - return false; - } - - public function shouldStartup() { - return true; - } - - public function didStartup() { - return null; - } - - public function willShutdown() { - return null; - } - - public function didShutdown() { - return null; - } - - public function processRequest() { - return null; - } - -} diff --git a/src/aphront/console/plugin/DarkConsoleRequestPlugin.php b/src/aphront/console/plugin/DarkConsoleRequestPlugin.php deleted file mode 100644 index 7e4ee4a8fd..0000000000 --- a/src/aphront/console/plugin/DarkConsoleRequestPlugin.php +++ /dev/null @@ -1,84 +0,0 @@ - $_REQUEST, - 'Server' => $_SERVER, - ); - } - - public function render() { - - $data = $this->getData(); - - $sections = array( - 'Basics' => array( - 'Machine' => php_uname('n'), - ), - ); - - // NOTE: This may not be present for some SAPIs, like php-fpm. - if (!empty($data['Server']['SERVER_ADDR'])) { - $addr = $data['Server']['SERVER_ADDR']; - $sections['Basics']['Host'] = $addr; - $sections['Basics']['Hostname'] = @gethostbyaddr($addr); - } - - $sections = array_merge($sections, $data); - - $out = array(); - foreach ($sections as $header => $map) { - $rows = array(); - foreach ($map as $key => $value) { - $rows[] = array( - phutil_escape_html($key), - phutil_escape_html(is_array($value) ? json_encode($value) : $value), - ); - } - - $table = new AphrontTableView($rows); - $table->setHeaders( - array( - $header, - null, - )); - $table->setColumnClasses( - array( - 'header', - 'wide wrap', - )); - $out[] = $table->render(); - } - - return implode("\n", $out); - } -} diff --git a/src/aphront/console/plugin/DarkConsoleServicesPlugin.php b/src/aphront/console/plugin/DarkConsoleServicesPlugin.php deleted file mode 100644 index a0db6bac0a..0000000000 --- a/src/aphront/console/plugin/DarkConsoleServicesPlugin.php +++ /dev/null @@ -1,291 +0,0 @@ -getServiceCallLog(); - foreach ($log as $key => $entry) { - $config = idx($entry, 'config', array()); - unset($log[$key]['config']); - - if (empty($_REQUEST['__analyze__'])) { - $log[$key]['explain'] = array( - 'sev' => 7, - 'size' => null, - 'reason' => 'Disabled', - ); - // Query analysis is disabled for this request, so don't do any of it. - continue; - } - - if ($entry['type'] != 'query') { - continue; - } - - // For each SELECT query, go issue an EXPLAIN on it so we can flag stuff - // causing table scans, etc. - if (preg_match('/^\s*SELECT\b/i', $entry['query'])) { - $conn = PhabricatorEnv::newObjectFromConfig( - 'mysql.implementation', - array($entry['config'])); - try { - $explain = queryfx_all( - $conn, - 'EXPLAIN %Q', - $entry['query']); - - $badness = 0; - $size = 1; - $reason = null; - - foreach ($explain as $table) { - $size *= (int)$table['rows']; - - switch ($table['type']) { - case 'index': - $cur_badness = 1; - $cur_reason = 'Index'; - break; - case 'const': - $cur_badness = 1; - $cur_reason = 'Const'; - break; - case 'eq_ref'; - $cur_badness = 2; - $cur_reason = 'EqRef'; - break; - case 'range': - $cur_badness = 3; - $cur_reason = 'Range'; - break; - case 'ref': - $cur_badness = 3; - $cur_reason = 'Ref'; - break; - case 'fulltext': - $cur_badness = 3; - $cur_reason = 'Fulltext'; - break; - case 'ALL': - if (preg_match('/Using where/', $table['Extra'])) { - if ($table['rows'] < 256 && !empty($table['possible_keys'])) { - $cur_badness = 2; - $cur_reason = 'Small Table Scan'; - } else { - $cur_badness = 6; - $cur_reason = 'TABLE SCAN!'; - } - } else { - $cur_badness = 3; - $cur_reason = 'Whole Table'; - } - break; - default: - if (preg_match('/No tables used/i', $table['Extra'])) { - $cur_badness = 1; - $cur_reason = 'No Tables'; - } else if (preg_match('/Impossible/i', $table['Extra'])) { - $cur_badness = 1; - $cur_reason = 'Empty'; - } else { - $cur_badness = 4; - $cur_reason = "Can't Analyze"; - } - break; - } - - if ($cur_badness > $badness) { - $badness = $cur_badness; - $reason = $cur_reason; - } - } - - $log[$key]['explain'] = array( - 'sev' => $badness, - 'size' => $size, - 'reason' => $reason, - ); - } catch (Exception $ex) { - $log[$key]['explain'] = array( - 'sev' => 5, - 'size' => null, - 'reason' => $ex->getMessage(), - ); - } - } - } - - return array( - 'start' => $GLOBALS['__start__'], - 'end' => microtime(true), - 'log' => $log, - ); - } - - public function render() { - $data = $this->getData(); - $log = $data['log']; - $results = array(); - - $results[] = - '
'. - phutil_render_tag( - 'a', - array( - 'href' => $this->getRequestURI()->alter('__analyze__', true), - 'class' => isset($_REQUEST['__analyze__']) - ? 'disabled button' - : 'green button', - ), - 'Analyze Query Plans'). - '

Calls to External Services

'. - '
'. - '
'; - - $page_total = $data['end'] - $data['start']; - $totals = array(); - $counts = array(); - - foreach ($log as $row) { - $totals[$row['type']] = idx($totals, $row['type'], 0) + $row['duration']; - $counts[$row['type']] = idx($counts, $row['type'], 0) + 1; - } - $totals['All Services'] = array_sum($totals); - $counts['All Services'] = array_sum($counts); - - $totals['Entire Page'] = $page_total; - $counts['Entire Page'] = 0; - - $summary = array(); - foreach ($totals as $type => $total) { - $summary[] = array( - $type, - number_format($counts[$type]), - number_format((int)(1000000 * $totals[$type])).' us', - sprintf('%.1f%%', 100 * $totals[$type] / $page_total), - ); - } - $summary_table = new AphrontTableView($summary); - $summary_table->setColumnClasses( - array( - '', - 'n', - 'n', - 'wide', - )); - $summary_table->setHeaders( - array( - 'Type', - 'Count', - 'Total Cost', - 'Page Weight', - )); - - $results[] = $summary_table->render(); - - $rows = array(); - foreach ($log as $row) { - - $analysis = null; - - switch ($row['type']) { - case 'query': - $info = $row['query']; - $info = wordwrap($info, 128, "\n", true); - - if (!empty($row['explain'])) { - $analysis = phutil_escape_html($row['explain']['reason']); - $analysis = phutil_render_tag( - 'span', - array( - 'class' => 'explain-sev-'.$row['explain']['sev'], - ), - $analysis); - } - - $info = phutil_escape_html($info); - break; - case 'connect': - $info = $row['host'].':'.$row['database']; - $info = phutil_escape_html($info); - break; - case 'exec': - $info = $row['command']; - $info = phutil_escape_html($info); - break; - case 'conduit': - $info = $row['method']; - $info = phutil_escape_html($info); - break; - case 'http': - $info = $row['uri']; - $info = phutil_escape_html($info); - break; - default: - $info = '-'; - break; - } - - $rows[] = array( - phutil_escape_html($row['type']), - '+'.number_format(1000 * ($row['begin'] - $data['start'])).' ms', - number_format(1000000 * $row['duration']).' us', - $info, - $analysis, - ); - } - - $table = new AphrontTableView($rows); - $table->setColumnClasses( - array( - null, - 'n', - 'n', - 'wide', - '', - )); - $table->setHeaders( - array( - 'Event', - 'Start', - 'Duration', - 'Details', - 'Analysis', - )); - - $results[] = $table->render(); - - return implode("\n", $results); - } -} - diff --git a/src/aphront/console/plugin/DarkConsoleXHProfPlugin.php b/src/aphront/console/plugin/DarkConsoleXHProfPlugin.php deleted file mode 100644 index 19ea23f93e..0000000000 --- a/src/aphront/console/plugin/DarkConsoleXHProfPlugin.php +++ /dev/null @@ -1,160 +0,0 @@ -getData(); - - if ($run) { - return ' XHProf'; - } - - return 'XHProf'; - } - - public function getDescription() { - return 'Provides detailed PHP profiling information through XHProf.'; - } - - public function generateData() { - return $this->xhprofID; - } - - public function getXHProfRunID() { - return $this->xhprofID; - } - - public function render() { - if (!DarkConsoleXHProfPluginAPI::isProfilerAvailable()) { - $href = PhabricatorEnv::getDoclink('article/Installation_Guide.html'); - $install_guide = phutil_render_tag( - 'a', - array( - 'href' => $href, - 'class' => 'bright-link', - ), - 'Installation Guide'); - return - '
'. - 'The "xhprof" PHP extension is not available. Install xhprof '. - 'to enable the XHProf console plugin. You can find instructions in '. - 'the '.$install_guide.'.'. - '
'; - } - - $result = array(); - - $run = $this->getXHProfRunID(); - - $header = - '
'. - phutil_render_tag( - 'a', - array( - 'href' => $this->getRequestURI()->alter('__profile__', 'page'), - 'class' => $run - ? 'disabled button' - : 'green button', - ), - 'Profile Page'). - '

XHProf Profiler

'. - '
'; - $result[] = $header; - - if ($run) { - $result[] = - 'Profile Permalink'. - ''; - } else { - $result[] = - '
'. - 'Profiling was not enabled for this page. Use the button above '. - 'to enable it.'. - '
'; - } - - return implode("\n", $result); - } - - - public function willShutdown() { - if (isset($_REQUEST['__profile__']) && - $_REQUEST['__profile__'] != 'all') { - $this->xhprofID = DarkConsoleXHProfPluginAPI::stopProfiler(); - } - } - -} -/* - - public function render() { - $run = $this->getData(); - - if ($run) { - $uri = 'http://www.intern.facebook.com/intern/phprof/?run='.$run; - return - -

XHProf Results

-
- Permalink -
{$text}{$file}:{$line}{$where}()