diff --git a/src/__celerity_resource_map__.php b/src/__celerity_resource_map__.php
index 4639052473..1dfcd72148 100644
--- a/src/__celerity_resource_map__.php
+++ b/src/__celerity_resource_map__.php
@@ -1,641 +1,657 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'celerity_mapper.php' to rebuild
  * it.
  * @generated
  */
 
 celerity_register_resource_map(array(
-  'aphront-crumbs-view-css' =>
+  'phabricator-remarkup-css' =>
   array(
-    'uri' => '/res/c666a518/rsrc/css/aphront/crumbs-view.css',
+    'uri' => '/res/786989c3/rsrc/css/core/remarkup.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/crumbs-view.css',
+    'disk' => '/rsrc/css/core/remarkup.css',
   ),
-  'aphront-dark-console-css' =>
+  'phabricator-core-css' =>
   array(
-    'uri' => '/res/056b0c12/rsrc/css/aphront/dark-console.css',
+    'uri' => '/res/6eebb99b/rsrc/css/core/core.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/dark-console.css',
+    'disk' => '/rsrc/css/core/core.css',
   ),
-  'aphront-dialog-view-css' =>
+  'phabricator-core-buttons-css' =>
   array(
-    'uri' => '/res/7101ab69/rsrc/css/aphront/dialog-view.css',
+    'uri' => '/res/53b4f712/rsrc/css/core/buttons.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/dialog-view.css',
+    'disk' => '/rsrc/css/core/buttons.css',
   ),
-  'aphront-error-view-css' =>
+  'syntax-highlighting-css' =>
   array(
-    'uri' => '/res/19b27527/rsrc/css/aphront/error-view.css',
+    'uri' => '/res/fb673ece/rsrc/css/core/syntax.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/error-view.css',
+    'disk' => '/rsrc/css/core/syntax.css',
   ),
-  'aphront-form-view-css' =>
+  'aphront-headsup-action-list-view-css' =>
   array(
-    'uri' => '/res/472d41b4/rsrc/css/aphront/form-view.css',
+    'uri' => '/res/8fd91c1d/rsrc/css/aphront/headsup-action-list-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/form-view.css',
+    'disk' => '/rsrc/css/aphront/headsup-action-list-view.css',
   ),
-  'aphront-headsup-action-list-view-css' =>
+  'aphront-dark-console-css' =>
   array(
-    'uri' => '/res/8fd91c1d/rsrc/css/aphront/headsup-action-list-view.css',
+    'uri' => '/res/056b0c12/rsrc/css/aphront/dark-console.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/headsup-action-list-view.css',
+    'disk' => '/rsrc/css/aphront/dark-console.css',
+  ),
+  'aphront-error-view-css' =>
+  array(
+    'uri' => '/res/19b27527/rsrc/css/aphront/error-view.css',
+    'type' => 'css',
+    'requires' =>
+    array(
+    ),
+    'disk' => '/rsrc/css/aphront/error-view.css',
   ),
   'aphront-panel-view-css' =>
   array(
     'uri' => '/res/63672373/rsrc/css/aphront/panel-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
     'disk' => '/rsrc/css/aphront/panel-view.css',
   ),
-  'aphront-request-failure-view-css' =>
+  'aphront-dialog-view-css' =>
   array(
-    'uri' => '/res/97b8337a/rsrc/css/aphront/request-failure-view.css',
+    'uri' => '/res/7101ab69/rsrc/css/aphront/dialog-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/request-failure-view.css',
+    'disk' => '/rsrc/css/aphront/dialog-view.css',
   ),
-  'aphront-side-nav-view-css' =>
+  'aphront-form-view-css' =>
   array(
-    'uri' => '/res/4f4c5ca8/rsrc/css/aphront/side-nav-view.css',
+    'uri' => '/res/472d41b4/rsrc/css/aphront/form-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/side-nav-view.css',
+    'disk' => '/rsrc/css/aphront/form-view.css',
   ),
-  'aphront-table-view-css' =>
+  'aphront-side-nav-view-css' =>
   array(
-    'uri' => '/res/7bf17fb8/rsrc/css/aphront/table-view.css',
+    'uri' => '/res/4f4c5ca8/rsrc/css/aphront/side-nav-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/table-view.css',
+    'disk' => '/rsrc/css/aphront/side-nav-view.css',
   ),
   'aphront-tokenizer-control-css' =>
   array(
     'uri' => '/res/a3d23074/rsrc/css/aphront/tokenizer.css',
     'type' => 'css',
     'requires' =>
     array(
       0 => 'aphront-typeahead-control-css',
     ),
     'disk' => '/rsrc/css/aphront/tokenizer.css',
   ),
-  'aphront-typeahead-control-css' =>
+  'aphront-crumbs-view-css' =>
   array(
-    'uri' => '/res/928df9f0/rsrc/css/aphront/typeahead.css',
+    'uri' => '/res/c666a518/rsrc/css/aphront/crumbs-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/aphront/typeahead.css',
+    'disk' => '/rsrc/css/aphront/crumbs-view.css',
   ),
-  'phabricator-standard-page-view' =>
+  'aphront-request-failure-view-css' =>
   array(
-    'uri' => '/res/0d41ea7c/rsrc/css/application/base/standard-page-view.css',
+    'uri' => '/res/97b8337a/rsrc/css/aphront/request-failure-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/base/standard-page-view.css',
+    'disk' => '/rsrc/css/aphront/request-failure-view.css',
   ),
-  'differential-revision-add-comment-css' =>
+  'aphront-typeahead-control-css' =>
   array(
-    'uri' => '/res/aaae14d3/rsrc/css/application/differential/add-comment.css',
+    'uri' => '/res/928df9f0/rsrc/css/aphront/typeahead.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/add-comment.css',
+    'disk' => '/rsrc/css/aphront/typeahead.css',
   ),
-  'differential-changeset-view-css' =>
+  'aphront-table-view-css' =>
   array(
-    'uri' => '/res/f26ca6f9/rsrc/css/application/differential/changeset-view.css',
+    'uri' => '/res/7bf17fb8/rsrc/css/aphront/table-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/changeset-view.css',
+    'disk' => '/rsrc/css/aphront/table-view.css',
   ),
-  'differential-core-view-css' =>
+  'diffusion-commit-view-css' =>
   array(
-    'uri' => '/res/525d1a12/rsrc/css/application/differential/core.css',
+    'uri' => '/res/8c139192/rsrc/css/application/diffusion/commit-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/core.css',
+    'disk' => '/rsrc/css/application/diffusion/commit-view.css',
   ),
-  'differential-revision-comment-list-css' =>
+  'diffusion-source-css' =>
   array(
-    'uri' => '/res/10b9a829/rsrc/css/application/differential/revision-comment-list.css',
+    'uri' => '/res/7f50817b/rsrc/css/application/diffusion/diffusion-source.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/revision-comment-list.css',
+    'disk' => '/rsrc/css/application/diffusion/diffusion-source.css',
   ),
-  'differential-revision-comment-css' =>
+  'phabricator-standard-page-view' =>
   array(
-    'uri' => '/res/b271baaf/rsrc/css/application/differential/revision-comment.css',
+    'uri' => '/res/0d41ea7c/rsrc/css/application/base/standard-page-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/revision-comment.css',
+    'disk' => '/rsrc/css/application/base/standard-page-view.css',
   ),
-  'differential-revision-detail-css' =>
+  'maniphest-task-summary-css' =>
   array(
-    'uri' => '/res/623e3946/rsrc/css/application/differential/revision-detail.css',
+    'uri' => '/res/94d01e6f/rsrc/css/application/maniphest/task-summary.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/revision-detail.css',
+    'disk' => '/rsrc/css/application/maniphest/task-summary.css',
   ),
-  'differential-revision-history-css' =>
+  'maniphest-transaction-detail-css' =>
   array(
-    'uri' => '/res/755f3da3/rsrc/css/application/differential/revision-history.css',
+    'uri' => '/res/9418efc9/rsrc/css/application/maniphest/transaction-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/revision-history.css',
+    'disk' => '/rsrc/css/application/maniphest/transaction-detail.css',
   ),
-  'differential-table-of-contents-css' =>
+  'mainphest-task-detail-css' =>
   array(
-    'uri' => '/res/e68f6f05/rsrc/css/application/differential/table-of-contents.css',
+    'uri' => '/res/e5f3beca/rsrc/css/application/maniphest/task-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/differential/table-of-contents.css',
+    'disk' => '/rsrc/css/application/maniphest/task-detail.css',
   ),
-  'diffusion-commit-view-css' =>
+  'herald-test-css' =>
   array(
-    'uri' => '/res/8c139192/rsrc/css/application/diffusion/commit-view.css',
+    'uri' => '/res/28269358/rsrc/css/application/herald/herald-test.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/diffusion/commit-view.css',
+    'disk' => '/rsrc/css/application/herald/herald-test.css',
   ),
-  'phabricator-directory-css' =>
+  'herald-css' =>
   array(
-    'uri' => '/res/6a000601/rsrc/css/application/directory/phabricator-directory.css',
+    'uri' => '/res/211a4b1b/rsrc/css/application/herald/herald.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/directory/phabricator-directory.css',
+    'disk' => '/rsrc/css/application/herald/herald.css',
   ),
-  'herald-test-css' =>
+  'differential-table-of-contents-css' =>
   array(
-    'uri' => '/res/28269358/rsrc/css/application/herald/herald-test.css',
+    'uri' => '/res/e68f6f05/rsrc/css/application/differential/table-of-contents.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/herald/herald-test.css',
+    'disk' => '/rsrc/css/application/differential/table-of-contents.css',
   ),
-  'herald-css' =>
+  'differential-revision-history-css' =>
   array(
-    'uri' => '/res/211a4b1b/rsrc/css/application/herald/herald.css',
+    'uri' => '/res/755f3da3/rsrc/css/application/differential/revision-history.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/herald/herald.css',
+    'disk' => '/rsrc/css/application/differential/revision-history.css',
   ),
-  'mainphest-task-detail-css' =>
+  'differential-revision-add-comment-css' =>
   array(
-    'uri' => '/res/e5f3beca/rsrc/css/application/maniphest/task-detail.css',
+    'uri' => '/res/aaae14d3/rsrc/css/application/differential/add-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/maniphest/task-detail.css',
+    'disk' => '/rsrc/css/application/differential/add-comment.css',
   ),
-  'maniphest-task-summary-css' =>
+  'differential-revision-comment-css' =>
   array(
-    'uri' => '/res/94d01e6f/rsrc/css/application/maniphest/task-summary.css',
+    'uri' => '/res/b271baaf/rsrc/css/application/differential/revision-comment.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/maniphest/task-summary.css',
+    'disk' => '/rsrc/css/application/differential/revision-comment.css',
   ),
-  'maniphest-transaction-detail-css' =>
+  'differential-revision-detail-css' =>
   array(
-    'uri' => '/res/9418efc9/rsrc/css/application/maniphest/transaction-detail.css',
+    'uri' => '/res/623e3946/rsrc/css/application/differential/revision-detail.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/maniphest/transaction-detail.css',
+    'disk' => '/rsrc/css/application/differential/revision-detail.css',
   ),
-  'phabricator-object-selector-css' =>
+  'differential-core-view-css' =>
   array(
-    'uri' => '/res/52a7e289/rsrc/css/application/objectselector/object-selector.css',
+    'uri' => '/res/525d1a12/rsrc/css/application/differential/core.css',
     'type' => 'css',
     'requires' =>
     array(
-      0 => 'aphront-dialog-view-css',
     ),
-    'disk' => '/rsrc/css/application/objectselector/object-selector.css',
+    'disk' => '/rsrc/css/application/differential/core.css',
   ),
-  'phabricator-profile-css' =>
+  'differential-revision-comment-list-css' =>
   array(
-    'uri' => '/res/259ad37f/rsrc/css/application/people/profile.css',
+    'uri' => '/res/10b9a829/rsrc/css/application/differential/revision-comment-list.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/application/people/profile.css',
+    'disk' => '/rsrc/css/application/differential/revision-comment-list.css',
   ),
-  'phabricator-core-buttons-css' =>
+  'differential-changeset-view-css' =>
   array(
-    'uri' => '/res/53b4f712/rsrc/css/core/buttons.css',
+    'uri' => '/res/f26ca6f9/rsrc/css/application/differential/changeset-view.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/core/buttons.css',
+    'disk' => '/rsrc/css/application/differential/changeset-view.css',
   ),
-  'phabricator-core-css' =>
+  'phabricator-directory-css' =>
   array(
-    'uri' => '/res/6eebb99b/rsrc/css/core/core.css',
+    'uri' => '/res/6a000601/rsrc/css/application/directory/phabricator-directory.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/core/core.css',
+    'disk' => '/rsrc/css/application/directory/phabricator-directory.css',
   ),
-  'phabricator-remarkup-css' =>
+  'phabricator-object-selector-css' =>
   array(
-    'uri' => '/res/786989c3/rsrc/css/core/remarkup.css',
+    'uri' => '/res/52a7e289/rsrc/css/application/objectselector/object-selector.css',
     'type' => 'css',
     'requires' =>
     array(
+      0 => 'aphront-dialog-view-css',
     ),
-    'disk' => '/rsrc/css/core/remarkup.css',
+    'disk' => '/rsrc/css/application/objectselector/object-selector.css',
   ),
-  'syntax-highlighting-css' =>
+  'phabricator-profile-css' =>
   array(
-    'uri' => '/res/fb673ece/rsrc/css/core/syntax.css',
+    'uri' => '/res/259ad37f/rsrc/css/application/people/profile.css',
     'type' => 'css',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/css/core/syntax.css',
+    'disk' => '/rsrc/css/application/people/profile.css',
   ),
-  'javelin-behavior-dark-console' =>
+  'javelin-typeahead-dev' =>
   array(
-    'uri' => '/res/020b0265/rsrc/js/application/core/behavior-dark-console.js',
+    'uri' => '/res/6de6ae59/rsrc/js/javelin/typeahead.dev.js',
     'type' => 'js',
     'requires' =>
     array(
     ),
-    'disk' => '/rsrc/js/application/core/behavior-dark-console.js',
+    'disk' => '/rsrc/js/javelin/typeahead.dev.js',
   ),
-  'javelin-behavior-phabricator-object-selector' =>
+  'javelin-workflow-prod' =>
   array(
-    'uri' => '/res/4fe735af/rsrc/js/application/core/behavior-object-selector.js',
+    'uri' => '/res/b758e0a0/rsrc/js/javelin/workflow.min.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/core/behavior-object-selector.js',
+    'disk' => '/rsrc/js/javelin/workflow.min.js',
   ),
-  'javelin-behavior-aphront-basic-tokenizer' =>
+  'javelin-workflow-dev' =>
   array(
-    'uri' => '/res/8317d761/rsrc/js/application/core/behavior-tokenizer.js',
+    'uri' => '/res/c6b17f93/rsrc/js/javelin/workflow.dev.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/core/behavior-tokenizer.js',
+    'disk' => '/rsrc/js/javelin/workflow.dev.js',
   ),
-  'javelin-behavior-workflow' =>
+  'javelin-lib-dev' =>
   array(
-    'uri' => '/res/15446e7e/rsrc/js/application/core/behavior-workflow.js',
+    'uri' => '/res/a0e7a5e9/rsrc/js/javelin/javelin.dev.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/core/behavior-workflow.js',
+    'disk' => '/rsrc/js/javelin/javelin.dev.js',
   ),
-  'multirow-row-manager' =>
+  'javelin-init-prod' =>
   array(
-    'uri' => '/res/330d076b/rsrc/js/application/core/MultirowRowManager.js',
+    'uri' => '/res/1267c868/rsrc/js/javelin/init.min.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/core/MultirowRowManager.js',
+    'disk' => '/rsrc/js/javelin/init.min.js',
   ),
-  'javelin-behavior-differential-add-reviewers' =>
+  'javelin-typeahead-prod' =>
   array(
-    'uri' => '/res/330154e4/rsrc/js/application/differential/behavior-add-reviewers.js',
+    'uri' => '/res/69d5fad1/rsrc/js/javelin/typeahead.min.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-add-reviewers.js',
+    'disk' => '/rsrc/js/javelin/typeahead.min.js',
   ),
-  'javelin-behavior-differential-feedback-preview' =>
+  'javelin-lib-prod' =>
   array(
-    'uri' => '/res/8695d8b8/rsrc/js/application/differential/behavior-comment-preview.js',
+    'uri' => '/res/2f2b3b2e/rsrc/js/javelin/javelin.min.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js',
+    'disk' => '/rsrc/js/javelin/javelin.min.js',
   ),
-  'javelin-behavior-differential-diff-radios' =>
+  'javelin-magical-init' =>
   array(
-    'uri' => '/res/fdeb3823/rsrc/js/application/differential/behavior-diff-radios.js',
+    'uri' => '/res/76614f84/rsrc/js/javelin/init.dev.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js',
+    'disk' => '/rsrc/js/javelin/init.dev.js',
   ),
-  'javelin-behavior-differential-edit-inline-comments' =>
+  'javelin-behavior-diffusion-jump-to' =>
   array(
-    'uri' => '/res/74747b2e/rsrc/js/application/differential/behavior-edit-inline-comments.js',
+    'uri' => '/res/4f3f6cdc/rsrc/js/application/diffusion/behavior-jump-to.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js',
+    'disk' => '/rsrc/js/application/diffusion/behavior-jump-to.js',
   ),
-  'javelin-behavior-differential-populate' =>
+  'javelin-behavior-maniphest-transaction-controls' =>
   array(
-    'uri' => '/res/a13dcd7e/rsrc/js/application/differential/behavior-populate.js',
+    'uri' => '/res/fc6a8722/rsrc/js/application/maniphest/behavior-transaction-controls.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-populate.js',
+    'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js',
   ),
-  'javelin-behavior-differential-show-all-comments' =>
+  'javelin-behavior-dark-console' =>
   array(
-    'uri' => '/res/2a3592b8/rsrc/js/application/differential/behavior-show-all-comments.js',
+    'uri' => '/res/020b0265/rsrc/js/application/core/behavior-dark-console.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js',
+    'disk' => '/rsrc/js/application/core/behavior-dark-console.js',
   ),
-  'javelin-behavior-differential-show-more' =>
+  'javelin-behavior-aphront-basic-tokenizer' =>
   array(
-    'uri' => '/res/ea998002/rsrc/js/application/differential/behavior-show-more.js',
+    'uri' => '/res/8317d761/rsrc/js/application/core/behavior-tokenizer.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/differential/behavior-show-more.js',
+    'disk' => '/rsrc/js/application/core/behavior-tokenizer.js',
   ),
-  'javelin-behavior-herald-rule-editor' =>
+  'multirow-row-manager' =>
   array(
-    'uri' => '/res/48108130/rsrc/js/application/herald/herald-rule-editor.js',
+    'uri' => '/res/330d076b/rsrc/js/application/core/MultirowRowManager.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'herald-rule-editor',
-      1 => 'javelin-lib-dev',
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
+    'disk' => '/rsrc/js/application/core/MultirowRowManager.js',
   ),
-  'herald-rule-editor' =>
+  'javelin-behavior-phabricator-object-selector' =>
   array(
-    'uri' => '/res/8b5e9d5e/rsrc/js/application/herald/HeraldRuleEditor.js',
+    'uri' => '/res/4fe735af/rsrc/js/application/core/behavior-object-selector.js',
     'type' => 'js',
     'requires' =>
     array(
-      0 => 'multirow-row-manager',
-      1 => 'javelin-lib-dev',
-      2 => 'javelin-typeahead-dev',
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
+    'disk' => '/rsrc/js/application/core/behavior-object-selector.js',
   ),
-  'javelin-behavior-maniphest-transaction-controls' =>
+  'javelin-behavior-workflow' =>
   array(
-    'uri' => '/res/fc6a8722/rsrc/js/application/maniphest/behavior-transaction-controls.js',
+    'uri' => '/res/15446e7e/rsrc/js/application/core/behavior-workflow.js',
     'type' => 'js',
     'requires' =>
     array(
       0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/application/maniphest/behavior-transaction-controls.js',
+    'disk' => '/rsrc/js/application/core/behavior-workflow.js',
   ),
-  'javelin-magical-init' =>
+  'herald-rule-editor' =>
   array(
-    'uri' => '/res/76614f84/rsrc/js/javelin/init.dev.js',
+    'uri' => '/res/8b5e9d5e/rsrc/js/application/herald/HeraldRuleEditor.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'multirow-row-manager',
     ),
-    'disk' => '/rsrc/js/javelin/init.dev.js',
+    'disk' => '/rsrc/js/application/herald/HeraldRuleEditor.js',
   ),
-  'javelin-init-prod' =>
+  'javelin-behavior-herald-rule-editor' =>
   array(
-    'uri' => '/res/1267c868/rsrc/js/javelin/init.min.js',
+    'uri' => '/res/48108130/rsrc/js/application/herald/herald-rule-editor.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'herald-rule-editor',
     ),
-    'disk' => '/rsrc/js/javelin/init.min.js',
+    'disk' => '/rsrc/js/application/herald/herald-rule-editor.js',
   ),
-  'javelin-lib-dev' =>
+  'javelin-behavior-differential-diff-radios' =>
   array(
-    'uri' => '/res/a0e7a5e9/rsrc/js/javelin/javelin.dev.js',
+    'uri' => '/res/fdeb3823/rsrc/js/application/differential/behavior-diff-radios.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/javelin.dev.js',
+    'disk' => '/rsrc/js/application/differential/behavior-diff-radios.js',
   ),
-  'javelin-lib-prod' =>
+  'javelin-behavior-differential-show-more' =>
   array(
-    'uri' => '/res/2f2b3b2e/rsrc/js/javelin/javelin.min.js',
+    'uri' => '/res/ea998002/rsrc/js/application/differential/behavior-show-more.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/javelin.min.js',
+    'disk' => '/rsrc/js/application/differential/behavior-show-more.js',
   ),
-  'javelin-typeahead-dev' =>
+  'javelin-behavior-differential-add-reviewers' =>
   array(
-    'uri' => '/res/6de6ae59/rsrc/js/javelin/typeahead.dev.js',
+    'uri' => '/res/330154e4/rsrc/js/application/differential/behavior-add-reviewers.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/typeahead.dev.js',
+    'disk' => '/rsrc/js/application/differential/behavior-add-reviewers.js',
   ),
-  'javelin-typeahead-prod' =>
+  'javelin-behavior-differential-feedback-preview' =>
   array(
-    'uri' => '/res/69d5fad1/rsrc/js/javelin/typeahead.min.js',
+    'uri' => '/res/8695d8b8/rsrc/js/application/differential/behavior-comment-preview.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/typeahead.min.js',
+    'disk' => '/rsrc/js/application/differential/behavior-comment-preview.js',
   ),
-  'javelin-workflow-dev' =>
+  'javelin-behavior-differential-populate' =>
   array(
-    'uri' => '/res/c6b17f93/rsrc/js/javelin/workflow.dev.js',
+    'uri' => '/res/a13dcd7e/rsrc/js/application/differential/behavior-populate.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/workflow.dev.js',
+    'disk' => '/rsrc/js/application/differential/behavior-populate.js',
   ),
-  'javelin-workflow-prod' =>
+  'javelin-behavior-differential-edit-inline-comments' =>
   array(
-    'uri' => '/res/b758e0a0/rsrc/js/javelin/workflow.min.js',
+    'uri' => '/res/74747b2e/rsrc/js/application/differential/behavior-edit-inline-comments.js',
     'type' => 'js',
     'requires' =>
     array(
+      0 => 'javelin-lib-dev',
     ),
-    'disk' => '/rsrc/js/javelin/workflow.min.js',
+    'disk' => '/rsrc/js/application/differential/behavior-edit-inline-comments.js',
+  ),
+  'javelin-behavior-differential-show-all-comments' =>
+  array(
+    'uri' => '/res/2a3592b8/rsrc/js/application/differential/behavior-show-all-comments.js',
+    'type' => 'js',
+    'requires' =>
+    array(
+      0 => 'javelin-lib-dev',
+    ),
+    'disk' => '/rsrc/js/application/differential/behavior-show-all-comments.js',
   ),
 ), array (
   'packages' =>
   array (
     'abe939ec' =>
     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 => 'phabricator-directory-css',
         12 => 'phabricator-remarkup-css',
         13 => 'syntax-highlighting-css',
       ),
       'uri' => '/res/pkg/abe939ec/core.pkg.css',
       'type' => 'css',
     ),
     '76f3c1f8' =>
     array (
       'name' => 'differential.pkg.css',
       'symbols' =>
       array (
         0 => 'differential-core-view-css',
         1 => 'differential-changeset-view-css',
         2 => 'differential-revision-detail-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',
       ),
       'uri' => '/res/pkg/76f3c1f8/differential.pkg.css',
       'type' => 'css',
     ),
     '30d594cf' =>
     array (
       'name' => 'differential.pkg.js',
       'symbols' =>
       array (
         0 => 'javelin-behavior-differential-feedback-preview',
         1 => 'javelin-behavior-differential-edit-inline-comments',
         2 => 'javelin-behavior-differential-populate',
         3 => 'javelin-behavior-differential-show-more',
         4 => 'javelin-behavior-differential-diff-radios',
       ),
       'uri' => '/res/pkg/30d594cf/differential.pkg.js',
       'type' => 'js',
     ),
     'eadf6ec3' =>
     array (
       'name' => 'diffusion.pkg.css',
       'symbols' =>
       array (
         0 => 'diffusion-commit-view-css',
       ),
       'uri' => '/res/pkg/eadf6ec3/diffusion.pkg.css',
       'type' => 'css',
     ),
   ),
   'reverse' =>
   array (
     'phabricator-core-css' => 'abe939ec',
     'phabricator-core-buttons-css' => 'abe939ec',
     'phabricator-standard-page-view' => 'abe939ec',
     'aphront-dialog-view-css' => 'abe939ec',
     'aphront-form-view-css' => 'abe939ec',
     'aphront-panel-view-css' => 'abe939ec',
     'aphront-side-nav-view-css' => 'abe939ec',
     'aphront-table-view-css' => 'abe939ec',
     'aphront-crumbs-view-css' => 'abe939ec',
     'aphront-tokenizer-control-css' => 'abe939ec',
     'aphront-typeahead-control-css' => 'abe939ec',
     'phabricator-directory-css' => 'abe939ec',
     'phabricator-remarkup-css' => 'abe939ec',
     'syntax-highlighting-css' => 'abe939ec',
     'differential-core-view-css' => '76f3c1f8',
     'differential-changeset-view-css' => '76f3c1f8',
     'differential-revision-detail-css' => '76f3c1f8',
     'differential-revision-history-css' => '76f3c1f8',
     'differential-table-of-contents-css' => '76f3c1f8',
     'differential-revision-comment-css' => '76f3c1f8',
     'differential-revision-add-comment-css' => '76f3c1f8',
     'differential-revision-comment-list-css' => '76f3c1f8',
     'javelin-behavior-differential-feedback-preview' => '30d594cf',
     'javelin-behavior-differential-edit-inline-comments' => '30d594cf',
     'javelin-behavior-differential-populate' => '30d594cf',
     'javelin-behavior-differential-show-more' => '30d594cf',
     'javelin-behavior-differential-diff-radios' => '30d594cf',
     'diffusion-commit-view-css' => 'eadf6ec3',
   ),
 ));
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
index 782c95c853..89741038f6 100644
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1,715 +1,717 @@
 <?php
 
 /**
  * This file is automatically generated. Use 'phutil_mapper.php' to rebuild it.
  * @generated
  */
 
 phutil_register_library_map(array(
   'class' =>
   array(
     'Aphront400Response' => 'aphront/response/400',
     'Aphront404Response' => 'aphront/response/404',
     'AphrontAjaxResponse' => 'aphront/response/ajax',
     'AphrontApplicationConfiguration' => 'aphront/applicationconfiguration',
     'AphrontController' => 'aphront/controller',
     'AphrontCrumbsView' => 'view/layout/crumbs',
     'AphrontDatabaseConnection' => 'storage/connection/base',
     'AphrontDefaultApplicationConfiguration' => 'aphront/default/configuration',
     'AphrontDefaultApplicationController' => 'aphront/default/controller',
     'AphrontDialogResponse' => 'aphront/response/dialog',
     'AphrontDialogView' => 'view/dialog',
     'AphrontErrorView' => 'view/form/error',
     'AphrontException' => 'aphront/exception/base',
     'AphrontFileResponse' => 'aphront/response/file',
     'AphrontFormCheckboxControl' => 'view/form/control/checkbox',
     'AphrontFormControl' => 'view/form/control/base',
     'AphrontFormDividerControl' => 'view/form/control/divider',
     'AphrontFormFileControl' => 'view/form/control/file',
     'AphrontFormMarkupControl' => 'view/form/control/markup',
     'AphrontFormPasswordControl' => 'view/form/control/password',
     'AphrontFormRecaptchaControl' => 'view/form/control/recaptcha',
     'AphrontFormSelectControl' => 'view/form/control/select',
     'AphrontFormStaticControl' => 'view/form/control/static',
     'AphrontFormSubmitControl' => 'view/form/control/submit',
     'AphrontFormTextAreaControl' => 'view/form/control/textarea',
     'AphrontFormTextControl' => 'view/form/control/text',
     'AphrontFormTokenizerControl' => 'view/form/control/tokenizer',
     'AphrontFormView' => 'view/form/base',
     'AphrontHeadsupActionListView' => 'view/layout/headsup/actionlist',
     'AphrontHeadsupActionView' => 'view/layout/headsup/action',
     'AphrontMySQLDatabaseConnection' => 'storage/connection/mysql',
     'AphrontNullView' => 'view/null',
     'AphrontPageView' => 'view/page/base',
     'AphrontPanelView' => 'view/layout/panel',
     'AphrontQueryConnectionException' => 'storage/exception/connection',
     'AphrontQueryConnectionLostException' => 'storage/exception/connectionlost',
     'AphrontQueryCountException' => 'storage/exception/count',
     'AphrontQueryDuplicateKeyException' => 'storage/exception/duplicatekey',
     'AphrontQueryException' => 'storage/exception/base',
     'AphrontQueryObjectMissingException' => 'storage/exception/objectmissing',
     'AphrontQueryParameterException' => 'storage/exception/parameter',
     'AphrontQueryRecoverableException' => 'storage/exception/recoverable',
     'AphrontRedirectException' => 'aphront/exception/redirect',
     'AphrontRedirectResponse' => 'aphront/response/redirect',
     'AphrontRequest' => 'aphront/request',
     'AphrontRequestFailureView' => 'view/page/failure',
     'AphrontResponse' => 'aphront/response/base',
     'AphrontSideNavView' => 'view/layout/sidenav',
     'AphrontTableView' => 'view/control/table',
     'AphrontTokenizerTemplateView' => 'view/control/tokenizer',
     'AphrontURIMapper' => 'aphront/mapper',
     'AphrontView' => 'view/base',
     'AphrontWebpageResponse' => 'aphront/response/webpage',
     'CelerityAPI' => 'infrastructure/celerity/api',
     'CelerityResourceController' => 'infrastructure/celerity/controller',
     'CelerityResourceMap' => 'infrastructure/celerity/map',
     'CelerityStaticResourceResponse' => 'infrastructure/celerity/response',
     'ConduitAPIMethod' => 'applications/conduit/method/base',
     'ConduitAPIRequest' => 'applications/conduit/protocol/request',
     'ConduitAPI_conduit_connect_Method' => 'applications/conduit/method/conduit/connect',
     'ConduitAPI_conduit_ping_Method' => 'applications/conduit/method/conduit/ping',
     'ConduitAPI_daemon_launched_Method' => 'applications/conduit/method/daemon/launched',
     'ConduitAPI_daemon_log_Method' => 'applications/conduit/method/daemon/log',
     'ConduitAPI_differential_creatediff_Method' => 'applications/conduit/method/differential/creatediff',
     'ConduitAPI_differential_createrevision_Method' => 'applications/conduit/method/differential/createrevision',
     'ConduitAPI_differential_find_Method' => 'applications/conduit/method/differential/find',
     'ConduitAPI_differential_getcommitmessage_Method' => 'applications/conduit/method/differential/getcommitmessage',
     'ConduitAPI_differential_getcommitpaths_Method' => 'applications/conduit/method/differential/getcommitpaths',
     'ConduitAPI_differential_getdiff_Method' => 'applications/conduit/method/differential/getdiff',
     'ConduitAPI_differential_markcommitted_Method' => 'applications/conduit/method/differential/markcommitted',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/conduit/method/differential/parsecommitmessage',
     'ConduitAPI_differential_setdiffproperty_Method' => 'applications/conduit/method/differential/setdiffproperty',
     'ConduitAPI_differential_updaterevision_Method' => 'applications/conduit/method/differential/updaterevision',
     'ConduitAPI_file_upload_Method' => 'applications/conduit/method/file/upload',
     'ConduitAPI_user_find_Method' => 'applications/conduit/method/user/find',
     'ConduitException' => 'applications/conduit/protocol/exception',
     'DarkConsole' => 'aphront/console/api',
     'DarkConsoleConfigPlugin' => 'aphront/console/plugin/config',
     'DarkConsoleController' => 'aphront/console/controller',
     'DarkConsoleCore' => 'aphront/console/core',
     'DarkConsoleErrorLogPlugin' => 'aphront/console/plugin/errorlog',
     'DarkConsoleErrorLogPluginAPI' => 'aphront/console/plugin/errorlog/api',
     'DarkConsolePlugin' => 'aphront/console/plugin/base',
     'DarkConsoleRequestPlugin' => 'aphront/console/plugin/request',
     'DarkConsoleServicesPlugin' => 'aphront/console/plugin/services',
     'DarkConsoleServicesPluginAPI' => 'aphront/console/plugin/services/api',
     'DarkConsoleXHProfPlugin' => 'aphront/console/plugin/xhprof',
     'DarkConsoleXHProfPluginAPI' => 'aphront/console/plugin/xhprof/api',
     'DifferentialAction' => 'applications/differential/constants/action',
     'DifferentialAddCommentView' => 'applications/differential/view/addcomment',
     'DifferentialAttachController' => 'applications/differential/controller/attach',
     'DifferentialCCWelcomeMail' => 'applications/differential/mail/ccwelcome',
     'DifferentialChangeType' => 'applications/differential/constants/changetype',
     'DifferentialChangeset' => 'applications/differential/storage/changeset',
     'DifferentialChangesetDetailView' => 'applications/differential/view/changesetdetailview',
     'DifferentialChangesetListView' => 'applications/differential/view/changesetlistview',
     'DifferentialChangesetParser' => 'applications/differential/parser/changeset',
     'DifferentialChangesetViewController' => 'applications/differential/controller/changesetview',
     'DifferentialComment' => 'applications/differential/storage/comment',
     'DifferentialCommentEditor' => 'applications/differential/editor/comment',
     'DifferentialCommentMail' => 'applications/differential/mail/comment',
     'DifferentialCommentPreviewController' => 'applications/differential/controller/commentpreview',
     'DifferentialCommentSaveController' => 'applications/differential/controller/commentsave',
     'DifferentialCommitMessage' => 'applications/differential/parser/commitmessage',
     'DifferentialCommitMessageData' => 'applications/differential/data/commitmessage',
     'DifferentialCommitMessageParserException' => 'applications/differential/parser/commitmessage/exception',
     'DifferentialController' => 'applications/differential/controller/base',
     'DifferentialDAO' => 'applications/differential/storage/base',
     'DifferentialDiff' => 'applications/differential/storage/diff',
     'DifferentialDiffContentMail' => 'applications/differential/mail/diffcontent',
     'DifferentialDiffCreateController' => 'applications/differential/controller/diffcreate',
     'DifferentialDiffProperty' => 'applications/differential/storage/diffproperty',
     'DifferentialDiffTableOfContentsView' => 'applications/differential/view/difftableofcontents',
     'DifferentialDiffViewController' => 'applications/differential/controller/diffview',
     'DifferentialHunk' => 'applications/differential/storage/hunk',
     'DifferentialInlineComment' => 'applications/differential/storage/inlinecomment',
     'DifferentialInlineCommentEditController' => 'applications/differential/controller/inlinecommentedit',
     'DifferentialInlineCommentPreviewController' => 'applications/differential/controller/inlinecommentpreview',
     'DifferentialInlineCommentView' => 'applications/differential/view/inlinecomment',
     'DifferentialLintStatus' => 'applications/differential/constants/lintstatus',
     'DifferentialMail' => 'applications/differential/mail/base',
     'DifferentialMarkupEngineFactory' => 'applications/differential/parser/markup',
     'DifferentialNewDiffMail' => 'applications/differential/mail/newdiff',
     'DifferentialReviewRequestMail' => 'applications/differential/mail/reviewrequest',
     'DifferentialRevision' => 'applications/differential/storage/revision',
     'DifferentialRevisionCommentListView' => 'applications/differential/view/revisioncommentlist',
     'DifferentialRevisionCommentView' => 'applications/differential/view/revisioncomment',
     'DifferentialRevisionControlSystem' => 'applications/differential/constants/revisioncontrolsystem',
     'DifferentialRevisionDetailView' => 'applications/differential/view/revisiondetail',
     'DifferentialRevisionEditController' => 'applications/differential/controller/revisionedit',
     'DifferentialRevisionEditor' => 'applications/differential/editor/revision',
     'DifferentialRevisionListController' => 'applications/differential/controller/revisionlist',
     'DifferentialRevisionListData' => 'applications/differential/data/revisionlist',
     'DifferentialRevisionStatus' => 'applications/differential/constants/revisionstatus',
     'DifferentialRevisionUpdateHistoryView' => 'applications/differential/view/revisionupdatehistory',
     'DifferentialRevisionViewController' => 'applications/differential/controller/revisionview',
     'DifferentialSubscribeController' => 'applications/differential/controller/subscribe',
     'DifferentialUnitStatus' => 'applications/differential/constants/unitstatus',
     'DiffusionBranchInformation' => 'applications/diffusion/data/branch',
     'DiffusionBranchQuery' => 'applications/diffusion/query/branch/base',
     'DiffusionBranchTableView' => 'applications/diffusion/view/branchtable',
     'DiffusionBrowseController' => 'applications/diffusion/controller/browse',
     'DiffusionBrowseFileController' => 'applications/diffusion/controller/file',
     'DiffusionBrowseQuery' => 'applications/diffusion/query/browse/base',
     'DiffusionBrowseTableView' => 'applications/diffusion/view/browsetable',
     'DiffusionChangeController' => 'applications/diffusion/controller/change',
     'DiffusionCommitChangeTableView' => 'applications/diffusion/view/commitchangetable',
     'DiffusionCommitController' => 'applications/diffusion/controller/commit',
     'DiffusionController' => 'applications/diffusion/controller/base',
     'DiffusionFileContent' => 'applications/diffusion/data/filecontent',
     'DiffusionFileContentQuery' => 'applications/diffusion/query/filecontent/base',
     'DiffusionGitBranchQuery' => 'applications/diffusion/query/branch/git',
     'DiffusionGitBrowseQuery' => 'applications/diffusion/query/browse/git',
     'DiffusionGitFileContentQuery' => 'applications/diffusion/query/filecontent/git',
     'DiffusionGitHistoryQuery' => 'applications/diffusion/query/history/git',
     'DiffusionGitPathIDQuery' => 'applications/diffusion/query/pathid/base',
     'DiffusionGitRequest' => 'applications/diffusion/request/git',
     'DiffusionHistoryController' => 'applications/diffusion/controller/history',
     'DiffusionHistoryQuery' => 'applications/diffusion/query/history/base',
     'DiffusionHistoryTableView' => 'applications/diffusion/view/historytable',
     'DiffusionHomeController' => 'applications/diffusion/controller/home',
     'DiffusionPathChange' => 'applications/diffusion/data/pathchange',
     'DiffusionPathChangeQuery' => 'applications/diffusion/query/pathchange/base',
     'DiffusionRepositoryController' => 'applications/diffusion/controller/repository',
     'DiffusionRepositoryPath' => 'applications/diffusion/data/repositorypath',
     'DiffusionRequest' => 'applications/diffusion/request/base',
     'DiffusionSvnBrowseQuery' => 'applications/diffusion/query/browse/svn',
     'DiffusionSvnFileContentQuery' => 'applications/diffusion/query/filecontent/svn',
     'DiffusionSvnHistoryQuery' => 'applications/diffusion/query/history/svn',
+    'DiffusionSvnRequest' => 'applications/diffusion/request/svn',
     'DiffusionView' => 'applications/diffusion/view/base',
     'HeraldAction' => 'applications/herald/storage/action',
     'HeraldActionConfig' => 'applications/herald/config/action',
     'HeraldApplyTranscript' => 'applications/herald/storage/transcript/apply',
     'HeraldCondition' => 'applications/herald/storage/condition',
     'HeraldConditionConfig' => 'applications/herald/config/condition',
     'HeraldConditionTranscript' => 'applications/herald/storage/transcript/condition',
     'HeraldContentTypeConfig' => 'applications/herald/config/contenttype',
     'HeraldController' => 'applications/herald/controller/base',
     'HeraldDAO' => 'applications/herald/storage/base',
     'HeraldDeleteController' => 'applications/herald/controller/delete',
     'HeraldDifferentialRevisionAdapter' => 'applications/herald/adapter/differential',
     'HeraldDryRunAdapter' => 'applications/herald/adapter/dryrun',
     'HeraldEffect' => 'applications/herald/engine/effect',
     'HeraldEngine' => 'applications/herald/engine/engine',
     'HeraldFieldConfig' => 'applications/herald/config/field',
     'HeraldHomeController' => 'applications/herald/controller/home',
     'HeraldInvalidConditionException' => 'applications/herald/engine/engine/exception',
     'HeraldInvalidFieldException' => 'applications/herald/engine/engine/exception',
     'HeraldNewController' => 'applications/herald/controller/new',
     'HeraldObjectAdapter' => 'applications/herald/adapter/base',
     'HeraldObjectTranscript' => 'applications/herald/storage/transcript/object',
     'HeraldRecursiveConditionsException' => 'applications/herald/engine/engine/exception',
     'HeraldRule' => 'applications/herald/storage/rule',
     'HeraldRuleController' => 'applications/herald/controller/rule',
     'HeraldRuleTranscript' => 'applications/herald/storage/transcript/rule',
     'HeraldTestConsoleController' => 'applications/herald/controller/test',
     'HeraldTranscript' => 'applications/herald/storage/transcript/base',
     'HeraldTranscriptController' => 'applications/herald/controller/transcript',
     'HeraldTranscriptListController' => 'applications/herald/controller/transcriptlist',
     'HeraldValueTypeConfig' => 'applications/herald/config/valuetype',
     'Javelin' => 'infrastructure/javelin/api',
     'LiskDAO' => 'storage/lisk/dao',
     'ManiphestController' => 'applications/maniphest/controller/base',
     'ManiphestDAO' => 'applications/maniphest/storage/base',
     'ManiphestTask' => 'applications/maniphest/storage/task',
     'ManiphestTaskDetailController' => 'applications/maniphest/controller/taskdetail',
     'ManiphestTaskEditController' => 'applications/maniphest/controller/taskedit',
     'ManiphestTaskListController' => 'applications/maniphest/controller/tasklist',
     'ManiphestTaskListView' => 'applications/maniphest/view/tasklist',
     'ManiphestTaskPriority' => 'applications/maniphest/constants/priority',
     'ManiphestTaskSelectorSearchController' => 'applications/maniphest/controller/taskselectorsearch',
     'ManiphestTaskStatus' => 'applications/maniphest/constants/status',
     'ManiphestTaskSummaryView' => 'applications/maniphest/view/tasksummary',
     'ManiphestTransaction' => 'applications/maniphest/storage/transaction',
     'ManiphestTransactionDetailView' => 'applications/maniphest/view/transactiondetail',
     'ManiphestTransactionEditor' => 'applications/maniphest/editor/transaction',
     'ManiphestTransactionListView' => 'applications/maniphest/view/transactionlist',
     'ManiphestTransactionSaveController' => 'applications/maniphest/controller/transactionsave',
     'ManiphestTransactionType' => 'applications/maniphest/constants/transactiontype',
     'Phabricator404Controller' => 'applications/base/controller/404',
     'PhabricatorAuthController' => 'applications/auth/controller/base',
     'PhabricatorConduitAPIController' => 'applications/conduit/controller/api',
     'PhabricatorConduitConnectionLog' => 'applications/conduit/storage/connectionlog',
     'PhabricatorConduitConsoleController' => 'applications/conduit/controller/console',
     'PhabricatorConduitController' => 'applications/conduit/controller/base',
     'PhabricatorConduitDAO' => 'applications/conduit/storage/base',
     'PhabricatorConduitLogController' => 'applications/conduit/controller/log',
     'PhabricatorConduitMethodCallLog' => 'applications/conduit/storage/methodcalllog',
     'PhabricatorController' => 'applications/base/controller/base',
     'PhabricatorDaemon' => 'infrastructure/daemon/base',
     'PhabricatorDaemonConsoleController' => 'applications/daemon/controller/console',
     'PhabricatorDaemonControl' => 'infrastructure/daemon/control',
     'PhabricatorDaemonController' => 'applications/daemon/controller/base',
     'PhabricatorDaemonDAO' => 'infrastructure/daemon/storage/base',
     'PhabricatorDaemonLog' => 'infrastructure/daemon/storage/log',
     'PhabricatorDaemonLogEvent' => 'infrastructure/daemon/storage/event',
     'PhabricatorDaemonLogViewController' => 'applications/daemon/controller/logview',
     'PhabricatorDaemonReference' => 'infrastructure/daemon/control/reference',
     'PhabricatorDaemonTimelineConsoleController' => 'applications/daemon/controller/timeline',
     'PhabricatorDaemonTimelineEventController' => 'applications/daemon/controller/timelineevent',
     'PhabricatorDirectoryCategory' => 'applications/directory/storage/category',
     'PhabricatorDirectoryCategoryDeleteController' => 'applications/directory/controller/categorydelete',
     'PhabricatorDirectoryCategoryEditController' => 'applications/directory/controller/categoryedit',
     'PhabricatorDirectoryCategoryListController' => 'applications/directory/controller/categorylist',
     'PhabricatorDirectoryController' => 'applications/directory/controller/base',
     'PhabricatorDirectoryDAO' => 'applications/directory/storage/base',
     'PhabricatorDirectoryItem' => 'applications/directory/storage/item',
     'PhabricatorDirectoryItemDeleteController' => 'applications/directory/controller/itemdelete',
     'PhabricatorDirectoryItemEditController' => 'applications/directory/controller/itemedit',
     'PhabricatorDirectoryItemListController' => 'applications/directory/controller/itemlist',
     'PhabricatorDirectoryMainController' => 'applications/directory/controller/main',
     'PhabricatorDraft' => 'applications/draft/storage/draft',
     'PhabricatorDraftDAO' => 'applications/draft/storage/base',
     'PhabricatorEmailLoginController' => 'applications/auth/controller/email',
     'PhabricatorEmailTokenController' => 'applications/auth/controller/emailtoken',
     'PhabricatorEnv' => 'infrastructure/env',
     'PhabricatorFile' => 'applications/files/storage/file',
     'PhabricatorFileController' => 'applications/files/controller/base',
     'PhabricatorFileDAO' => 'applications/files/storage/base',
     'PhabricatorFileListController' => 'applications/files/controller/list',
     'PhabricatorFileStorageBlob' => 'applications/files/storage/storageblob',
     'PhabricatorFileURI' => 'applications/files/uri',
     'PhabricatorFileUploadController' => 'applications/files/controller/upload',
     'PhabricatorFileViewController' => 'applications/files/controller/view',
     'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/goodfornothing',
     'PhabricatorHandleObjectSelectorDataView' => 'applications/phid/handle/view/selector',
     'PhabricatorLiskDAO' => 'applications/base/storage/lisk',
     'PhabricatorLoginController' => 'applications/auth/controller/login',
     'PhabricatorLogoutController' => 'applications/auth/controller/logout',
     'PhabricatorMailImplementationAdapter' => 'applications/metamta/adapter/base',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'applications/metamta/adapter/amazonses',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'applications/metamta/adapter/phpmailerlite',
     'PhabricatorMetaMTAController' => 'applications/metamta/controller/base',
     'PhabricatorMetaMTADAO' => 'applications/metamta/storage/base',
     'PhabricatorMetaMTADaemon' => 'applications/metamta/daemon/mta',
     'PhabricatorMetaMTAListController' => 'applications/metamta/controller/list',
     'PhabricatorMetaMTAMail' => 'applications/metamta/storage/mail',
     'PhabricatorMetaMTAMailingList' => 'applications/metamta/storage/mailinglist',
     'PhabricatorMetaMTAMailingListEditController' => 'applications/metamta/controller/mailinglistedit',
     'PhabricatorMetaMTAMailingListsController' => 'applications/metamta/controller/mailinglists',
     'PhabricatorMetaMTASendController' => 'applications/metamta/controller/send',
     'PhabricatorMetaMTAViewController' => 'applications/metamta/controller/view',
     'PhabricatorOAuthDefaultRegistrationController' => 'applications/auth/controller/oauthregistration/default',
     'PhabricatorOAuthDiagnosticsController' => 'applications/auth/controller/oauthdiagnostics',
     'PhabricatorOAuthFailureView' => 'applications/auth/view/oauthfailure',
     'PhabricatorOAuthLoginController' => 'applications/auth/controller/oauth',
     'PhabricatorOAuthProvider' => 'applications/auth/oauth/provider/base',
     'PhabricatorOAuthProviderFacebook' => 'applications/auth/oauth/provider/facebook',
     'PhabricatorOAuthProviderGithub' => 'applications/auth/oauth/provider/github',
     'PhabricatorOAuthRegistrationController' => 'applications/auth/controller/oauthregistration/base',
     'PhabricatorOAuthUnlinkController' => 'applications/auth/controller/unlink',
     'PhabricatorObjectHandle' => 'applications/phid/handle',
     'PhabricatorObjectHandleData' => 'applications/phid/handle/data',
     'PhabricatorObjectSelectorDialog' => 'view/control/objectselector',
     'PhabricatorPHID' => 'applications/phid/storage/phid',
     'PhabricatorPHIDAllocateController' => 'applications/phid/controller/allocate',
     'PhabricatorPHIDConstants' => 'applications/phid/constants',
     'PhabricatorPHIDController' => 'applications/phid/controller/base',
     'PhabricatorPHIDDAO' => 'applications/phid/storage/base',
     'PhabricatorPHIDListController' => 'applications/phid/controller/list',
     'PhabricatorPHIDLookupController' => 'applications/phid/controller/lookup',
     'PhabricatorPHIDType' => 'applications/phid/storage/type',
     'PhabricatorPHIDTypeEditController' => 'applications/phid/controller/typeedit',
     'PhabricatorPHIDTypeListController' => 'applications/phid/controller/typelist',
     'PhabricatorPeopleController' => 'applications/people/controller/base',
     'PhabricatorPeopleEditController' => 'applications/people/controller/edit',
     'PhabricatorPeopleListController' => 'applications/people/controller/list',
     'PhabricatorPeopleProfileController' => 'applications/people/controller/profile',
     'PhabricatorPeopleProfileEditController' => 'applications/people/controller/profileedit',
     'PhabricatorProject' => 'applications/project/storage/project',
     'PhabricatorProjectAffiliation' => 'applications/project/storage/affiliation',
     'PhabricatorProjectAffiliationEditController' => 'applications/project/controller/editaffiliation',
     'PhabricatorProjectController' => 'applications/project/controller/base',
     'PhabricatorProjectDAO' => 'applications/project/storage/base',
     'PhabricatorProjectEditController' => 'applications/project/controller/edit',
     'PhabricatorProjectListController' => 'applications/project/controller/list',
     'PhabricatorProjectProfile' => 'applications/project/storage/profile',
     'PhabricatorProjectProfileController' => 'applications/project/controller/profile',
     'PhabricatorRemarkupRuleDifferential' => 'infrastructure/markup/remarkup/markuprule/differential',
     'PhabricatorRemarkupRuleManiphest' => 'infrastructure/markup/remarkup/markuprule/maniphest',
     'PhabricatorRepository' => 'applications/repository/storage/repository',
     'PhabricatorRepositoryCommit' => 'applications/repository/storage/commit',
     'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/base',
     'PhabricatorRepositoryCommitData' => 'applications/repository/storage/commitdata',
     'PhabricatorRepositoryCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/base',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/base',
     'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/base',
     'PhabricatorRepositoryCommitTaskDaemon' => 'applications/repository/daemon/committask',
     'PhabricatorRepositoryController' => 'applications/repository/controller/base',
     'PhabricatorRepositoryCreateController' => 'applications/repository/controller/create',
     'PhabricatorRepositoryDAO' => 'applications/repository/storage/base',
     'PhabricatorRepositoryDaemon' => 'applications/repository/daemon/base',
     'PhabricatorRepositoryEditController' => 'applications/repository/controller/edit',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/git',
     'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/git',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/git',
     'PhabricatorRepositoryGitFetchDaemon' => 'applications/repository/daemon/gitfetch',
     'PhabricatorRepositoryGitHubNotification' => 'applications/repository/storage/githubnotification',
     'PhabricatorRepositoryGitHubPostReceiveController' => 'applications/repository/controller/github-post-receive',
     'PhabricatorRepositoryListController' => 'applications/repository/controller/list',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/svn',
     'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/svn',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/svn',
     'PhabricatorRepositoryType' => 'applications/repository/constants/repositorytype',
     'PhabricatorSearchAbstractDocument' => 'applications/search/index/abstractdocument',
     'PhabricatorSearchBaseController' => 'applications/search/controller/base',
     'PhabricatorSearchController' => 'applications/search/controller/search',
     'PhabricatorSearchDAO' => 'applications/search/storage/base',
     'PhabricatorSearchDifferentialIndexer' => 'applications/search/index/indexer/differential',
     'PhabricatorSearchDocument' => 'applications/search/storage/document/document',
     'PhabricatorSearchDocumentField' => 'applications/search/storage/document/field',
     'PhabricatorSearchDocumentIndexer' => 'applications/search/index/indexer/base',
     'PhabricatorSearchDocumentRelationship' => 'applications/search/storage/document/relationship',
     'PhabricatorSearchExecutor' => 'applications/search/execute/base',
     'PhabricatorSearchField' => 'applications/search/constants/field',
     'PhabricatorSearchManiphestIndexer' => 'applications/search/index/indexer/maniphest',
     'PhabricatorSearchMySQLExecutor' => 'applications/search/execute/mysql',
     'PhabricatorSearchQuery' => 'applications/search/storage/query',
     'PhabricatorSearchRelationship' => 'applications/search/constants/relationship',
     'PhabricatorStandardPageView' => 'view/page/standard',
     'PhabricatorTaskmasterDaemon' => 'infrastructure/daemon/workers/taskmaster',
     'PhabricatorTimelineCursor' => 'infrastructure/daemon/timeline/storage/cursor',
     'PhabricatorTimelineDAO' => 'infrastructure/daemon/timeline/storage/base',
     'PhabricatorTimelineEvent' => 'infrastructure/daemon/timeline/storage/event',
     'PhabricatorTimelineEventData' => 'infrastructure/daemon/timeline/storage/eventdata',
     'PhabricatorTimelineIterator' => 'infrastructure/daemon/timeline/cursor/iterator',
     'PhabricatorTypeaheadCommonDatasourceController' => 'applications/typeahead/controller/common',
     'PhabricatorTypeaheadDatasourceController' => 'applications/typeahead/controller/base',
     'PhabricatorUser' => 'applications/people/storage/user',
     'PhabricatorUserDAO' => 'applications/people/storage/base',
     'PhabricatorUserOAuthInfo' => 'applications/people/storage/useroauthinfo',
     'PhabricatorUserProfile' => 'applications/people/storage/profile',
     'PhabricatorUserSettingsController' => 'applications/people/controller/settings',
     'PhabricatorWorker' => 'infrastructure/daemon/workers/worker',
     'PhabricatorWorkerDAO' => 'infrastructure/daemon/workers/storage/base',
     'PhabricatorWorkerTask' => 'infrastructure/daemon/workers/storage/task',
     'PhabricatorWorkerTaskData' => 'infrastructure/daemon/workers/storage/taskdata',
     'PhabricatorXHProfController' => 'applications/xhprof/controller/base',
     'PhabricatorXHProfProfileController' => 'applications/xhprof/controller/profile',
     'PhabricatorXHProfProfileSymbolView' => 'applications/xhprof/view/symbol',
     'PhabricatorXHProfProfileTopLevelView' => 'applications/xhprof/view/toplevel',
   ),
   'function' =>
   array(
     '_qsprintf_check_scalar_type' => 'storage/qsprintf',
     '_qsprintf_check_type' => 'storage/qsprintf',
     'celerity_generate_unique_node_id' => 'infrastructure/celerity/api',
     'celerity_register_resource_map' => 'infrastructure/celerity/map',
     'javelin_render_tag' => 'infrastructure/javelin/markup',
     'phabricator_format_relative_time' => 'view/utils',
     'phabricator_format_timestamp' => 'view/utils',
     'phabricator_format_units_generic' => 'view/utils',
     'phabricator_render_form' => 'infrastructure/javelin/markup',
     'qsprintf' => 'storage/qsprintf',
     'queryfx' => 'storage/queryfx',
     'queryfx_all' => 'storage/queryfx',
     'queryfx_one' => 'storage/queryfx',
     'require_celerity_resource' => 'infrastructure/celerity/api',
     'vqsprintf' => 'storage/qsprintf',
     'vqueryfx' => 'storage/queryfx',
     'vqueryfx_all' => 'storage/queryfx',
     'xsprintf_query' => 'storage/qsprintf',
   ),
   'requires_class' =>
   array(
     'Aphront400Response' => 'AphrontResponse',
     'Aphront404Response' => 'AphrontResponse',
     'AphrontAjaxResponse' => 'AphrontResponse',
     'AphrontCrumbsView' => 'AphrontView',
     'AphrontDefaultApplicationConfiguration' => 'AphrontApplicationConfiguration',
     'AphrontDefaultApplicationController' => 'AphrontController',
     'AphrontDialogResponse' => 'AphrontResponse',
     'AphrontDialogView' => 'AphrontView',
     'AphrontErrorView' => 'AphrontView',
     'AphrontFileResponse' => 'AphrontResponse',
     'AphrontFormCheckboxControl' => 'AphrontFormControl',
     'AphrontFormControl' => 'AphrontView',
     'AphrontFormDividerControl' => 'AphrontFormControl',
     'AphrontFormFileControl' => 'AphrontFormControl',
     'AphrontFormMarkupControl' => 'AphrontFormControl',
     'AphrontFormPasswordControl' => 'AphrontFormControl',
     'AphrontFormRecaptchaControl' => 'AphrontFormControl',
     'AphrontFormSelectControl' => 'AphrontFormControl',
     'AphrontFormStaticControl' => 'AphrontFormControl',
     'AphrontFormSubmitControl' => 'AphrontFormControl',
     'AphrontFormTextAreaControl' => 'AphrontFormControl',
     'AphrontFormTextControl' => 'AphrontFormControl',
     'AphrontFormTokenizerControl' => 'AphrontFormControl',
     'AphrontFormView' => 'AphrontView',
     'AphrontHeadsupActionListView' => 'AphrontView',
     'AphrontHeadsupActionView' => 'AphrontView',
     'AphrontMySQLDatabaseConnection' => 'AphrontDatabaseConnection',
     'AphrontNullView' => 'AphrontView',
     'AphrontPageView' => 'AphrontView',
     'AphrontPanelView' => 'AphrontView',
     'AphrontQueryConnectionException' => 'AphrontQueryException',
     'AphrontQueryConnectionLostException' => 'AphrontQueryRecoverableException',
     'AphrontQueryCountException' => 'AphrontQueryException',
     'AphrontQueryDuplicateKeyException' => 'AphrontQueryException',
     'AphrontQueryObjectMissingException' => 'AphrontQueryException',
     'AphrontQueryParameterException' => 'AphrontQueryException',
     'AphrontQueryRecoverableException' => 'AphrontQueryException',
     'AphrontRedirectException' => 'AphrontException',
     'AphrontRedirectResponse' => 'AphrontResponse',
     'AphrontRequestFailureView' => 'AphrontView',
     'AphrontSideNavView' => 'AphrontView',
     'AphrontTableView' => 'AphrontView',
     'AphrontTokenizerTemplateView' => 'AphrontView',
     'AphrontWebpageResponse' => 'AphrontResponse',
     'CelerityResourceController' => 'AphrontController',
     'ConduitAPI_conduit_connect_Method' => 'ConduitAPIMethod',
     'ConduitAPI_conduit_ping_Method' => 'ConduitAPIMethod',
     'ConduitAPI_daemon_launched_Method' => 'ConduitAPIMethod',
     'ConduitAPI_daemon_log_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_creatediff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_createrevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_find_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_setdiffproperty_Method' => 'ConduitAPIMethod',
     'ConduitAPI_differential_updaterevision_Method' => 'ConduitAPIMethod',
     'ConduitAPI_file_upload_Method' => 'ConduitAPIMethod',
     'ConduitAPI_user_find_Method' => 'ConduitAPIMethod',
     'DarkConsoleConfigPlugin' => 'DarkConsolePlugin',
     'DarkConsoleController' => 'PhabricatorController',
     'DarkConsoleErrorLogPlugin' => 'DarkConsolePlugin',
     'DarkConsoleRequestPlugin' => 'DarkConsolePlugin',
     'DarkConsoleServicesPlugin' => 'DarkConsolePlugin',
     'DarkConsoleXHProfPlugin' => 'DarkConsolePlugin',
     'DifferentialAddCommentView' => 'AphrontView',
     'DifferentialAttachController' => 'DifferentialController',
     'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail',
     'DifferentialChangeset' => 'DifferentialDAO',
     'DifferentialChangesetDetailView' => 'AphrontView',
     'DifferentialChangesetListView' => 'AphrontView',
     'DifferentialChangesetViewController' => 'DifferentialController',
     'DifferentialComment' => 'DifferentialDAO',
     'DifferentialCommentMail' => 'DifferentialMail',
     'DifferentialCommentPreviewController' => 'DifferentialController',
     'DifferentialCommentSaveController' => 'DifferentialController',
     'DifferentialController' => 'PhabricatorController',
     'DifferentialDAO' => 'PhabricatorLiskDAO',
     'DifferentialDiff' => 'DifferentialDAO',
     'DifferentialDiffContentMail' => 'DifferentialMail',
     'DifferentialDiffCreateController' => 'DifferentialController',
     'DifferentialDiffProperty' => 'DifferentialDAO',
     'DifferentialDiffTableOfContentsView' => 'AphrontView',
     'DifferentialDiffViewController' => 'DifferentialController',
     'DifferentialHunk' => 'DifferentialDAO',
     'DifferentialInlineComment' => 'DifferentialDAO',
     'DifferentialInlineCommentEditController' => 'DifferentialController',
     'DifferentialInlineCommentPreviewController' => 'DifferentialController',
     'DifferentialInlineCommentView' => 'AphrontView',
     'DifferentialNewDiffMail' => 'DifferentialReviewRequestMail',
     'DifferentialReviewRequestMail' => 'DifferentialMail',
     'DifferentialRevision' => 'DifferentialDAO',
     'DifferentialRevisionCommentListView' => 'AphrontView',
     'DifferentialRevisionCommentView' => 'AphrontView',
     'DifferentialRevisionDetailView' => 'AphrontView',
     'DifferentialRevisionEditController' => 'DifferentialController',
     'DifferentialRevisionListController' => 'DifferentialController',
     'DifferentialRevisionUpdateHistoryView' => 'AphrontView',
     'DifferentialRevisionViewController' => 'DifferentialController',
     'DifferentialSubscribeController' => 'DifferentialController',
     'DiffusionBranchTableView' => 'DiffusionView',
     'DiffusionBrowseController' => 'DiffusionController',
     'DiffusionBrowseFileController' => 'DiffusionController',
     'DiffusionBrowseTableView' => 'DiffusionView',
     'DiffusionChangeController' => 'DiffusionController',
     'DiffusionCommitChangeTableView' => 'DiffusionView',
     'DiffusionCommitController' => 'DiffusionController',
     'DiffusionController' => 'PhabricatorController',
     'DiffusionGitBranchQuery' => 'DiffusionBranchQuery',
     'DiffusionGitBrowseQuery' => 'DiffusionBrowseQuery',
     'DiffusionGitFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionGitHistoryQuery' => 'DiffusionHistoryQuery',
     'DiffusionGitRequest' => 'DiffusionRequest',
     'DiffusionHistoryController' => 'DiffusionController',
     'DiffusionHistoryTableView' => 'DiffusionView',
     'DiffusionHomeController' => 'DiffusionController',
     'DiffusionRepositoryController' => 'DiffusionController',
     'DiffusionSvnBrowseQuery' => 'DiffusionBrowseQuery',
     'DiffusionSvnFileContentQuery' => 'DiffusionFileContentQuery',
     'DiffusionSvnHistoryQuery' => 'DiffusionHistoryQuery',
+    'DiffusionSvnRequest' => 'DiffusionRequest',
     'DiffusionView' => 'AphrontView',
     'HeraldAction' => 'HeraldDAO',
     'HeraldApplyTranscript' => 'HeraldDAO',
     'HeraldCondition' => 'HeraldDAO',
     'HeraldController' => 'PhabricatorController',
     'HeraldDAO' => 'PhabricatorLiskDAO',
     'HeraldDeleteController' => 'HeraldController',
     'HeraldDifferentialRevisionAdapter' => 'HeraldObjectAdapter',
     'HeraldDryRunAdapter' => 'HeraldObjectAdapter',
     'HeraldHomeController' => 'HeraldController',
     'HeraldNewController' => 'HeraldController',
     'HeraldRule' => 'HeraldDAO',
     'HeraldRuleController' => 'HeraldController',
     'HeraldTestConsoleController' => 'HeraldController',
     'HeraldTranscript' => 'HeraldDAO',
     'HeraldTranscriptController' => 'HeraldController',
     'HeraldTranscriptListController' => 'HeraldController',
     'ManiphestController' => 'PhabricatorController',
     'ManiphestDAO' => 'PhabricatorLiskDAO',
     'ManiphestTask' => 'ManiphestDAO',
     'ManiphestTaskDetailController' => 'ManiphestController',
     'ManiphestTaskEditController' => 'ManiphestController',
     'ManiphestTaskListController' => 'ManiphestController',
     'ManiphestTaskListView' => 'AphrontView',
     'ManiphestTaskSelectorSearchController' => 'ManiphestController',
     'ManiphestTaskSummaryView' => 'AphrontView',
     'ManiphestTransaction' => 'ManiphestDAO',
     'ManiphestTransactionDetailView' => 'AphrontView',
     'ManiphestTransactionListView' => 'AphrontView',
     'ManiphestTransactionSaveController' => 'ManiphestController',
     'Phabricator404Controller' => 'PhabricatorController',
     'PhabricatorAuthController' => 'PhabricatorController',
     'PhabricatorConduitAPIController' => 'PhabricatorConduitController',
     'PhabricatorConduitConnectionLog' => 'PhabricatorConduitDAO',
     'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
     'PhabricatorConduitController' => 'PhabricatorController',
     'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
     'PhabricatorConduitLogController' => 'PhabricatorConduitController',
     'PhabricatorConduitMethodCallLog' => 'PhabricatorConduitDAO',
     'PhabricatorController' => 'AphrontController',
     'PhabricatorDaemon' => 'PhutilDaemon',
     'PhabricatorDaemonConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonController' => 'PhabricatorController',
     'PhabricatorDaemonDAO' => 'PhabricatorLiskDAO',
     'PhabricatorDaemonLog' => 'PhabricatorDaemonDAO',
     'PhabricatorDaemonLogEvent' => 'PhabricatorDaemonDAO',
     'PhabricatorDaemonLogViewController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonTimelineConsoleController' => 'PhabricatorDaemonController',
     'PhabricatorDaemonTimelineEventController' => 'PhabricatorDaemonController',
     'PhabricatorDirectoryCategory' => 'PhabricatorDirectoryDAO',
     'PhabricatorDirectoryCategoryDeleteController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryCategoryEditController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryCategoryListController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryController' => 'PhabricatorController',
     'PhabricatorDirectoryDAO' => 'PhabricatorLiskDAO',
     'PhabricatorDirectoryItem' => 'PhabricatorDirectoryDAO',
     'PhabricatorDirectoryItemDeleteController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryItemEditController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryItemListController' => 'PhabricatorDirectoryController',
     'PhabricatorDirectoryMainController' => 'PhabricatorDirectoryController',
     'PhabricatorDraft' => 'PhabricatorDraftDAO',
     'PhabricatorDraftDAO' => 'PhabricatorLiskDAO',
     'PhabricatorEmailLoginController' => 'PhabricatorAuthController',
     'PhabricatorEmailTokenController' => 'PhabricatorAuthController',
     'PhabricatorFile' => 'PhabricatorFileDAO',
     'PhabricatorFileController' => 'PhabricatorController',
     'PhabricatorFileDAO' => 'PhabricatorLiskDAO',
     'PhabricatorFileListController' => 'PhabricatorFileController',
     'PhabricatorFileStorageBlob' => 'PhabricatorFileDAO',
     'PhabricatorFileUploadController' => 'PhabricatorFileController',
     'PhabricatorFileViewController' => 'PhabricatorFileController',
     'PhabricatorGoodForNothingWorker' => 'PhabricatorWorker',
     'PhabricatorLiskDAO' => 'LiskDAO',
     'PhabricatorLoginController' => 'PhabricatorAuthController',
     'PhabricatorLogoutController' => 'PhabricatorAuthController',
     'PhabricatorMailImplementationAmazonSESAdapter' => 'PhabricatorMailImplementationPHPMailerLiteAdapter',
     'PhabricatorMailImplementationPHPMailerLiteAdapter' => 'PhabricatorMailImplementationAdapter',
     'PhabricatorMetaMTAController' => 'PhabricatorController',
     'PhabricatorMetaMTADAO' => 'PhabricatorLiskDAO',
     'PhabricatorMetaMTADaemon' => 'PhabricatorDaemon',
     'PhabricatorMetaMTAListController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAMail' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailingList' => 'PhabricatorMetaMTADAO',
     'PhabricatorMetaMTAMailingListEditController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAMailingListsController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTASendController' => 'PhabricatorMetaMTAController',
     'PhabricatorMetaMTAViewController' => 'PhabricatorMetaMTAController',
     'PhabricatorOAuthDefaultRegistrationController' => 'PhabricatorOAuthRegistrationController',
     'PhabricatorOAuthDiagnosticsController' => 'PhabricatorAuthController',
     'PhabricatorOAuthFailureView' => 'AphrontView',
     'PhabricatorOAuthLoginController' => 'PhabricatorAuthController',
     'PhabricatorOAuthProviderFacebook' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthProviderGithub' => 'PhabricatorOAuthProvider',
     'PhabricatorOAuthRegistrationController' => 'PhabricatorAuthController',
     'PhabricatorOAuthUnlinkController' => 'PhabricatorAuthController',
     'PhabricatorPHID' => 'PhabricatorPHIDDAO',
     'PhabricatorPHIDAllocateController' => 'PhabricatorPHIDController',
     'PhabricatorPHIDController' => 'PhabricatorController',
     'PhabricatorPHIDDAO' => 'PhabricatorLiskDAO',
     'PhabricatorPHIDListController' => 'PhabricatorPHIDController',
     'PhabricatorPHIDLookupController' => 'PhabricatorPHIDController',
     'PhabricatorPHIDType' => 'PhabricatorPHIDDAO',
     'PhabricatorPHIDTypeEditController' => 'PhabricatorPHIDController',
     'PhabricatorPHIDTypeListController' => 'PhabricatorPHIDController',
     'PhabricatorPeopleController' => 'PhabricatorController',
     'PhabricatorPeopleEditController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleListController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleProfileController' => 'PhabricatorPeopleController',
     'PhabricatorPeopleProfileEditController' => 'PhabricatorPeopleController',
     'PhabricatorProject' => 'PhabricatorProjectDAO',
     'PhabricatorProjectAffiliation' => 'PhabricatorProjectDAO',
     'PhabricatorProjectAffiliationEditController' => 'PhabricatorProjectController',
     'PhabricatorProjectController' => 'PhabricatorController',
     'PhabricatorProjectDAO' => 'PhabricatorLiskDAO',
     'PhabricatorProjectEditController' => 'PhabricatorProjectController',
     'PhabricatorProjectListController' => 'PhabricatorProjectController',
     'PhabricatorProjectProfile' => 'PhabricatorProjectDAO',
     'PhabricatorProjectProfileController' => 'PhabricatorProjectController',
     'PhabricatorRemarkupRuleDifferential' => 'PhutilRemarkupRule',
     'PhabricatorRemarkupRuleManiphest' => 'PhutilRemarkupRule',
     'PhabricatorRepository' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommit' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommitChangeParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitData' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryCommitDiscoveryDaemon' => 'PhabricatorRepositoryDaemon',
     'PhabricatorRepositoryCommitMessageParserWorker' => 'PhabricatorRepositoryCommitParserWorker',
     'PhabricatorRepositoryCommitParserWorker' => 'PhabricatorWorker',
     'PhabricatorRepositoryCommitTaskDaemon' => 'PhabricatorRepositoryDaemon',
     'PhabricatorRepositoryController' => 'PhabricatorController',
     'PhabricatorRepositoryCreateController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryDAO' => 'PhabricatorLiskDAO',
     'PhabricatorRepositoryDaemon' => 'PhabricatorDaemon',
     'PhabricatorRepositoryEditController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryGitCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositoryGitCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
     'PhabricatorRepositoryGitCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorRepositoryGitFetchDaemon' => 'PhabricatorRepositoryDaemon',
     'PhabricatorRepositoryGitHubNotification' => 'PhabricatorRepositoryDAO',
     'PhabricatorRepositoryGitHubPostReceiveController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController',
     'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker',
     'PhabricatorRepositorySvnCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon',
     'PhabricatorRepositorySvnCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker',
     'PhabricatorSearchBaseController' => 'PhabricatorController',
     'PhabricatorSearchController' => 'PhabricatorSearchBaseController',
     'PhabricatorSearchDAO' => 'PhabricatorLiskDAO',
     'PhabricatorSearchDifferentialIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchDocument' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentField' => 'PhabricatorSearchDAO',
     'PhabricatorSearchDocumentRelationship' => 'PhabricatorSearchDAO',
     'PhabricatorSearchManiphestIndexer' => 'PhabricatorSearchDocumentIndexer',
     'PhabricatorSearchMySQLExecutor' => 'PhabricatorSearchExecutor',
     'PhabricatorSearchQuery' => 'PhabricatorSearchDAO',
     'PhabricatorStandardPageView' => 'AphrontPageView',
     'PhabricatorTaskmasterDaemon' => 'PhabricatorDaemon',
     'PhabricatorTimelineCursor' => 'PhabricatorTimelineDAO',
     'PhabricatorTimelineDAO' => 'PhabricatorLiskDAO',
     'PhabricatorTimelineEvent' => 'PhabricatorTimelineDAO',
     'PhabricatorTimelineEventData' => 'PhabricatorTimelineDAO',
     'PhabricatorTypeaheadCommonDatasourceController' => 'PhabricatorTypeaheadDatasourceController',
     'PhabricatorTypeaheadDatasourceController' => 'PhabricatorController',
     'PhabricatorUser' => 'PhabricatorUserDAO',
     'PhabricatorUserDAO' => 'PhabricatorLiskDAO',
     'PhabricatorUserOAuthInfo' => 'PhabricatorUserDAO',
     'PhabricatorUserProfile' => 'PhabricatorUserDAO',
     'PhabricatorUserSettingsController' => 'PhabricatorPeopleController',
     'PhabricatorWorkerDAO' => 'PhabricatorLiskDAO',
     'PhabricatorWorkerTask' => 'PhabricatorWorkerDAO',
     'PhabricatorWorkerTaskData' => 'PhabricatorWorkerDAO',
     'PhabricatorXHProfController' => 'PhabricatorController',
     'PhabricatorXHProfProfileController' => 'PhabricatorXHProfController',
     'PhabricatorXHProfProfileSymbolView' => 'AphrontView',
     'PhabricatorXHProfProfileTopLevelView' => 'AphrontView',
   ),
   'requires_interface' =>
   array(
   ),
 ));
diff --git a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php
index f320b8a84e..39d8e363b1 100644
--- a/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php
+++ b/src/applications/diffusion/controller/file/DiffusionBrowseFileController.php
@@ -1,96 +1,155 @@
 <?php
 
 /*
  * Copyright 2011 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 class DiffusionBrowseFileController extends DiffusionController {
 
   public function processRequest() {
 
-    $content = array();
-    $content[] = $this->buildCrumbs(
-      array(
-        'branch' => true,
-        'path'   => true,
-        'view'   => 'browse',
-      ));
-
+    // Build the view selection form.
     $select_map = array(
-      //'highlighted' => 'View as Highlighted Text',
+      'highlighted' => 'View as Highlighted Text',
       //'blame' => 'View as Highlighted Text with Blame',
       'plain' => 'View as Plain Text',
       //'plainblame' => 'View as Plain Text with Blame',
     );
-    $selected = $this->getRequest()->getStr('view');
+
+    $drequest = $this->getDiffusionRequest();
+    $request = $this->getRequest();
+
+    $selected = $request->getStr('view');
     $select = '<select name="view">';
     foreach ($select_map as $k => $v) {
       $option = phutil_render_tag(
         'option',
         array(
           'value' => $k,
           'selected' => ($k == $selected) ? 'selected' : null,
         ),
         phutil_escape_html($v));
 
       $select .= $option;
     }
     $select .= '</select>';
 
-    if ($selected == 'plain') {
-      $style =
-        "margin: 1em 2em; width: 90%; height: 80em; font-family: monospace";
-    } else {
-      // default style.
-      $style =
-        "margin: 1em 2em; width: 90%; height: 80em; font-family: monospace";
-    }
-
-    // TODO: blame, color, line numbers, highlighting, etc etc
-
-    $view_form = phutil_render_tag(
+    $view_select_panel = new AphrontPanelView();
+    $view_select_form = phutil_render_tag(
       'form',
       array(
-        'action' => $this->getRequest()->getRequestURI(),
+        'action' => $request->getRequestURI(),
         'method' => 'get',
         'style'  => 'display: inline',
       ),
       $select.
       '<button>view</button>');
+    $view_select_panel->appendChild($view_select_form);
 
     $file_query = DiffusionFileContentQuery::newFromDiffusionRequest(
       $this->diffusionRequest);
     $file_content = $file_query->loadFileContent();
 
-    $corpus = phutil_render_tag(
-      'textarea',
-      array(
-        'style' => $style,
-      ),
-      phutil_escape_html($file_content->getCorpus()));
+    // Build the content of the file.
+    // TODO: image
+    // TODO: blame.
+    switch ($selected) {
+      case 'plain':
+        $style =
+          "margin: 1em 2em; width: 90%; height: 80em; font-family: monospace";
+        $corpus = phutil_render_tag(
+          'textarea',
+          array(
+            'style' => $style,
+          ),
+          phutil_escape_html($file_content->getCorpus()));
+          break;
+
+      case 'highlighted':
+      default:
+        require_celerity_resource('syntax-highlighting-css');
+        require_celerity_resource('diffusion-source-css');
 
-    $content[] = $view_form;
+        $path = $drequest->getPath();
+        $highlightEngine = new PhutilDefaultSyntaxHighlighterEngine();
+        $data = $highlightEngine->highlightSource($path,
+          $file_content->getCorpus());
+        $data = explode("\n", rtrim($data));
+
+        $uri_path = $request->getPath();
+        $uri_rev  = $drequest->getCommit();
+
+        $color = null;
+        $rows = array();
+        $n = 1;
+        foreach ($data as $k => $line) {
+          if ($n == $drequest->getLine()) {
+            $tr = '<tr style="background: #ffff00;">';
+            $targ = '<a id="scroll_target"></a>';
+            Javelin::initBehavior('diffusion-jump-to',
+              array('target' => 'scroll_target'));
+          } else {
+            $tr = '<tr>';
+            $targ = null;
+          }
+
+          $l = phutil_render_tag(
+            'a',
+            array(
+              'href' => $uri_path.';'.$uri_rev.'$'.$n,
+            ),
+            $n);
+
+          $rows[] = $tr.'<th>'.$l.'</th><td>'.$targ.$line.'</td></tr>';
+          ++$n;
+        }
+
+        $corpus_table = phutil_render_tag(
+          'table',
+          array(
+            'class' => "diffusion-source remarkup-code",
+          ),
+          implode("\n", $rows));
+        $corpus = phutil_render_tag(
+          'div',
+          array(
+            'style' => 'padding: 0pt 2em;',
+          ),
+          $corpus_table);
+
+        break;
+    }
+
+    // Render the page.
+    $content = array();
+    $content[] = $this->buildCrumbs(
+      array(
+        'branch' => true,
+        'path'   => true,
+        'view'   => 'browse',
+      ));
+    $content[] = $view_select_panel;
     $content[] = $corpus;
 
     $nav = $this->buildSideNav('browse', true);
     $nav->appendChild($content);
 
     return $this->buildStandardPageResponse(
       $nav,
       array(
         'title' => 'Browse',
       ));
   }
 }
diff --git a/src/applications/diffusion/controller/file/__init__.php b/src/applications/diffusion/controller/file/__init__.php
index cffe0092da..971b270b73 100644
--- a/src/applications/diffusion/controller/file/__init__.php
+++ b/src/applications/diffusion/controller/file/__init__.php
@@ -1,15 +1,19 @@
 <?php
 /**
  * This file is automatically generated. Lint this module to rebuild it.
  * @generated
  */
 
 
 
 phutil_require_module('phabricator', 'applications/diffusion/controller/base');
 phutil_require_module('phabricator', 'applications/diffusion/query/filecontent/base');
+phutil_require_module('phabricator', 'infrastructure/celerity/api');
+phutil_require_module('phabricator', 'infrastructure/javelin/api');
+phutil_require_module('phabricator', 'view/layout/panel');
 
 phutil_require_module('phutil', 'markup');
+phutil_require_module('phutil', 'markup/syntax/engine/default');
 
 
 phutil_require_source('DiffusionBrowseFileController.php');
diff --git a/src/applications/diffusion/request/base/DiffusionRequest.php b/src/applications/diffusion/request/base/DiffusionRequest.php
index 064996de1c..eeadc6e739 100644
--- a/src/applications/diffusion/request/base/DiffusionRequest.php
+++ b/src/applications/diffusion/request/base/DiffusionRequest.php
@@ -1,144 +1,147 @@
 <?php
 
 /*
  * Copyright 2011 Facebook, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 class DiffusionRequest {
 
   protected $callsign;
   protected $path;
   protected $line;
   protected $commit;
   protected $branch;
 
   protected $repository;
   protected $repositoryCommit;
   protected $repositoryCommitData;
 
   final private function __construct() {
     // <private>
   }
 
   final public static function newFromAphrontRequestDictionary(array $data) {
 
     $vcs = null;
     $repository = null;
     $callsign = idx($data, 'callsign');
     if ($callsign) {
       $repository = id(new PhabricatorRepository())->loadOneWhere(
         'callsign = %s',
         $callsign);
       if (!$repository) {
         throw new Exception("No such repository '{$callsign}'.");
       }
       $vcs = $repository->getVersionControlSystem();
     }
 
     switch ($vcs) {
       case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT:
         $class = 'DiffusionGitRequest';
         break;
+      case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN:
+        $class = 'DiffusionSvnRequest';
+        break;
       default:
         $class = 'DiffusionRequest';
         break;
     }
 
     $object = new $class();
 
     $object->callsign   = $callsign;
     $object->repository = $repository;
     $object->line       = idx($data, 'line');
     $object->commit     = idx($data, 'commit');
     $object->path       = idx($data, 'path');
 
     $object->initializeFromAphrontRequestDictionary();
 
     return $object;
   }
 
   protected function initializeFromAphrontRequestDictionary() {
 
   }
 
   protected function parsePath($path) {
     $this->path = $path;
   }
 
   public function getRepository() {
     return $this->repository;
   }
 
   public function getCallsign() {
     return $this->callsign;
   }
 
   public function getPath() {
     return $this->path;
   }
 
   public function getLine() {
     return $this->line;
   }
 
   public function getCommit() {
     return $this->commit;
   }
 
   public function getBranch() {
     return $this->branch;
   }
 
   public function loadCommit() {
     if (empty($this->repositoryCommit)) {
       $repository = $this->getRepository();
 
       $commit = id(new PhabricatorRepositoryCommit())->loadOneWhere(
         'repositoryID = %d AND commitIdentifier = %s',
         $repository->getID(),
         $this->getCommit());
       $this->repositoryCommit = $commit;
     }
     return $this->repositoryCommit;
   }
 
   public function loadCommitData() {
     if (empty($this->repositoryCommitData)) {
       $commit = $this->loadCommit();
       $data = id(new PhabricatorRepositoryCommitData())->loadOneWhere(
         'commitID = %d',
         $commit->getID());
       if (!$data) {
         $data = new PhabricatorRepositoryCommitData();
         $data->setCommitMessage('(This commit has not fully parsed yet.)');
       }
       $this->repositoryCommitData = $data;
     }
     return $this->repositoryCommitData;
   }
 
   final public function getRawCommit() {
     return $this->commit;
   }
 
   public function getCommitURIComponent($commit) {
     return $commit;
   }
 
   public function getBranchURIComponent($branch) {
     return $branch;
   }
 
 }
diff --git a/src/applications/diffusion/request/svn/DiffusionSvnRequest.php b/src/applications/diffusion/request/svn/DiffusionSvnRequest.php
new file mode 100644
index 0000000000..fb6c1bae53
--- /dev/null
+++ b/src/applications/diffusion/request/svn/DiffusionSvnRequest.php
@@ -0,0 +1,37 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+class DiffusionSvnRequest extends DiffusionRequest {
+
+  private $loadedCommit;
+
+  public function getCommit() {
+    if ($this->commit) {
+      return $this->commit;
+    }
+
+    if (!$this->loadedCommit) {
+      $this->loadedCommit = id(new PhabricatorRepositoryCommit())->loadOneWhere(
+        'repositoryID = %d ORDER BY epoch DESC LIMIT 1',
+        $this->getRepository()->getID())->getCommitIdentifier();
+    }
+
+    return $this->loadedCommit;
+  }
+
+}
diff --git a/src/applications/diffusion/request/svn/__init__.php b/src/applications/diffusion/request/svn/__init__.php
new file mode 100644
index 0000000000..9172289c62
--- /dev/null
+++ b/src/applications/diffusion/request/svn/__init__.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phabricator', 'applications/diffusion/request/base');
+phutil_require_module('phabricator', 'applications/repository/storage/commit');
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('DiffusionSvnRequest.php');
diff --git a/webroot/rsrc/css/application/diffusion/diffusion-source.css b/webroot/rsrc/css/application/diffusion/diffusion-source.css
new file mode 100644
index 0000000000..b1d0682fcc
--- /dev/null
+++ b/webroot/rsrc/css/application/diffusion/diffusion-source.css
@@ -0,0 +1,39 @@
+/**
+ *  @provides diffusion-source-css
+ */
+
+.diffusion-source {
+  margin: 1em 0 2em;
+  table-layout: fixed;
+  width: 100%;
+  font-family: "Monaco", Consolas, monospace;
+  font-size: 10px;
+}
+
+.diffusion-source th {
+  text-align:         right;
+  padding:            2px 6px;
+  width:              44px;
+  vertical-align:     top;
+  background:         #eeeeee;
+  color:              #888888;
+  cursor:             pointer;
+  border-style:       solid;
+  border-width:       0px 1px;
+  border-color:       #eeeeee #999999 #eeeeee #dddddd;
+  font-weight:        bold;
+  font-family:        "Verdana";
+  font-size:          11px;
+  overflow:           hidden;
+}
+
+.diffusion-source td {
+  letter-spacing:     0.0083334px;
+  vertical-align:     top;
+  white-space:        pre;
+  padding-bottom:     1px;
+  padding-left:       8px;
+  line-height:        16px;
+  overflow:           hidden;
+}
+
diff --git a/webroot/rsrc/js/application/diffusion/behavior-jump-to.js b/webroot/rsrc/js/application/diffusion/behavior-jump-to.js
new file mode 100644
index 0000000000..c6ddfc7340
--- /dev/null
+++ b/webroot/rsrc/js/application/diffusion/behavior-jump-to.js
@@ -0,0 +1,14 @@
+/**
+ * @provides javelin-behavior-diffusion-jump-to
+ * @requires javelin-lib-dev
+ */
+
+JX.behavior('diffusion-jump-to', function(config) {
+
+  JX.defer(
+    function() {
+      window.scrollTo(0, JX.$V(JX.$(config.target)).y - 100);
+    });
+
+});
+