From 36fbc24faaea182f5212156abadad3f75edc1bc3 Mon Sep 17 00:00:00 2001
From: Anusha Ranganathan <anusha@cottagelabs.com>
Date: Wed, 27 Apr 2022 01:35:32 +0100
Subject: [PATCH] Vanilla hyrax3 app with dataset work type

---
 .gitignore                                    |  345 +++
 LICENSE                                       |  206 ++
 README.md                                     |  181 +-
 docker-compose.override.yml                   |   60 +
 docker-compose.yml                            |  189 ++
 hyrax/.fcrepo_wrapper.yml                     |    4 +
 hyrax/.gitignore                              |   31 +
 hyrax/.rspec                                  |    1 +
 hyrax/.ruby-version                           |    1 +
 hyrax/.solr_wrapper.yml                       |    8 +
 hyrax/Dockerfile                              |   94 +
 hyrax/Gemfile                                 |   87 +
 hyrax/Gemfile.lock                            |  980 ++++++
 hyrax/Rakefile                                |    8 +
 .../app/actors/hyrax/actors/dataset_actor.rb  |    8 +
 hyrax/app/assets/config/manifest.js           |    5 +
 hyrax/app/assets/images/.keep                 |    0
 hyrax/app/assets/images/unauthorized.png      |  Bin 0 -> 1958 bytes
 hyrax/app/assets/images/us_404.svg            |   91 +
 hyrax/app/assets/javascripts/application.js   |   26 +
 .../assets/javascripts/blacklight_gallery.js  |    1 +
 hyrax/app/assets/javascripts/cable.js         |   13 +
 hyrax/app/assets/javascripts/channels/.keep   |    0
 hyrax/app/assets/javascripts/openseadragon.js |    2 +
 hyrax/app/assets/stylesheets/application.css  |   16 +
 hyrax/app/assets/stylesheets/hyrax.scss       |   17 +
 .../app/assets/stylesheets/openseadragon.css  |    3 +
 .../app/channels/application_cable/channel.rb |    4 +
 .../channels/application_cable/connection.rb  |    4 +
 .../app/controllers/application_controller.rb |   14 +
 hyrax/app/controllers/catalog_controller.rb   |  306 ++
 hyrax/app/controllers/concerns/.keep          |    0
 .../controllers/hyrax/datasets_controller.rb  |   14 +
 hyrax/app/forms/hyrax/dataset_form.rb         |    9 +
 hyrax/app/helpers/application_helper.rb       |    2 +
 hyrax/app/helpers/hyrax_helper.rb             |    6 +
 hyrax/app/indexers/dataset_indexer.rb         |   18 +
 hyrax/app/jobs/application_job.rb             |    2 +
 hyrax/app/mailers/application_mailer.rb       |    4 +
 hyrax/app/models/ability.rb                   |   33 +
 hyrax/app/models/application_record.rb        |    3 +
 hyrax/app/models/collection.rb                |    8 +
 hyrax/app/models/concerns/.keep               |    0
 hyrax/app/models/dataset.rb                   |   14 +
 hyrax/app/models/file_set.rb                  |    5 +
 hyrax/app/models/qa.rb                        |    5 +
 hyrax/app/models/qa/local_authority.rb        |    2 +
 hyrax/app/models/qa/local_authority_entry.rb  |    3 +
 hyrax/app/models/search_builder.rb            |   16 +
 hyrax/app/models/solr_document.rb             |   28 +
 hyrax/app/models/user.rb                      |   30 +
 .../app/presenters/hyrax/dataset_presenter.rb |    6 +
 .../views/hyrax/datasets/_dataset.html.erb    |    2 +
 hyrax/app/views/layouts/application.html.erb  |   15 +
 hyrax/app/views/layouts/mailer.html.erb       |   13 +
 hyrax/app/views/layouts/mailer.text.erb       |    1 +
 hyrax/bin/bundle                              |    3 +
 hyrax/bin/rails                               |    9 +
 hyrax/bin/rake                                |    9 +
 hyrax/bin/setup                               |   36 +
 hyrax/bin/spring                              |   17 +
 hyrax/bin/update                              |   31 +
 hyrax/bin/yarn                                |   11 +
 hyrax/config.ru                               |    5 +
 hyrax/config/analytics.yml                    |   15 +
 hyrax/config/application.rb                   |   19 +
 hyrax/config/authorities/licenses.yml         |   46 +
 hyrax/config/authorities/resource_types.yml   |   41 +
 .../config/authorities/rights_statements.yml  |   37 +
 hyrax/config/blacklight.yml                   |    9 +
 hyrax/config/boot.rb                          |    4 +
 hyrax/config/browse_everything_providers.yml  |   24 +
 hyrax/config/cable.yml                        |   12 +
 hyrax/config/credentials.yml.enc              |    1 +
 hyrax/config/database.yml                     |   23 +
 hyrax/config/environment.rb                   |    5 +
 hyrax/config/environments/development.rb      |   72 +
 hyrax/config/environments/production.rb       |  115 +
 hyrax/config/environments/test.rb             |   56 +
 hyrax/config/fcrepo_wrapper_test.yml          |    4 +
 hyrax/config/fedora.yml                       |   15 +
 .../application_controller_renderer.rb        |    8 +
 hyrax/config/initializers/assets.rb           |   14 +
 .../initializers/backtrace_silencers.rb       |    7 +
 hyrax/config/initializers/clamav.rb           |    2 +
 .../initializers/content_security_policy.rb   |   25 +
 .../config/initializers/cookies_serializer.rb |    5 +
 hyrax/config/initializers/devise.rb           |  311 ++
 .../initializers/filter_parameter_logging.rb  |    4 +
 hyrax/config/initializers/hydra_config.rb     |   24 +
 hyrax/config/initializers/hyrax.rb            |  315 ++
 hyrax/config/initializers/inflections.rb      |   16 +
 hyrax/config/initializers/mailboxer.rb        |   22 +
 hyrax/config/initializers/mime_types.rb       |    8 +
 hyrax/config/initializers/mini_magick.rb      |    6 +
 hyrax/config/initializers/redis_config.rb     |    4 +
 hyrax/config/initializers/riiif.rb            |   29 +
 hyrax/config/initializers/simple_form.rb      |  171 ++
 .../initializers/simple_form_bootstrap.rb     |  151 +
 hyrax/config/initializers/wrap_parameters.rb  |   14 +
 hyrax/config/locales/blacklight.en.yml        |    3 +
 hyrax/config/locales/dataset.de.yml           |    8 +
 hyrax/config/locales/dataset.en.yml           |    8 +
 hyrax/config/locales/dataset.es.yml           |   10 +
 hyrax/config/locales/dataset.fr.yml           |    8 +
 hyrax/config/locales/dataset.it.yml           |    8 +
 hyrax/config/locales/dataset.pt-BR.yml        |    8 +
 hyrax/config/locales/dataset.zh.yml           |   10 +
 hyrax/config/locales/devise.en.yml            |   65 +
 hyrax/config/locales/en.yml                   |   33 +
 hyrax/config/locales/hyrax.de.yml             |   58 +
 hyrax/config/locales/hyrax.en.yml             |   58 +
 hyrax/config/locales/hyrax.es.yml             |   58 +
 hyrax/config/locales/hyrax.fr.yml             |   58 +
 hyrax/config/locales/hyrax.it.yml             |   58 +
 hyrax/config/locales/hyrax.pt-BR.yml          |   58 +
 hyrax/config/locales/hyrax.zh.yml             |   58 +
 hyrax/config/puma.rb                          |   37 +
 hyrax/config/redis.yml                        |    9 +
 hyrax/config/role_map.yml                     |   23 +
 hyrax/config/routes.rb                        |   34 +
 hyrax/config/solr.yml                         |    7 +
 hyrax/config/solr_wrapper_test.yml            |    8 +
 hyrax/config/solr_wrapper_valkyrie_test.yml   |    7 +
 hyrax/config/spring.rb                        |    6 +
 hyrax/config/storage.yml                      |   34 +
 hyrax/config/tinymce.yml                      |   13 +
 hyrax/config/uv/uv-config.json                |    3 +
 hyrax/config/uv/uv.html                       |   87 +
 hyrax/config/valkyrie_index.yml               |   12 +
 hyrax/config/workflows/default_workflow.json  |   21 +
 .../workflows/mediated_deposit_workflow.json  |   76 +
 ...220217192729_create_searches.blacklight.rb |   17 +
 ...20217192730_create_bookmarks.blacklight.rb |   19 +
 ...olymorphic_type_to_bookmarks.blacklight.rb |    9 +
 .../20220217192748_devise_create_users.rb     |   44 +
 ...220217192751_add_devise_guests_to_users.rb |   15 +
 ...7192823_create_version_committers.hyrax.rb |   15 +
 ...192824_create_checksum_audit_logs.hyrax.rb |   19 +
 ...217192825_create_single_use_links.hyrax.rb |   12 +
 ...0220217192826_add_social_to_users.hyrax.rb |   13 +
 ...0217192827_add_ldap_attrs_to_user.hyrax.rb |   27 +
 ...220217192828_add_avatars_to_users.hyrax.rb |   15 +
 .../20220217192829_create_trophies.hyrax.rb   |   10 +
 ...20217192830_add_linkedin_to_users.hyrax.rb |    5 +
 ...20217192831_create_tinymce_assets.hyrax.rb |    8 +
 ...20217192832_create_content_blocks.hyrax.rb |   10 +
 ...20217192833_create_featured_works.hyrax.rb |   12 +
 ...dd_external_key_to_content_blocks.hyrax.rb |    6 +
 ...92835_create_proxy_deposit_rights.hyrax.rb |   10 +
 ...836_create_proxy_deposit_requests.hyrax.rb |   15 +
 ...0217192837_create_file_view_stats.hyrax.rb |   12 +
 ...192838_create_file_download_stats.hyrax.rb |   12 +
 ...20220217192839_add_orcid_to_users.hyrax.rb |    5 +
 .../20220217192840_create_user_stats.hyrax.rb |   19 +
 ...0217192841_create_work_view_stats.hyrax.rb |   12 +
 ...217192842_add_works_to_user_stats.hyrax.rb |   13 +
 ...trophy_generic_file_id_to_work_id.hyrax.rb |    5 +
 ...eposit_generic_file_id_to_work_id.hyrax.rb |    5 +
 ...og_generic_file_id_to_file_set_id.hyrax.rb |    5 +
 ...equest_generic_file_id_to_work_id.hyrax.rb |    5 +
 ...20217192847_create_uploaded_files.hyrax.rb |   10 +
 .../20220217192848_create_features.hyrax.rb   |   10 +
 .../20220217192849_create_operations.hyrax.rb |   23 +
 ...d_work_generic_file_id_to_work_id.hyrax.rb |    6 +
 ...0220217192851_add_arkivo_to_users.hyrax.rb |    8 +
 .../20220217192852_create_sipity.hyrax.rb     |  163 +
 ...53_create_sipity_workflow_methods.hyrax.rb |   10 +
 ...192854_create_permission_template.hyrax.rb |   11 +
 ...create_permission_template_access.hyrax.rb |   11 +
 ...d_release_to_permission_templates.hyrax.rb |    6 +
 ...ssion_template_to_sipity_workflow.hyrax.rb |   26 +
 ..._tidy_up_because_of_bad_exception.hyrax.rb |   13 +
 ...d_allows_access_grant_to_workflow.hyrax.rb |    5 +
 ...7192860_change_checksum_audit_log.hyrax.rb |   18 +
 ...0217192861_create_job_io_wrappers.hyrax.rb |   15 +
 ...217192862_create_collection_types.hyrax.rb |   17 +
 ...date_collection_type_column_names.hyrax.rb |    9 +
 ...te_collection_type_column_options.hyrax.rb |   17 +
 ..._create_collection_branding_infos.hyrax.rb |   15 +
 ...eate_collection_type_participants.hyrax.rb |   11 +
 ..._rename_admin_set_id_to_source_id.hyrax.rb |    5 +
 ...868_add_preferred_locale_to_users.hyrax.rb |    5 +
 ...d_collection_type_sharing_options.hyrax.rb |    5 +
 ...t_to_permission_template_accesses.hyrax.rb |    8 +
 ...1_add_branding_to_collection_type.hyrax.rb |    5 +
 ...d_badge_color_to_collection_types.hyrax.rb |    5 +
 ...ate_single_use_links_column_names.hyrax.rb |    6 +
 ...ty_entity_specific_responsibility.hyrax.rb |    9 +
 ...create_default_administrative_set.hyrax.rb |    8 +
 ...92876_create_mailboxer.mailboxer_engine.rb |   65 +
 ...dd_conversation_optout.mailboxer_engine.rb |   15 +
 ...78_add_missing_indices.mailboxer_engine.rb |   20 +
 ..._to_mailboxer_receipts.mailboxer_engine.rb |    8 +
 ...20217192880_create_qa_local_authorities.rb |   10 +
 ...92881_create_qa_local_authority_entries.rb |   12 +
 ..._create_minter_states.noid_rails_engine.rb |   17 +
 ..._state_random_to_rand.noid_rails_engine.rb |    8 +
 hyrax/db/migrate/20220218044917_user_roles.rb |   20 +
 hyrax/db/schema.rb                            |  582 ++++
 hyrax/db/seeds.rb                             |    7 +
 hyrax/docker-entrypoint.sh                    |   67 +
 hyrax/lib/assets/.keep                        |    0
 hyrax/lib/tasks/.keep                         |    0
 hyrax/lib/tasks/db_exists.rake                |   13 +
 hyrax/lib/tasks/setup_hyrax.rake              |   48 +
 hyrax/lib/tasks/test_servers.rake             |   60 +
 hyrax/log/.keep                               |    0
 hyrax/package.json                            |   17 +
 hyrax/public/404.html                         |   67 +
 hyrax/public/422.html                         |   67 +
 hyrax/public/500.html                         |   66 +
 hyrax/public/apple-touch-icon-precomposed.png |    0
 hyrax/public/apple-touch-icon.png             |    0
 hyrax/public/favicon.ico                      |    0
 hyrax/public/robots.txt                       |    1 +
 hyrax/seed/.keep                              |    0
 hyrax/seed/setup.json                         |   22 +
 hyrax/solr/conf/_rest_managed.json            |    3 +
 hyrax/solr/conf/admin-extra.html              |   31 +
 hyrax/solr/conf/elevate.xml                   |   36 +
 hyrax/solr/conf/mapping-ISOLatin1Accent.txt   |  246 ++
 hyrax/solr/conf/protwords.txt                 |   21 +
 hyrax/solr/conf/schema.xml                    |  367 +++
 hyrax/solr/conf/scripts.conf                  |   24 +
 hyrax/solr/conf/solrconfig.xml                |  325 ++
 hyrax/solr/conf/spellings.txt                 |    2 +
 hyrax/solr/conf/stopwords.txt                 |   58 +
 hyrax/solr/conf/stopwords_en.txt              |   58 +
 hyrax/solr/conf/synonyms.txt                  |   31 +
 hyrax/solr/conf/xslt/example.xsl              |  132 +
 hyrax/solr/conf/xslt/example_atom.xsl         |   67 +
 hyrax/solr/conf/xslt/example_rss.xsl          |   66 +
 hyrax/solr/conf/xslt/luke.xsl                 |  337 +++
 hyrax/solr/sample_solr_documents.yml          | 2692 +++++++++++++++++
 .../actors/hyrax/actors/dataset_actor_spec.rb |    9 +
 .../hyrax/datasets_controller_spec.rb         |    9 +
 hyrax/spec/features/create_dataset_spec.rb    |   70 +
 hyrax/spec/forms/hyrax/dataset_form_spec.rb   |    9 +
 hyrax/spec/models/collection_spec.rb          |    8 +
 hyrax/spec/models/dataset_spec.rb             |    9 +
 hyrax/spec/models/file_set_spec.rb            |    8 +
 .../models/qa/local_authority_entry_spec.rb   |    5 +
 hyrax/spec/models/qa/local_authority_spec.rb  |    5 +
 .../hyrax/dataset_presenter_spec.rb           |    9 +
 hyrax/spec/rails_helper.rb                    |   64 +
 hyrax/spec/spec_helper.rb                     |   94 +
 hyrax/storage/.keep                           |    0
 hyrax/test/application_system_test_case.rb    |    5 +
 hyrax/test/controllers/.keep                  |    0
 hyrax/test/fixtures/.keep                     |    0
 hyrax/test/fixtures/files/.keep               |    0
 hyrax/test/fixtures/users.yml                 |   11 +
 hyrax/test/helpers/.keep                      |    0
 hyrax/test/integration/.keep                  |    0
 hyrax/test/mailers/.keep                      |    0
 hyrax/test/models/.keep                       |    0
 hyrax/test/models/user_test.rb                |    7 +
 hyrax/test/system/.keep                       |    0
 hyrax/test/test_helper.rb                     |   10 +
 hyrax/tmp/.keep                               |    0
 hyrax/vendor/.keep                            |    0
 matomo.conf                                   |   69 +
 matomo_config.ini.php                         |   79 +
 264 files changed, 12644 insertions(+), 1 deletion(-)
 create mode 100644 .gitignore
 create mode 100644 LICENSE
 create mode 100644 docker-compose.override.yml
 create mode 100644 docker-compose.yml
 create mode 100644 hyrax/.fcrepo_wrapper.yml
 create mode 100644 hyrax/.gitignore
 create mode 100644 hyrax/.rspec
 create mode 100644 hyrax/.ruby-version
 create mode 100644 hyrax/.solr_wrapper.yml
 create mode 100644 hyrax/Dockerfile
 create mode 100644 hyrax/Gemfile
 create mode 100644 hyrax/Gemfile.lock
 create mode 100644 hyrax/Rakefile
 create mode 100644 hyrax/app/actors/hyrax/actors/dataset_actor.rb
 create mode 100644 hyrax/app/assets/config/manifest.js
 create mode 100644 hyrax/app/assets/images/.keep
 create mode 100644 hyrax/app/assets/images/unauthorized.png
 create mode 100644 hyrax/app/assets/images/us_404.svg
 create mode 100644 hyrax/app/assets/javascripts/application.js
 create mode 100644 hyrax/app/assets/javascripts/blacklight_gallery.js
 create mode 100644 hyrax/app/assets/javascripts/cable.js
 create mode 100644 hyrax/app/assets/javascripts/channels/.keep
 create mode 100644 hyrax/app/assets/javascripts/openseadragon.js
 create mode 100644 hyrax/app/assets/stylesheets/application.css
 create mode 100644 hyrax/app/assets/stylesheets/hyrax.scss
 create mode 100644 hyrax/app/assets/stylesheets/openseadragon.css
 create mode 100644 hyrax/app/channels/application_cable/channel.rb
 create mode 100644 hyrax/app/channels/application_cable/connection.rb
 create mode 100644 hyrax/app/controllers/application_controller.rb
 create mode 100644 hyrax/app/controllers/catalog_controller.rb
 create mode 100644 hyrax/app/controllers/concerns/.keep
 create mode 100644 hyrax/app/controllers/hyrax/datasets_controller.rb
 create mode 100644 hyrax/app/forms/hyrax/dataset_form.rb
 create mode 100644 hyrax/app/helpers/application_helper.rb
 create mode 100644 hyrax/app/helpers/hyrax_helper.rb
 create mode 100644 hyrax/app/indexers/dataset_indexer.rb
 create mode 100644 hyrax/app/jobs/application_job.rb
 create mode 100644 hyrax/app/mailers/application_mailer.rb
 create mode 100644 hyrax/app/models/ability.rb
 create mode 100644 hyrax/app/models/application_record.rb
 create mode 100644 hyrax/app/models/collection.rb
 create mode 100644 hyrax/app/models/concerns/.keep
 create mode 100644 hyrax/app/models/dataset.rb
 create mode 100644 hyrax/app/models/file_set.rb
 create mode 100644 hyrax/app/models/qa.rb
 create mode 100644 hyrax/app/models/qa/local_authority.rb
 create mode 100644 hyrax/app/models/qa/local_authority_entry.rb
 create mode 100644 hyrax/app/models/search_builder.rb
 create mode 100644 hyrax/app/models/solr_document.rb
 create mode 100644 hyrax/app/models/user.rb
 create mode 100644 hyrax/app/presenters/hyrax/dataset_presenter.rb
 create mode 100644 hyrax/app/views/hyrax/datasets/_dataset.html.erb
 create mode 100644 hyrax/app/views/layouts/application.html.erb
 create mode 100644 hyrax/app/views/layouts/mailer.html.erb
 create mode 100644 hyrax/app/views/layouts/mailer.text.erb
 create mode 100755 hyrax/bin/bundle
 create mode 100755 hyrax/bin/rails
 create mode 100755 hyrax/bin/rake
 create mode 100755 hyrax/bin/setup
 create mode 100755 hyrax/bin/spring
 create mode 100755 hyrax/bin/update
 create mode 100755 hyrax/bin/yarn
 create mode 100644 hyrax/config.ru
 create mode 100644 hyrax/config/analytics.yml
 create mode 100644 hyrax/config/application.rb
 create mode 100644 hyrax/config/authorities/licenses.yml
 create mode 100644 hyrax/config/authorities/resource_types.yml
 create mode 100644 hyrax/config/authorities/rights_statements.yml
 create mode 100644 hyrax/config/blacklight.yml
 create mode 100644 hyrax/config/boot.rb
 create mode 100644 hyrax/config/browse_everything_providers.yml
 create mode 100644 hyrax/config/cable.yml
 create mode 100644 hyrax/config/credentials.yml.enc
 create mode 100644 hyrax/config/database.yml
 create mode 100644 hyrax/config/environment.rb
 create mode 100644 hyrax/config/environments/development.rb
 create mode 100644 hyrax/config/environments/production.rb
 create mode 100644 hyrax/config/environments/test.rb
 create mode 100644 hyrax/config/fcrepo_wrapper_test.yml
 create mode 100644 hyrax/config/fedora.yml
 create mode 100644 hyrax/config/initializers/application_controller_renderer.rb
 create mode 100644 hyrax/config/initializers/assets.rb
 create mode 100644 hyrax/config/initializers/backtrace_silencers.rb
 create mode 100644 hyrax/config/initializers/clamav.rb
 create mode 100644 hyrax/config/initializers/content_security_policy.rb
 create mode 100644 hyrax/config/initializers/cookies_serializer.rb
 create mode 100644 hyrax/config/initializers/devise.rb
 create mode 100644 hyrax/config/initializers/filter_parameter_logging.rb
 create mode 100644 hyrax/config/initializers/hydra_config.rb
 create mode 100644 hyrax/config/initializers/hyrax.rb
 create mode 100644 hyrax/config/initializers/inflections.rb
 create mode 100644 hyrax/config/initializers/mailboxer.rb
 create mode 100644 hyrax/config/initializers/mime_types.rb
 create mode 100644 hyrax/config/initializers/mini_magick.rb
 create mode 100644 hyrax/config/initializers/redis_config.rb
 create mode 100644 hyrax/config/initializers/riiif.rb
 create mode 100644 hyrax/config/initializers/simple_form.rb
 create mode 100644 hyrax/config/initializers/simple_form_bootstrap.rb
 create mode 100644 hyrax/config/initializers/wrap_parameters.rb
 create mode 100644 hyrax/config/locales/blacklight.en.yml
 create mode 100644 hyrax/config/locales/dataset.de.yml
 create mode 100644 hyrax/config/locales/dataset.en.yml
 create mode 100644 hyrax/config/locales/dataset.es.yml
 create mode 100644 hyrax/config/locales/dataset.fr.yml
 create mode 100644 hyrax/config/locales/dataset.it.yml
 create mode 100644 hyrax/config/locales/dataset.pt-BR.yml
 create mode 100644 hyrax/config/locales/dataset.zh.yml
 create mode 100644 hyrax/config/locales/devise.en.yml
 create mode 100644 hyrax/config/locales/en.yml
 create mode 100644 hyrax/config/locales/hyrax.de.yml
 create mode 100644 hyrax/config/locales/hyrax.en.yml
 create mode 100644 hyrax/config/locales/hyrax.es.yml
 create mode 100644 hyrax/config/locales/hyrax.fr.yml
 create mode 100644 hyrax/config/locales/hyrax.it.yml
 create mode 100644 hyrax/config/locales/hyrax.pt-BR.yml
 create mode 100644 hyrax/config/locales/hyrax.zh.yml
 create mode 100644 hyrax/config/puma.rb
 create mode 100644 hyrax/config/redis.yml
 create mode 100644 hyrax/config/role_map.yml
 create mode 100644 hyrax/config/routes.rb
 create mode 100644 hyrax/config/solr.yml
 create mode 100644 hyrax/config/solr_wrapper_test.yml
 create mode 100644 hyrax/config/solr_wrapper_valkyrie_test.yml
 create mode 100644 hyrax/config/spring.rb
 create mode 100644 hyrax/config/storage.yml
 create mode 100644 hyrax/config/tinymce.yml
 create mode 100644 hyrax/config/uv/uv-config.json
 create mode 100644 hyrax/config/uv/uv.html
 create mode 100644 hyrax/config/valkyrie_index.yml
 create mode 100644 hyrax/config/workflows/default_workflow.json
 create mode 100644 hyrax/config/workflows/mediated_deposit_workflow.json
 create mode 100644 hyrax/db/migrate/20220217192729_create_searches.blacklight.rb
 create mode 100644 hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb
 create mode 100644 hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb
 create mode 100644 hyrax/db/migrate/20220217192748_devise_create_users.rb
 create mode 100644 hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb
 create mode 100644 hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192848_create_features.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192849_create_operations.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb
 create mode 100644 hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb
 create mode 100644 hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb
 create mode 100644 hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb
 create mode 100644 hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb
 create mode 100644 hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb
 create mode 100644 hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb
 create mode 100644 hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb
 create mode 100644 hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb
 create mode 100644 hyrax/db/migrate/20220218044917_user_roles.rb
 create mode 100644 hyrax/db/schema.rb
 create mode 100644 hyrax/db/seeds.rb
 create mode 100644 hyrax/docker-entrypoint.sh
 create mode 100644 hyrax/lib/assets/.keep
 create mode 100644 hyrax/lib/tasks/.keep
 create mode 100644 hyrax/lib/tasks/db_exists.rake
 create mode 100644 hyrax/lib/tasks/setup_hyrax.rake
 create mode 100644 hyrax/lib/tasks/test_servers.rake
 create mode 100644 hyrax/log/.keep
 create mode 100644 hyrax/package.json
 create mode 100644 hyrax/public/404.html
 create mode 100644 hyrax/public/422.html
 create mode 100644 hyrax/public/500.html
 create mode 100644 hyrax/public/apple-touch-icon-precomposed.png
 create mode 100644 hyrax/public/apple-touch-icon.png
 create mode 100644 hyrax/public/favicon.ico
 create mode 100644 hyrax/public/robots.txt
 create mode 100644 hyrax/seed/.keep
 create mode 100644 hyrax/seed/setup.json
 create mode 100644 hyrax/solr/conf/_rest_managed.json
 create mode 100644 hyrax/solr/conf/admin-extra.html
 create mode 100644 hyrax/solr/conf/elevate.xml
 create mode 100644 hyrax/solr/conf/mapping-ISOLatin1Accent.txt
 create mode 100644 hyrax/solr/conf/protwords.txt
 create mode 100644 hyrax/solr/conf/schema.xml
 create mode 100644 hyrax/solr/conf/scripts.conf
 create mode 100644 hyrax/solr/conf/solrconfig.xml
 create mode 100644 hyrax/solr/conf/spellings.txt
 create mode 100644 hyrax/solr/conf/stopwords.txt
 create mode 100644 hyrax/solr/conf/stopwords_en.txt
 create mode 100644 hyrax/solr/conf/synonyms.txt
 create mode 100644 hyrax/solr/conf/xslt/example.xsl
 create mode 100644 hyrax/solr/conf/xslt/example_atom.xsl
 create mode 100644 hyrax/solr/conf/xslt/example_rss.xsl
 create mode 100644 hyrax/solr/conf/xslt/luke.xsl
 create mode 100644 hyrax/solr/sample_solr_documents.yml
 create mode 100644 hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb
 create mode 100644 hyrax/spec/controllers/hyrax/datasets_controller_spec.rb
 create mode 100644 hyrax/spec/features/create_dataset_spec.rb
 create mode 100644 hyrax/spec/forms/hyrax/dataset_form_spec.rb
 create mode 100644 hyrax/spec/models/collection_spec.rb
 create mode 100644 hyrax/spec/models/dataset_spec.rb
 create mode 100644 hyrax/spec/models/file_set_spec.rb
 create mode 100644 hyrax/spec/models/qa/local_authority_entry_spec.rb
 create mode 100644 hyrax/spec/models/qa/local_authority_spec.rb
 create mode 100644 hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb
 create mode 100644 hyrax/spec/rails_helper.rb
 create mode 100644 hyrax/spec/spec_helper.rb
 create mode 100644 hyrax/storage/.keep
 create mode 100644 hyrax/test/application_system_test_case.rb
 create mode 100644 hyrax/test/controllers/.keep
 create mode 100644 hyrax/test/fixtures/.keep
 create mode 100644 hyrax/test/fixtures/files/.keep
 create mode 100644 hyrax/test/fixtures/users.yml
 create mode 100644 hyrax/test/helpers/.keep
 create mode 100644 hyrax/test/integration/.keep
 create mode 100644 hyrax/test/mailers/.keep
 create mode 100644 hyrax/test/models/.keep
 create mode 100644 hyrax/test/models/user_test.rb
 create mode 100644 hyrax/test/system/.keep
 create mode 100644 hyrax/test/test_helper.rb
 create mode 100644 hyrax/tmp/.keep
 create mode 100644 hyrax/vendor/.keep
 create mode 100644 matomo.conf
 create mode 100644 matomo_config.ini.php

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..5947de29
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,345 @@
+### project specific
+.idea/
+
+# ignore files for puma but keep directory structure
+hyrax/shared/log/*
+!hyrax/shared/log/.keep
+hyrax/shared/pids/*
+!hyrax/shared/pids/.keep
+hyrax/shared/sockets/*
+!hyrax/shared/sockets/.keep
+
+# Files that appeared when I ran hyrax that weren't initally checked in
+.generators
+.rakeTasks
+
+# public assets generated files
+hyrax/public/assets
+
+# Created by .ignore support plugin (hsz.mobi)
+### Ansible template
+*.retry
+### Emacs template
+# -*- mode: gitignore; -*-
+*~
+\#*\#
+/.emacs.desktop
+/.emacs.desktop.lock
+*.elc
+auto-save-list
+tramp
+.\#*
+
+# Org-mode
+.org-id-locations
+*_archive
+
+# flymake-mode
+*_flymake.*
+
+# eshell files
+/eshell/history
+/eshell/lastdir
+
+# elpa packages
+/elpa/
+
+# reftex files
+*.rel
+
+# AUCTeX auto folder
+/auto/
+
+# cask packages
+.cask/
+dist/
+
+# Flycheck
+flycheck_*.el
+
+# server auth directory
+/server/
+
+# projectiles files
+.projectile
+
+# directory configuration
+.dir-locals.el
+### Rails template
+*.rbc
+capybara-*.html
+#.rspec
+/log
+/tmp
+/db/*.sqlite3
+/db/*.sqlite3-journal
+/public/system
+/coverage/
+/hyrax/coverage
+/spec/tmp
+*.orig
+rerun.txt
+pickle-email-*.html
+hyrax/docs
+
+# TODO Comment out this rule if you are OK with secrets being uploaded to the repo
+config/initializers/secret_token.rb
+config/master.key
+
+# Only include if you have production secrets in this file, which is no longer a Rails default
+# config/secrets.yml
+
+## Environment normalization:
+/.bundle
+/vendor/bundle
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+
+# if using bower-rails ignore default bower_components path bower.json files
+/vendor/assets/bower_components
+*.bowerrc
+bower.json
+
+# Ignore pow environment settings
+.powenv
+
+# Ignore Byebug command history file.
+.byebug_history
+
+# Ignore node_modules
+node_modules/
+
+### Vim template
+# Swap
+[._]*.s[a-v][a-z]
+[._]*.sw[a-p]
+[._]s[a-v][a-z]
+[._]sw[a-p]
+
+# Session
+Session.vim
+
+# Temporary
+.netrwhist
+*~
+# Auto-generated tag files
+tags
+# Persistent undo
+[._]*.un~
+### SublimeText template
+# Cache files for Sublime Text
+*.tmlanguage.cache
+*.tmPreferences.cache
+*.stTheme.cache
+
+# Workspace files are user-specific
+*.sublime-workspace
+
+# Project files should be checked into the repository, unless a significant
+# proportion of contributors will probably not be using Sublime Text
+# *.sublime-project
+
+# SFTP configuration file
+sftp-config.json
+
+# Package control specific files
+Package Control.last-run
+Package Control.ca-list
+Package Control.ca-bundle
+Package Control.system-ca-bundle
+Package Control.cache/
+Package Control.ca-certs/
+Package Control.merged-ca-bundle
+Package Control.user-ca-bundle
+oscrypto-ca-bundle.crt
+bh_unicode_properties.cache
+
+# Sublime-github package stores a github token in this file
+# https://packagecontrol.io/packages/sublime-github
+GitHub.sublime-settings
+### JetBrains template
+# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
+# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
+
+# User-specific stuff
+.idea/**/workspace.xml
+.idea/**/tasks.xml
+.idea/**/dictionaries
+.idea/**/shelf
+
+# Sensitive or high-churn files
+.idea/**/dataSources/
+.idea/**/dataSources.ids
+.idea/**/dataSources.local.xml
+.idea/**/sqlDataSources.xml
+.idea/**/dynamic.xml
+.idea/**/uiDesigner.xml
+.idea/**/dbnavigator.xml
+
+# Gradle
+.idea/**/gradle.xml
+.idea/**/libraries
+
+# CMake
+cmake-build-debug/
+cmake-build-release/
+
+# Mongo Explorer plugin
+.idea/**/mongoSettings.xml
+
+# File-based project format
+*.iws
+
+# IntelliJ
+out/
+
+# mpeltonen/sbt-idea plugin
+.idea_modules/
+
+# JIRA plugin
+atlassian-ide-plugin.xml
+
+# Cursive Clojure plugin
+.idea/replstate.xml
+
+# Crashlytics plugin (for Android Studio and IntelliJ)
+com_crashlytics_export_strings.xml
+crashlytics.properties
+crashlytics-build.properties
+fabric.properties
+
+# Editor-based Rest Client
+.idea/httpRequests
+### Terraform template
+#  Local .terraform directories
+**/.terraform/*
+
+# .tfstate files
+*.tfstate
+*.tfstate.*
+
+# Ignore any .tfvars files that are generated automatically for each Terraform run. Most
+# .tfvars files are managed as part of configuration and so should be included in
+# version control.
+#
+# example.tfvars
+### Ruby template
+*.gem
+*.rbc
+/.config
+/coverage/
+/InstalledFiles
+/pkg/
+/spec/reports/
+/spec/examples.txt
+/test/tmp/
+/test/version_tmp/
+/tmp/
+
+# Used by dotenv library to load environment variables.
+# .env
+
+## Specific to RubyMotion:
+.dat*
+.repl_history
+build/
+*.bridgesupport
+build-iPhoneOS/
+build-iPhoneSimulator/
+
+## Specific to RubyMotion (use of CocoaPods):
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# vendor/Pods/
+
+## Documentation cache and generated files:
+/.yardoc/
+/_yardoc/
+/doc/
+/rdoc/
+
+## Environment normalization:
+/.bundle/
+/vendor/bundle
+/lib/bundler/man/
+
+# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
+.rvmrc
+### Linux template
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+### macOS template
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+### Windows template
+# Windows thumbnail cache files
+Thumbs.db
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+# Environment variables file
+.env.production
+.env
+/hyrax/.fedora-test.pid
+/hyrax/.solr-test.pid
+
+# Default HOST_APP_DATA_PATH in .env.template.development
+/data/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 00000000..01e31ac2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,206 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright 2012 Penn State University
+   Copyright 2013 University of Notre Dame, Northwestern University, and Data Curation Experts
+   Copyright 2014 Data Curation Experts
+   Copyright 2020 National Institute for Materials Science
+   Additional copyright may be held by others, as reflected in the commit log
+
+
+   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.
diff --git a/README.md b/README.md
index a2c89568..78643a1c 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,180 @@
-This is the codebase for the RUB RDMS system
\ No newline at end of file
+## Introduction
+
+[rdms](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms) is an application based on [Hyrax 3.3](https://github.com/samvera/hyrax/releases/tag/v3.3.0) stack by [Cottage Labs](https://cottagelabs.com/) and [AntLeaf](https://antleaf.com/). It is built with Docker containers.
+
+## Getting Started
+
+Clone the repository with `git clone https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms.git`.
+
+Ensure you have docker and docker-compose.
+
+Open a console and try running `docker -h` and `docker-compose -h` to verify they are both accessible.
+
+Create the environment file `.env`. You can start by copying the template file [.env.template.development](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/.env.template.development) to `.env` and customizing the values to your setup. <br>
+Note: For production environment, use .env.template as your template.
+
+## quick start
+If you would like to do a test run of the system, start the docker containers
+```bash
+$ cd rdms
+$ docker-compose up -d
+```
+You should see the containers being built and the services start.
+
+## Docker compose explained
+
+There are 2 `docker-compose` files provided in the repository, which build the containers running the services as shown above
+* [docker-compose.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml) is the main docker-compose file. It builds all the core servcies required to run the application
+* [docker-compose.override.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.override.yml) is used along with the main [docker-compose.yml](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml) file in development, mainly to expose ports for the various services.
+
+### Containers running in docker
+
+* [fcrepo](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L13-L22) is the container running the [Fedora 4 commons repository](https://wiki.duraspace.org/display/FEDORA47/Fedora+4.7+Documentation), an rdf document store. 
+
+  By default, this runs the fedora service on port 8080 internally in docker (http://fcrepo:8080/fcrepo/rest).<br/><br/>
+
+* [Solr container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L24-L45) runs [SOLR](lucene.apache.org/solr/), an enterprise search server. 
+
+  By default, this runs the SOLR service on port 8983 internally in docker (http://solr:8983).<br/><br/>
+
+* [db containers](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L47-L76) running a postgres database for use by the Hyrax application (appdb) and Fedora (fcrepodb). 
+
+  By default, this runs the database service on port 5432 internally in docker.<br/><br/>
+
+* [redis container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L121-L132) running [redis](https://redis.io/), used by Hyrax to manage background tasks. 
+
+  By default, this runs the redis service on port 6379 internally in docker.<br/><br/>
+
+* [app container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L78-L96) sets up the Hyrax application, which is then used by 2 services - web and workers.<br/><br/>
+  
+  * [Web container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L98-L110) runs the application. 
+  
+    By default, this runs on port 3000 internally in docker (http://web:3000). 
+  
+    This container runs [docker-entrypoint.sh](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/docker-entrypoint.sh), on startup. The bash script 
+  
+    * creates the log folder
+  * checks the bundle (and installs It in development)
+    * does the database setup
+  * checksSolr and Fedora are running
+    * It runs a rake task [setup_hyrax.rake](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/lib/tasks/setup_hyrax.rake) to setup the application. This rake task 
+    * creates users listed in [setup.json]( https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/hyrax/seed/setup.json)
+    
+    * Loads the default workflows
+    
+      * Creates the default admin set and collection types
+  * Starts the rails server
+    
+  
+  
+  
+  * [Wokers container](https://gitlab.ruhr-uni-bochum.de/FDM/rdm-system/rdms/-/blob/master/docker-compose.yml#L112-L119) runs the background tasks, using [sidekiq](https://github.com/mperham/sidekiq) and redis. 
+
+    By default, this runs the worker service. 
+  
+    Hyrax processes long-running or particularly slow work in background jobs to speed up the web request/response cycle. When a user submits a file through a work (using the web or an import task), there a number of background jobs that are run, initilated by the hyrax actor stack, as explained [here](https://samvera.github.io/what-happens-deposit-2.0.html)<br/><br/>You can monitor the background workers using the materials data repository service at http://web:3000/sidekiq when logged in as an admin user. <br/><br/>
+
+
+The data for the application is stored in docker named volumes as specified by the compose files. These are:
+
+```bash
+$ docker volume list -f name=rdms
+DRIVER    VOLUME NAME
+local     rdms_app
+local     rdms_cache
+local     rdms_db
+local     rdms_db-fcrepo
+local     rdms_derivatives
+local     rdms_fcrepo
+local     rdms_file_uploads
+local     rdms_redis
+local     rdms_solr
+```
+
+These will persist when the system is brought down and rebuilt. Deleting them will require importers etc. to run again.
+
+
+## Running in development or test
+
+When running in development and test environment, prepare your .env file using .env.template.development as the template. You need to use `docker-compose -f docker-compose.yml -f docker-compose.override.yml`. This will use the docker-compose.yml file and the docker-compose.override.yml file.
+  * fcrepo container will run the fedora service, which will be available in port 8080 at  http://localhost:8080/fcrepo/rest
+  * Solr container will run the Solr service, which will be available in port 8983 at  http://localhost:8983
+  * The web container runs the materials data repository service, which will be available in port 3000 at http://localhost:3000
+
+You could setup an alias for docker-compose on your local machine, to ease typing
+
+```bash
+alias hd='docker-compose -f docker-compose.yml -f docker-compose.override.yml'
+```
+
+### Yarn and static assets
+
+Static asset build is only run in `production` environment to speed up container creation in develop. To see features such as the IIIF viewer, `yarn install` must be run on the web container once it's up.
+
+```
+hd run web yarn install
+```
+
+## Builidng, starting and managing the service with docker
+
+### Build the docker container
+
+To start with, you would need to build the system, before running the services. To do this you need to issue the `build` command
+```bash
+$ hd build
+```
+
+### Start and run the services in the containers
+
+To run the containers after build, issue the `up` command (-d means run as daemon, in the background):
+
+```bash
+$ hd up -d
+```
+The containers should all start and the services should be available in their end points as described above
+* web server at http://localhost:3000 in development and https://domain-name in production
+
+### docker container status and logs
+
+You can see the state of the containers with `docker-compose ps`, and view logs e.g. for the web container using `docker-compose logs web`
+
+The services that you would need to monitor the logs for are docker mainly web and workers.
+
+
+### Some example docker commands and usage:
+
+[Docker cheat sheet](https://github.com/wsargent/docker-cheat-sheet)
+
+```bash
+# Bring the whole application up to run in the background, building the containers
+hd up -d --build
+
+# Stop the container
+hd stop
+
+# Halt the system
+hd down
+
+# Re-create the web container without affecting the rest of the system (and run in the background with -d)
+hd up -d --build --no-deps --force-recreate web
+
+# View the logs for the web application container
+hd logs web
+
+# Create a log dump file
+hd logs web | tee web_logs_`date --iso-8601`
+# (writes to e.g. web_logs_2022-02-14)
+
+# View all running containers
+hd ps     
+
+# Using its container name, you can run a shell in a container to view or make changes directly
+docker exec -it rdms-web-1 /bin/bash
+```
+
+## Backups
+
+There is [docker documentation](https://docs.docker.com/storage/volumes/#backup-restore-or-migrate-data-volumes) advising how to back up volumes and their data.
+
+
+
diff --git a/docker-compose.override.yml b/docker-compose.override.yml
new file mode 100644
index 00000000..49655ca7
--- /dev/null
+++ b/docker-compose.override.yml
@@ -0,0 +1,60 @@
+# Overrides the docker-compose file for development environment
+# - Use the example end.production file (because in dev it doesn't matter)
+# - Publish the fcrepo and solr ports
+# - No nginx in front of the app
+# - app accessible on port 3000
+
+
+version: '3'
+
+volumes:
+  file_uploads:
+  derivatives:
+  cache:
+  fcrepo:
+  redis:
+
+services:
+
+  fcrepo:
+    ports:
+      - 8080:8080
+    volumes:
+      - fcrepo:/data
+
+  solr:
+    environment:
+      - OOM=script
+    ports:
+      - 8983:8983
+
+  web:
+    ports:
+      - 3000:3000
+    environment:
+      - RAILS_FORCE_SSL=false
+    volumes:
+      - file_uploads:${UPLOADS_PATH}
+      - derivatives:${DERIVATIVES_PATH}
+      - cache:${CACHE_PATH}
+      - ${HOST_APP_DATA_PATH:-/data/}:/data/data
+      - ./hyrax:/data:cached
+    networks:
+      internal:
+        aliases:
+          - web
+
+  workers:
+    volumes:
+      - file_uploads:${UPLOADS_PATH}
+      - derivatives:${DERIVATIVES_PATH}
+      - cache:${CACHE_PATH}
+      - ${HOST_APP_DATA_PATH:-/data/}:/data/data
+      - ./hyrax:/data:cached
+
+  redis:
+    ports:
+      - 6379:6379
+    volumes:
+      - redis:/data
+
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 00000000..fccdd3df
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,189 @@
+version: '3'
+
+volumes:
+  solr:
+  db:
+  db-fcrepo:
+  app:
+  mysql-db:
+  matomo:
+  matomo_logs:
+
+networks:
+  internal:
+
+services:
+  fcrepo:
+    image: ualbertalib/docker-fcrepo4:4.7
+    expose:
+      - 8080
+    depends_on:
+      - fcrepodb
+    networks:
+      internal:
+    environment:
+      - CATALINA_OPTS=-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC -Dfcrepo.home=/data -Dfcrepo.object.directory=/data/objects -Dfcrepo.binary.directory=/data/binaries -Dfcrepo.postgresql.username=$POSTGRES_USER -Dfcrepo.postgresql.password=$POSTGRES_PASSWORD -Dfcrepo.postgresql.host=$POSTGRES_HOST_FCREPO -Dfcrepo.postgresql.port=$POSTGRES_PORT -Dfcrepo.modeshape.configuration=classpath:/config/jdbc-postgresql/repository.json
+
+  solr:
+    image: solr:8
+    expose:
+      - 8983
+    ports:
+      - 8983:8983
+    env_file:
+      - .env
+    healthcheck:
+      test: ["CMD-SHELL", "wget -O /dev/null http://localhost:8983/solr/"]
+      interval: 30s
+      timeout: 5s
+      retries: 3
+    networks:
+      internal:
+    volumes:
+      - solr:/opt/solr/server/solr/mycores
+      - ./hyrax/solr/conf:/opt/solr/solr_conf
+    command:
+      - sh
+      - "-c"
+      - "precreate-core hydra-test /opt/solr/solr_conf; solr-precreate ${SOLR_CORE} /opt/solr/solr_conf"
+
+  db: &db
+    image: postgres:13-alpine
+    networks:
+      internal:
+    env_file:
+      - .env
+    expose:
+      - 5432
+  fcrepodb:
+    <<: *db
+    environment:
+      - POSTGRES_DB=${POSTGRES_DB_FCREPO}
+    volumes:
+      - db-fcrepo:/var/lib/postgresql/data
+    healthcheck:
+      test: ["CMD-SHELL", "POSTGRES_PASSWORD=${POSTGRES_PASSWORD} pg_isready -U ${POSTGRES_USER} -h localhost -d ${POSTGRES_DB_FCREPO}"]
+      interval: 30s
+      timeout: 5s
+      retries: 3
+  appdb:
+    <<: *db
+    environment:
+      - POSTGRES_DB=${POSTGRES_DB_APP}
+    volumes:
+      - db:/var/lib/postgresql/data
+    healthcheck:
+      test: ["CMD-SHELL", "POSTGRES_PASSWORD=${POSTGRES_PASSWORD} pg_isready -U ${POSTGRES_USER} -h localhost -d ${POSTGRES_DB_APP}"]
+      interval: 30s
+      timeout: 5s
+      retries: 3
+
+  app: &app
+    build:
+      context: hyrax
+      args:
+        RAILS_ENV: ${RAILS_ENV}
+        UPLOADS_PATH: ${UPLOADS_PATH}
+        DERIVATIVES_PATH: ${DERIVATIVES_PATH}
+        CACHE_PATH: ${CACHE_PATH}
+        FITS_PATH: ${FITS_PATH}
+        FITS_VERSION: ${FITS_VERSION}
+    env_file:
+      - .env
+    volumes:
+      - app:${UPLOADS_PATH}
+      - app:${DERIVATIVES_PATH}
+      - app:${CACHE_PATH}
+      - app:${BRAND_PATH}
+    networks:
+      internal:
+
+  web:
+    <<: *app
+    command: bash -c "/bin/docker-entrypoint.sh"
+    environment:
+      - VIRTUAL_HOST=rdms.docker
+      - VIRTUAL_PORT=3000
+    depends_on:
+      - appdb
+      - solr
+      - fcrepo
+      - redis
+    expose:
+      - 3000
+
+  workers:
+    <<: *app
+    command: bundle exec sidekiq
+    depends_on:
+      - appdb
+      - solr
+      - fcrepo
+      - redis
+
+  redis:
+    image: redis:6
+    command: redis-server --appendonly yes
+    expose:
+      - 6379
+    networks:
+      internal:
+    healthcheck:
+      test: ["CMD-SHELL", "redis-cli ping"]
+      interval: 30s
+      timeout: 5s
+      retries: 3
+
+  matomo_db:
+    image: mariadb
+    command: --max-allowed-packet=64MB
+    restart: always
+    volumes:
+      - mysql-db:/var/lib/mysql
+    environment:
+      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
+    env_file:
+      - .env
+    expose:
+      - 3306
+    networks:
+      internal:
+        aliases:
+          - matomo_db
+
+  matomo_app:
+    image: matomo:fpm-alpine
+    restart: always
+    links:
+      - matomo_db
+    volumes:
+      # - ./matomo_config:/var/www/html/config:rw
+      - matomo_logs:/var/www/html/logs
+      - matomo:/var/www/html
+      - ./matomo_config.ini.php:/var/www/html/config/config.ini.php:rw
+    environment:
+      - MATOMO_DATABASE_HOST=matomo_db
+      - PHP_MEMORY_LIMIT=2048M
+    env_file:
+      - .env
+    networks:
+      internal:
+        aliases:
+          - matomo_app
+
+# matomo_web:
+#    image: nginx:alpine
+#    restart: always
+#    volumes:
+#      - matomo:/var/www/html:ro
+#      # see https://github.com/matomo-org/matomo-nginx
+#      - ./matomo.conf:/etc/nginx/conf.d/default.conf:ro
+#    ports:
+#      - 8000:80
+#    expose:
+#      - 8000
+#    networks:
+#      internal:
+#        aliases:
+#          - matomo
+
diff --git a/hyrax/.fcrepo_wrapper.yml b/hyrax/.fcrepo_wrapper.yml
new file mode 100644
index 00000000..3f921105
--- /dev/null
+++ b/hyrax/.fcrepo_wrapper.yml
@@ -0,0 +1,4 @@
+# Place any default configuration for fcrepo_wrapper here
+port: 8984
+enable_jms: false
+fcrepo_home_dir: tmp/fcrepo4-development-data
diff --git a/hyrax/.gitignore b/hyrax/.gitignore
new file mode 100644
index 00000000..81452db9
--- /dev/null
+++ b/hyrax/.gitignore
@@ -0,0 +1,31 @@
+# See https://help.github.com/articles/ignoring-files for more about ignoring files.
+#
+# If you find yourself ignoring temporary files generated by your text editor
+# or operating system, you probably want to add a global ignore instead:
+#   git config --global core.excludesfile '~/.gitignore_global'
+
+# Ignore bundler config.
+/.bundle
+
+# Ignore the default SQLite database.
+/db/*.sqlite3
+/db/*.sqlite3-journal
+
+# Ignore all logfiles and tempfiles.
+/log/*
+/tmp/*
+!/log/.keep
+!/tmp/.keep
+
+# Ignore uploaded files in development
+/storage/*
+!/storage/.keep
+
+/node_modules
+/yarn-error.log
+
+/public/assets
+.byebug_history
+
+# Ignore master key for decrypting credentials and more.
+/config/master.key
diff --git a/hyrax/.rspec b/hyrax/.rspec
new file mode 100644
index 00000000..c99d2e73
--- /dev/null
+++ b/hyrax/.rspec
@@ -0,0 +1 @@
+--require spec_helper
diff --git a/hyrax/.ruby-version b/hyrax/.ruby-version
new file mode 100644
index 00000000..73ad4780
--- /dev/null
+++ b/hyrax/.ruby-version
@@ -0,0 +1 @@
+ruby-2.7.5
\ No newline at end of file
diff --git a/hyrax/.solr_wrapper.yml b/hyrax/.solr_wrapper.yml
new file mode 100644
index 00000000..563acd2b
--- /dev/null
+++ b/hyrax/.solr_wrapper.yml
@@ -0,0 +1,8 @@
+# Place any default configuration for solr_wrapper here
+# version: 6.0.0
+# port: 8983
+instance_dir: tmp/solr-development
+collection:
+  persist: true
+  dir: solr/conf/
+  name: hydra-development
diff --git a/hyrax/Dockerfile b/hyrax/Dockerfile
new file mode 100644
index 00000000..ca5d1ddd
--- /dev/null
+++ b/hyrax/Dockerfile
@@ -0,0 +1,94 @@
+FROM ruby:2.7-buster
+
+# Setup build variables
+ARG RAILS_ENV
+ARG DERIVATIVES_PATH
+ARG UPLOADS_PATH
+ARG CACHE_PATH
+ARG FITS_PATH
+ARG FITS_VERSION
+ARG IM_VERSION=7.0.7-39
+
+ENV APP_PRODUCTION=/data/ \
+    APP_WORKDIR=/data
+
+# Add backports to apt-get sources
+# Install libraries, dependencies, java and fits
+
+RUN apt-get update -qq && \
+    apt-get -y install apt-transport-https && \
+    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
+    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
+    curl -sL https://deb.nodesource.com/setup_14.x | bash - && \
+    apt-get update -qq && apt-get install -y --no-install-recommends \
+    libpq-dev \
+    libxml2-dev libxslt1-dev \
+    nodejs \
+    libreoffice \
+    libass-dev libfreetype6-dev libmp3lame-dev libopus-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev \
+    libvpx-dev libvorbis-dev libx264-dev libx265-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev nasm pkg-config \
+    texinfo wget yasm zlib1g-dev \
+    libjpeg-dev libtiff-dev libpng-dev libraw-dev libwebp-dev libjxr-dev \
+    libcairo2-dev libgs-dev librsvg2-dev \
+    libmp3lame-dev libvorbis-dev libtheora-dev libspeex-dev libx264-dev \
+    ghostscript ffmpeg \
+    ufraw \
+    bzip2 unzip xz-utils \
+    vim \
+    git \
+    openjdk-11-jre-headless \
+    yarn && \
+    yarn config set no-progress && \
+    yarn config set silent
+
+RUN git clone https://github.com/ImageMagick/ImageMagick.git && \
+    cd ImageMagick && git checkout ${IM_VERSION} && \
+    ./configure --prefix=/usr --without-magick-plus-plus --disable-docs --disable-static --with-tiff && \
+    make && make install
+
+RUN mkdir -p /fits/ \
+    && wget -q https://github.com/harvard-lts/fits/releases/download/$FITS_VERSION/fits-$FITS_VERSION.zip -O /fits/fits-$FITS_VERSION.zip \
+    && unzip -q /fits/fits-$FITS_VERSION.zip -d /fits/fits-$FITS_VERSION \
+    && chmod a+x $FITS_PATH \
+    && rm /fits/fits-$FITS_VERSION.zip
+
+# copy gemfiles to production folder
+COPY Gemfile Gemfile.lock $APP_PRODUCTION
+
+# install gems to system - use flags dependent on RAILS_ENV
+RUN cd $APP_PRODUCTION && \
+    bundle config build.nokogiri --use-system-libraries \
+    && if [ "$RAILS_ENV" = "production" ]; then \
+            bundle install --without test:development; \
+        else \
+            bundle install --without production --no-deployment; \
+        fi \
+    && mv Gemfile.lock Gemfile.lock.built_by_docker
+
+# copy the seeds
+COPY ./seed /seed
+
+# create a folder to store derivatives, file uploads and cache directory
+RUN mkdir -p $DERIVATIVES_PATH
+RUN mkdir -p $UPLOADS_PATH
+RUN mkdir -p $CACHE_PATH
+
+# copy the application
+COPY . $APP_PRODUCTION
+COPY docker-entrypoint.sh /bin/
+
+# use the just built Gemfile.lock, not the one copied into the container and verify the gems are correctly installed
+RUN cd $APP_PRODUCTION \
+    && mv Gemfile.lock.built_by_docker Gemfile.lock \
+    && bundle check
+
+# generate production assets if production environment
+RUN if [ "$RAILS_ENV" = "production" ]; then \
+        cd $APP_PRODUCTION \
+        && yarn install \
+        && SECRET_KEY_BASE_PRODUCTION=0 bundle exec rake assets:clean assets:precompile; \
+    fi
+
+WORKDIR $APP_WORKDIR
+
+RUN chmod +x /bin/docker-entrypoint.sh
diff --git a/hyrax/Gemfile b/hyrax/Gemfile
new file mode 100644
index 00000000..d1dfee0b
--- /dev/null
+++ b/hyrax/Gemfile
@@ -0,0 +1,87 @@
+source 'https://rubygems.org'
+git_source(:github) { |repo| "https://github.com/#{repo}.git" }
+
+ruby '2.7.5'
+
+# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
+gem 'rails', '~> 5.2.6'
+# Use sqlite3 as the database for Active Record
+gem "sqlite3", "~> 1.3.0"
+# Use Puma as the app server
+gem 'puma', '~> 3.11'
+# Use SCSS for stylesheets
+gem 'sass-rails', '~> 5.0'
+# Use Uglifier as compressor for JavaScript assets
+gem 'uglifier', '>= 1.3.0'
+# See https://github.com/rails/execjs#readme for more supported runtimes
+# gem 'mini_racer', platforms: :ruby
+
+# Use CoffeeScript for .coffee assets and views
+gem 'coffee-rails', '~> 4.2'
+# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
+gem 'turbolinks', '~> 5'
+# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
+gem 'jbuilder', '~> 2.5'
+# Use Redis adapter to run Action Cable in production
+gem 'redis', '~> 4.0'
+# Use ActiveModel has_secure_password
+# gem 'bcrypt', '~> 3.1.7'
+
+# Use ActiveStorage variant
+# gem 'mini_magick', '~> 4.8'
+
+# Use Capistrano for deployment
+# gem 'capistrano-rails', group: :development
+
+# Reduces boot times through caching; required in config/boot.rb
+gem 'bootsnap', '>= 1.1.0', require: false
+
+group :development, :test do
+  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
+  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
+  gem 'factory_bot_rails'
+end
+
+group :development do
+  # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
+  gem 'web-console', '>= 3.3.0'
+  gem 'listen', '>= 3.0.5', '< 3.2'
+  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
+  gem 'spring'
+  gem 'spring-watcher-listen', '~> 2.0.0'
+end
+
+group :test do
+  # Adds support for Capybara system testing and selenium driver
+  gem 'capybara', '>= 2.15'
+  gem 'selenium-webdriver'
+  # Easy installation and use of chromedriver to run system tests with Chrome
+  gem 'chromedriver-helper'
+end
+
+# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
+gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
+
+gem 'hyrax', '3.3.0'
+group :development, :test do
+  gem 'solr_wrapper', '>= 0.3'
+end
+
+gem 'rsolr', '>= 1.0', '< 3'
+gem 'bootstrap-sass', '~> 3.0'
+gem 'twitter-typeahead-rails', '0.11.1.pre.corejavascript'
+gem 'jquery-rails'
+gem 'devise'
+gem 'devise-guests', '~> 0.6'
+group :development, :test do
+  gem 'fcrepo_wrapper'
+  gem 'rspec-rails'
+end
+
+gem 'sidekiq'
+gem 'hydra-role-management'
+gem 'bootstrap-datepicker-rails'
+gem 'pg'
+
+gem 'riiif', '~> 2.3'
+gem 'coveralls', require: false
diff --git a/hyrax/Gemfile.lock b/hyrax/Gemfile.lock
new file mode 100644
index 00000000..9b11bbf4
--- /dev/null
+++ b/hyrax/Gemfile.lock
@@ -0,0 +1,980 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    actioncable (5.2.6.2)
+      actionpack (= 5.2.6.2)
+      nio4r (~> 2.0)
+      websocket-driver (>= 0.6.1)
+    actionmailer (5.2.6.2)
+      actionpack (= 5.2.6.2)
+      actionview (= 5.2.6.2)
+      activejob (= 5.2.6.2)
+      mail (~> 2.5, >= 2.5.4)
+      rails-dom-testing (~> 2.0)
+    actionpack (5.2.6.2)
+      actionview (= 5.2.6.2)
+      activesupport (= 5.2.6.2)
+      rack (~> 2.0, >= 2.0.8)
+      rack-test (>= 0.6.3)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.2)
+    actionview (5.2.6.2)
+      activesupport (= 5.2.6.2)
+      builder (~> 3.1)
+      erubi (~> 1.4)
+      rails-dom-testing (~> 2.0)
+      rails-html-sanitizer (~> 1.0, >= 1.0.3)
+    active-fedora (13.2.5)
+      active-triples (>= 0.11.0, < 2.0.0)
+      activemodel (>= 5.1)
+      activesupport (>= 5.1)
+      deprecation
+      faraday (~> 0.12)
+      faraday-encoding (>= 0.0.5)
+      ldp (>= 0.7.0, < 2)
+      rsolr (>= 1.1.2, < 3)
+      ruby-progressbar (~> 1.0)
+    active-triples (1.1.1)
+      activemodel (>= 3.0.0)
+      activesupport (>= 3.0.0)
+      rdf (>= 2.0.2, < 4.0)
+      rdf-vocab (>= 2.0, < 4.0)
+    active_encode (0.8.2)
+      rails
+      sprockets (< 4)
+    activejob (5.2.6.2)
+      activesupport (= 5.2.6.2)
+      globalid (>= 0.3.6)
+    activemodel (5.2.6.2)
+      activesupport (= 5.2.6.2)
+    activemodel-serializers-xml (1.0.2)
+      activemodel (> 5.x)
+      activesupport (> 5.x)
+      builder (~> 3.1)
+    activerecord (5.2.6.2)
+      activemodel (= 5.2.6.2)
+      activesupport (= 5.2.6.2)
+      arel (>= 9.0)
+    activerecord-import (1.3.0)
+      activerecord (>= 4.2)
+    activestorage (5.2.6.2)
+      actionpack (= 5.2.6.2)
+      activerecord (= 5.2.6.2)
+      marcel (~> 1.0.0)
+    activesupport (5.2.6.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+    addressable (2.8.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    almond-rails (0.3.0)
+      rails (>= 4.2)
+    amazing_print (1.4.0)
+    archive-zip (0.12.0)
+      io-like (~> 0.3.0)
+    arel (9.0.0)
+    autoprefixer-rails (10.4.2.0)
+      execjs (~> 2)
+    awesome_nested_set (3.5.0)
+      activerecord (>= 4.0.0, < 7.1)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.554.0)
+    aws-sdk-core (3.126.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.525.0)
+      aws-sigv4 (~> 1.1)
+      jmespath (~> 1.0)
+    aws-sdk-kms (1.54.0)
+      aws-sdk-core (~> 3, >= 3.126.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.112.0)
+      aws-sdk-core (~> 3, >= 3.126.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sigv4 (1.4.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+    babel-source (5.8.35)
+    babel-transpiler (0.7.0)
+      babel-source (>= 4.0, < 6)
+      execjs (~> 2.0)
+    bcp47 (0.3.3)
+      i18n
+    bcrypt (3.1.16)
+    bindex (0.8.1)
+    blacklight (6.24.0)
+      bootstrap-sass (~> 3.2)
+      deprecation
+      globalid
+      jbuilder (~> 2.7)
+      kaminari (>= 0.15)
+      nokogiri (~> 1.6)
+      rails (>= 4.2, < 6)
+      rsolr (>= 1.0.6, < 3)
+      twitter-typeahead-rails (= 0.11.1.pre.corejavascript)
+    blacklight-access_controls (0.6.2)
+      blacklight (~> 6.0)
+      cancancan (~> 1.8)
+      deprecation (~> 1.0)
+    blacklight-gallery (0.12.0)
+      blacklight (~> 6.3)
+      bootstrap-sass (~> 3.0)
+      openseadragon (>= 0.2.0)
+      rails
+    bootsnap (1.10.3)
+      msgpack (~> 1.2)
+    bootstrap-datepicker-rails (1.9.0.1)
+      railties (>= 3.0)
+    bootstrap-sass (3.4.1)
+      autoprefixer-rails (>= 5.2.1)
+      sassc (>= 2.0.0)
+    bootstrap_form (5.0.0)
+      actionpack (>= 5.2)
+      activemodel (>= 5.2)
+    breadcrumbs_on_rails (3.0.1)
+    browse-everything (1.1.2)
+      addressable (~> 2.5)
+      aws-sdk-s3
+      dropbox_api (>= 0.1.10)
+      google-api-client (~> 0.23)
+      google_drive (>= 2.1, < 4)
+      googleauth (>= 0.6.6, < 1.0)
+      rails (>= 4.2, < 7.0)
+      ruby-box
+      signet (~> 0.8)
+      typhoeus
+    builder (3.2.4)
+    byebug (11.1.3)
+    cancancan (1.17.0)
+    capybara (3.36.0)
+      addressable
+      matrix
+      mini_mime (>= 0.1.3)
+      nokogiri (~> 1.8)
+      rack (>= 1.6.0)
+      rack-test (>= 0.6.3)
+      regexp_parser (>= 1.5, < 3.0)
+      xpath (~> 3.2)
+    carrierwave (1.3.2)
+      activemodel (>= 4.0.0)
+      activesupport (>= 4.0.0)
+      mime-types (>= 1.16)
+      ssrf_filter (~> 1.0)
+    childprocess (4.1.0)
+    chromedriver-helper (2.1.1)
+      archive-zip (~> 0.10)
+      nokogiri (~> 1.8)
+    clipboard-rails (1.7.1)
+    coffee-rails (4.2.2)
+      coffee-script (>= 2.2.0)
+      railties (>= 4.0.0)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    concurrent-ruby (1.1.9)
+    connection_pool (2.2.5)
+    coveralls (0.8.23)
+      json (>= 1.8, < 3)
+      simplecov (~> 0.16.1)
+      term-ansicolor (~> 1.3)
+      thor (>= 0.19.4, < 2.0)
+      tins (~> 1.6)
+    crass (1.0.6)
+    declarative (0.0.20)
+    declarative-builder (0.1.0)
+      declarative-option (< 0.2.0)
+    declarative-option (0.1.0)
+    deprecation (1.1.0)
+      activesupport
+    devise (4.8.1)
+      bcrypt (~> 3.0)
+      orm_adapter (~> 0.1)
+      railties (>= 4.1.0)
+      responders
+      warden (~> 1.2.3)
+    devise-guests (0.8.1)
+      devise
+    diff-lcs (1.5.0)
+    disposable (0.4.7)
+      declarative (>= 0.0.9, < 1.0.0)
+      declarative-builder (< 0.2.0)
+      declarative-option (< 0.2.0)
+      representable (>= 2.4.0, <= 3.1.0)
+      uber (< 0.2.0)
+    docile (1.4.0)
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    draper (4.0.2)
+      actionpack (>= 5.0)
+      activemodel (>= 5.0)
+      activemodel-serializers-xml (>= 1.0)
+      activesupport (>= 5.0)
+      request_store (>= 1.0)
+      ruby2_keywords
+    dropbox_api (0.1.18)
+      faraday (<= 1.0)
+      oauth2 (~> 1.1)
+    dry-configurable (0.14.0)
+      concurrent-ruby (~> 1.0)
+      dry-core (~> 0.6)
+    dry-container (0.9.0)
+      concurrent-ruby (~> 1.0)
+      dry-configurable (~> 0.13, >= 0.13.0)
+    dry-core (0.7.1)
+      concurrent-ruby (~> 1.0)
+    dry-equalizer (0.3.0)
+    dry-events (0.2.0)
+      concurrent-ruby (~> 1.0)
+      dry-core (~> 0.4)
+      dry-equalizer (~> 0.2)
+    dry-inflector (0.2.1)
+    dry-initializer (3.1.1)
+    dry-logic (1.2.0)
+      concurrent-ruby (~> 1.0)
+      dry-core (~> 0.5, >= 0.5)
+    dry-matcher (0.9.0)
+      dry-core (~> 0.4, >= 0.4.8)
+    dry-monads (1.4.0)
+      concurrent-ruby (~> 1.0)
+      dry-core (~> 0.7)
+    dry-schema (1.9.1)
+      concurrent-ruby (~> 1.0)
+      dry-configurable (~> 0.13, >= 0.13.0)
+      dry-core (~> 0.5, >= 0.5)
+      dry-initializer (~> 3.0)
+      dry-logic (~> 1.0)
+      dry-types (~> 1.5)
+    dry-struct (1.4.0)
+      dry-core (~> 0.5, >= 0.5)
+      dry-types (~> 1.5)
+      ice_nine (~> 0.11)
+    dry-transaction (0.13.3)
+      dry-container (>= 0.2.8)
+      dry-events (>= 0.1.0)
+      dry-matcher (>= 0.7.0)
+      dry-monads (>= 0.4.0)
+    dry-types (1.5.1)
+      concurrent-ruby (~> 1.0)
+      dry-container (~> 0.3)
+      dry-core (~> 0.5, >= 0.5)
+      dry-inflector (~> 0.1, >= 0.1.2)
+      dry-logic (~> 1.0, >= 1.0.2)
+    dry-validation (1.8.0)
+      concurrent-ruby (~> 1.0)
+      dry-container (~> 0.7, >= 0.7.1)
+      dry-core (~> 0.5, >= 0.5)
+      dry-initializer (~> 3.0)
+      dry-schema (~> 1.9, >= 1.9.1)
+    ebnf (2.3.0)
+      amazing_print (~> 1.4)
+      htmlentities (~> 4.3)
+      rdf (~> 3.2)
+      scanf (~> 1.0)
+      sxp (~> 1.2)
+      unicode-types (~> 1.7)
+    erubi (1.10.0)
+    ethon (0.15.0)
+      ffi (>= 1.15.0)
+    execjs (2.8.1)
+    factory_bot (6.2.0)
+      activesupport (>= 5.0.0)
+    factory_bot_rails (6.2.0)
+      factory_bot (~> 6.2.0)
+      railties (>= 5.0.0)
+    faraday (0.17.4)
+      multipart-post (>= 1.2, < 3)
+    faraday-encoding (0.0.5)
+      faraday
+    fcrepo_wrapper (0.9.0)
+      ruby-progressbar
+    ffi (1.15.5)
+    ffi-compiler (1.0.1)
+      ffi (>= 1.0.0)
+      rake
+    flipflop (2.6.0)
+      activesupport (>= 4.0)
+    flot-rails (0.0.7)
+      jquery-rails
+    font-awesome-rails (4.7.0.8)
+      railties (>= 3.2, < 8.0)
+    gems (1.2.0)
+    geocoder (1.7.3)
+    globalid (1.0.0)
+      activesupport (>= 5.0)
+    google-api-client (0.53.0)
+      google-apis-core (~> 0.1)
+      google-apis-generator (~> 0.1)
+    google-apis-core (0.4.2)
+      addressable (~> 2.5, >= 2.5.1)
+      googleauth (>= 0.16.2, < 2.a)
+      httpclient (>= 2.8.1, < 3.a)
+      mini_mime (~> 1.0)
+      representable (~> 3.0)
+      retriable (>= 2.0, < 4.a)
+      rexml
+      webrick
+    google-apis-discovery_v1 (0.8.0)
+      google-apis-core (>= 0.4, < 2.a)
+    google-apis-drive_v3 (0.18.0)
+      google-apis-core (>= 0.4, < 2.a)
+    google-apis-generator (0.4.1)
+      activesupport (>= 5.0)
+      gems (~> 1.2)
+      google-apis-core (>= 0.4, < 2.a)
+      google-apis-discovery_v1 (~> 0.5)
+      thor (>= 0.20, < 2.a)
+    google-apis-sheets_v4 (0.11.0)
+      google-apis-core (>= 0.4, < 2.a)
+    google_drive (3.0.7)
+      google-apis-drive_v3 (>= 0.5.0, < 1.0.0)
+      google-apis-sheets_v4 (>= 0.4.0, < 1.0.0)
+      googleauth (>= 0.5.0, < 1.0.0)
+      nokogiri (>= 1.5.3, < 2.0.0)
+    googleauth (0.17.1)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.4, < 3.0)
+      memoist (~> 0.16)
+      multi_json (~> 1.11)
+      os (>= 0.9, < 2.0)
+      signet (~> 0.15)
+    haml (5.2.2)
+      temple (>= 0.8.0)
+      tilt
+    hamster (3.0.0)
+      concurrent-ruby (~> 1.0)
+    hiredis (0.6.3)
+    htmlentities (4.3.4)
+    http (5.0.4)
+      addressable (~> 2.8)
+      http-cookie (~> 1.0)
+      http-form_data (~> 2.2)
+      llhttp-ffi (~> 0.4.0)
+    http-cookie (1.0.4)
+      domain_name (~> 0.5)
+    http-form_data (2.3.0)
+    http_logger (0.7.0)
+    httpclient (2.8.3)
+    hydra-access-controls (11.0.7)
+      active-fedora (>= 10.0.0)
+      activesupport (>= 4, < 6)
+      blacklight (>= 5.16)
+      blacklight-access_controls (~> 0.6.0)
+      cancancan (~> 1.8)
+      deprecation (~> 1.0)
+    hydra-core (11.0.7)
+      hydra-access-controls (= 11.0.7)
+      railties (>= 4.0.0, < 6)
+    hydra-derivatives (3.6.1)
+      active-fedora (>= 11.5.6, != 13.2.1, != 13.2.0, != 13.1.3, != 13.1.2, != 13.1.1, != 13.1.0, != 13.0.0, != 12.2.1, != 12.2.0, != 12.1.1, != 12.1.0, != 12.0.3, != 12.0.2, != 12.0.1, != 12.0.0)
+      active_encode (~> 0.1)
+      activemodel (< 6.1)
+      activesupport (>= 4.0, < 7)
+      addressable (~> 2.5)
+      deprecation
+      mime-types (> 2.0, < 4.0)
+      mini_magick (>= 3.2, < 5)
+    hydra-editor (5.0.5)
+      active-fedora (>= 9.0.0)
+      activerecord (~> 5.0)
+      almond-rails (~> 0.1)
+      cancancan (~> 1.8)
+      rails (>= 5, < 6)
+      simple_form (>= 4.1.0, < 6.0)
+      sprockets (~> 3.7)
+      sprockets-es6
+    hydra-file_characterization (1.1.2)
+      activesupport (>= 3.0.0)
+    hydra-head (11.0.7)
+      hydra-access-controls (= 11.0.7)
+      hydra-core (= 11.0.7)
+      rails (>= 5.2, < 6.1)
+    hydra-pcdm (1.1.0)
+      active-fedora (>= 10, < 14)
+      mime-types (>= 1)
+    hydra-role-management (1.0.3)
+      blacklight
+      bootstrap_form
+      bundler (>= 1.5)
+      cancancan
+      json (>= 1.8)
+    hydra-works (2.0.0)
+      activesupport (>= 5.2, < 7.0)
+      hydra-derivatives (~> 3.6)
+      hydra-file_characterization (~> 1.0)
+      hydra-pcdm (>= 0.9)
+    hyrax (3.3.0)
+      active-fedora (~> 13.1, >= 13.1.2)
+      almond-rails (~> 0.1)
+      awesome_nested_set (~> 3.1)
+      blacklight (~> 6.14)
+      blacklight-gallery (~> 0.7)
+      breadcrumbs_on_rails (~> 3.0)
+      browse-everything (>= 0.16, < 2.0)
+      carrierwave (~> 1.0)
+      clipboard-rails (~> 1.5)
+      draper (~> 4.0)
+      dry-equalizer (~> 0.2)
+      dry-events (~> 0.2.0)
+      dry-struct (~> 1.0)
+      dry-transaction (~> 0.11)
+      dry-validation (~> 1.3)
+      flipflop (~> 2.3)
+      flot-rails (~> 0.0.6)
+      font-awesome-rails (~> 4.2)
+      hydra-derivatives (~> 3.3)
+      hydra-editor (~> 5.0, >= 5.0.4)
+      hydra-file_characterization (~> 1.1.2)
+      hydra-head (~> 11.0, >= 11.0.1)
+      hydra-works (>= 0.16)
+      iiif_manifest (>= 0.3, < 2.0)
+      jquery-datatables-rails (~> 3.4)
+      jquery-ui-rails (~> 6.0)
+      json-schema
+      kaminari_route_prefix (~> 0.1.1)
+      legato (~> 0.3)
+      linkeddata
+      mailboxer (~> 0.12)
+      nest (~> 3.1)
+      noid-rails (~> 3.0.0)
+      oauth
+      oauth2 (~> 1.2)
+      posix-spawn
+      power_converter (~> 0.1, >= 0.1.2)
+      qa (~> 5.5, >= 5.5.1)
+      rails (~> 5.0)
+      rails_autolink (~> 1.1)
+      rdf-rdfxml
+      rdf-vocab (~> 3.0)
+      redis-namespace (~> 1.5)
+      redlock (>= 0.1.2)
+      reform (~> 2.3)
+      reform-rails (~> 0.2.0)
+      retriable (>= 2.9, < 4.0)
+      samvera-nesting_indexer (~> 2.0)
+      sass-rails (~> 5.0)
+      select2-rails (~> 3.5)
+      signet
+      tinymce-rails
+      valkyrie (~> 2, >= 2.1.1)
+    i18n (1.10.0)
+      concurrent-ruby (~> 1.0)
+    ice_nine (0.11.2)
+    iiif-image-api (0.2.0)
+      activesupport
+    iiif_manifest (1.1.0)
+      activesupport (>= 4)
+    io-like (0.3.1)
+    jbuilder (2.11.5)
+      actionview (>= 5.0.0)
+      activesupport (>= 5.0.0)
+    jmespath (1.6.0)
+    jquery-datatables-rails (3.4.0)
+      actionpack (>= 3.1)
+      jquery-rails
+      railties (>= 3.1)
+      sass-rails
+    jquery-rails (4.4.0)
+      rails-dom-testing (>= 1, < 3)
+      railties (>= 4.2.0)
+      thor (>= 0.14, < 2.0)
+    jquery-ui-rails (6.0.1)
+      railties (>= 3.2.16)
+    json (2.6.1)
+    json-canonicalization (0.3.0)
+    json-ld (3.2.0)
+      htmlentities (~> 4.3)
+      json-canonicalization (~> 0.3)
+      link_header (~> 0.0, >= 0.0.8)
+      multi_json (~> 1.15)
+      rack (~> 2.2)
+      rdf (~> 3.2)
+    json-ld-preloaded (3.2.0)
+      json-ld (~> 3.2)
+      rdf (~> 3.2)
+    json-schema (2.8.1)
+      addressable (>= 2.4)
+    jwt (2.3.0)
+    kaminari (1.2.2)
+      activesupport (>= 4.1.0)
+      kaminari-actionview (= 1.2.2)
+      kaminari-activerecord (= 1.2.2)
+      kaminari-core (= 1.2.2)
+    kaminari-actionview (1.2.2)
+      actionview
+      kaminari-core (= 1.2.2)
+    kaminari-activerecord (1.2.2)
+      activerecord
+      kaminari-core (= 1.2.2)
+    kaminari-core (1.2.2)
+    kaminari_route_prefix (0.1.1)
+      kaminari (~> 1.0)
+    ld-patch (3.2.0)
+      ebnf (~> 2.2)
+      rdf (~> 3.2)
+      rdf-xsd (~> 3.2)
+      sparql (~> 3.2)
+      sxp (~> 1.2)
+    ldp (1.0.3)
+      deprecation
+      faraday
+      http_logger
+      json-ld
+      rdf (>= 1.1)
+      rdf-isomorphic
+      rdf-turtle
+      rdf-vocab (>= 0.8)
+      slop
+    ldpath (1.1.0)
+      nokogiri (~> 1.8)
+      parslet
+      rdf (~> 3.0)
+    legato (0.7.0)
+      multi_json
+    link_header (0.0.8)
+    linkeddata (3.2.0)
+      json-ld (~> 3.2)
+      json-ld-preloaded (~> 3.2)
+      ld-patch (~> 3.2)
+      nokogiri (~> 1.12, >= 1.12.5)
+      rdf (~> 3.2)
+      rdf-aggregate-repo (~> 3.2)
+      rdf-hamster-repo (~> 3.2)
+      rdf-isomorphic (~> 3.2)
+      rdf-json (~> 3.2)
+      rdf-microdata (~> 3.2)
+      rdf-n3 (~> 3.2)
+      rdf-normalize (~> 0.5)
+      rdf-ordered-repo (~> 3.2)
+      rdf-rdfa (~> 3.2)
+      rdf-rdfxml (~> 3.2)
+      rdf-reasoner (~> 0.8)
+      rdf-tabular (~> 3.2)
+      rdf-trig (~> 3.2)
+      rdf-trix (~> 3.2)
+      rdf-turtle (~> 3.2)
+      rdf-vocab (~> 3.2)
+      rdf-xsd (~> 3.2)
+      shacl (~> 0.2)
+      shex (~> 0.7)
+      sparql (~> 3.2)
+      sparql-client (~> 3.2)
+    listen (3.1.5)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+      ruby_dep (~> 1.2)
+    llhttp-ffi (0.4.0)
+      ffi-compiler (~> 1.0)
+      rake (~> 13.0)
+    logger (1.5.0)
+    loofah (2.14.0)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    mail (2.7.1)
+      mini_mime (>= 0.1.1)
+    mailboxer (0.15.1)
+      carrierwave (>= 0.5.8)
+      rails (>= 5.0.0)
+    marcel (1.0.2)
+    matrix (0.4.2)
+    memoist (0.16.2)
+    method_source (1.0.0)
+    mime-types (3.4.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2022.0105)
+    mini_magick (4.11.0)
+    mini_mime (1.1.2)
+    mini_portile2 (2.7.1)
+    minitest (5.15.0)
+    msgpack (1.4.5)
+    multi_json (1.15.0)
+    multi_xml (0.6.0)
+    multipart-post (2.1.1)
+    nest (3.2.0)
+      redic
+    net-http-persistent (4.0.1)
+      connection_pool (~> 2.2)
+    nio4r (2.5.8)
+    noid (0.9.0)
+    noid-rails (3.0.3)
+      actionpack (>= 5.0.0, < 7)
+      noid (~> 0.9)
+    nokogiri (1.13.1)
+      mini_portile2 (~> 2.7.0)
+      racc (~> 1.4)
+    oauth (0.5.8)
+    oauth2 (1.4.7)
+      faraday (>= 0.8, < 2.0)
+      jwt (>= 1.0, < 3.0)
+      multi_json (~> 1.3)
+      multi_xml (~> 0.5)
+      rack (>= 1.2, < 3)
+    openseadragon (0.6.0)
+      rails (> 3.2.0)
+    orm_adapter (0.5.0)
+    os (1.1.4)
+    parslet (2.0.0)
+    pg (1.3.2)
+    posix-spawn (0.3.15)
+    power_converter (0.1.2)
+    public_suffix (4.0.6)
+    puma (3.12.6)
+    qa (5.8.1)
+      activerecord-import
+      deprecation
+      faraday (< 2.0)
+      geocoder
+      ldpath
+      nokogiri (~> 1.6)
+      rails (>= 5.0, < 6.2)
+      rdf
+    racc (1.6.0)
+    rack (2.2.3)
+    rack-test (1.1.0)
+      rack (>= 1.0, < 3)
+    rails (5.2.6.2)
+      actioncable (= 5.2.6.2)
+      actionmailer (= 5.2.6.2)
+      actionpack (= 5.2.6.2)
+      actionview (= 5.2.6.2)
+      activejob (= 5.2.6.2)
+      activemodel (= 5.2.6.2)
+      activerecord (= 5.2.6.2)
+      activestorage (= 5.2.6.2)
+      activesupport (= 5.2.6.2)
+      bundler (>= 1.3.0)
+      railties (= 5.2.6.2)
+      sprockets-rails (>= 2.0.0)
+    rails-dom-testing (2.0.3)
+      activesupport (>= 4.2.0)
+      nokogiri (>= 1.6)
+    rails-html-sanitizer (1.4.2)
+      loofah (~> 2.3)
+    rails_autolink (1.1.6)
+      rails (> 3.1)
+    railties (5.2.6.2)
+      actionpack (= 5.2.6.2)
+      activesupport (= 5.2.6.2)
+      method_source
+      rake (>= 0.8.7)
+      thor (>= 0.19.0, < 2.0)
+    rake (13.0.6)
+    rb-fsevent (0.11.1)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rdf (3.2.4)
+      link_header (~> 0.0, >= 0.0.8)
+    rdf-aggregate-repo (3.2.0)
+      rdf (~> 3.2)
+    rdf-hamster-repo (3.2.1)
+      hamster (~> 3.0)
+      rdf (~> 3.2, >= 3.2.1)
+    rdf-isomorphic (3.2.1)
+      rdf (~> 3.2)
+    rdf-json (3.2.0)
+      rdf (~> 3.2)
+    rdf-microdata (3.2.1)
+      htmlentities (~> 4.3)
+      nokogiri (~> 1.13)
+      rdf (~> 3.2)
+      rdf-rdfa (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-n3 (3.2.1)
+      ebnf (~> 2.2)
+      rdf (~> 3.2)
+      sparql (~> 3.2)
+      sxp (~> 1.2)
+    rdf-normalize (0.5.0)
+      rdf (~> 3.2)
+    rdf-ordered-repo (3.2.1)
+      rdf (~> 3.2, >= 3.2.1)
+    rdf-rdfa (3.2.0)
+      haml (~> 5.2)
+      htmlentities (~> 4.3)
+      rdf (~> 3.2)
+      rdf-aggregate-repo (~> 3.2)
+      rdf-vocab (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-rdfxml (3.2.0)
+      htmlentities (~> 4.3)
+      rdf (~> 3.2)
+      rdf-rdfa (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-reasoner (0.8.0)
+      rdf (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-tabular (3.2.0)
+      addressable (~> 2.8)
+      bcp47 (~> 0.3, >= 0.3.3)
+      json-ld (~> 3.2)
+      rdf (~> 3.2)
+      rdf-vocab (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-trig (3.2.0)
+      ebnf (~> 2.2)
+      rdf (~> 3.2)
+      rdf-turtle (~> 3.2)
+    rdf-trix (3.2.0)
+      rdf (~> 3.2)
+      rdf-xsd (~> 3.2)
+    rdf-turtle (3.2.0)
+      ebnf (~> 2.3)
+      rdf (~> 3.2)
+    rdf-vocab (3.2.1)
+      rdf (~> 3.2, >= 3.2.4)
+    rdf-xsd (3.2.0)
+      rdf (~> 3.2)
+      rexml (~> 3.2)
+    redic (1.5.3)
+      hiredis
+    redis (4.6.0)
+    redis-namespace (1.8.1)
+      redis (>= 3.0.4)
+    redlock (1.2.2)
+      redis (>= 3.0.0, < 5.0)
+    reform (2.5.0)
+      disposable (>= 0.4.2, < 0.5.0)
+      representable (>= 2.4.0, < 3.1.0)
+      uber (< 0.2.0)
+    reform-rails (0.2.3)
+      activemodel (>= 5.0)
+      reform (>= 2.3.1, < 3.0.0)
+    regexp_parser (2.2.1)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    request_store (1.5.1)
+      rack (>= 1.4)
+    responders (3.0.1)
+      actionpack (>= 5.0)
+      railties (>= 5.0)
+    retriable (3.1.2)
+    rexml (3.2.5)
+    riiif (2.3.0)
+      deprecation (>= 1.0.0)
+      iiif-image-api (>= 0.1.0)
+      railties (>= 4.2, < 7)
+    rsolr (2.5.0)
+      builder (>= 2.1.2)
+      faraday (>= 0.9, < 3, != 2.0.0)
+    rspec-core (3.11.0)
+      rspec-support (~> 3.11.0)
+    rspec-expectations (3.11.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-mocks (3.11.0)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-rails (5.1.0)
+      actionpack (>= 5.2)
+      activesupport (>= 5.2)
+      railties (>= 5.2)
+      rspec-core (~> 3.10)
+      rspec-expectations (~> 3.10)
+      rspec-mocks (~> 3.10)
+      rspec-support (~> 3.10)
+    rspec-support (3.11.0)
+    ruby-box (1.15.0)
+      addressable
+      json
+      multipart-post
+      oauth2
+    ruby-progressbar (1.11.0)
+    ruby2_keywords (0.0.5)
+    ruby_dep (1.5.0)
+    rubyzip (2.3.2)
+    samvera-nesting_indexer (2.0.0)
+      dry-equalizer
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sass-rails (5.1.0)
+      railties (>= 5.2.0)
+      sass (~> 3.1)
+      sprockets (>= 2.8, < 4.0)
+      sprockets-rails (>= 2.0, < 4.0)
+      tilt (>= 1.1, < 3)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    scanf (1.0.0)
+    select2-rails (3.5.11)
+    selenium-webdriver (4.1.0)
+      childprocess (>= 0.5, < 5.0)
+      rexml (~> 3.2, >= 3.2.5)
+      rubyzip (>= 1.2.2)
+    shacl (0.2.1)
+      json-ld (~> 3.2)
+      rdf (~> 3.2)
+      sparql (~> 3.2)
+      sxp (~> 1.2)
+    shex (0.7.1)
+      ebnf (~> 2.2)
+      htmlentities (~> 4.3)
+      json-ld (~> 3.2)
+      json-ld-preloaded (~> 3.2)
+      rdf (~> 3.2)
+      rdf-xsd (~> 3.2)
+      sparql (~> 3.2)
+      sxp (~> 1.2)
+    sidekiq (6.4.1)
+      connection_pool (>= 2.2.2)
+      rack (~> 2.0)
+      redis (>= 4.2.0)
+    signet (0.16.0)
+      addressable (~> 2.8)
+      faraday (>= 0.17.3, < 2.0)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    simple_form (5.1.0)
+      actionpack (>= 5.2)
+      activemodel (>= 5.2)
+    simplecov (0.16.1)
+      docile (~> 1.1)
+      json (>= 1.8, < 3)
+      simplecov-html (~> 0.10.0)
+    simplecov-html (0.10.2)
+    slop (4.9.1)
+    solr_wrapper (3.1.2)
+      http
+      retriable
+      ruby-progressbar
+      rubyzip
+    sparql (3.2.1)
+      builder (~> 3.2)
+      ebnf (~> 2.2)
+      logger (~> 1.4)
+      rdf (~> 3.2, >= 3.2.3)
+      rdf-aggregate-repo (~> 3.2)
+      rdf-xsd (~> 3.2)
+      sparql-client (~> 3.2)
+      sxp (~> 1.2, >= 1.2.1)
+    sparql-client (3.2.0)
+      net-http-persistent (~> 4.0, >= 4.0.1)
+      rdf (~> 3.2)
+    spring (2.1.1)
+    spring-watcher-listen (2.0.1)
+      listen (>= 2.7, < 4.0)
+      spring (>= 1.2, < 3.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-es6 (0.9.2)
+      babel-source (>= 5.8.11)
+      babel-transpiler
+      sprockets (>= 3.0.0)
+    sprockets-rails (3.4.2)
+      actionpack (>= 5.2)
+      activesupport (>= 5.2)
+      sprockets (>= 3.0.0)
+    sqlite3 (1.3.13)
+    ssrf_filter (1.0.7)
+    sxp (1.2.1)
+      matrix
+      rdf (~> 3.2)
+    sync (0.5.0)
+    temple (0.8.2)
+    term-ansicolor (1.7.1)
+      tins (~> 1.0)
+    thor (1.2.1)
+    thread_safe (0.3.6)
+    tilt (2.0.10)
+    tins (1.31.0)
+      sync
+    tinymce-rails (5.10.3)
+      railties (>= 3.1.1)
+    turbolinks (5.2.1)
+      turbolinks-source (~> 5.2)
+    turbolinks-source (5.2.0)
+    twitter-typeahead-rails (0.11.1.pre.corejavascript)
+      actionpack (>= 3.1)
+      jquery-rails
+      railties (>= 3.1)
+    typhoeus (1.4.0)
+      ethon (>= 0.9.0)
+    tzinfo (1.2.9)
+      thread_safe (~> 0.1)
+    uber (0.1.0)
+    uglifier (4.2.0)
+      execjs (>= 0.3.0, < 3)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8)
+    unicode-types (1.7.0)
+    valkyrie (2.2.0)
+      activemodel
+      activesupport
+      disposable (~> 0.4.5)
+      draper
+      dry-struct
+      dry-types (~> 1.0)
+      faraday (< 1.0)
+      json
+      json-ld
+      railties
+      rdf (~> 3.0, >= 3.0.10)
+      rdf-vocab
+      reform (~> 2.2)
+      reform-rails
+    warden (1.2.9)
+      rack (>= 2.0.9)
+    web-console (3.7.0)
+      actionview (>= 5.0)
+      activemodel (>= 5.0)
+      bindex (>= 0.4.0)
+      railties (>= 5.0)
+    webrick (1.7.0)
+    websocket-driver (0.7.5)
+      websocket-extensions (>= 0.1.0)
+    websocket-extensions (0.1.5)
+    xpath (3.2.0)
+      nokogiri (~> 1.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  bootsnap (>= 1.1.0)
+  bootstrap-datepicker-rails
+  bootstrap-sass (~> 3.0)
+  byebug
+  capybara (>= 2.15)
+  chromedriver-helper
+  coffee-rails (~> 4.2)
+  coveralls
+  devise
+  devise-guests (~> 0.6)
+  factory_bot_rails
+  fcrepo_wrapper
+  hydra-role-management
+  hyrax (= 3.3.0)
+  jbuilder (~> 2.5)
+  jquery-rails
+  listen (>= 3.0.5, < 3.2)
+  pg
+  puma (~> 3.11)
+  rails (~> 5.2.6)
+  redis (~> 4.0)
+  riiif (~> 2.3)
+  rsolr (>= 1.0, < 3)
+  rspec-rails
+  sass-rails (~> 5.0)
+  selenium-webdriver
+  sidekiq
+  solr_wrapper (>= 0.3)
+  spring
+  spring-watcher-listen (~> 2.0.0)
+  sqlite3 (~> 1.3.0)
+  turbolinks (~> 5)
+  twitter-typeahead-rails (= 0.11.1.pre.corejavascript)
+  tzinfo-data
+  uglifier (>= 1.3.0)
+  web-console (>= 3.3.0)
+
+RUBY VERSION
+   ruby 2.7.5p203
+
+BUNDLED WITH
+   2.1.4
diff --git a/hyrax/Rakefile b/hyrax/Rakefile
new file mode 100644
index 00000000..fe21c072
--- /dev/null
+++ b/hyrax/Rakefile
@@ -0,0 +1,8 @@
+# Add your own tasks in files placed in lib/tasks ending in .rake,
+# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
+
+require_relative 'config/application'
+
+Rails.application.load_tasks
+
+require 'solr_wrapper/rake_task' unless Rails.env.production? || ENV['IN_DOCKER'] == "true"
diff --git a/hyrax/app/actors/hyrax/actors/dataset_actor.rb b/hyrax/app/actors/hyrax/actors/dataset_actor.rb
new file mode 100644
index 00000000..eeca62e1
--- /dev/null
+++ b/hyrax/app/actors/hyrax/actors/dataset_actor.rb
@@ -0,0 +1,8 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+module Hyrax
+  module Actors
+    class DatasetActor < Hyrax::Actors::BaseActor
+    end
+  end
+end
diff --git a/hyrax/app/assets/config/manifest.js b/hyrax/app/assets/config/manifest.js
new file mode 100644
index 00000000..c9bfb0b4
--- /dev/null
+++ b/hyrax/app/assets/config/manifest.js
@@ -0,0 +1,5 @@
+//= link_tree ../images
+//= link_directory ../javascripts .js
+//= link_directory ../stylesheets .css
+
+//= link openseadragon-assets
diff --git a/hyrax/app/assets/images/.keep b/hyrax/app/assets/images/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/app/assets/images/unauthorized.png b/hyrax/app/assets/images/unauthorized.png
new file mode 100644
index 0000000000000000000000000000000000000000..b832c6192aa4a28d68c7004338235650c021deaa
GIT binary patch
literal 1958
zcmah~2~ZPP7+$RwwFnliQ538#im2T(16U=XawL$5QBi~fTZ#xM3IVc7a5$_~P(({X
zQBk7?#VbP)F+j3FJgOqW9MBp-A|90_kOU7ffMENwLE34x-T8Ok```b6$NML<$yrPD
zn>@*O5(Gh$DgM5J5Hv<)dMA7YPAE={DzJ=;^;+!(LFIX$3`LFy`4~o^pEtyp&enpx
z)7pRyByb3&+=P;`kx0Uz#9D|hHl;~o2&7;WUkN4Gm;wdoHBbTu#WX?;Ar8UMO>hyE
zR5Q|VLg9Nee1u$N>W{-Yld4Uf3=G<N35Vb$J9nD)&>uL~OjV8B099ZHk5O8>5C`HU
zKsOOr9Ib->#40G!Yze??A*Kjo0|w9uq84WZ67K>4O%k94AZ8)+6-F;rW1m)b9n5MI
z8c16Yefl=#_ipl(tqxxeS`6uD^xKc0d$2Hnub;M7_*9p(L-XpWPlx3ro2*qImmO1$
zeKY1xP5XiettUc%-uCj4bMg74#5Je8)b({UH)a$C*;+r`vdBM#v%O*G-BQ=xY4U5)
z13Zdl9~FYemr{JaHl(!aRnHQlf~RFa)^C2&7;v=6rO48!2t3l^2;U%q_)^>QKweyr
z;H2^6ms>rrOdSZJIu$rj-XCXI9P4=4riw6xb}JWk)V;jdJ!f8aSXhKE)bQj$EdAW>
zStnrhUe$By`GMYSBC_8;%{VZ;A=z&|a^mD*7ujBT6W(ayH^(vmxZwu#d6#~gSba|P
zg9<BrM3+2;W7vm_o8!@SVMET9?G53CD(lWKo8wvesnhybGnn&T5q3{#h^PWi3BJ*W
zuynTZWl_p4YCDWf)V8>VD$9NDSlJQLa=klC)5481eyxq+?MJLdw>#e+lEIUZfwvOj
zW>%zz`fY27e>7n)|Bx(0x|y(#?~%45A6YC4<ad_ml8@BGvk`kN1>LF}+Z0`%>wn}I
z*a5M^j-pPw%%<qexzr=q;KfK9R*gQ^k8LJZ<pvPiVOL~3)`D{Nna!liTpFPT_CUh1
zel${VBPR(YD+#~C<B<StHab^dASYdwcoXFCWW)pWKp*RD6r>7?FQF0s3|WkYqg-8q
zf^<bfCe*`r$ZRYPjnvsR^_8c-au+RBzrK82_!GZDI9He4ly!L(m2e$igh1F;RR7>v
zNq3a-z8e}O)khld+ThKpsrE=ABeg|E3Rbt<vwFBZhG8>yYaYs!a<;QAkP?RD1C@8M
zwmpZnrk#whWn3Q9;DG%&OB2T--c7JY1dOsJ{a1XH62lI(PijXu_NL?OH@?9y+RIsD
zE^minDJDFwi91R3ylo($ZnE_L6jxOg8YD|k?p-lC-8q-vC6pb=XieV*Ha&3O&_vm3
zUaCQ*$jgxb=4mWZ^c-EK={os_>0&K8BOkUN-pdaX9Z?9V#t8@yC1^rRQpbReojdBJ
zrO5?U_AXHOL`$2H;%$WnOHksuXlzRs9S5CZMLx;}Nb5@FLe--g$Qd+xX%>H-sJvqx
zIoJ(Z=Br$YEIZ~6I%XP9Z#%@dq!Hu-N^nEl;1{ALT51vg<0dOVS4GV6m%UYTw=F?6
zI@AW$$Xj!)fIe8Y4jMVPVk(|+E1D^CuFoEG>2H~%*B&blhn8tBESm_BW*X2eH9=y}
zA3TlYh@5eNidAeTVY%b2zGlYvDZdjl`v4ioL?oq|6iuE^;B+_*kWu4iM@)_wA}Y*|
z|6loEW>Ne`W+0dX10M`NkiU$88JTdnAr1#m-i_kFl>ceg&i#WkbPI4ai{KYdR&b_h
zA5fxEwf`XNyO}Ecf;xQ=nVoZ%zG4HJoqd)bTc{|NI%}1Uaq*`P(!I6H7-rtmjhz>I
zw<eU--B~{?WUzNr)|%-Scf#khJubYs_&jl6<JoiB%;kzxWS5KDQ1OAJ`k1smeHjNk
z>r*?c*%EDF(oH+>Gi@^uUjm=Im4oM}(=19}-@i}r8m_(7CzxMHbQjkOFmYqI?68qt
jRjJPX(C2jYJWkJUE!AH~DmGm-{ijk$G+(~=_nChJB*mwj

literal 0
HcmV?d00001

diff --git a/hyrax/app/assets/images/us_404.svg b/hyrax/app/assets/images/us_404.svg
new file mode 100644
index 00000000..7ac476d3
--- /dev/null
+++ b/hyrax/app/assets/images/us_404.svg
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="600"
+   height="600"
+   id="svg2997">
+  <defs
+     id="defs19" />
+  <metadata
+     id="metadata3002">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-88.571,-155.22)"
+     id="g3057">
+    <g
+       transform="translate(88.571,155.22)"
+       id="g4097">
+      <path
+         d="M 0,50 C 0,22.386 22.385,0 50,0 h 500 c 27.614,0 50,22.386 50,50 v 500 c 0,27.615 -22.386,50 -50,50 H 50 C 22.385,600 0,577.62 0,550 V 50 z"
+         inkscape:connector-curvature="0"
+         id="path4099" />
+      <path
+         d="M 300,300"
+         inkscape:connector-curvature="0"
+         id="path4101" />
+    </g>
+    <g
+       id="g3051">
+      <g
+         transform="matrix(0.39465,0,0,0.39465,-753.67,260.87)"
+         id="g3783-5-2">
+        <path
+           d="M 2455.5,-227.53 2151.8,40.85 c 95.691,54.056 160.31,156.69 160.31,274.44 0,58.027 -15.751,112.35 -43.125,159.03 -6.0012,10.234 -12.637,20.046 -19.719,29.5 -2.8607,4.7586 -5.6558,9.5784 -8.3125,14.469 -2.9441,5.4198 -5.7516,10.895 -8.4375,16.469 -2.6858,5.574 -5.2368,11.249 -7.6562,16.969 -2.4194,5.7202 -4.6987,11.485 -6.8438,17.344 -2.145,5.8584 -4.1686,11.793 -6.0312,17.781 -1.8627,5.9886 -3.584,12.045 -5.1563,18.156 -1.5722,6.1108 -2.9761,12.275 -4.25,18.5 -1.2738,6.225 -2.4076,12.513 -3.375,18.844 -0.9673,6.3311 -1.7845,12.727 -2.4375,19.156 -0.6529,6.4293 -1.1382,12.887 -1.4687,19.406 -0.3305,6.5194 -0.5,13.086 -0.5,19.688 0,6.6015 0.1695,13.168 0.5,19.688 0.3305,6.5194 0.8158,12.977 1.4687,19.406 0.653,6.4293 1.4702,12.825 2.4375,19.156 0.9674,6.3311 2.1012,12.619 3.375,18.844 1.2739,6.2249 2.6778,12.389 4.25,18.5 1.5723,6.1107 3.2936,12.168 5.1563,18.156 1.8626,5.9886 3.8862,11.923 6.0312,17.781 2.1451,5.8587 4.4244,11.624 6.8438,17.344 2.4194,5.7202 4.9704,11.394 7.6562,16.969 2.6859,5.5735 5.4934,11.049 8.4375,16.469 2.9442,5.4198 6.0242,10.773 9.2188,16.031 3.1946,5.2572 6.5006,10.444 9.9375,15.531 3.4369,5.0873 7.0163,10.059 10.688,14.969 3.6712,4.9086 7.4462,9.7459 11.344,14.469 3.8976,4.7228 7.9154,9.3465 12.031,13.875 4.1159,4.5285 8.3301,8.9547 12.656,13.281 4.3262,4.3259 8.7528,8.5403 13.281,12.656 4.5285,4.1159 9.1522,8.1341 13.875,12.031 4.7227,3.8978 9.5597,7.6726 14.469,11.344 4.9091,3.6712 9.8815,7.2506 14.969,10.688 5.0873,3.4369 10.274,6.7429 15.531,9.9375 5.2576,3.1946 10.612,6.2742 16.031,9.2188 5.4198,2.9438 10.895,5.7519 16.469,8.4374 5.574,2.6861 11.249,5.2369 16.969,7.6563 5.7202,2.4194 11.485,4.6988 17.344,6.8437 2.7997,1.0254 5.6701,1.9143 8.5,2.875 6.9951,1.9608 14.006,3.8715 21.062,5.6876 7.998,2.0571 16.02,4.0424 24.094,5.9062 6.8303,1.5767 13.708,3.0358 20.594,4.4688 1.2538,0.2606 2.4951,0.556 3.75,0.8124 8.1474,1.6676 16.313,3.2508 24.531,4.7188 8.2182,1.468 16.495,2.8271 24.781,4.0938 8.2864,1.2655 16.586,2.4377 24.938,3.5 8.3519,1.0612 16.742,2.0199 25.156,2.875 8.4148,0.8541 16.869,1.6046 25.344,2.25 8.1324,0.6183 16.283,1.1079 24.469,1.5312 0.6494,0 1.287,-0.062 1.9375,-0.062 7.3954,0 14.692,0.3998 21.938,1 81.289,6.7337 152.44,50.344 197.44,112.94 44.998,-62.594 116.15,-106.2 197.44,-112.94 7.2451,-0.6002 14.542,-1 21.938,-1 0.6505,0 1.2881,0.062 1.9375,0.062 8.1855,-0.4233 16.336,-0.9129 24.469,-1.5312 8.475,-0.6453 16.929,-1.3959 25.344,-2.25 8.4148,-0.8551 16.804,-1.8138 25.156,-2.875 8.3518,-1.0623 16.651,-2.2345 24.938,-3.5 8.2862,-1.2667 16.563,-2.6258 24.781,-4.0938 8.2182,-1.468 16.384,-3.0512 24.531,-4.7188 1.2549,-0.2563 2.4963,-0.5519 3.75,-0.8124 6.8856,-1.4329 13.764,-2.8922 20.594,-4.4688 8.074,-1.8639 16.096,-3.8491 24.094,-5.9062 7.0562,-1.8161 14.067,-3.7268 21.062,-5.6876 2.83,-0.9608 5.7003,-1.8496 8.5,-2.875 5.8586,-2.1449 11.624,-4.4243 17.344,-6.8437 5.7202,-2.4194 11.395,-4.9701 16.969,-7.6563 5.5737,-2.6856 11.049,-5.4937 16.469,-8.4374 5.4198,-2.9445 10.774,-6.0243 16.031,-9.2188 5.2573,-3.1947 10.444,-6.5007 15.531,-9.9375 5.0873,-3.437 10.06,-7.0164 14.969,-10.688 4.909,-3.6713 9.746,-7.4459 14.469,-11.344 4.7228,-3.8973 9.3465,-7.9154 13.875,-12.031 4.5285,-4.116 8.9551,-8.3304 13.281,-12.656 4.326,-4.3265 8.5403,-8.7529 12.656,-13.281 4.1159,-4.5286 8.1338,-9.1523 12.031,-13.875 3.8977,-4.7228 7.6726,-9.5601 11.344,-14.469 3.6712,-4.9095 7.2506,-9.8816 10.688,-14.969 3.4369,-5.0874 6.7429,-10.274 9.9375,-15.531 3.1946,-5.258 6.2745,-10.612 9.2188,-16.031 2.944,-5.4199 5.7516,-10.895 8.4374,-16.469 2.6858,-5.5743 5.2369,-11.249 7.6563,-16.969 2.4194,-5.7203 4.6987,-11.485 6.8437,-17.344 2.145,-5.8581 4.1687,-11.793 6.0313,-17.781 1.8627,-5.9887 3.584,-12.046 5.1563,-18.156 1.5722,-6.111 2.9759,-12.275 4.25,-18.5 1.2736,-6.2252 2.4076,-12.513 3.375,-18.844 0.9672,-6.3312 1.7845,-12.727 2.4374,-19.156 0.6531,-6.4293 1.1383,-12.887 1.4688,-19.406 0.3305,-6.5195 0.5,-13.086 0.5,-19.688 0,-6.6016 -0.1695,-13.168 -0.5,-19.688 -0.3305,-6.5195 -0.8157,-12.977 -1.4688,-19.406 -0.6529,-6.4293 -1.4702,-12.825 -2.4374,-19.156 -0.9674,-6.3312 -2.1014,-12.619 -3.375,-18.844 -1.274,-6.225 -2.6779,-12.389 -4.25,-18.5 -1.5725,-6.1108 -3.2936,-12.168 -5.1563,-18.156 -1.8626,-5.9887 -3.8862,-11.923 -6.0313,-17.781 -2.145,-5.8584 -4.4243,-11.624 -6.8437,-17.344 -2.4194,-5.7203 -4.9703,-11.395 -7.6563,-16.969 -2.6857,-5.574 -5.4933,-11.049 -8.4374,-16.469 -2.6568,-4.8905 -5.4518,-9.7102 -8.3126,-14.469 -7.0815,-9.4541 -13.718,-19.266 -19.719,-29.5 -27.374,-46.682 -43.125,-101 -43.125,-159.03 0,-117.74 64.621,-220.38 160.31,-274.44 l -303.75,-268.38 c -56.769,55.377 -133.8,90 -219.38,90 -85.284,0 -162.66,-34.95 -219.38,-90 -56.718,55.05 -134.09,90 -219.38,90 -85.57,0 -162.61,-34.623 -219.38,-90 z m 438.75,140.62 c 9.315,0 16.875,7.56 16.875,16.875 0,9.315 -7.56,16.875 -16.875,16.875 -9.315,0 -16.875,-7.56 -16.875,-16.875 0,-9.315 7.56,-16.875 16.875,-16.875 z m 0,1080 c 9.315,0 16.875,7.56 16.875,16.875 0,9.315 -7.56,16.875 -16.875,16.875 -9.315,0 -16.875,-7.56 -16.875,-16.875 0,-9.315 7.56,-16.875 16.875,-16.875 z"
+           inkscape:connector-curvature="0"
+           id="path2939-8-9"
+           style="fill:#ffffff;stroke:#000000;stroke-width:0.89999998;stroke-miterlimit:4;stroke-dasharray:none" />
+      </g>
+      <rect
+         width="36.103001"
+         height="33.429001"
+         rx="37.5"
+         ry="33.429001"
+         x="369.06"
+         y="217.97"
+         id="rect3047"
+         style="fill:#ffffff;fill-rule:nonzero" />
+      <rect
+         width="29.417999"
+         height="26.743"
+         rx="16.5"
+         ry="13.929"
+         x="371.73001"
+         y="645.85999"
+         id="rect3049"
+         style="fill:#ffffff;fill-rule:nonzero" />
+    </g>
+  </g>
+  <g
+     id="routenum"
+     style="font-size:440.29998779px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;font-family:Roadgeek 2005 Series B">
+    <path
+       d="m 164.9,151.54 h 26.444 v 198.01 h 19.564 v 26.444 h -19.564 v 69.012 H 164.9 V 375.994 H 81.699 V 349.55 L 164.9,151.54 m 0,198.01 V 218.62 L 110.292,349.55 H 164.9"
+       inkscape:connector-curvature="0"
+       id="path2993" />
+    <path
+       d="m 300.97,145.73 c 14.189,3e-4 26.229,5.2317 36.118,15.694 6.4496,6.7366 10.893,16.053 13.329,27.949 6.5929,31.102 9.8894,67.364 9.8896,108.79 -1.4e-4,41.565 -3.2967,77.898 -9.8896,109 -2.8667,13.903 -8.5281,24.437 -16.984,31.604 -9.4597,8.0263 -20.567,12.039 -33.323,12.039 -14.906,-10e-6 -27.304,-5.2314 -37.193,-15.694 -6.3064,-6.7364 -10.678,-16.053 -13.114,-27.949 -6.5931,-30.959 -9.8896,-67.22 -9.8896,-108.79 -2e-5,-41.135 3.2965,-77.468 9.8896,-109 2.8665,-13.902 8.5279,-24.509 16.984,-31.819 9.4595,-7.8827 20.854,-11.824 34.183,-11.824 m -0.42998,31.174 c -13.186,2.7e-4 -21.427,9.6032 -24.724,28.809 -1.1467,7.0232 -2.7233,20.353 -4.7298,39.988 -1.72,17.199 -2.5799,34.614 -2.5799,52.243 -5e-5,20.496 1.4332,43.428 4.2998,68.797 2.5798,22.789 5.303,36.548 8.1696,41.278 4.873,7.7397 11.251,11.61 19.134,11.609 12.899,3e-5 20.997,-9.6029 24.294,-28.809 1.2898,-7.3096 2.8664,-20.639 4.7298,-39.988 1.7198,-17.199 2.5798,-34.757 2.5799,-52.673 -1.2e-4,-23.075 -2.0784,-51.239 -6.2347,-84.491 -1.4334,-12.326 -3.5116,-20.71 -6.2347,-25.154 -4.7299,-7.7394 -10.965,-11.609 -18.704,-11.609"
+       inkscape:connector-curvature="0"
+       id="path2995" />
+    <path
+       d="m 466.27,151.54 h 26.444 v 198.01 h 19.564 v 26.444 h -19.564 v 69.012 H 466.27 V 375.994 H 383.069 V 349.55 L 466.27,151.54 m 0,198.01 V 218.62 l -54.608,130.93 h 54.608"
+       inkscape:connector-curvature="0"
+       id="path2997" />
+  </g>
+</svg>
diff --git a/hyrax/app/assets/javascripts/application.js b/hyrax/app/assets/javascripts/application.js
new file mode 100644
index 00000000..40590c10
--- /dev/null
+++ b/hyrax/app/assets/javascripts/application.js
@@ -0,0 +1,26 @@
+// This is a manifest file that'll be compiled into application.js, which will include all the files
+// listed below.
+//
+// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
+// vendor/assets/javascripts directory can be referenced here using a relative path.
+//
+// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
+// compiled file. JavaScript code in this file should be added after the last require_* statement.
+//
+// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
+// about supported directives.
+//
+//= 
+//= require activestorage
+//= require turbolinks
+//
+// Required by Blacklight
+//= require jquery
+//= require jquery_ujs
+//= require dataTables/jquery.dataTables
+//= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
+//= require blacklight/blacklight
+
+//= require_tree .
+//= require hyrax
+
diff --git a/hyrax/app/assets/javascripts/blacklight_gallery.js b/hyrax/app/assets/javascripts/blacklight_gallery.js
new file mode 100644
index 00000000..992a7d4d
--- /dev/null
+++ b/hyrax/app/assets/javascripts/blacklight_gallery.js
@@ -0,0 +1 @@
+//= require blacklight_gallery/default
\ No newline at end of file
diff --git a/hyrax/app/assets/javascripts/cable.js b/hyrax/app/assets/javascripts/cable.js
new file mode 100644
index 00000000..739aa5f0
--- /dev/null
+++ b/hyrax/app/assets/javascripts/cable.js
@@ -0,0 +1,13 @@
+// Action Cable provides the framework to deal with WebSockets in Rails.
+// You can generate new channels where WebSocket features live using the `rails generate channel` command.
+//
+//= require action_cable
+//= require_self
+//= require_tree ./channels
+
+(function() {
+  this.App || (this.App = {});
+
+  App.cable = ActionCable.createConsumer();
+
+}).call(this);
diff --git a/hyrax/app/assets/javascripts/channels/.keep b/hyrax/app/assets/javascripts/channels/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/app/assets/javascripts/openseadragon.js b/hyrax/app/assets/javascripts/openseadragon.js
new file mode 100644
index 00000000..2ab91a9f
--- /dev/null
+++ b/hyrax/app/assets/javascripts/openseadragon.js
@@ -0,0 +1,2 @@
+//= require openseadragon/openseadragon
+//= require openseadragon/rails
\ No newline at end of file
diff --git a/hyrax/app/assets/stylesheets/application.css b/hyrax/app/assets/stylesheets/application.css
new file mode 100644
index 00000000..2f002803
--- /dev/null
+++ b/hyrax/app/assets/stylesheets/application.css
@@ -0,0 +1,16 @@
+/*
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
+ * listed below.
+ *
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, or any plugin's
+ * vendor/assets/stylesheets directory can be referenced here using a relative path.
+ *
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
+ * files in this directory. Styles in this file should be added after the last require_* statement.
+ * It is generally better to create a new file per style scope.
+ *
+ *= require_tree .
+ *= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
+ *= require_self
+ */
diff --git a/hyrax/app/assets/stylesheets/hyrax.scss b/hyrax/app/assets/stylesheets/hyrax.scss
new file mode 100644
index 00000000..a43b9675
--- /dev/null
+++ b/hyrax/app/assets/stylesheets/hyrax.scss
@@ -0,0 +1,17 @@
+/* ...
+ *= require jquery-ui
+ *= require select2
+ *= require_self
+*/
+
+@import "bootstrap-sprockets";
+@import "bootstrap-default-overrides";
+@import 'bootstrap';
+@import 'blacklight/blacklight';
+@import "font-awesome";
+@import "blacklight_gallery/gallery";
+@import "blacklight_gallery/masonry";
+@import "blacklight_gallery/slideshow";
+@import "blacklight_gallery/osd_viewer";
+@import 'hyrax/hyrax';
+@import 'hyrax/login_signup';
diff --git a/hyrax/app/assets/stylesheets/openseadragon.css b/hyrax/app/assets/stylesheets/openseadragon.css
new file mode 100644
index 00000000..c1efc39f
--- /dev/null
+++ b/hyrax/app/assets/stylesheets/openseadragon.css
@@ -0,0 +1,3 @@
+/*
+ *= require openseadragon/openseadragon
+ */
\ No newline at end of file
diff --git a/hyrax/app/channels/application_cable/channel.rb b/hyrax/app/channels/application_cable/channel.rb
new file mode 100644
index 00000000..d6726972
--- /dev/null
+++ b/hyrax/app/channels/application_cable/channel.rb
@@ -0,0 +1,4 @@
+module ApplicationCable
+  class Channel < ActionCable::Channel::Base
+  end
+end
diff --git a/hyrax/app/channels/application_cable/connection.rb b/hyrax/app/channels/application_cable/connection.rb
new file mode 100644
index 00000000..0ff5442f
--- /dev/null
+++ b/hyrax/app/channels/application_cable/connection.rb
@@ -0,0 +1,4 @@
+module ApplicationCable
+  class Connection < ActionCable::Connection::Base
+  end
+end
diff --git a/hyrax/app/controllers/application_controller.rb b/hyrax/app/controllers/application_controller.rb
new file mode 100644
index 00000000..8b869ca8
--- /dev/null
+++ b/hyrax/app/controllers/application_controller.rb
@@ -0,0 +1,14 @@
+class ApplicationController < ActionController::Base
+  helper Openseadragon::OpenseadragonHelper
+  # Adds a few additional behaviors into the application controller
+  include Blacklight::Controller
+  skip_after_action :discard_flash_if_xhr
+  include Hydra::Controller::ControllerBehavior
+
+  # Adds Hyrax behaviors into the application controller
+  include Hyrax::Controller
+  include Hyrax::ThemedLayoutController
+  with_themed_layout '1_column'
+
+
+end
diff --git a/hyrax/app/controllers/catalog_controller.rb b/hyrax/app/controllers/catalog_controller.rb
new file mode 100644
index 00000000..36404761
--- /dev/null
+++ b/hyrax/app/controllers/catalog_controller.rb
@@ -0,0 +1,306 @@
+# frozen_string_literal: true
+class CatalogController < ApplicationController
+  include Hydra::Catalog
+  include Hydra::Controller::ControllerBehavior
+
+  # This filter applies the hydra access controls
+  before_action :enforce_show_permissions, only: :show
+  # Allow all search options when in read-only mode
+  skip_before_action :check_read_only
+
+  def self.uploaded_field
+    "system_create_dtsi"
+  end
+
+  def self.modified_field
+    "system_modified_dtsi"
+  end
+
+  configure_blacklight do |config|
+    config.view.gallery.partials = [:index_header, :index]
+    config.view.masonry.partials = [:index]
+    config.view.slideshow.partials = [:index]
+
+
+    config.show.tile_source_field = :content_metadata_image_iiif_info_ssm
+    config.show.partials.insert(1, :openseadragon)
+    config.search_builder_class = Hyrax::CatalogSearchBuilder
+
+    # Show gallery view
+    config.view.gallery.partials = [:index_header, :index]
+    config.view.slideshow.partials = [:index]
+
+    # Because too many times on Samvera tech people raise a problem regarding a failed query to SOLR.
+    # Often, it's because they inadvertently exceeded the character limit of a GET request.
+    config.http_method = :post
+
+    ## Default parameters to send to solr for all search-like requests. See also SolrHelper#solr_search_params
+    config.default_solr_params = {
+      qt: "search",
+      rows: 10,
+      qf: "title_tesim description_tesim creator_tesim keyword_tesim"
+    }
+
+    # solr field configuration for document/show views
+    config.index.title_field = "title_tesim"
+    config.index.display_type_field = "has_model_ssim"
+    config.index.thumbnail_field = 'thumbnail_path_ss'
+
+    # solr fields that will be treated as facets by the blacklight application
+    #   The ordering of the field names is the order of the display
+    config.add_facet_field "human_readable_type_sim", label: "Type", limit: 5
+    config.add_facet_field "resource_type_sim", label: "Resource Type", limit: 5
+    config.add_facet_field "creator_sim", limit: 5
+    config.add_facet_field "contributor_sim", label: "Contributor", limit: 5
+    config.add_facet_field "keyword_sim", limit: 5
+    config.add_facet_field "subject_sim", limit: 5
+    config.add_facet_field "language_sim", limit: 5
+    config.add_facet_field "based_near_label_sim", limit: 5
+    config.add_facet_field "publisher_sim", limit: 5
+    config.add_facet_field "file_format_sim", limit: 5
+    config.add_facet_field "member_of_collection_ids_ssim", limit: 5, label: 'Collections', helper_method: :collection_title_by_id
+
+    # The generic_type and depositor are not displayed on the facet list
+    # They are used to give a label to the filters that comes from the user profile
+    config.add_facet_field "generic_type_sim", if: false
+    config.add_facet_field "depositor_ssim", label: "Depositor", if: false
+
+    # Have BL send all facet field names to Solr, which has been the default
+    # previously. Simply remove these lines if you'd rather use Solr request
+    # handler defaults, or have no facets.
+    config.add_facet_fields_to_solr_request!
+
+    # solr fields to be displayed in the index (search results) view
+    #   The ordering of the field names is the order of the display
+    config.add_index_field "title_tesim", label: "Title", itemprop: 'name', if: false
+    config.add_index_field "description_tesim", itemprop: 'description', helper_method: :iconify_auto_link
+    config.add_index_field "keyword_tesim", itemprop: 'keywords', link_to_search: "keyword_sim"
+    config.add_index_field "subject_tesim", itemprop: 'about', link_to_search: "subject_sim"
+    config.add_index_field "creator_tesim", itemprop: 'creator', link_to_search: "creator_sim"
+    config.add_index_field "contributor_tesim", itemprop: 'contributor', link_to_search: "contributor_sim"
+    config.add_index_field "proxy_depositor_ssim", label: "Depositor", helper_method: :link_to_profile
+    config.add_index_field "depositor_tesim", label: "Owner", helper_method: :link_to_profile
+    config.add_index_field "publisher_tesim", itemprop: 'publisher', link_to_search: "publisher_sim"
+    config.add_index_field "based_near_label_tesim", itemprop: 'contentLocation', link_to_search: "based_near_label_sim"
+    config.add_index_field "language_tesim", itemprop: 'inLanguage', link_to_search: "language_sim"
+    config.add_index_field "date_uploaded_dtsi", itemprop: 'datePublished', helper_method: :human_readable_date
+    config.add_index_field "date_modified_dtsi", itemprop: 'dateModified', helper_method: :human_readable_date
+    config.add_index_field "date_created_tesim", itemprop: 'dateCreated'
+    config.add_index_field "rights_statement_tesim", helper_method: :rights_statement_links
+    config.add_index_field "license_tesim", helper_method: :license_links
+    config.add_index_field "resource_type_tesim", label: "Resource Type", link_to_search: "resource_type_sim"
+    config.add_index_field "file_format_tesim", link_to_search: "file_format_sim"
+    config.add_index_field "identifier_tesim", helper_method: :index_field_link, field_name: 'identifier'
+    config.add_index_field Hydra.config.permissions.embargo.release_date, label: "Embargo release date", helper_method: :human_readable_date
+    config.add_index_field Hydra.config.permissions.lease.expiration_date, label: "Lease expiration date", helper_method: :human_readable_date
+
+    # solr fields to be displayed in the show (single result) view
+    #   The ordering of the field names is the order of the display
+    config.add_show_field "title_tesim"
+    config.add_show_field "description_tesim"
+    config.add_show_field "keyword_tesim"
+    config.add_show_field "subject_tesim"
+    config.add_show_field "creator_tesim"
+    config.add_show_field "contributor_tesim"
+    config.add_show_field "publisher_tesim"
+    config.add_show_field "based_near_label_tesim"
+    config.add_show_field "language_tesim"
+    config.add_show_field "date_uploaded_tesim"
+    config.add_show_field "date_modified_tesim"
+    config.add_show_field "date_created_tesim"
+    config.add_show_field "rights_statement_tesim"
+    config.add_show_field "license_tesim"
+    config.add_show_field "resource_type_tesim", label: "Resource Type"
+    config.add_show_field "format_tesim"
+    config.add_show_field "identifier_tesim"
+
+    # "fielded" search configuration. Used by pulldown among other places.
+    # For supported keys in hash, see rdoc for Blacklight::SearchFields
+    #
+    # Search fields will inherit the :qt solr request handler from
+    # config[:default_solr_parameters], OR can specify a different one
+    # with a :qt key/value. Below examples inherit, except for subject
+    # that specifies the same :qt as default for our own internal
+    # testing purposes.
+    #
+    # The :key is what will be used to identify this BL search field internally,
+    # as well as in URLs -- so changing it after deployment may break bookmarked
+    # urls.  A display label will be automatically calculated from the :key,
+    # or can be specified manually to be different.
+    #
+    # This one uses all the defaults set by the solr request handler. Which
+    # solr request handler? The one set in config[:default_solr_parameters][:qt],
+    # since we aren't specifying it otherwise.
+    config.add_search_field('all_fields', label: 'All Fields') do |field|
+      all_names = config.show_fields.values.map(&:field).join(" ")
+      title_name = "title_tesim"
+      field.solr_parameters = {
+        qf: "#{all_names} file_format_tesim all_text_timv",
+        pf: title_name.to_s
+      }
+    end
+
+    # Now we see how to over-ride Solr request handler defaults, in this
+    # case for a BL "search field", which is really a dismax aggregate
+    # of Solr search fields.
+    # creator, title, description, publisher, date_created,
+    # subject, language, resource_type, format, identifier, based_near,
+    config.add_search_field('contributor') do |field|
+      # solr_parameters hash are sent to Solr as ordinary url query params.
+
+      # :solr_local_parameters will be sent using Solr LocalParams
+      # syntax, as eg {! qf=$title_qf }. This is neccesary to use
+      # Solr parameter de-referencing like $title_qf.
+      # See: http://wiki.apache.org/solr/LocalParams
+      solr_name = "contributor_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('creator') do |field|
+      solr_name = "creator_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('title') do |field|
+      solr_name = "title_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('description') do |field|
+      field.label = "Description"
+      solr_name = "description_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('publisher') do |field|
+      solr_name = "publisher_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('date_created') do |field|
+      solr_name = "created_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('subject') do |field|
+      solr_name = "subject_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('language') do |field|
+      solr_name = "language_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('resource_type') do |field|
+      solr_name = "resource_type_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('format') do |field|
+      solr_name = "format_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('identifier') do |field|
+      solr_name = "id_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('based_near') do |field|
+      field.label = "Location"
+      solr_name = "based_near_label_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('keyword') do |field|
+      solr_name = "keyword_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('depositor') do |field|
+      solr_name = "depositor_ssim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('rights_statement') do |field|
+      solr_name = "rights_statement_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    config.add_search_field('license') do |field|
+      solr_name = "license_tesim"
+      field.solr_local_parameters = {
+        qf: solr_name,
+        pf: solr_name
+      }
+    end
+
+    # "sort results by" select (pulldown)
+    # label in pulldown is followed by the name of the SOLR field to sort by and
+    # whether the sort is ascending or descending (it must be asc or desc
+    # except in the relevancy case).
+    # label is key, solr field is value
+    config.add_sort_field "score desc, #{uploaded_field} desc", label: "relevance"
+    config.add_sort_field "#{uploaded_field} desc", label: "date uploaded \u25BC"
+    config.add_sort_field "#{uploaded_field} asc", label: "date uploaded \u25B2"
+    config.add_sort_field "#{modified_field} desc", label: "date modified \u25BC"
+    config.add_sort_field "#{modified_field} asc", label: "date modified \u25B2"
+
+    # If there are more than this many search results, no spelling ("did you
+    # mean") suggestion is offered.
+    config.spell_max = 5
+  end
+
+  # disable the bookmark control from displaying in gallery view
+  # Hyrax doesn't show any of the default controls on the list view, so
+  # this method is not called in that context.
+  def render_bookmarks_control?
+    false
+  end
+end
diff --git a/hyrax/app/controllers/concerns/.keep b/hyrax/app/controllers/concerns/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/app/controllers/hyrax/datasets_controller.rb b/hyrax/app/controllers/hyrax/datasets_controller.rb
new file mode 100644
index 00000000..2e58b47c
--- /dev/null
+++ b/hyrax/app/controllers/hyrax/datasets_controller.rb
@@ -0,0 +1,14 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+module Hyrax
+  # Generated controller for Dataset
+  class DatasetsController < ApplicationController
+    # Adds Hyrax behaviors to the controller.
+    include Hyrax::WorksControllerBehavior
+    include Hyrax::BreadcrumbsForWorks
+    self.curation_concern_type = ::Dataset
+
+    # Use this line if you want to use a custom presenter
+    self.show_presenter = Hyrax::DatasetPresenter
+  end
+end
diff --git a/hyrax/app/forms/hyrax/dataset_form.rb b/hyrax/app/forms/hyrax/dataset_form.rb
new file mode 100644
index 00000000..ff6de5d2
--- /dev/null
+++ b/hyrax/app/forms/hyrax/dataset_form.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+module Hyrax
+  # Generated form for Dataset
+  class DatasetForm < Hyrax::Forms::WorkForm
+    self.model_class = ::Dataset
+    self.terms += [:resource_type]
+  end
+end
diff --git a/hyrax/app/helpers/application_helper.rb b/hyrax/app/helpers/application_helper.rb
new file mode 100644
index 00000000..de6be794
--- /dev/null
+++ b/hyrax/app/helpers/application_helper.rb
@@ -0,0 +1,2 @@
+module ApplicationHelper
+end
diff --git a/hyrax/app/helpers/hyrax_helper.rb b/hyrax/app/helpers/hyrax_helper.rb
new file mode 100644
index 00000000..9b695c37
--- /dev/null
+++ b/hyrax/app/helpers/hyrax_helper.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+module HyraxHelper
+  include ::BlacklightHelper
+  include Hyrax::BlacklightOverride
+  include Hyrax::HyraxHelperBehavior
+end
diff --git a/hyrax/app/indexers/dataset_indexer.rb b/hyrax/app/indexers/dataset_indexer.rb
new file mode 100644
index 00000000..f7a770b5
--- /dev/null
+++ b/hyrax/app/indexers/dataset_indexer.rb
@@ -0,0 +1,18 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+class DatasetIndexer < Hyrax::WorkIndexer
+  # This indexes the default metadata. You can remove it if you want to
+  # provide your own metadata and indexing.
+  include Hyrax::IndexesBasicMetadata
+
+  # Fetch remote labels for based_near. You can remove this if you don't want
+  # this behavior
+  include Hyrax::IndexesLinkedMetadata
+
+  # Uncomment this block if you want to add custom indexing behavior:
+  # def generate_solr_document
+  #  super.tap do |solr_doc|
+  #    solr_doc['my_custom_field_ssim'] = object.my_custom_property
+  #  end
+  # end
+end
diff --git a/hyrax/app/jobs/application_job.rb b/hyrax/app/jobs/application_job.rb
new file mode 100644
index 00000000..a009ace5
--- /dev/null
+++ b/hyrax/app/jobs/application_job.rb
@@ -0,0 +1,2 @@
+class ApplicationJob < ActiveJob::Base
+end
diff --git a/hyrax/app/mailers/application_mailer.rb b/hyrax/app/mailers/application_mailer.rb
new file mode 100644
index 00000000..286b2239
--- /dev/null
+++ b/hyrax/app/mailers/application_mailer.rb
@@ -0,0 +1,4 @@
+class ApplicationMailer < ActionMailer::Base
+  default from: 'from@example.com'
+  layout 'mailer'
+end
diff --git a/hyrax/app/models/ability.rb b/hyrax/app/models/ability.rb
new file mode 100644
index 00000000..43ef51e5
--- /dev/null
+++ b/hyrax/app/models/ability.rb
@@ -0,0 +1,33 @@
+class Ability
+  include Hydra::Ability
+  
+  include Hyrax::Ability
+  self.ability_logic += [
+    :everyone_can_create_curation_concerns,
+    :create_content
+  ]
+
+  # Define any customized permissions here.
+  def custom_permissions
+    # Limits deleting objects to a the admin user
+    #
+    # if current_user.admin?
+    #   can [:destroy], ActiveFedora::Base
+    # end
+
+    # Limits creating new objects to a specific group
+    #
+    # if user_groups.include? 'special_group'
+    #   can [:create], ActiveFedora::Base
+    # end
+    if current_user.admin?
+      can [:create, :show, :add_user, :remove_user, :index, :edit, :update, :destroy], Role
+    end
+  end
+
+  def create_content
+    # everyone who is logged in can create content
+    # return unless registered_user?
+    can :create, ::Dataset if current_user
+  end
+end
diff --git a/hyrax/app/models/application_record.rb b/hyrax/app/models/application_record.rb
new file mode 100644
index 00000000..10a4cba8
--- /dev/null
+++ b/hyrax/app/models/application_record.rb
@@ -0,0 +1,3 @@
+class ApplicationRecord < ActiveRecord::Base
+  self.abstract_class = true
+end
diff --git a/hyrax/app/models/collection.rb b/hyrax/app/models/collection.rb
new file mode 100644
index 00000000..4ca25e20
--- /dev/null
+++ b/hyrax/app/models/collection.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+# Generated by hyrax:models
+class Collection < ActiveFedora::Base
+  include ::Hyrax::CollectionBehavior
+  # You can replace these metadata if they're not suitable
+  include Hyrax::BasicMetadata
+  self.indexer = Hyrax::CollectionWithBasicMetadataIndexer
+end
diff --git a/hyrax/app/models/concerns/.keep b/hyrax/app/models/concerns/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/app/models/dataset.rb b/hyrax/app/models/dataset.rb
new file mode 100644
index 00000000..836578ca
--- /dev/null
+++ b/hyrax/app/models/dataset.rb
@@ -0,0 +1,14 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+class Dataset < ActiveFedora::Base
+  include ::Hyrax::WorkBehavior
+
+  self.indexer = DatasetIndexer
+  # Change this to restrict which works can be added as a child.
+  # self.valid_child_concerns = []
+  validates :title, presence: { message: 'Your work must have a title.' }
+
+  # This must be included at the end, because it finalizes the metadata
+  # schema (by adding accepts_nested_attributes)
+  include ::Hyrax::BasicMetadata
+end
diff --git a/hyrax/app/models/file_set.rb b/hyrax/app/models/file_set.rb
new file mode 100644
index 00000000..fc5d0577
--- /dev/null
+++ b/hyrax/app/models/file_set.rb
@@ -0,0 +1,5 @@
+# frozen_string_literal: true
+# Generated by hyrax:models:install
+class FileSet < ActiveFedora::Base
+  include ::Hyrax::FileSetBehavior
+end
diff --git a/hyrax/app/models/qa.rb b/hyrax/app/models/qa.rb
new file mode 100644
index 00000000..58fe5cdd
--- /dev/null
+++ b/hyrax/app/models/qa.rb
@@ -0,0 +1,5 @@
+module Qa
+  def self.table_name_prefix
+    'qa_'
+  end
+end
diff --git a/hyrax/app/models/qa/local_authority.rb b/hyrax/app/models/qa/local_authority.rb
new file mode 100644
index 00000000..a82a3eae
--- /dev/null
+++ b/hyrax/app/models/qa/local_authority.rb
@@ -0,0 +1,2 @@
+class Qa::LocalAuthority < ApplicationRecord
+end
diff --git a/hyrax/app/models/qa/local_authority_entry.rb b/hyrax/app/models/qa/local_authority_entry.rb
new file mode 100644
index 00000000..45cff8d3
--- /dev/null
+++ b/hyrax/app/models/qa/local_authority_entry.rb
@@ -0,0 +1,3 @@
+class Qa::LocalAuthorityEntry < ApplicationRecord
+  belongs_to :local_authority
+end
diff --git a/hyrax/app/models/search_builder.rb b/hyrax/app/models/search_builder.rb
new file mode 100644
index 00000000..c8969859
--- /dev/null
+++ b/hyrax/app/models/search_builder.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+class SearchBuilder < Blacklight::SearchBuilder
+  include Blacklight::Solr::SearchBuilderBehavior
+  # Add a filter query to restrict the search to documents the current user has access to
+  include Hydra::AccessControlsEnforcement
+  include Hyrax::SearchFilters
+
+
+  ##
+  # @example Adding a new step to the processor chain
+  #   self.default_processor_chain += [:add_custom_data_to_query]
+  #
+  #   def add_custom_data_to_query(solr_parameters)
+  #     solr_parameters[:custom] = blacklight_params[:user_value]
+  #   end
+end
diff --git a/hyrax/app/models/solr_document.rb b/hyrax/app/models/solr_document.rb
new file mode 100644
index 00000000..d8673266
--- /dev/null
+++ b/hyrax/app/models/solr_document.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+class SolrDocument
+  include Blacklight::Solr::Document
+  include Blacklight::Gallery::OpenseadragonSolrDocument
+
+  # Adds Hyrax behaviors to the SolrDocument.
+  include Hyrax::SolrDocumentBehavior
+
+
+  # self.unique_key = 'id'
+
+  # Email uses the semantic field mappings below to generate the body of an email.
+  SolrDocument.use_extension(Blacklight::Document::Email)
+
+  # SMS uses the semantic field mappings below to generate the body of an SMS email.
+  SolrDocument.use_extension(Blacklight::Document::Sms)
+
+  # DublinCore uses the semantic field mappings below to assemble an OAI-compliant Dublin Core document
+  # Semantic mappings of solr stored fields. Fields may be multi or
+  # single valued. See Blacklight::Document::SemanticFields#field_semantics
+  # and Blacklight::Document::SemanticFields#to_semantic_values
+  # Recommendation: Use field names from Dublin Core
+  use_extension(Blacklight::Document::DublinCore)
+
+  # Do content negotiation for AF models. 
+
+  use_extension( Hydra::ContentNegotiation )
+end
diff --git a/hyrax/app/models/user.rb b/hyrax/app/models/user.rb
new file mode 100644
index 00000000..bd9c7c75
--- /dev/null
+++ b/hyrax/app/models/user.rb
@@ -0,0 +1,30 @@
+class User < ApplicationRecord
+  # Connects this user object to Hydra behaviors.
+  include Hydra::User
+  # Connects this user object to Role-management behaviors.
+  include Hydra::RoleManagement::UserRoles
+
+
+  # Connects this user object to Hyrax behaviors.
+  include Hyrax::User
+  include Hyrax::UserUsageStats
+
+
+
+  if Blacklight::Utils.needs_attr_accessible?
+    attr_accessible :email, :password, :password_confirmation
+  end
+  # Connects this user object to Blacklights Bookmarks.
+  include Blacklight::User
+  # Include default devise modules. Others available are:
+  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
+  devise :database_authenticatable, :registerable,
+         :recoverable, :rememberable, :validatable
+
+  # Method added by Blacklight; Blacklight uses #to_s on your
+  # user class to get a user-displayable login/identifier for
+  # the account.
+  def to_s
+    email
+  end
+end
diff --git a/hyrax/app/presenters/hyrax/dataset_presenter.rb b/hyrax/app/presenters/hyrax/dataset_presenter.rb
new file mode 100644
index 00000000..5cca1d77
--- /dev/null
+++ b/hyrax/app/presenters/hyrax/dataset_presenter.rb
@@ -0,0 +1,6 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+module Hyrax
+  class DatasetPresenter < Hyrax::WorkShowPresenter
+  end
+end
diff --git a/hyrax/app/views/hyrax/datasets/_dataset.html.erb b/hyrax/app/views/hyrax/datasets/_dataset.html.erb
new file mode 100644
index 00000000..074a62e9
--- /dev/null
+++ b/hyrax/app/views/hyrax/datasets/_dataset.html.erb
@@ -0,0 +1,2 @@
+<%# This is a search result view %>
+<%= render 'catalog/document', document: dataset, document_counter: dataset_counter  %>
diff --git a/hyrax/app/views/layouts/application.html.erb b/hyrax/app/views/layouts/application.html.erb
new file mode 100644
index 00000000..4806c22f
--- /dev/null
+++ b/hyrax/app/views/layouts/application.html.erb
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Hyrax3App</title>
+    <%= csrf_meta_tags %>
+    <%= csp_meta_tag %>
+
+    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
+    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
+  </head>
+
+  <body>
+    <%= yield %>
+  </body>
+</html>
diff --git a/hyrax/app/views/layouts/mailer.html.erb b/hyrax/app/views/layouts/mailer.html.erb
new file mode 100644
index 00000000..cbd34d2e
--- /dev/null
+++ b/hyrax/app/views/layouts/mailer.html.erb
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <style>
+      /* Email styles need to be inline */
+    </style>
+  </head>
+
+  <body>
+    <%= yield %>
+  </body>
+</html>
diff --git a/hyrax/app/views/layouts/mailer.text.erb b/hyrax/app/views/layouts/mailer.text.erb
new file mode 100644
index 00000000..37f0bddb
--- /dev/null
+++ b/hyrax/app/views/layouts/mailer.text.erb
@@ -0,0 +1 @@
+<%= yield %>
diff --git a/hyrax/bin/bundle b/hyrax/bin/bundle
new file mode 100755
index 00000000..f19acf5b
--- /dev/null
+++ b/hyrax/bin/bundle
@@ -0,0 +1,3 @@
+#!/usr/bin/env ruby
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+load Gem.bin_path('bundler', 'bundle')
diff --git a/hyrax/bin/rails b/hyrax/bin/rails
new file mode 100755
index 00000000..5badb2fd
--- /dev/null
+++ b/hyrax/bin/rails
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative '../config/boot'
+require 'rails/commands'
diff --git a/hyrax/bin/rake b/hyrax/bin/rake
new file mode 100755
index 00000000..d87d5f57
--- /dev/null
+++ b/hyrax/bin/rake
@@ -0,0 +1,9 @@
+#!/usr/bin/env ruby
+begin
+  load File.expand_path('../spring', __FILE__)
+rescue LoadError => e
+  raise unless e.message.include?('spring')
+end
+require_relative '../config/boot'
+require 'rake'
+Rake.application.run
diff --git a/hyrax/bin/setup b/hyrax/bin/setup
new file mode 100755
index 00000000..94fd4d79
--- /dev/null
+++ b/hyrax/bin/setup
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = File.expand_path('..', __dir__)
+
+def system!(*args)
+  system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+  # This script is a starting point to setup your application.
+  # Add necessary setup steps to this file.
+
+  puts '== Installing dependencies =='
+  system! 'gem install bundler --conservative'
+  system('bundle check') || system!('bundle install')
+
+  # Install JavaScript dependencies if using Yarn
+  # system('bin/yarn')
+
+  # puts "\n== Copying sample files =="
+  # unless File.exist?('config/database.yml')
+  #   cp 'config/database.yml.sample', 'config/database.yml'
+  # end
+
+  puts "\n== Preparing database =="
+  system! 'bin/rails db:setup'
+
+  puts "\n== Removing old logs and tempfiles =="
+  system! 'bin/rails log:clear tmp:clear'
+
+  puts "\n== Restarting application server =="
+  system! 'bin/rails restart'
+end
diff --git a/hyrax/bin/spring b/hyrax/bin/spring
new file mode 100755
index 00000000..d89ee495
--- /dev/null
+++ b/hyrax/bin/spring
@@ -0,0 +1,17 @@
+#!/usr/bin/env ruby
+
+# This file loads Spring without using Bundler, in order to be fast.
+# It gets overwritten when you run the `spring binstub` command.
+
+unless defined?(Spring)
+  require 'rubygems'
+  require 'bundler'
+
+  lockfile = Bundler::LockfileParser.new(Bundler.default_lockfile.read)
+  spring = lockfile.specs.detect { |spec| spec.name == 'spring' }
+  if spring
+    Gem.use_paths Gem.dir, Bundler.bundle_path.to_s, *Gem.path
+    gem 'spring', spring.version
+    require 'spring/binstub'
+  end
+end
diff --git a/hyrax/bin/update b/hyrax/bin/update
new file mode 100755
index 00000000..58bfaed5
--- /dev/null
+++ b/hyrax/bin/update
@@ -0,0 +1,31 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+include FileUtils
+
+# path to your application root.
+APP_ROOT = File.expand_path('..', __dir__)
+
+def system!(*args)
+  system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+chdir APP_ROOT do
+  # This script is a way to update your development environment automatically.
+  # Add necessary update steps to this file.
+
+  puts '== Installing dependencies =='
+  system! 'gem install bundler --conservative'
+  system('bundle check') || system!('bundle install')
+
+  # Install JavaScript dependencies if using Yarn
+  # system('bin/yarn')
+
+  puts "\n== Updating database =="
+  system! 'bin/rails db:migrate'
+
+  puts "\n== Removing old logs and tempfiles =="
+  system! 'bin/rails log:clear tmp:clear'
+
+  puts "\n== Restarting application server =="
+  system! 'bin/rails restart'
+end
diff --git a/hyrax/bin/yarn b/hyrax/bin/yarn
new file mode 100755
index 00000000..460dd565
--- /dev/null
+++ b/hyrax/bin/yarn
@@ -0,0 +1,11 @@
+#!/usr/bin/env ruby
+APP_ROOT = File.expand_path('..', __dir__)
+Dir.chdir(APP_ROOT) do
+  begin
+    exec "yarnpkg", *ARGV
+  rescue Errno::ENOENT
+    $stderr.puts "Yarn executable was not detected in the system."
+    $stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
+    exit 1
+  end
+end
diff --git a/hyrax/config.ru b/hyrax/config.ru
new file mode 100644
index 00000000..f7ba0b52
--- /dev/null
+++ b/hyrax/config.ru
@@ -0,0 +1,5 @@
+# This file is used by Rack-based servers to start the application.
+
+require_relative 'config/environment'
+
+run Rails.application
diff --git a/hyrax/config/analytics.yml b/hyrax/config/analytics.yml
new file mode 100644
index 00000000..bd51d37e
--- /dev/null
+++ b/hyrax/config/analytics.yml
@@ -0,0 +1,15 @@
+#
+# You can manually fill in these values or use the ENV variables.
+#
+analytics:
+  google:
+    analytics_id: <%= ENV['GOOGLE_ANALYTICS_ID'] %>
+    app_name: <%= ENV['GOOGLE_OAUTH_APP_NAME'] %>
+    app_version: <%= ENV['GOOGLE_OAUTH_APP_VERSION'] %>
+    privkey_path: <%= ENV['GOOGLE_OAUTH_PRIVATE_KEY_PATH'] %>
+    privkey_secret: <%= ENV['GOOGLE_OAUTH_PRIVATE_KEY_SECRET'] %>
+    client_email: <%= ENV['GOOGLE_OAUTH_CLIENT_EMAIL'] %>
+  matomo:
+    base_url: <%= ENV['MATOMO_BASE_URL'] %>
+    site_id: <%= ENV['MATOMO_SITE_ID'] %>
+    auth_token: <%= ENV['MATOMO_AUTH_TOKEN'] %>
diff --git a/hyrax/config/application.rb b/hyrax/config/application.rb
new file mode 100644
index 00000000..4d487868
--- /dev/null
+++ b/hyrax/config/application.rb
@@ -0,0 +1,19 @@
+require_relative 'boot'
+
+require 'rails/all'
+
+# Require the gems listed in Gemfile, including any gems
+# you've limited to :test, :development, or :production.
+Bundler.require(*Rails.groups)
+
+module Hyrax3App
+  class Application < Rails::Application
+    # Initialize configuration defaults for originally generated Rails version.
+    config.load_defaults 5.2
+
+    # Settings in config/environments/* take precedence over those specified here.
+    # Application configuration can go into files in config/initializers
+    # -- all .rb files in that directory are automatically loaded after loading
+    # the framework and any gems in your application.
+  end
+end
diff --git a/hyrax/config/authorities/licenses.yml b/hyrax/config/authorities/licenses.yml
new file mode 100644
index 00000000..89dd602a
--- /dev/null
+++ b/hyrax/config/authorities/licenses.yml
@@ -0,0 +1,46 @@
+terms:
+    - id: http://creativecommons.org/licenses/by/3.0/us/
+      term: Attribution 3.0 United States
+      active: false
+    - id: http://creativecommons.org/licenses/by-sa/3.0/us/
+      term: Attribution-ShareAlike 3.0 United States
+      active: false
+    - id: http://creativecommons.org/licenses/by-nc/3.0/us/
+      term: Attribution-NonCommercial 3.0 United States
+      active: false
+    - id: http://creativecommons.org/licenses/by-nd/3.0/us/
+      term: Attribution-NoDerivs 3.0 United States
+      active: false
+    - id: http://creativecommons.org/licenses/by-nc-nd/3.0/us/
+      term: Attribution-NonCommercial-NoDerivs 3.0 United States
+      active: false
+    - id: http://creativecommons.org/licenses/by-nc-sa/3.0/us/
+      term: Attribution-NonCommercial-ShareAlike 3.0 United States
+      active: false
+    - id: http://www.europeana.eu/portal/rights/rr-r.html
+      term: All rights reserved
+      active: false
+    - id: https://creativecommons.org/licenses/by/4.0/
+      term: Creative Commons BY Attribution 4.0 International
+      active: true
+    - id: https://creativecommons.org/licenses/by-sa/4.0/
+      term: Creative Commons BY-SA Attribution-ShareAlike 4.0 International
+      active: true
+    - id: https://creativecommons.org/licenses/by-nd/4.0/
+      term: Creative Commons BY-ND Attribution-NoDerivatives 4.0 International
+      active: true
+    - id: https://creativecommons.org/licenses/by-nc/4.0/
+      term: Creative Commons BY-NC Attribution-NonCommercial 4.0 International
+      active: true
+    - id: https://creativecommons.org/licenses/by-nc-nd/4.0/
+      term: Creative Commons BY-NC-ND Attribution-NonCommercial-NoDerivs 4.0 International
+      active: true
+    - id: https://creativecommons.org/licenses/by-nc-sa/4.0/
+      term: Creative Commons BY-NC-SA Attribution-NonCommercial-ShareAlike 4.0 International
+      active: true
+    - id: http://creativecommons.org/publicdomain/zero/1.0/
+      term: Creative Commons CC0 1.0 Universal
+      active: true
+    - id: http://creativecommons.org/publicdomain/mark/1.0/
+      term: Creative Commons Public Domain Mark 1.0
+      active: true
diff --git a/hyrax/config/authorities/resource_types.yml b/hyrax/config/authorities/resource_types.yml
new file mode 100644
index 00000000..69c22256
--- /dev/null
+++ b/hyrax/config/authorities/resource_types.yml
@@ -0,0 +1,41 @@
+terms:
+  - id: Article
+    term: Article
+  - id: Audio
+    term: Audio
+  - id: Book
+    term: Book
+  - id: Capstone Project
+    term: Capstone Project
+  - id: Conference Proceeding
+    term: Conference Proceeding
+  - id: Dataset
+    term: Dataset
+  - id: Dissertation
+    term: Dissertation
+  - id: Image
+    term: Image
+  - id: Journal
+    term: Journal
+  - id: Map or Cartographic Material
+    term: Map or Cartographic Material
+  - id: Masters Thesis
+    term: Masters Thesis
+  - id: Part of Book
+    term: Part of Book
+  - id: Poster
+    term: Poster
+  - id: Presentation
+    term: Presentation
+  - id: Project
+    term: Project
+  - id: Report
+    term: Report
+  - id: Research Paper
+    term: Research Paper
+  - id: Software or Program Code
+    term: Software or Program Code
+  - id: Video
+    term: Video
+  - id: Other
+    term: Other
diff --git a/hyrax/config/authorities/rights_statements.yml b/hyrax/config/authorities/rights_statements.yml
new file mode 100644
index 00000000..719e7576
--- /dev/null
+++ b/hyrax/config/authorities/rights_statements.yml
@@ -0,0 +1,37 @@
+terms:
+- id: http://rightsstatements.org/vocab/InC/1.0/
+  term: "In Copyright"
+  active: true
+- id: http://rightsstatements.org/vocab/InC-OW-EU/1.0/
+  term: "In Copyright - EU Orphan Work"
+  active: true
+- id: http://rightsstatements.org/vocab/InC-EDU/1.0/
+  term: "In Copyright - Educational Use Permitted"
+  active: true
+- id: http://rightsstatements.org/vocab/InC-NC/1.0/
+  term: "In Copyright - Non-Commercial Use Permitted"
+  active: true
+- id: http://rightsstatements.org/vocab/InC-RUU/1.0/
+  term: "In Copyright - Rights-holder(s) Unlocatable or Unidentifiable"
+  active: true
+- id: http://rightsstatements.org/vocab/NoC-CR/1.0/
+  term: "No Copyright - Contractual Restrictions"
+  active: true
+- id: http://rightsstatements.org/vocab/NoC-NC/1.0/
+  term: "No Copyright - Non-Commercial Use Only "
+  active: true
+- id: http://rightsstatements.org/vocab/NoC-OKLR/1.0/
+  term: "No Copyright - Other Known Legal Restrictions"
+  active: true
+- id: http://rightsstatements.org/vocab/NoC-US/1.0/
+  term: "No Copyright - United States"
+  active: true
+- id: http://rightsstatements.org/vocab/CNE/1.0/
+  term: "Copyright Not Evaluated"
+  active: true
+- id: http://rightsstatements.org/vocab/UND/1.0/
+  term: "Copyright Undetermined"
+  active: true
+- id: http://rightsstatements.org/vocab/NKC/1.0/
+  term: "No Known Copyright"
+  active: true
diff --git a/hyrax/config/blacklight.yml b/hyrax/config/blacklight.yml
new file mode 100644
index 00000000..026ff8a5
--- /dev/null
+++ b/hyrax/config/blacklight.yml
@@ -0,0 +1,9 @@
+development:
+  adapter: solr
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production
+test: &test
+  adapter: solr
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_TEST_PORT'] || '8985' %>/solr/hydra-test
+production:
+  adapter: solr
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || 'solr' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production
diff --git a/hyrax/config/boot.rb b/hyrax/config/boot.rb
new file mode 100644
index 00000000..b9e460ce
--- /dev/null
+++ b/hyrax/config/boot.rb
@@ -0,0 +1,4 @@
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)
+
+require 'bundler/setup' # Set up gems listed in the Gemfile.
+require 'bootsnap/setup' # Speed up boot time by caching expensive operations.
diff --git a/hyrax/config/browse_everything_providers.yml b/hyrax/config/browse_everything_providers.yml
new file mode 100644
index 00000000..48b3d11e
--- /dev/null
+++ b/hyrax/config/browse_everything_providers.yml
@@ -0,0 +1,24 @@
+#
+# To make browse-everything aware of a provider, uncomment the info for that provider and add your API key information.
+# The file_system provider can be a path to any directory on the server where your application is running.
+#
+# file_system:
+#   home: /home/rdms
+# dropbox:
+#   client_id: YOUR_DROPBOX_APP_KEY
+#   client_secret: YOUR_DROPBOX_APP_SECRET
+#   download_directory: tmp/
+# box:
+#   client_id: YOUR_BOX_CLIENT_ID
+#   client_secret: YOUR_BOX_CLIENT_SECRET
+# google_drive:
+#   client_id: YOUR_GOOGLE_API_CLIENT_ID
+#   client_secret: YOUR_GOOGLE_API_CLIENT_SECRET
+# s3:
+#   bucket: YOUR_AWS_S3_BUCKET
+#   response_type: signed_url # set to :public_url for public urls or :s3_uri for an s3://BUCKET/KEY uri
+#   expires_in: 14400 # for signed_url response_type, number of seconds url will be valid for.
+#   app_key: YOUR_AWS_S3_KEY       # :app_key, :app_secret, and :region can be specified
+#   app_secret: YOUR_AWS_S3_SECRET # explicitly here, or left out to use system-configured
+#   region: YOUR_AWS_S3_REGION     # defaults.
+#   See https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/
diff --git a/hyrax/config/cable.yml b/hyrax/config/cable.yml
new file mode 100644
index 00000000..b4ec06e7
--- /dev/null
+++ b/hyrax/config/cable.yml
@@ -0,0 +1,12 @@
+development:
+  adapter: redis
+  url: redis://<%= ENV['REDIS_HOST'] || 'localhost' %>:<%= ENV['REDIS_PORT'] || '6379' %>/1
+  channel_prefix: hyrax_development
+
+test:
+  adapter: async
+
+production:
+  adapter: redis
+  url: redis://<%= ENV['REDIS_HOST'] || 'redis' %>:<%= ENV['REDIS_PORT'] || '6379' %>/1
+  channel_prefix: hyrax_production
diff --git a/hyrax/config/credentials.yml.enc b/hyrax/config/credentials.yml.enc
new file mode 100644
index 00000000..2edb4808
--- /dev/null
+++ b/hyrax/config/credentials.yml.enc
@@ -0,0 +1 @@
+OWHyZEsMiVoVeJ4mePKMQ3t4hDJtqhpjFzfAVO8A67JQ2EPmgYep4As1s+4KNcKi5T4d9N54tZ/tztZWrshC1Jor+YYGoybNbl1H3kJ8/7hFBVxhJBKMjJBKD0zCWl0rX5yxDo1S6a5T38toZErp148dj3Ns2Ffd4hYzckB+AXUMmLXWdX7hLVs5s5trMoY/2UDc3xpLqNgpZ72K8uipWueWeRdx6gqAAWOINlLSHq4qROKYbkG59nLeR7Lohe4y6WWNUDRsBkPFShuacOgdXENif00fYmpApzG9g9ZbdzQil2B+P36efesyX4JCw9J4b+SABFBKxrHetoaeqzYgCf9NK00n8ezBWHRWurqPxa+YVfsg6apDJwFGciFh5tZ6VHsqOPN4FTOMej3HIe7IOnhZs946be5yfENW--Oqjd3ANl5VLtNV58--rVBRSosL17TnXSxKqDR2ag==
\ No newline at end of file
diff --git a/hyrax/config/database.yml b/hyrax/config/database.yml
new file mode 100644
index 00000000..65f4d0e5
--- /dev/null
+++ b/hyrax/config/database.yml
@@ -0,0 +1,23 @@
+default: &default
+  adapter: postgresql
+  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+  timeout: 5000
+  encoding: unicode
+  host: <%= ENV['POSTGRES_HOST_APP'] || 'db' %>
+  port: <%= ENV['POSTGRES_PORT'] || '5432' %>
+  username: <%= ENV['POSTGRES_USER'] || 'postgres' %>
+  password: <%= ENV['POSTGRES_PASSWORD'] || 'password' %>
+
+development:
+  <<: *default
+  database: <%= ENV['POSTGRES_DB_APP'] || 'hyrax_development' %>
+
+test:
+  <<: *default
+  database: <%= ENV['POSTGRES_DB_TEST'] || 'hyrax_test' %>
+
+production:
+  <<: *default
+  database: <%= ENV['POSTGRES_DB_APP'] || 'hyrax_production' %>
+  pool: 50
+
diff --git a/hyrax/config/environment.rb b/hyrax/config/environment.rb
new file mode 100644
index 00000000..426333bb
--- /dev/null
+++ b/hyrax/config/environment.rb
@@ -0,0 +1,5 @@
+# Load the Rails application.
+require_relative 'application'
+
+# Initialize the Rails application.
+Rails.application.initialize!
diff --git a/hyrax/config/environments/development.rb b/hyrax/config/environments/development.rb
new file mode 100644
index 00000000..298ac03b
--- /dev/null
+++ b/hyrax/config/environments/development.rb
@@ -0,0 +1,72 @@
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # In the development environment your application's code is reloaded on
+  # every request. This slows down response time but is perfect for development
+  # since you don't have to restart the web server when you make code changes.
+  config.cache_classes = false
+
+  # Do not eager load code on boot.
+  config.eager_load = false
+
+  # Show full error reports.
+  config.consider_all_requests_local = true
+
+  # Enable/disable caching. By default caching is disabled.
+  # Run rails dev:cache to toggle caching.
+  if Rails.root.join('tmp', 'caching-dev.txt').exist?
+    config.action_controller.perform_caching = true
+
+    config.cache_store = :memory_store
+    config.public_file_server.headers = {
+      'Cache-Control' => "public, max-age=#{2.days.to_i}"
+    }
+  else
+    config.action_controller.perform_caching = false
+
+    config.cache_store = :null_store
+  end
+
+  # Store uploaded files on the local file system (see config/storage.yml for options)
+  config.active_storage.service = :local
+
+  # Don't care if the mailer can't send.
+  config.action_mailer.raise_delivery_errors = false
+
+  config.action_mailer.perform_caching = false
+
+  # Print deprecation notices to the Rails logger.
+  config.active_support.deprecation = :log
+
+  # Raise an error on page load if there are pending migrations.
+  config.active_record.migration_error = :page_load
+
+  # Highlight code that triggered database queries in logs.
+  config.active_record.verbose_query_logs = true
+
+  # Debug mode disables concatenation and preprocessing of assets.
+  # This option may cause significant delays in view rendering with a large
+  # number of complex assets.
+  config.assets.debug = false
+
+  # Suppress logger output for asset requests.
+  config.assets.quiet = true
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+
+  # Use an evented file watcher to asynchronously detect changes in source code,
+  # routes, locales, etc. This feature depends on the listen gem.
+  config.file_watcher = ActiveSupport::EventedFileUpdateChecker
+
+  config.force_ssl = false
+  if ENV['APP_HOST'].present?
+    Rails.application.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']}
+    Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']}
+    config.application_url = "http://#{ENV['APP_HOST']}"
+  else
+    Rails.application.routes.default_url_options = {protocol: 'http', host: "localhost"}
+    Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: "localhost"}
+    config.application_url = "http://localhost"
+  end
+end
diff --git a/hyrax/config/environments/production.rb b/hyrax/config/environments/production.rb
new file mode 100644
index 00000000..52dfc44d
--- /dev/null
+++ b/hyrax/config/environments/production.rb
@@ -0,0 +1,115 @@
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # Added for Rails 5.2
+  config.secret_key_base = ENV['SECRET_KEY_BASE_PRODUCTION']
+
+  # Code is not reloaded between requests.
+  config.cache_classes = true
+
+  # Eager load code on boot. This eager loads most of Rails and
+  # your application in memory, allowing both threaded web servers
+  # and those relying on copy on write to perform better.
+  # Rake tasks automatically ignore this option for performance.
+  config.eager_load = true
+
+  # Full error reports are disabled and caching is turned on.
+  config.consider_all_requests_local       = false
+  config.action_controller.perform_caching = true
+
+  # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"]
+  # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).
+  # config.require_master_key = true
+
+  # Disable serving static files from the `/public` folder by default since
+  # Apache or NGINX already handles this.
+  if ENV['RAILS_SERVE_STATIC_FILES'].present?
+    config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES']
+  else
+    config.public_file_server.enabled = true
+  end
+
+  # Compress JavaScripts and CSS.
+  config.assets.js_compressor = :uglifier
+  # config.assets.css_compressor = :sass
+
+  # Do not fallback to assets pipeline if a precompiled asset is missed.
+  config.assets.compile = false
+
+  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
+
+  # Enable serving of images, stylesheets, and JavaScripts from an asset server.
+  # config.action_controller.asset_host = 'http://assets.example.com'
+
+  # Specifies the header that your server uses for sending files.
+  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
+  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
+
+  # Store uploaded files on the local file system (see config/storage.yml for options)
+  config.active_storage.service = :local
+
+  # Mount Action Cable outside main process or domain
+  # config.action_cable.mount_path = nil
+  # config.action_cable.url = 'wss://example.com/cable'
+  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
+
+  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
+  # config.force_ssl = true
+
+  # Use the lowest log level to ensure availability of diagnostic information
+  # when problems arise.
+  config.log_level = :info
+
+  # Prepend all log lines with the following tags.
+  config.log_tags = [ :request_id ]
+
+  # Use a different cache store in production.
+  # config.cache_store = :mem_cache_store
+
+  # Use a real queuing backend for Active Job (and separate queues per environment)
+  # config.active_job.queue_adapter     = :resque
+  # config.active_job.queue_name_prefix = "rdms_#{Rails.env}"
+
+  config.action_mailer.perform_caching = false
+
+  # Ignore bad email addresses and do not raise email delivery errors.
+  # Set this to true and configure the email server for immediate delivery to raise delivery errors.
+  # config.action_mailer.raise_delivery_errors = false
+
+  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
+  # the I18n.default_locale when a translation cannot be found).
+  config.i18n.fallbacks = true
+
+  # Send deprecation notices to registered listeners.
+  config.active_support.deprecation = :notify
+
+  # Use default logging formatter so that PID and timestamp are not suppressed.
+  config.log_formatter = ::Logger::Formatter.new
+
+  # Use a different logger for distributed setups.
+  # require 'syslog/logger'
+  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
+
+  if ENV["RAILS_LOG_TO_STDOUT"].present?
+    logger           = ActiveSupport::Logger.new(STDOUT)
+    logger.formatter = config.log_formatter
+    config.logger    = ActiveSupport::TaggedLogging.new(logger)
+  end
+
+  # Do not dump schema after migrations.
+  config.active_record.dump_schema_after_migration = false
+
+  if ENV["RAILS_FORCE_SSL"].present? && (ENV["RAILS_FORCE_SSL"].to_s.downcase == 'false') then
+    config.force_ssl = false
+    Rails.application.routes.default_url_options = \
+      Hyrax::Engine.routes.default_url_options = \
+      {protocol: 'http', host: ENV['APP_HOST']}
+    config.application_url = "http://#{ENV['APP_HOST']}"
+  else
+    config.force_ssl = true #default if nothing specified is more secure.
+    Rails.application.routes.default_url_options = \
+      Hyrax::Engine.routes.default_url_options = \
+      {protocol: 'https', host: ENV['APP_HOST']}
+    config.application_url = "https://#{ENV['APP_HOST']}"
+  end
+end
diff --git a/hyrax/config/environments/test.rb b/hyrax/config/environments/test.rb
new file mode 100644
index 00000000..77553f7e
--- /dev/null
+++ b/hyrax/config/environments/test.rb
@@ -0,0 +1,56 @@
+Rails.application.configure do
+  # Settings specified here will take precedence over those in config/application.rb.
+
+  # The test environment is used exclusively to run your application's
+  # test suite. You never need to work with it otherwise. Remember that
+  # your test database is "scratch space" for the test suite and is wiped
+  # and recreated between test runs. Don't rely on the data there!
+  config.cache_classes = true
+
+  # Do not eager load code on boot. This avoids loading your whole application
+  # just for the purpose of running a single test. If you are using a tool that
+  # preloads Rails for running tests, you may have to set it to true.
+  config.eager_load = false
+
+  # Configure public file server for tests with Cache-Control for performance.
+  config.public_file_server.enabled = true
+  config.public_file_server.headers = {
+    'Cache-Control' => "public, max-age=#{1.hour.to_i}"
+  }
+
+  # Show full error reports and disable caching.
+  config.consider_all_requests_local       = true
+  config.action_controller.perform_caching = false
+
+  # Raise exceptions instead of rendering exception templates.
+  config.action_dispatch.show_exceptions = false
+
+  # Disable request forgery protection in test environment.
+  config.action_controller.allow_forgery_protection = false
+
+  # Store uploaded files on the local file system in a temporary directory
+  config.active_storage.service = :test
+
+  config.action_mailer.perform_caching = false
+
+  # Tell Action Mailer not to deliver emails to the real world.
+  # The :test delivery method accumulates sent emails in the
+  # ActionMailer::Base.deliveries array.
+  config.action_mailer.delivery_method = :test
+
+  # Print deprecation notices to the stderr.
+  config.active_support.deprecation = :stderr
+
+  # Raises error for missing translations
+  # config.action_view.raise_on_missing_translations = true
+
+  if ENV['APP_HOST'].present?
+    Rails.application.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']}
+    Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: ENV['APP_HOST']}
+    config.application_url = "http://#{ENV['APP_HOST']}"
+  else
+    Rails.application.routes.default_url_options = {protocol: 'http', host: "localhost"}
+    Hyrax::Engine.routes.default_url_options = {protocol: 'http', host: "localhost"}
+    config.application_url = "http://localhost"
+  end
+end
diff --git a/hyrax/config/fcrepo_wrapper_test.yml b/hyrax/config/fcrepo_wrapper_test.yml
new file mode 100644
index 00000000..77f79a6e
--- /dev/null
+++ b/hyrax/config/fcrepo_wrapper_test.yml
@@ -0,0 +1,4 @@
+#config/fcrepo_wrapper_test.yml.sample
+port: 8986
+enable_jms: false
+fcrepo_home_dir: tmp/fcrepo4-test-data
diff --git a/hyrax/config/fedora.yml b/hyrax/config/fedora.yml
new file mode 100644
index 00000000..41b2f271
--- /dev/null
+++ b/hyrax/config/fedora.yml
@@ -0,0 +1,15 @@
+development:
+  user: fedoraAdmin
+  password: fedoraAdmin
+  url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'localhost' %>:<%= ENV['FCREPO_DEVELOPMENT_PORT'] || 8984 %><%= ENV['FCREPO_PATH'] || '/rest' %>
+  base_path: /dev
+test:
+  user: fedoraAdmin
+  password: fedoraAdmin
+  url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'localhost' %>:<%= ENV['FEDORA_TEST_PORT'] || 8986 %><%= ENV['FCREPO_PATH'] || '/rest' %>
+  base_path: /test
+production:
+  user: fedoraAdmin
+  password: fedoraAdmin
+  url: <%= ENV['FEDORA_URL_SCHEME'] || 'http' %>://<%= ENV['FEDORA_HOST'] || 'fcrepo' %>:<%= ENV['FEDORA_PORT'] || '8080' %><%= ENV['FCREPO_PATH'] || '/fcrepo/rest' %>
+  base_path: /hyrax_production
\ No newline at end of file
diff --git a/hyrax/config/initializers/application_controller_renderer.rb b/hyrax/config/initializers/application_controller_renderer.rb
new file mode 100644
index 00000000..89d2efab
--- /dev/null
+++ b/hyrax/config/initializers/application_controller_renderer.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+# ActiveSupport::Reloader.to_prepare do
+#   ApplicationController.renderer.defaults.merge!(
+#     http_host: 'example.org',
+#     https: false
+#   )
+# end
diff --git a/hyrax/config/initializers/assets.rb b/hyrax/config/initializers/assets.rb
new file mode 100644
index 00000000..4b828e80
--- /dev/null
+++ b/hyrax/config/initializers/assets.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+
+# Version of your assets, change this if you want to expire all your assets.
+Rails.application.config.assets.version = '1.0'
+
+# Add additional assets to the asset load path.
+# Rails.application.config.assets.paths << Emoji.images_path
+# Add Yarn node_modules folder to the asset load path.
+Rails.application.config.assets.paths << Rails.root.join('node_modules')
+
+# Precompile additional assets.
+# application.js, application.css, and all non-JS/CSS in the app/assets
+# folder are already added.
+# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/hyrax/config/initializers/backtrace_silencers.rb b/hyrax/config/initializers/backtrace_silencers.rb
new file mode 100644
index 00000000..59385cdf
--- /dev/null
+++ b/hyrax/config/initializers/backtrace_silencers.rb
@@ -0,0 +1,7 @@
+# Be sure to restart your server when you modify this file.
+
+# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.
+# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
+
+# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.
+# Rails.backtrace_cleaner.remove_silencers!
diff --git a/hyrax/config/initializers/clamav.rb b/hyrax/config/initializers/clamav.rb
new file mode 100644
index 00000000..7dcb60d7
--- /dev/null
+++ b/hyrax/config/initializers/clamav.rb
@@ -0,0 +1,2 @@
+# frozen_string_literal: true
+ClamAV.instance.loaddb if defined? ClamAV
diff --git a/hyrax/config/initializers/content_security_policy.rb b/hyrax/config/initializers/content_security_policy.rb
new file mode 100644
index 00000000..d3bcaa5e
--- /dev/null
+++ b/hyrax/config/initializers/content_security_policy.rb
@@ -0,0 +1,25 @@
+# Be sure to restart your server when you modify this file.
+
+# Define an application-wide content security policy
+# For further information see the following documentation
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
+
+# Rails.application.config.content_security_policy do |policy|
+#   policy.default_src :self, :https
+#   policy.font_src    :self, :https, :data
+#   policy.img_src     :self, :https, :data
+#   policy.object_src  :none
+#   policy.script_src  :self, :https
+#   policy.style_src   :self, :https
+
+#   # Specify URI for violation reports
+#   # policy.report_uri "/csp-violation-report-endpoint"
+# end
+
+# If you are using UJS then enable automatic nonce generation
+# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }
+
+# Report CSP violations to a specified URI
+# For further information see the following documentation:
+# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
+# Rails.application.config.content_security_policy_report_only = true
diff --git a/hyrax/config/initializers/cookies_serializer.rb b/hyrax/config/initializers/cookies_serializer.rb
new file mode 100644
index 00000000..5a6a32d3
--- /dev/null
+++ b/hyrax/config/initializers/cookies_serializer.rb
@@ -0,0 +1,5 @@
+# Be sure to restart your server when you modify this file.
+
+# Specify a serializer for the signed and encrypted cookie jars.
+# Valid options are :json, :marshal, and :hybrid.
+Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/hyrax/config/initializers/devise.rb b/hyrax/config/initializers/devise.rb
new file mode 100644
index 00000000..bfff43ba
--- /dev/null
+++ b/hyrax/config/initializers/devise.rb
@@ -0,0 +1,311 @@
+# frozen_string_literal: true
+
+# Assuming you have not yet modified this file, each configuration option below
+# is set to its default value. Note that some are commented out while others
+# are not: uncommented lines are intended to protect your configuration from
+# breaking changes in upgrades (i.e., in the event that future versions of
+# Devise change the default values for those options).
+#
+# Use this hook to configure devise mailer, warden hooks and so forth.
+# Many of these configuration options can be set straight in your model.
+Devise.setup do |config|
+  # The secret key used by Devise. Devise uses this key to generate
+  # random tokens. Changing this key will render invalid all existing
+  # confirmation, reset password and unlock tokens in the database.
+  # Devise will use the `secret_key_base` as its `secret_key`
+  # by default. You can change it below and use your own secret key.
+  config.secret_key = ENV['DEVISE_SECRET_KEY'] || '70727dee31e389416785e18afc87fe427892f5019192dd193e07917880eb9f494af846cc979be51c711b48da9b9fd24ba883cefbd1ecc081ecf9a04b0655c0a0'
+
+  # ==> Controller configuration
+  # Configure the parent class to the devise controllers.
+  # config.parent_controller = 'DeviseController'
+
+  # ==> Mailer Configuration
+  # Configure the e-mail address which will be shown in Devise::Mailer,
+  # note that it will be overwritten if you use your own mailer class
+  # with default "from" parameter.
+  config.mailer_sender = ENV['USER_MANAGEMENT_EMAIL_FROM_ADDRESS'] || 'please-change-me-at-config-initializers-devise@example.com'
+
+  # Configure the class responsible to send e-mails.
+  # config.mailer = 'Devise::Mailer'
+
+  # Configure the parent class responsible to send e-mails.
+  # config.parent_mailer = 'ActionMailer::Base'
+
+  # ==> ORM configuration
+  # Load and configure the ORM. Supports :active_record (default) and
+  # :mongoid (bson_ext recommended) by default. Other ORMs may be
+  # available as additional gems.
+  require 'devise/orm/active_record'
+
+  # ==> Configuration for any authentication mechanism
+  # Configure which keys are used when authenticating a user. The default is
+  # just :email. You can configure it to use [:username, :subdomain], so for
+  # authenticating a user, both parameters are required. Remember that those
+  # parameters are used only when authenticating and not when retrieving from
+  # session. If you need permissions, you should implement that in a before filter.
+  # You can also supply a hash where the value is a boolean determining whether
+  # or not authentication should be aborted when the value is not present.
+  # config.authentication_keys = [:email]
+
+  # Configure parameters from the request object used for authentication. Each entry
+  # given should be a request method and it will automatically be passed to the
+  # find_for_authentication method and considered in your model lookup. For instance,
+  # if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
+  # The same considerations mentioned for authentication_keys also apply to request_keys.
+  # config.request_keys = []
+
+  # Configure which authentication keys should be case-insensitive.
+  # These keys will be downcased upon creating or modifying a user and when used
+  # to authenticate or find a user. Default is :email.
+  config.case_insensitive_keys = [:email]
+
+  # Configure which authentication keys should have whitespace stripped.
+  # These keys will have whitespace before and after removed upon creating or
+  # modifying a user and when used to authenticate or find a user. Default is :email.
+  config.strip_whitespace_keys = [:email]
+
+  # Tell if authentication through request.params is enabled. True by default.
+  # It can be set to an array that will enable params authentication only for the
+  # given strategies, for example, `config.params_authenticatable = [:database]` will
+  # enable it only for database (email + password) authentication.
+  # config.params_authenticatable = true
+
+  # Tell if authentication through HTTP Auth is enabled. False by default.
+  # It can be set to an array that will enable http authentication only for the
+  # given strategies, for example, `config.http_authenticatable = [:database]` will
+  # enable it only for database authentication.
+  # For API-only applications to support authentication "out-of-the-box", you will likely want to
+  # enable this with :database unless you are using a custom strategy.
+  # The supported strategies are:
+  # :database      = Support basic authentication with authentication key + password
+  # config.http_authenticatable = false
+
+  # If 401 status code should be returned for AJAX requests. True by default.
+  # config.http_authenticatable_on_xhr = true
+
+  # The realm used in Http Basic Authentication. 'Application' by default.
+  # config.http_authentication_realm = 'Application'
+
+  # It will change confirmation, password recovery and other workflows
+  # to behave the same regardless if the e-mail provided was right or wrong.
+  # Does not affect registerable.
+  # config.paranoid = true
+
+  # By default Devise will store the user in session. You can skip storage for
+  # particular strategies by setting this option.
+  # Notice that if you are skipping storage for all authentication paths, you
+  # may want to disable generating routes to Devise's sessions controller by
+  # passing skip: :sessions to `devise_for` in your config/routes.rb
+  config.skip_session_storage = [:http_auth]
+
+  # By default, Devise cleans up the CSRF token on authentication to
+  # avoid CSRF token fixation attacks. This means that, when using AJAX
+  # requests for sign in and sign up, you need to get a new CSRF token
+  # from the server. You can disable this option at your own risk.
+  # config.clean_up_csrf_token_on_authentication = true
+
+  # When false, Devise will not attempt to reload routes on eager load.
+  # This can reduce the time taken to boot the app but if your application
+  # requires the Devise mappings to be loaded during boot time the application
+  # won't boot properly.
+  # config.reload_routes = true
+
+  # ==> Configuration for :database_authenticatable
+  # For bcrypt, this is the cost for hashing the password and defaults to 12. If
+  # using other algorithms, it sets how many times you want the password to be hashed.
+  # The number of stretches used for generating the hashed password are stored
+  # with the hashed password. This allows you to change the stretches without
+  # invalidating existing passwords.
+  #
+  # Limiting the stretches to just one in testing will increase the performance of
+  # your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
+  # a value less than 10 in other environments. Note that, for bcrypt (the default
+  # algorithm), the cost increases exponentially with the number of stretches (e.g.
+  # a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
+  config.stretches = Rails.env.test? ? 1 : 12
+
+  # Set up a pepper to generate the hashed password.
+  # config.pepper = '00b43d5f232462fe8629b22e52f432482dddde1bb941492186e8478a662e09a60a0a6f13082d9b0c69467caeaf03cf3ca3961fca64ce7695adcd95a7c98ddd1d'
+
+  # Send a notification to the original email when the user's email is changed.
+  # config.send_email_changed_notification = false
+
+  # Send a notification email when the user's password is changed.
+  # config.send_password_change_notification = false
+
+  # ==> Configuration for :confirmable
+  # A period that the user is allowed to access the website even without
+  # confirming their account. For instance, if set to 2.days, the user will be
+  # able to access the website for two days without confirming their account,
+  # access will be blocked just in the third day.
+  # You can also set it to nil, which will allow the user to access the website
+  # without confirming their account.
+  # Default is 0.days, meaning the user cannot access the website without
+  # confirming their account.
+  # config.allow_unconfirmed_access_for = 2.days
+
+  # A period that the user is allowed to confirm their account before their
+  # token becomes invalid. For example, if set to 3.days, the user can confirm
+  # their account within 3 days after the mail was sent, but on the fourth day
+  # their account can't be confirmed with the token any more.
+  # Default is nil, meaning there is no restriction on how long a user can take
+  # before confirming their account.
+  # config.confirm_within = 3.days
+
+  # If true, requires any email changes to be confirmed (exactly the same way as
+  # initial account confirmation) to be applied. Requires additional unconfirmed_email
+  # db field (see migrations). Until confirmed, new email is stored in
+  # unconfirmed_email column, and copied to email column on successful confirmation.
+  config.reconfirmable = true
+
+  # Defines which key will be used when confirming an account
+  # config.confirmation_keys = [:email]
+
+  # ==> Configuration for :rememberable
+  # The time the user will be remembered without asking for credentials again.
+  # config.remember_for = 2.weeks
+
+  # Invalidates all the remember me tokens when the user signs out.
+  config.expire_all_remember_me_on_sign_out = true
+
+  # If true, extends the user's remember period when remembered via cookie.
+  # config.extend_remember_period = false
+
+  # Options to be passed to the created cookie. For instance, you can set
+  # secure: true in order to force SSL only cookies.
+  # config.rememberable_options = {}
+
+  # ==> Configuration for :validatable
+  # Range for password length.
+  config.password_length = 6..128
+
+  # Email regex used to validate email formats. It simply asserts that
+  # one (and only one) @ exists in the given string. This is mainly
+  # to give user feedback and not to assert the e-mail validity.
+  config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
+
+  # ==> Configuration for :timeoutable
+  # The time you want to timeout the user session without activity. After this
+  # time the user will be asked for credentials again. Default is 30 minutes.
+  # config.timeout_in = 30.minutes
+
+  # ==> Configuration for :lockable
+  # Defines which strategy will be used to lock an account.
+  # :failed_attempts = Locks an account after a number of failed attempts to sign in.
+  # :none            = No lock strategy. You should handle locking by yourself.
+  # config.lock_strategy = :failed_attempts
+
+  # Defines which key will be used when locking and unlocking an account
+  # config.unlock_keys = [:email]
+
+  # Defines which strategy will be used to unlock an account.
+  # :email = Sends an unlock link to the user email
+  # :time  = Re-enables login after a certain amount of time (see :unlock_in below)
+  # :both  = Enables both strategies
+  # :none  = No unlock strategy. You should handle unlocking by yourself.
+  # config.unlock_strategy = :both
+
+  # Number of authentication tries before locking an account if lock_strategy
+  # is failed attempts.
+  # config.maximum_attempts = 20
+
+  # Time interval to unlock the account if :time is enabled as unlock_strategy.
+  # config.unlock_in = 1.hour
+
+  # Warn on the last attempt before the account is locked.
+  # config.last_attempt_warning = true
+
+  # ==> Configuration for :recoverable
+  #
+  # Defines which key will be used when recovering the password for an account
+  # config.reset_password_keys = [:email]
+
+  # Time interval you can reset your password with a reset password key.
+  # Don't put a too small interval or your users won't have the time to
+  # change their passwords.
+  config.reset_password_within = 6.hours
+
+  # When set to false, does not sign a user in automatically after their password is
+  # reset. Defaults to true, so a user is signed in automatically after a reset.
+  # config.sign_in_after_reset_password = true
+
+  # ==> Configuration for :encryptable
+  # Allow you to use another hashing or encryption algorithm besides bcrypt (default).
+  # You can use :sha1, :sha512 or algorithms from others authentication tools as
+  # :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20
+  # for default behavior) and :restful_authentication_sha1 (then you should set
+  # stretches to 10, and copy REST_AUTH_SITE_KEY to pepper).
+  #
+  # Require the `devise-encryptable` gem when using anything other than bcrypt
+  # config.encryptor = :sha512
+
+  # ==> Scopes configuration
+  # Turn scoped views on. Before rendering "sessions/new", it will first check for
+  # "users/sessions/new". It's turned off by default because it's slower if you
+  # are using only default views.
+  # config.scoped_views = false
+
+  # Configure the default scope given to Warden. By default it's the first
+  # devise role declared in your routes (usually :user).
+  # config.default_scope = :user
+
+  # Set this configuration to false if you want /users/sign_out to sign out
+  # only the current scope. By default, Devise signs out all scopes.
+  # config.sign_out_all_scopes = true
+
+  # ==> Navigation configuration
+  # Lists the formats that should be treated as navigational. Formats like
+  # :html, should redirect to the sign in page when the user does not have
+  # access, but formats like :xml or :json, should return 401.
+  #
+  # If you have any extra navigational formats, like :iphone or :mobile, you
+  # should add them to the navigational formats lists.
+  #
+  # The "*/*" below is required to match Internet Explorer requests.
+  # config.navigational_formats = ['*/*', :html]
+
+  # The default HTTP method used to sign out a resource. Default is :delete.
+  config.sign_out_via = :get
+
+  # ==> OmniAuth
+  # Add a new OmniAuth provider. Check the wiki for more information on setting
+  # up on your models and hooks.
+  # config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
+
+  # ==> Warden configuration
+  # If you want to use other strategies, that are not supported by Devise, or
+  # change the failure app, you can configure them inside the config.warden block.
+  #
+  # config.warden do |manager|
+  #   manager.intercept_401 = false
+  #   manager.default_strategies(scope: :user).unshift :some_external_strategy
+  # end
+
+  # ==> Mountable engine configurations
+  # When using Devise inside an engine, let's call it `MyEngine`, and this engine
+  # is mountable, there are some extra configurations to be taken into account.
+  # The following options are available, assuming the engine is mounted as:
+  #
+  #     mount MyEngine, at: '/my_engine'
+  #
+  # The router that invoked `devise_for`, in the example above, would be:
+  # config.router_name = :my_engine
+  #
+  # When using OmniAuth, Devise cannot automatically set OmniAuth path,
+  # so you need to do it manually. For the users scope, it would be:
+  # config.omniauth_path_prefix = '/my_engine/users/auth'
+
+  # ==> Turbolinks configuration
+  # If your app is using Turbolinks, Turbolinks::Controller needs to be included to make redirection work correctly:
+  #
+  # ActiveSupport.on_load(:devise_failure_app) do
+  #   include Turbolinks::Controller
+  # end
+
+  # ==> Configuration for :registerable
+
+  # When set to false, does not sign a user in automatically after their password is
+  # changed. Defaults to true, so a user is signed in automatically after changing a password.
+  # config.sign_in_after_change_password = true
+end
diff --git a/hyrax/config/initializers/filter_parameter_logging.rb b/hyrax/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 00000000..4a994e1e
--- /dev/null
+++ b/hyrax/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,4 @@
+# Be sure to restart your server when you modify this file.
+
+# Configure sensitive parameters which will be filtered from the log file.
+Rails.application.config.filter_parameters += [:password]
diff --git a/hyrax/config/initializers/hydra_config.rb b/hyrax/config/initializers/hydra_config.rb
new file mode 100644
index 00000000..35f9eccd
--- /dev/null
+++ b/hyrax/config/initializers/hydra_config.rb
@@ -0,0 +1,24 @@
+# windows doesn't properly require hydra-head (from the gemfile), so we need to require it explicitly here:
+require 'hydra/head' unless defined? Hydra
+
+Hydra.configure do |config|
+  # This specifies the solr field names of permissions-related fields.
+  # You only need to change these values if you've indexed permissions by some means other than the Hydra's built-in tooling.
+  # If you change these, you must also update the permissions request handler in your solrconfig.xml to return those values
+  #
+  # config.permissions.discover.group       = ActiveFedora::SolrQueryBuilder.solr_name("discover_access_group", :symbol)
+  # config.permissions.discover.individual  = ActiveFedora::SolrQueryBuilder.solr_name("discover_access_person", :symbol)
+  # config.permissions.read.group           = ActiveFedora::SolrQueryBuilder.solr_name("read_access_group", :symbol)
+  # config.permissions.read.individual      = ActiveFedora::SolrQueryBuilder.solr_name("read_access_person", :symbol)
+  # config.permissions.edit.group           = ActiveFedora::SolrQueryBuilder.solr_name("edit_access_group", :symbol)
+  # config.permissions.edit.individual      = ActiveFedora::SolrQueryBuilder.solr_name("edit_access_person", :symbol)
+  #
+  # config.permissions.embargo.release_date  = ActiveFedora::SolrQueryBuilder.solr_name("embargo_release_date", :stored_sortable, type: :date)
+  # config.permissions.lease.expiration_date = ActiveFedora::SolrQueryBuilder.solr_name("lease_expiration_date", :stored_sortable, type: :date)
+  #
+  #
+  # Specify the user model
+  # config.user_model = 'User'
+
+  config.user_key_field = Devise.authentication_keys.first
+end
diff --git a/hyrax/config/initializers/hyrax.rb b/hyrax/config/initializers/hyrax.rb
new file mode 100644
index 00000000..f470e547
--- /dev/null
+++ b/hyrax/config/initializers/hyrax.rb
@@ -0,0 +1,315 @@
+# frozen_string_literal: true
+Hyrax.config do |config|
+  # Injected via `rails g hyrax:work Dataset`
+  config.register_curation_concern :dataset
+  # Register roles that are expected by your implementation.
+  # @see Hyrax::RoleRegistry for additional details.
+  # @note there are magical roles as defined in Hyrax::RoleRegistry::MAGIC_ROLES
+  # config.register_roles do |registry|
+  #   registry.add(name: 'captaining', description: 'For those that really like the front lines')
+  # end
+
+  # When an admin set is created, we need to activate a workflow.
+  # The :default_active_workflow_name is the name of the workflow we will activate.
+  # @see Hyrax::Configuration for additional details and defaults.
+  # config.default_active_workflow_name = 'default'
+
+  # Which RDF term should be used to relate objects to an admin set?
+  # If this is a new repository, you may want to set a custom predicate term here to
+  # avoid clashes if you plan to use the default (dct:isPartOf) for other relations.
+  # config.admin_set_predicate = ::RDF::DC.isPartOf
+
+  # Which RDF term should be used to relate objects to a rendering?
+  # If this is a new repository, you may want to set a custom predicate term here to
+  # avoid clashes if you plan to use the default (dct:hasFormat) for other relations.
+  # config.rendering_predicate = ::RDF::DC.hasFormat
+
+  # Email recipient of messages sent via the contact form
+  config.contact_email = ENV['CONTACT_FORM_RECIPIENT_EMAIL'] || "repo-admin@example.org"
+
+  # Text prefacing the subject entered in the contact form
+  config.subject_prefix = ENV['CONTACT_FORM_SUBJECT_PREFIX'] || "Hyrax Contact form:"
+
+  # How many notifications should be displayed on the dashboard
+  # config.max_notifications_for_dashboard = 5
+
+  # How frequently should a file be fixity checked
+  # config.max_days_between_fixity_checks = 7
+
+  # Options to control the file uploader
+  # config.uploader = {
+  #   limitConcurrentUploads: 6,
+  #   maxNumberOfFiles: 100,
+  #   maxFileSize: 500.megabytes
+  # }
+
+  # Enables a link to the citations page for a work
+  # Default is false
+  config.citations = true
+
+  # Where to store tempfiles, leave blank for the system temp directory (e.g. /tmp)
+  # config.temp_file_base = '/home/developer1'
+
+  # Hostpath to be used in Endnote exports
+  # config.persistent_hostpath = 'http://localhost/files/'
+
+  # If you have ffmpeg installed and want to transcode audio and video set to true
+  config.enable_ffmpeg = true
+
+  # Hyrax uses NOIDs for files and collections instead of Fedora UUIDs
+  # where NOID = 10-character string and UUID = 32-character string w/ hyphens
+  config.enable_noids = true
+
+  # Template for your repository's NOID IDs
+  # config.noid_template = ".reeddeeddk"
+
+  # Use the database-backed minter class
+  # config.noid_minter_class = Noid::Rails::Minter::Db
+
+  # Store identifier minter's state in a file for later replayability
+  # config.minter_statefile = '/tmp/minter-state'
+
+  # Prefix for Redis keys
+  # config.redis_namespace = "hyrax"
+
+  # Path to the file characterization tool
+  config.fits_path = ENV['FITS_PATH'] || "/fits/fits-1.5.0/fits.sh"
+
+  # Path to the file derivatives creation tool
+  # config.libreoffice_path = "soffice"
+
+  # Option to enable/disable full text extraction from PDFs
+  # Default is true, set to false to disable full text extraction
+  # config.extract_full_text = true
+
+  # How many seconds back from the current time that we should show by default of the user's activity on the user's dashboard
+  # config.activity_to_show_default_seconds_since_now = 24*60*60
+
+  # Hyrax can integrate with Zotero's Arkivo service for automatic deposit
+  # of Zotero-managed research items.
+  # config.arkivo_api = false
+
+  # Stream realtime notifications to users in the browser
+  # config.realtime_notifications = true
+
+  # Location autocomplete uses geonames to search for named regions
+  # Username for connecting to geonames
+  # config.geonames_username = ''
+
+  # Should the acceptance of the licence agreement be active (checkbox), or
+  # implied when the save button is pressed? Set to true for active
+  # The default is true.
+  # config.active_deposit_agreement_acceptance = true
+
+  # Should work creation require file upload, or can a work be created first
+  # and a file added at a later time?
+  # The default is true.
+  # config.work_requires_files = true
+
+  # How many rows of items should appear on the work show view?
+  # The default is 10
+  # config.show_work_item_rows = 10
+
+  # Enable IIIF image service. This is required to use the
+  # IIIF viewer enabled show page
+  #
+  # If you have run the riiif generator, an embedded riiif service
+  # will be used to deliver images via IIIF. If you have not, you will
+  # need to configure the following other configuration values to work
+  # with your image server:
+  #
+  #   * iiif_image_url_builder
+  #   * iiif_info_url_builder
+  #   * iiif_image_compliance_level_uri
+  #   * iiif_image_size_default
+  #
+  # Default is false
+  config.iiif_image_server = true
+  if ENV.fetch('IIIF_TO_SERVE_SSL_URLS', 'false') == 'true'
+    protocol = 'https'
+  else
+    protocol = 'http'
+  end
+
+  if Rails.env.development?
+    port = ENV.fetch('PORT', 3000)
+  else
+    port = nil
+  end
+
+  # Returns a URL that resolves to an image provided by a IIIF image server
+  config.iiif_image_url_builder = lambda do |file_id, base_url, size, format|
+    Riiif::Engine.routes.url_helpers.image_url(file_id, host: base_url, size: size, protocol: protocol, port: port)
+  end
+  # config.iiif_image_url_builder = lambda do |file_id, base_url, size, format|
+  #   "#{base_url}/downloads/#{file_id.split('/').first}"
+  # end
+
+  # Returns a URL that resolves to an info.json file provided by a IIIF image server
+  config.iiif_info_url_builder = lambda do |file_id, base_url|
+    uri = Riiif::Engine.routes.url_helpers.info_url(file_id, host: base_url, protocol: protocol, port: port)
+    uri.sub(%r{/info\.json\Z}, '')
+  end
+
+  # Returns a URL that indicates your IIIF image server compliance level
+  # config.iiif_image_compliance_level_uri = 'http://iiif.io/api/image/2/level2.json'
+
+  # Returns a IIIF image size default
+  # config.iiif_image_size_default = '600,'
+
+  # Fields to display in the IIIF metadata section; default is the required fields
+  # config.iiif_metadata_fields = Hyrax::Forms::WorkForm.required_fields
+
+  # Should a button with "Share my work" show on the front page to all users (even those not logged in)?
+  config.display_share_button_when_not_logged_in = false
+
+  # This user is logged as the acting user for jobs and other processes that
+  # run without being attributed to a specific user (e.g. creation of the
+  # default admin set).
+  # config.system_user_key = 'systemuser@example.com'
+
+  # The user who runs batch jobs. Update this if you aren't using emails
+  # config.batch_user_key = 'batchuser@example.com'
+
+  # The user who runs fixity check jobs. Update this if you aren't using emails
+  # config.audit_user_key = 'audituser@example.com'
+  #
+  # The banner image. Should be 5000px wide by 1000px tall
+  # config.banner_image = 'https://cloud.githubusercontent.com/assets/92044/18370978/88ecac20-75f6-11e6-8399-6536640ef695.jpg'
+
+  # Temporary paths to hold uploads before they are ingested into FCrepo
+  # These must be lambdas that return a Pathname. Can be configured separately
+  config.upload_path = ->() { ENV.fetch('UPLOADS_PATH', Rails.root.join('tmp', 'uploads')) }
+  config.cache_path = ->() { ENV.fetch('CACHE_PATH', Rails.root.join('tmp', 'uploads', 'cache')) }
+
+  # Location on local file system where derivatives will be stored
+  # If you use a multi-server architecture, this MUST be a shared volume
+  config.derivatives_path = ENV.fetch('DERIVATIVES_PATH', Rails.root.join('tmp', 'derivatives'))
+
+  # Should schema.org microdata be displayed?
+  # config.display_microdata = true
+
+  # What default microdata type should be used if a more appropriate
+  # type can not be found in the locale file?
+  # config.microdata_default_type = 'http://schema.org/CreativeWork'
+
+  # Location on local file system where uploaded files will be staged
+  # prior to being ingested into the repository or having derivatives generated.
+  # If you use a multi-server architecture, this MUST be a shared volume.
+  config.working_path = ENV.fetch('UPLOADS_PATH', Rails.root.join('tmp', 'uploads'))
+
+  # Should the media display partial render a download link?
+  # config.display_media_download_link = true
+
+  # A configuration point for changing the behavior of the license service
+  #   @see Hyrax::LicenseService for implementation details
+  # config.license_service_class = Hyrax::LicenseService
+
+  # Labels for display of permission levels
+  # config.permission_levels = { "View/Download" => "read", "Edit access" => "edit" }
+
+  # Labels for permission level options used in dropdown menus
+  # config.permission_options = { "Choose Access" => "none", "View/Download" => "read", "Edit" => "edit" }
+
+  # Labels for owner permission levels
+  # config.owner_permission_levels = { "Edit Access" => "edit" }
+
+  # Path to the ffmpeg tool
+  # config.ffmpeg_path = 'ffmpeg'
+
+  # Max length of FITS messages to display in UI
+  # config.fits_message_length = 5
+
+  # ActiveJob queue to handle ingest-like jobs
+  # config.ingest_queue_name = :default
+
+  ## Attributes for the lock manager which ensures a single process/thread is mutating a ore:Aggregation at once.
+  # How many times to retry to acquire the lock before raising UnableToAcquireLockError
+  # config.lock_retry_count = 600 # Up to 2 minutes of trying at intervals up to 200ms
+  #
+  # Maximum wait time in milliseconds before retrying. Wait time is a random value between 0 and retry_delay.
+  # config.lock_retry_delay = 200
+  #
+  # How long to hold the lock in milliseconds
+  # config.lock_time_to_live = 60_000
+
+  ## Do not alter unless you understand how ActiveFedora handles URI/ID translation
+  # config.translate_id_to_uri = lambda do |uri|
+  #                                baseparts = 2 + [(Noid::Rails::Config.template.gsub(/\.[rsz]/, '').length.to_f / 2).ceil, 4].min
+  #                                uri.to_s.sub(baseurl, '').split('/', baseparts).last
+  #                              end
+  # config.translate_uri_to_id = lambda do |id|
+  #                                "#{ActiveFedora.fedora.host}#{ActiveFedora.fedora.base_path}/#{Noid::Rails.treeify(id)}"
+  #                              end
+
+  # Identify the model class name that will be used for Collections in your app
+  # (i.e. ::Collection for ActiveFedora, Hyrax::PcdmCollection for Valkyrie)
+  # config.collection_model = '::Collection'
+  # config.collection_model = 'Hyrax::PcdmCollection'
+
+  # Identify the model class name that will be used for Admin Sets in your app
+  # (i.e. AdminSet for ActiveFedora, Hyrax::AdministrativeSet for Valkyrie)
+  # config.admin_set_model = 'AdminSet'
+  # config.admin_set_model = 'Hyrax::AdministrativeSet'
+
+  # When your application is ready to use the valkyrie index instead of the one
+  # maintained by active fedora, you will need to set this to true. You will
+  # also need to update your Blacklight configuration.
+  # config.query_index_from_valkyrie = false
+
+  ## Configure index adapter for Valkyrie::Resources to use solr readonly indexer
+  # config.index_adapter = :solr_index
+
+  ## Fedora import/export tool
+  #
+  # Path to the Fedora import export tool jar file
+  # config.import_export_jar_file_path = "tmp/fcrepo-import-export.jar"
+  #
+  # Location where BagIt files should be exported
+  # config.bagit_dir = "tmp/descriptions"
+
+  # If browse-everything has been configured, load the configs.  Otherwise, set to nil.
+  begin
+    if defined? BrowseEverything
+      config.browse_everything = BrowseEverything.config
+    else
+      Rails.logger.warn "BrowseEverything is not installed"
+    end
+  rescue Errno::ENOENT
+    config.browse_everything = nil
+  end
+
+  ## Register all directories which can be used to ingest from the local file
+  # system.
+  #
+  # Any file, and only those, that is anywhere under one of the specified
+  # directories can be used by CreateWithRemoteFilesActor to add local files
+  # to works. Files uploaded by the user are handled separately and the
+  # temporary directory for those need not be included here.
+  #
+  # Default value includes BrowseEverything.config['file_system'][:home] if it
+  # is set, otherwise default is an empty list. You should only need to change
+  # this if you have custom ingestions using CreateWithRemoteFilesActor to
+  # ingest files from the file system that are not part of the BrowseEverything
+  # mount point.
+  #
+  # config.registered_ingest_dirs = []
+
+  ##
+  # Set the system-wide virus scanner
+  config.virus_scanner = Hyrax::VirusScanner
+
+  ## Remote identifiers configuration
+  # Add registrar implementations by uncommenting and adding to the hash below.
+  # See app/services/hyrax/identifier/registrar.rb for the registrar interface
+  # config.identifier_registrars = {}
+end
+
+DEFAULT_DATE_FORMAT = ENV['DEFAULT_DATE_FORMAT'] || '%d/%m/%Y'
+Date::DATE_FORMATS[:standard] = DEFAULT_DATE_FORMAT
+DateTime::DATE_FORMATS[:standard] = DEFAULT_DATE_FORMAT
+Date::DATE_FORMATS[:default] = DEFAULT_DATE_FORMAT
+
+Qa::Authorities::Local.register_subauthority('subjects', 'Qa::Authorities::Local::TableBasedAuthority')
+Qa::Authorities::Local.register_subauthority('languages', 'Qa::Authorities::Local::TableBasedAuthority')
+Qa::Authorities::Local.register_subauthority('genres', 'Qa::Authorities::Local::TableBasedAuthority')
diff --git a/hyrax/config/initializers/inflections.rb b/hyrax/config/initializers/inflections.rb
new file mode 100644
index 00000000..ac033bf9
--- /dev/null
+++ b/hyrax/config/initializers/inflections.rb
@@ -0,0 +1,16 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new inflection rules using the following format. Inflections
+# are locale specific, and you may define rules for as many different
+# locales as you wish. All of these examples are active by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.plural /^(ox)$/i, '\1en'
+#   inflect.singular /^(ox)en/i, '\1'
+#   inflect.irregular 'person', 'people'
+#   inflect.uncountable %w( fish sheep )
+# end
+
+# These inflection rules are supported but not enabled by default:
+# ActiveSupport::Inflector.inflections(:en) do |inflect|
+#   inflect.acronym 'RESTful'
+# end
diff --git a/hyrax/config/initializers/mailboxer.rb b/hyrax/config/initializers/mailboxer.rb
new file mode 100644
index 00000000..92b190ea
--- /dev/null
+++ b/hyrax/config/initializers/mailboxer.rb
@@ -0,0 +1,22 @@
+Mailboxer.setup do |config|
+
+  #Configures if your application uses or not email sending for Notifications and Messages
+  config.uses_emails = true
+
+  #Configures the default from for emails sent for Messages and Notifications
+  config.default_from = ENV['NOTIFICATIONS_EMAIL_DEFAULT_FROM_ADDRESS'] || "no-reply@mailboxer.com"
+
+  #Configures the methods needed by mailboxer
+  config.email_method = :mailboxer_email
+  config.name_method = :name
+  config.notify_method = :notify
+
+  #Configures if you use or not a search engine and which one you are using
+  #Supported engines: [:solr,:sphinx,:pg_search]
+  config.search_enabled = false
+  config.search_engine = :solr
+
+  #Configures maximum length of the message subject and body
+  config.subject_max_length = 255
+  config.body_max_length = 32000
+end
diff --git a/hyrax/config/initializers/mime_types.rb b/hyrax/config/initializers/mime_types.rb
new file mode 100644
index 00000000..5894028a
--- /dev/null
+++ b/hyrax/config/initializers/mime_types.rb
@@ -0,0 +1,8 @@
+# Be sure to restart your server when you modify this file.
+
+# Add new mime types for use in respond_to blocks:
+# Mime::Type.register "text/richtext", :rtf
+Mime::Type.register "application/n-triples", :nt
+Mime::Type.register "application/ld+json", :jsonld
+Mime::Type.register "text/turtle", :ttl
+Mime::Type.register 'application/x-endnote-refer', :endnote
\ No newline at end of file
diff --git a/hyrax/config/initializers/mini_magick.rb b/hyrax/config/initializers/mini_magick.rb
new file mode 100644
index 00000000..7fc113a3
--- /dev/null
+++ b/hyrax/config/initializers/mini_magick.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+require 'mini_magick'
+
+MiniMagick.configure do |config|
+  config.shell_api = "posix-spawn"
+end
diff --git a/hyrax/config/initializers/redis_config.rb b/hyrax/config/initializers/redis_config.rb
new file mode 100644
index 00000000..313cf19c
--- /dev/null
+++ b/hyrax/config/initializers/redis_config.rb
@@ -0,0 +1,4 @@
+# frozen_string_literal: true
+require 'redis'
+config = YAML.safe_load(ERB.new(IO.read(Rails.root.join('config', 'redis.yml'))).result)[Rails.env].with_indifferent_access
+Redis.current = Redis.new(config.merge(thread_safe: true))
diff --git a/hyrax/config/initializers/riiif.rb b/hyrax/config/initializers/riiif.rb
new file mode 100644
index 00000000..b29200cc
--- /dev/null
+++ b/hyrax/config/initializers/riiif.rb
@@ -0,0 +1,29 @@
+# frozen_string_literal: true
+ActiveSupport::Reloader.to_prepare do
+  Riiif::Image.file_resolver = Riiif::HttpFileResolver.new
+  Riiif::Image.info_service = lambda do |id, _file|
+    # id will look like a path to a pcdm:file
+    # (e.g. rv042t299%2Ffiles%2F6d71677a-4f80-42f1-ae58-ed1063fd79c7)
+    # but we just want the id for the FileSet it's attached to.
+
+    # Capture everything before the first slash
+    fs_id = id.sub(/\A([^\/]*)\/.*/, '\1')
+    resp = Hyrax::SolrService.get("id:#{fs_id}")
+    doc = resp['response']['docs'].first
+    raise "Unable to find solr document with id:#{fs_id}" unless doc
+    { height: doc['height_is'], width: doc['width_is'], format: doc['mime_type_ssi'], channels: doc['alpha_channels_ssi'] }
+  end
+
+  Riiif::Image.file_resolver.id_to_uri = lambda do |id|
+    Hyrax::Base.id_to_uri(CGI.unescape(id)).tap do |url|
+      Rails.logger.info "Riiif resolved #{id} to #{url}"
+    end
+  end
+
+  Riiif::Image.authorization_service = Hyrax::IIIFAuthorizationService
+
+  Riiif.not_found_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
+  Riiif.unauthorized_image = Rails.root.join('app', 'assets', 'images', 'us_404.svg')
+
+  Riiif::Engine.config.cache_duration = 365.days
+end
diff --git a/hyrax/config/initializers/simple_form.rb b/hyrax/config/initializers/simple_form.rb
new file mode 100644
index 00000000..b92657cf
--- /dev/null
+++ b/hyrax/config/initializers/simple_form.rb
@@ -0,0 +1,171 @@
+# frozen_string_literal: true
+# NOTE: This is a modified version of simple_form's default config file.
+#       The only changes were to move the input to after the hint and error.
+
+# Use this setup block to configure all options available in SimpleForm.
+SimpleForm.setup do |config|
+  # Wrappers are used by the form builder to generate a
+  # complete input. You can remove any component from the
+  # wrapper, change the order or even add your own to the
+  # stack. The options given below are used to wrap the
+  # whole input.
+  config.wrappers :default, class: :input,
+                            hint_class: :field_with_hint,
+                            error_class: :field_with_errors do |b|
+    ## Extensions enabled by default
+    # Any of these extensions can be disabled for a
+    # given input by passing: `f.input EXTENSION_NAME => false`.
+    # You can make any of these extensions optional by
+    # renaming `b.use` to `b.optional`.
+
+    # Determines whether to use HTML5 (:email, :url, ...)
+    # and required attributes
+    b.use :html5
+
+    # Calculates placeholders automatically from I18n
+    # You can also pass a string as f.input placeholder: "Placeholder"
+    b.use :placeholder
+
+    ## Optional extensions
+    # They are disabled unless you pass `f.input EXTENSION_NAME => true`
+    # to the input. If so, they will retrieve the values from the model
+    # if any exists. If you want to enable any of those
+    # extensions by default, you can change `b.optional` to `b.use`.
+
+    # Calculates maxlength from length validations for string inputs
+    b.optional :maxlength
+
+    # Calculates pattern from format validations for string inputs
+    b.optional :pattern
+
+    # Calculates min and max from length validations for numeric inputs
+    b.optional :min_max
+
+    # Calculates readonly automatically from readonly attributes
+    b.optional :readonly
+
+    ## Inputs
+    b.use :label
+    b.use :hint,  wrap_with: { tag: :span, class: :hint }
+    b.use :error, wrap_with: { tag: :span, class: :error }
+    b.use :input
+
+    ## full_messages_for
+    # If you want to display the full error message for the attribute, you can
+    # use the component :full_error, like:
+    #
+    # b.use :full_error, wrap_with: { tag: :span, class: :error }
+  end
+
+  # The default wrapper to be used by the FormBuilder.
+  config.default_wrapper = :default
+
+  # Define the way to render check boxes / radio buttons with labels.
+  # Defaults to :nested for bootstrap config.
+  #   inline: input + label
+  #   nested: label > input
+  config.boolean_style = :nested
+
+  # Default class for buttons
+  config.button_class = 'btn'
+
+  # Method used to tidy up errors. Specify any Rails Array method.
+  # :first lists the first message for each field.
+  # Use :to_sentence to list all errors for each field.
+  # config.error_method = :first
+
+  # Default tag used for error notification helper.
+  config.error_notification_tag = :div
+
+  # CSS class to add for error notification helper.
+  config.error_notification_class = 'error_notification'
+
+  # ID to add for error notification helper.
+  # config.error_notification_id = nil
+
+  # Series of attempts to detect a default label method for collection.
+  # config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
+
+  # Series of attempts to detect a default value method for collection.
+  # config.collection_value_methods = [ :id, :to_s ]
+
+  # You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
+  # config.collection_wrapper_tag = nil
+
+  # You can define the class to use on all collection wrappers. Defaulting to none.
+  # config.collection_wrapper_class = nil
+
+  # You can wrap each item in a collection of radio/check boxes with a tag,
+  # defaulting to :span.
+  # config.item_wrapper_tag = :span
+
+  # You can define a class to use in all item wrappers. Defaulting to none.
+  # config.item_wrapper_class = nil
+
+  # How the label text should be generated altogether with the required text.
+  config.label_text = ->(label, required, _) { "#{label} #{required}" }
+
+  # You can define the class to use on all labels. Default is nil.
+  # config.label_class = nil
+
+  # You can define the default class to be used on forms. Can be overriden
+  # with `html: { :class }`. Defaulting to none.
+  # config.default_form_class = nil
+
+  # You can define which elements should obtain additional classes
+  # config.generate_additional_classes_for = [:wrapper, :label, :input]
+
+  # Whether attributes are required by default (or not). Default is true.
+  # config.required_by_default = true
+
+  # Tell browsers whether to use the native HTML5 validations (novalidate form option).
+  # These validations are enabled in SimpleForm's internal config but disabled by default
+  # in this configuration, which is recommended due to some quirks from different browsers.
+  # To stop SimpleForm from generating the novalidate option, enabling the HTML5 validations,
+  # change this configuration to true.
+  config.browser_validations = true
+
+  # Collection of methods to detect if a file type was given.
+  # config.file_methods = [ :mounted_as, :file?, :public_filename ]
+
+  # Custom mappings for input types. This should be a hash containing a regexp
+  # to match as key, and the input type that will be used when the field name
+  # matches the regexp as value.
+  # config.input_mappings = { /count/ => :integer }
+
+  # Custom wrappers for input types. This should be a hash containing an input
+  # type as key and the wrapper that will be used for all inputs with specified type.
+  # config.wrapper_mappings = { string: :prepend }
+
+  # Namespaces where SimpleForm should look for custom input classes that
+  # override default inputs.
+  # config.custom_inputs_namespaces << "CustomInputs"
+
+  # Default priority for time_zone inputs.
+  # config.time_zone_priority = nil
+
+  # Default priority for country inputs.
+  # config.country_priority = nil
+
+  # When false, do not use translations for labels.
+  # config.translate_labels = true
+
+  # Automatically discover new inputs in Rails' autoload path.
+  # config.inputs_discovery = true
+
+  # Cache SimpleForm inputs discovery
+  # config.cache_discovery = !Rails.env.development?
+
+  # Default class for inputs
+  # config.input_class = nil
+
+  # Define the default class of the input wrapper of the boolean input.
+  config.boolean_label_class = 'checkbox'
+
+  # Defines if the default input wrapper class should be included in radio
+  # collection wrappers.
+  # config.include_default_input_wrapper_class = true
+
+  # Defines which i18n scope will be used in Simple Form.
+  # config.i18n_scope = 'simple_form'
+end
diff --git a/hyrax/config/initializers/simple_form_bootstrap.rb b/hyrax/config/initializers/simple_form_bootstrap.rb
new file mode 100644
index 00000000..094cb3bc
--- /dev/null
+++ b/hyrax/config/initializers/simple_form_bootstrap.rb
@@ -0,0 +1,151 @@
+# frozen_string_literal: true
+# NOTE: This is a modified version of simple_form's default config file.
+#       The only changes were to move the inputs to after the hints and errors.
+
+# Use this setup block to configure all options available in SimpleForm.
+
+SimpleForm.setup do |config|
+  config.error_notification_class = 'alert alert-danger'
+  config.button_class = 'btn btn-default'
+  config.boolean_label_class = nil
+
+  config.wrappers :vertical_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.use :placeholder
+    b.optional :maxlength
+    b.optional :pattern
+    b.optional :min_max
+    b.optional :readonly
+    b.use :label, class: 'control-label'
+    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+    b.use :input, class: 'form-control'
+  end
+
+  config.wrappers :vertical_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.use :placeholder
+    b.optional :maxlength
+    b.optional :readonly
+    b.use :label, class: 'control-label'
+    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+    b.use :input
+  end
+
+  config.wrappers :vertical_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.optional :readonly
+
+    b.wrapper tag: 'div', class: 'checkbox' do |ba|
+      ba.use :label_input
+    end
+
+    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+  end
+
+  config.wrappers :vertical_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.optional :readonly
+    b.use :label, class: 'control-label'
+    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+    b.use :input
+  end
+
+  config.wrappers :horizontal_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.use :placeholder
+    b.optional :maxlength
+    b.optional :pattern
+    b.optional :min_max
+    b.optional :readonly
+    b.use :label, class: 'col-sm-3 control-label'
+
+    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
+      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+      ba.use :input, class: 'form-control'
+    end
+  end
+
+  config.wrappers :horizontal_file_input, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.use :placeholder
+    b.optional :maxlength
+    b.optional :readonly
+    b.use :label, class: 'col-sm-3 control-label'
+
+    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
+      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+      ba.use :input
+    end
+  end
+
+  config.wrappers :horizontal_boolean, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.optional :readonly
+
+    b.wrapper tag: 'div', class: 'col-sm-offset-3 col-sm-9' do |wr|
+      wr.wrapper tag: 'div', class: 'checkbox' do |ba|
+        ba.use :label_input
+      end
+
+      wr.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+      wr.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+    end
+  end
+
+  config.wrappers :horizontal_radio_and_checkboxes, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.optional :readonly
+
+    b.use :label, class: 'col-sm-3 control-label'
+
+    b.wrapper tag: 'div', class: 'col-sm-9' do |ba|
+      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+      ba.use :input
+    end
+  end
+
+  config.wrappers :inline_form, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.use :placeholder
+    b.optional :maxlength
+    b.optional :pattern
+    b.optional :min_max
+    b.optional :readonly
+    b.use :label, class: 'sr-only'
+    b.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+    b.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+    b.use :input, class: 'form-control'
+  end
+
+  config.wrappers :multi_select, tag: 'div', class: 'form-group', error_class: 'has-error' do |b|
+    b.use :html5
+    b.optional :readonly
+    b.use :label, class: 'control-label'
+    b.wrapper tag: 'div', class: 'form-inline' do |ba|
+      ba.use :error, wrap_with: { tag: 'span', class: 'help-block' }
+      ba.use :hint,  wrap_with: { tag: 'p', class: 'help-block' }
+      ba.use :input, class: 'form-control'
+    end
+  end
+  # Wrappers for forms and inputs using the Bootstrap toolkit.
+  # Check the Bootstrap docs (http://getbootstrap.com)
+  # to learn about the different styles for forms and inputs,
+  # buttons and other elements.
+  config.default_wrapper = :vertical_form
+  config.wrapper_mappings = {
+    check_boxes: :vertical_radio_and_checkboxes,
+    radio_buttons: :vertical_radio_and_checkboxes,
+    file: :vertical_file_input,
+    boolean: :vertical_boolean,
+    datetime: :multi_select,
+    date: :multi_select,
+    time: :multi_select
+  }
+end
diff --git a/hyrax/config/initializers/wrap_parameters.rb b/hyrax/config/initializers/wrap_parameters.rb
new file mode 100644
index 00000000..bbfc3961
--- /dev/null
+++ b/hyrax/config/initializers/wrap_parameters.rb
@@ -0,0 +1,14 @@
+# Be sure to restart your server when you modify this file.
+
+# This file contains settings for ActionController::ParamsWrapper which
+# is enabled by default.
+
+# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
+ActiveSupport.on_load(:action_controller) do
+  wrap_parameters format: [:json]
+end
+
+# To enable root element in JSON for ActiveRecord objects.
+# ActiveSupport.on_load(:active_record) do
+#   self.include_root_in_json = true
+# end
diff --git a/hyrax/config/locales/blacklight.en.yml b/hyrax/config/locales/blacklight.en.yml
new file mode 100644
index 00000000..ff834b2f
--- /dev/null
+++ b/hyrax/config/locales/blacklight.en.yml
@@ -0,0 +1,3 @@
+en:
+  blacklight:
+    application_name: 'Blacklight'
\ No newline at end of file
diff --git a/hyrax/config/locales/dataset.de.yml b/hyrax/config/locales/dataset.de.yml
new file mode 100644
index 00000000..c133f7be
--- /dev/null
+++ b/hyrax/config/locales/dataset.de.yml
@@ -0,0 +1,8 @@
+de:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        description:        "Dataset Werke"
+        name:               "Dataset"
diff --git a/hyrax/config/locales/dataset.en.yml b/hyrax/config/locales/dataset.en.yml
new file mode 100644
index 00000000..dc79608c
--- /dev/null
+++ b/hyrax/config/locales/dataset.en.yml
@@ -0,0 +1,8 @@
+en:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        description:        "Dataset works"
+        name:               "Dataset"
diff --git a/hyrax/config/locales/dataset.es.yml b/hyrax/config/locales/dataset.es.yml
new file mode 100644
index 00000000..cd4e7fbd
--- /dev/null
+++ b/hyrax/config/locales/dataset.es.yml
@@ -0,0 +1,10 @@
+es:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        # TODO: translate `human_name` into Spanish
+        description:        "Dataset trabajos"
+        name:               "Dataset"
+        # TODO: translate `human_name` into Spanish
diff --git a/hyrax/config/locales/dataset.fr.yml b/hyrax/config/locales/dataset.fr.yml
new file mode 100644
index 00000000..f59979a3
--- /dev/null
+++ b/hyrax/config/locales/dataset.fr.yml
@@ -0,0 +1,8 @@
+fr:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        description:        "Dataset Å“uvres"
+        name:               "Dataset"
diff --git a/hyrax/config/locales/dataset.it.yml b/hyrax/config/locales/dataset.it.yml
new file mode 100644
index 00000000..bd37f833
--- /dev/null
+++ b/hyrax/config/locales/dataset.it.yml
@@ -0,0 +1,8 @@
+it:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        description:        "Dataset opere"
+        name:               "Dataset"
diff --git a/hyrax/config/locales/dataset.pt-BR.yml b/hyrax/config/locales/dataset.pt-BR.yml
new file mode 100644
index 00000000..8b3652d4
--- /dev/null
+++ b/hyrax/config/locales/dataset.pt-BR.yml
@@ -0,0 +1,8 @@
+pt-BR:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        description:        "Dataset obras"
+        name:               "Dataset"
diff --git a/hyrax/config/locales/dataset.zh.yml b/hyrax/config/locales/dataset.zh.yml
new file mode 100644
index 00000000..f9d1a533
--- /dev/null
+++ b/hyrax/config/locales/dataset.zh.yml
@@ -0,0 +1,10 @@
+zh:
+  hyrax:
+    icons:
+      dataset:     'fa fa-file-text-o'
+    select_type:
+      dataset:
+        # TODO: translate `human_name` into Chinese
+        description:        "Dataset 作品"
+        name:               "Dataset"
+        # TODO: translate `human_name` into Chinese
diff --git a/hyrax/config/locales/devise.en.yml b/hyrax/config/locales/devise.en.yml
new file mode 100644
index 00000000..260e1c4b
--- /dev/null
+++ b/hyrax/config/locales/devise.en.yml
@@ -0,0 +1,65 @@
+# Additional translations at https://github.com/heartcombo/devise/wiki/I18n
+
+en:
+  devise:
+    confirmations:
+      confirmed: "Your email address has been successfully confirmed."
+      send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes."
+      send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes."
+    failure:
+      already_authenticated: "You are already signed in."
+      inactive: "Your account is not activated yet."
+      invalid: "Invalid %{authentication_keys} or password."
+      locked: "Your account is locked."
+      last_attempt: "You have one more attempt before your account is locked."
+      not_found_in_database: "Invalid %{authentication_keys} or password."
+      timeout: "Your session expired. Please sign in again to continue."
+      unauthenticated: "You need to sign in or sign up before continuing."
+      unconfirmed: "You have to confirm your email address before continuing."
+    mailer:
+      confirmation_instructions:
+        subject: "Confirmation instructions"
+      reset_password_instructions:
+        subject: "Reset password instructions"
+      unlock_instructions:
+        subject: "Unlock instructions"
+      email_changed:
+        subject: "Email Changed"
+      password_change:
+        subject: "Password Changed"
+    omniauth_callbacks:
+      failure: "Could not authenticate you from %{kind} because \"%{reason}\"."
+      success: "Successfully authenticated from %{kind} account."
+    passwords:
+      no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided."
+      send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes."
+      send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
+      updated: "Your password has been changed successfully. You are now signed in."
+      updated_not_active: "Your password has been changed successfully."
+    registrations:
+      destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon."
+      signed_up: "Welcome! You have signed up successfully."
+      signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated."
+      signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked."
+      signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account."
+      update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirmation link to confirm your new email address."
+      updated: "Your account has been updated successfully."
+      updated_but_not_signed_in: "Your account has been updated successfully, but since your password was changed, you need to sign in again."
+    sessions:
+      signed_in: "Signed in successfully."
+      signed_out: "Signed out successfully."
+      already_signed_out: "Signed out successfully."
+    unlocks:
+      send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes."
+      send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes."
+      unlocked: "Your account has been unlocked successfully. Please sign in to continue."
+  errors:
+    messages:
+      already_confirmed: "was already confirmed, please try signing in"
+      confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one"
+      expired: "has expired, please request a new one"
+      not_found: "not found"
+      not_locked: "was not locked"
+      not_saved:
+        one: "1 error prohibited this %{resource} from being saved:"
+        other: "%{count} errors prohibited this %{resource} from being saved:"
diff --git a/hyrax/config/locales/en.yml b/hyrax/config/locales/en.yml
new file mode 100644
index 00000000..decc5a85
--- /dev/null
+++ b/hyrax/config/locales/en.yml
@@ -0,0 +1,33 @@
+# Files in the config/locales directory are used for internationalization
+# and are automatically loaded by Rails. If you want to use locales other
+# than English, add the necessary files in this directory.
+#
+# To use the locales, use `I18n.t`:
+#
+#     I18n.t 'hello'
+#
+# In views, this is aliased to just `t`:
+#
+#     <%= t('hello') %>
+#
+# To use a different locale, set it with `I18n.locale`:
+#
+#     I18n.locale = :es
+#
+# This would use the information in config/locales/es.yml.
+#
+# The following keys must be escaped otherwise they will not be retrieved by
+# the default I18n backend:
+#
+# true, false, on, off, yes, no
+#
+# Instead, surround them with single quotes.
+#
+# en:
+#   'true': 'foo'
+#
+# To learn more, please read the Rails Internationalization guide
+# available at http://guides.rubyonrails.org/i18n.html.
+
+en:
+  hello: "Hello world"
diff --git a/hyrax/config/locales/hyrax.de.yml b/hyrax/config/locales/hyrax.de.yml
new file mode 100644
index 00000000..e5be9af8
--- /dev/null
+++ b/hyrax/config/locales/hyrax.de.yml
@@ -0,0 +1,58 @@
+---
+de:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: Ort
+          creator_sim: Schöpfer
+          file_format_sim: Format
+          generic_type_sim: Art
+          keyword_sim: Stichwort
+          language_sim: Sprache
+          publisher_sim: Herausgeber
+          subject_sim: Fach
+        index:
+          based_near_tesim: Ort
+          contributor_tesim: Mitwirkender
+          creator_tesim: Schöpfer
+          date_created_tesim: Datum erstellt
+          date_modified_dtsi: Datum geändert
+          date_uploaded_dtsi: Datum hochgeladen
+          description_tesim: Beschreibung
+          file_format_tesim: Datei Format
+          identifier_tesim: Identifikator
+          keyword_tesim: Stichwort
+          language_tesim: Sprache
+          license_tesim: Lizenz
+          publisher_tesim: Herausgeber
+          rights_statement_tesim: Rechte
+          subject_tesim: Fach
+        show:
+          based_near_tesim: Ort
+          contributor_tesim: Mitwirkender
+          creator_tesim: Schöpfer
+          date_created_tesim: Datum erstellt
+          date_modified_dtsi: Datum geändert
+          date_uploaded_dtsi: Datum hochgeladen
+          description_tesim: Beschreibung
+          file_format_tesim: Datei Format
+          identifier_tesim: Identifikator
+          keyword_tesim: Stichwort
+          language_tesim: Sprache
+          license_tesim: Lizenz
+          publisher_tesim: Herausgeber
+          rights_statement_tesim: Rechte
+          subject_tesim: Fach
+          title_tesim: Titel
+  hyrax:
+    account_name: Meine Institution Konto-ID
+    directory:
+      suffix: "@ Example.org"
+    footer:
+      copyright_html: "<strong>Copyright © 2018 Samvera lizenziert</strong> unter der Apache Lizenz, Version 2.0"
+      service_html: Ein Dienst von <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> .
+    institution_name: Institution
+    institution_name_full: Name des Instituts
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.en.yml b/hyrax/config/locales/hyrax.en.yml
new file mode 100644
index 00000000..15fc22f4
--- /dev/null
+++ b/hyrax/config/locales/hyrax.en.yml
@@ -0,0 +1,58 @@
+---
+en:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: Location
+          creator_sim: Creator
+          file_format_sim: Format
+          generic_type_sim: Type
+          keyword_sim: Keyword
+          language_sim: Language
+          publisher_sim: Publisher
+          subject_sim: Subject
+        index:
+          based_near_tesim: Location
+          contributor_tesim: Contributor
+          creator_tesim: Creator
+          date_created_tesim: Date Created
+          date_modified_dtsi: Date Modified
+          date_uploaded_dtsi: Date Uploaded
+          description_tesim: Description
+          file_format_tesim: File Format
+          identifier_tesim: Identifier
+          keyword_tesim: Keyword
+          language_tesim: Language
+          license_tesim: License
+          publisher_tesim: Publisher
+          rights_statement_tesim: Rights Statement
+          subject_tesim: Subject
+        show:
+          based_near_tesim: Location
+          contributor_tesim: Contributor
+          creator_tesim: Creator
+          date_created_tesim: Date Created
+          date_modified_dtsi: Date Modified
+          date_uploaded_dtsi: Date Uploaded
+          description_tesim: Description
+          file_format_tesim: File Format
+          identifier_tesim: Identifier
+          keyword_tesim: Keyword
+          language_tesim: Language
+          license_tesim: License
+          publisher_tesim: Publisher
+          rights_statement_tesim: Rights Statement
+          subject_tesim: Subject
+          title_tesim: Title
+  hyrax:
+    account_name: My Institution Account Id
+    directory:
+      suffix: "@example.org"
+    footer:
+      copyright_html: "<strong>Copyright &copy; 2018 Samvera</strong> Licensed under the Apache License, Version 2.0"
+      service_html: A service of <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>.
+    institution_name: Institution
+    institution_name_full: The Institution Name
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.es.yml b/hyrax/config/locales/hyrax.es.yml
new file mode 100644
index 00000000..4f8f61fd
--- /dev/null
+++ b/hyrax/config/locales/hyrax.es.yml
@@ -0,0 +1,58 @@
+---
+es:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: Ubicación
+          creator_sim: Creador
+          file_format_sim: Formato
+          generic_type_sim: Tipo
+          keyword_sim: Palabra clave
+          language_sim: Idioma
+          publisher_sim: Editor
+          subject_sim: Tema
+        index:
+          based_near_tesim: Ubicación
+          contributor_tesim: Contribuidor
+          creator_tesim: Creador
+          date_created_tesim: Fecha de Creacion
+          date_modified_dtsi: Fecha Modificada
+          date_uploaded_dtsi: Fecha de Subida
+          description_tesim: Descripción
+          file_format_tesim: Formato de Archivo
+          identifier_tesim: Identificador
+          keyword_tesim: Palabra clave
+          language_tesim: Idioma
+          license_tesim: Licencia
+          publisher_tesim: Editor
+          rights_statement_tesim: Derechos
+          subject_tesim: Tema
+        show:
+          based_near_tesim: Ubicación
+          contributor_tesim: Contribuidor
+          creator_tesim: Creador
+          date_created_tesim: Fecha de Creacion
+          date_modified_dtsi: Fecha Modificada
+          date_uploaded_dtsi: Fecha de Subida
+          description_tesim: Descripción
+          file_format_tesim: Formato de Archivo
+          identifier_tesim: Identificador
+          keyword_tesim: Palabra clave
+          language_tesim: Idioma
+          license_tesim: Licencia
+          publisher_tesim: Editor
+          rights_statement_tesim: Derechos
+          subject_tesim: Tema
+          title_tesim: Título
+  hyrax:
+    account_name: Mi identificador de cuenta institucional
+    directory:
+      suffix: "@example.org"
+    footer:
+      copyright_html: "<strong>Copyright &copy; 2018 Samvera</strong> bajo licencia de Apache, Version 2.0"
+      service_html: Un servicio de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>.
+    institution_name: institución
+    institution_name_full: El nombre de la institución
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.fr.yml b/hyrax/config/locales/hyrax.fr.yml
new file mode 100644
index 00000000..ee080b73
--- /dev/null
+++ b/hyrax/config/locales/hyrax.fr.yml
@@ -0,0 +1,58 @@
+---
+fr:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: Emplacement
+          creator_sim: Créateur
+          file_format_sim: Format
+          generic_type_sim: Type
+          keyword_sim: Mot-clé
+          language_sim: La langue
+          publisher_sim: Éditeur
+          subject_sim: Assujettir
+        index:
+          based_near_tesim: Emplacement
+          contributor_tesim: Donateur
+          creator_tesim: Créateur
+          date_created_tesim: date créée
+          date_modified_dtsi: Date modifiée
+          date_uploaded_dtsi: Date de téléchargement
+          description_tesim: La description
+          file_format_tesim: Format de fichier
+          identifier_tesim: Identificateur
+          keyword_tesim: Mot-clé
+          language_tesim: La langue
+          license_tesim: Licence
+          publisher_tesim: Éditeur
+          rights_statement_tesim: Déclaration des droits
+          subject_tesim: Assujettir
+        show:
+          based_near_tesim: Emplacement
+          contributor_tesim: Donateur
+          creator_tesim: Créateur
+          date_created_tesim: date créée
+          date_modified_dtsi: Date modifiée
+          date_uploaded_dtsi: Date de téléchargement
+          description_tesim: La description
+          file_format_tesim: Format de fichier
+          identifier_tesim: Identificateur
+          keyword_tesim: Mot-clé
+          language_tesim: La langue
+          license_tesim: Licence
+          publisher_tesim: Éditeur
+          rights_statement_tesim: Déclaration des droits
+          subject_tesim: Assujettir
+          title_tesim: Titre
+  hyrax:
+    account_name: L'ID de compte de mon établissement
+    directory:
+      suffix: "@ Example.org"
+    footer:
+      copyright_html: "<strong>Copyright © 2018 Samvera</strong> Licence sous Licence Apache, Version 2.0"
+      service_html: Un service de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> .
+    institution_name: Institution
+    institution_name_full: Nom de l'établissement
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.it.yml b/hyrax/config/locales/hyrax.it.yml
new file mode 100644
index 00000000..6735be8c
--- /dev/null
+++ b/hyrax/config/locales/hyrax.it.yml
@@ -0,0 +1,58 @@
+---
+it:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: luogo
+          creator_sim: Creatore
+          file_format_sim: Formato
+          generic_type_sim: Tipo
+          keyword_sim: Parola chiave
+          language_sim: Lingua
+          publisher_sim: Editore
+          subject_sim: Soggetto
+        index:
+          based_near_tesim: luogo
+          contributor_tesim: Collaboratore
+          creator_tesim: Creatore
+          date_created_tesim: data di creazione
+          date_modified_dtsi: Data modificata
+          date_uploaded_dtsi: Data caricata
+          description_tesim: Descrizione
+          file_format_tesim: Formato del file
+          identifier_tesim: Identifier
+          keyword_tesim: Parola chiave
+          language_tesim: Lingua
+          license_tesim: Licenza
+          publisher_tesim: Editore
+          rights_statement_tesim: Diritti
+          subject_tesim: Soggetto
+        show:
+          based_near_tesim: luogo
+          contributor_tesim: Collaboratore
+          creator_tesim: Creatore
+          date_created_tesim: data di creazione
+          date_modified_dtsi: Data modificata
+          date_uploaded_dtsi: Data caricata
+          description_tesim: Descrizione
+          file_format_tesim: Formato del file
+          identifier_tesim: Identifier
+          keyword_tesim: Parola chiave
+          language_tesim: Lingua
+          license_tesim: Licenza
+          publisher_tesim: Editore
+          rights_statement_tesim: Diritti
+          subject_tesim: Soggetto
+          title_tesim: Titolo
+  hyrax:
+    account_name: ID del mio istituto dell'istituto
+    directory:
+      suffix: "@ example.org"
+    footer:
+      copyright_html: "<strong>Copyright © 2018 Samvera</strong> Licenza sotto la licenza Apache, versione 2.0"
+      service_html: Un servizio di <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> .
+    institution_name: Istituzione
+    institution_name_full: Nome dell'Istituzione
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.pt-BR.yml b/hyrax/config/locales/hyrax.pt-BR.yml
new file mode 100644
index 00000000..3c55d9df
--- /dev/null
+++ b/hyrax/config/locales/hyrax.pt-BR.yml
@@ -0,0 +1,58 @@
+---
+pt-BR:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: Localização
+          creator_sim: Criador
+          file_format_sim: Formato
+          generic_type_sim: Tipo
+          keyword_sim: Palavra-chave
+          language_sim: Língua
+          publisher_sim: Editor
+          subject_sim: Sujeito
+        index:
+          based_near_tesim: Localização
+          contributor_tesim: Contribuinte
+          creator_tesim: O Criador
+          date_created_tesim: Data de Criação
+          date_modified_dtsi: Data de Modificação
+          date_uploaded_dtsi: Data de Carga
+          description_tesim: Descrição
+          file_format_tesim: Formato de arquivo
+          identifier_tesim: Identificador
+          keyword_tesim: Palavra-chave
+          language_tesim: Língua
+          license_tesim: Licença
+          publisher_tesim: Editor
+          rights_statement_tesim: Direitos
+          subject_tesim: Sujeito
+        show:
+          based_near_tesim: Localização
+          contributor_tesim: Colaborador
+          creator_tesim: Criador
+          date_created_tesim: Data de Criação
+          date_modified_dtsi: Data de Modificação
+          date_uploaded_dtsi: Data de Carga
+          description_tesim: Descrição
+          file_format_tesim: Formato de arquivo
+          identifier_tesim: Identificador
+          keyword_tesim: Palavra-chave
+          language_tesim: Língua
+          license_tesim: Licença
+          publisher_tesim: Editor
+          rights_statement_tesim: Direitos
+          subject_tesim: Sujeito
+          title_tesim: Título
+  hyrax:
+    account_name: ID da conta da minha instituição
+    directory:
+      suffix: "@ Example.org"
+    footer:
+      copyright_html: "<strong>Copyright © 2018 Samvera </strong> Licenciado sob a Licença Apache, Versão 2.0"
+      service_html: Um serviço de <a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a> .
+    institution_name: Instituição
+    institution_name_full: O Nome da Instituição
+    product_name: Hyrax
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/locales/hyrax.zh.yml b/hyrax/config/locales/hyrax.zh.yml
new file mode 100644
index 00000000..a6973345
--- /dev/null
+++ b/hyrax/config/locales/hyrax.zh.yml
@@ -0,0 +1,58 @@
+---
+zh:
+  blacklight:
+    search:
+      fields:
+        facet:
+          based_near_label_sim: 位置
+          creator_sim: 创造者
+          file_format_sim: 文件格式
+          generic_type_sim: 类型
+          keyword_sim: 关键词
+          language_sim: 语言
+          publisher_sim: 出版者
+          subject_sim: 学科
+        index:
+          based_near_tesim: 位置
+          contributor_tesim: 贡献者
+          creator_tesim: 创造者
+          date_created_tesim: 创建日期
+          date_modified_dtsi: 修改日期
+          date_uploaded_dtsi: 日期上传
+          description_tesim: 描述
+          file_format_tesim: 文件格式
+          identifier_tesim: 识别码
+          keyword_tesim: 关键词
+          language_tesim: 语言
+          license_tesim: 执照
+          publisher_tesim: 出版者
+          rights_statement_tesim: 权
+          subject_tesim: 学科
+        show:
+          based_near_tesim: 位置
+          contributor_tesim: 贡献者
+          creator_tesim: 创造者
+          date_created_tesim: 创建日期
+          date_modified_dtsi: 修改日期
+          date_uploaded_dtsi: 日期上传
+          description_tesim: 描述
+          file_format_tesim: 文件格式
+          identifier_tesim: 识别码
+          keyword_tesim: 关键词
+          language_tesim: 语言
+          license_tesim: 执照
+          publisher_tesim: 出版者
+          rights_statement_tesim: 权
+          subject_tesim: 学科
+          title_tesim: 标题
+  hyrax:
+    account_name: 我的机构帐户标识符
+    directory:
+      suffix: "@example.org"
+    footer:
+      copyright_html: "<strong>版权所有 &copy; 2018 Samvera</strong> 根据Apache许可证2.0版许可"
+      service_html: 的服务<a href="http://samvera.org/" class="navbar-link" target="_blank">Samvera</a>.
+    institution_name: 机构
+    institution_name_full: 机构名称
+    product_name: 蹄兔
+    product_twitter_handle: "@SamveraRepo"
diff --git a/hyrax/config/puma.rb b/hyrax/config/puma.rb
new file mode 100644
index 00000000..ed10558b
--- /dev/null
+++ b/hyrax/config/puma.rb
@@ -0,0 +1,37 @@
+# Puma can serve each request in a thread from an internal thread pool.
+# The `threads` method setting takes two numbers: a minimum and maximum.
+# Any libraries that use thread pools should be configured to match
+# the maximum value specified for Puma. Default is set to 5 threads for minimum
+# and maximum; this matches the default thread size of Active Record.
+#
+threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
+threads threads_count, threads_count
+
+# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+#
+port        ENV.fetch("PORT") { 3000 }
+
+# Specifies the `environment` that Puma will run in.
+#
+environment ENV.fetch("RAILS_ENV") { "development" }
+
+# Specifies the `pidfile` that Puma will use.
+pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
+
+# Specifies the number of `workers` to boot in clustered mode.
+# Workers are forked webserver processes. If using threads and workers together
+# the concurrency of the application would be max `threads` * `workers`.
+# Workers do not work on JRuby or Windows (both of which do not support
+# processes).
+#
+# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
+
+# Use the `preload_app!` method when specifying a `workers` number.
+# This directive tells Puma to first boot the application and load code
+# before forking the application. This takes advantage of Copy On Write
+# process behavior so workers use less memory.
+#
+# preload_app!
+
+# Allow puma to be restarted by `rails restart` command.
+plugin :tmp_restart
diff --git a/hyrax/config/redis.yml b/hyrax/config/redis.yml
new file mode 100644
index 00000000..181132ee
--- /dev/null
+++ b/hyrax/config/redis.yml
@@ -0,0 +1,9 @@
+development:
+  host: <%= ENV.fetch('REDIS_HOST', 'localhost') %>
+  port: <%= ENV.fetch('REDIS_PORT', '6379') %>
+test:
+  host: <%= ENV.fetch('REDIS_HOST', 'localhost') %>
+  port: <%= ENV.fetch('REDIS_PORT', '6379') %>
+production:
+  host: <%= ENV.fetch('REDIS_HOST', 'redis') %>
+  port: <%= ENV.fetch('REDIS_PORT', '6379') %>
\ No newline at end of file
diff --git a/hyrax/config/role_map.yml b/hyrax/config/role_map.yml
new file mode 100644
index 00000000..a13f3e36
--- /dev/null
+++ b/hyrax/config/role_map.yml
@@ -0,0 +1,23 @@
+development:
+  archivist:
+    - archivist1@example.com
+
+test:
+  archivist:
+    - archivist1@example.com
+    - archivist2@example.com
+    - leland_himself@example.com
+  admin_policy_object_editor:
+    - archivist1@example.com
+  donor:
+    - donor1@example.com
+    - leland_himself@example.com
+  researcher:
+    - archivist1@example.com
+    - researcher1@example.com
+  patron:
+    - patron1@example.com
+    - leland_himself@example.com
+
+production:
+  # Add roles for users here.
diff --git a/hyrax/config/routes.rb b/hyrax/config/routes.rb
new file mode 100644
index 00000000..8b03d547
--- /dev/null
+++ b/hyrax/config/routes.rb
@@ -0,0 +1,34 @@
+Rails.application.routes.draw do
+  mount Riiif::Engine => 'images', as: :riiif if Hyrax.config.iiif_image_server?
+        mount BrowseEverything::Engine => '/browse'
+
+  mount Blacklight::Engine => '/'
+  
+  concern :searchable, Blacklight::Routes::Searchable.new
+
+  resource :catalog, only: [:index], as: 'catalog', path: '/catalog', controller: 'catalog' do
+    concerns :searchable
+  end
+  devise_for :users
+  mount Hydra::RoleManagement::Engine => '/'
+
+  mount Qa::Engine => '/authorities'
+  mount Hyrax::Engine, at: '/'
+  resources :welcome, only: 'index'
+  root 'hyrax/homepage#index'
+  curation_concerns_basic_routes
+  concern :exportable, Blacklight::Routes::Exportable.new
+
+  resources :solr_documents, only: [:show], path: '/catalog', controller: 'catalog' do
+    concerns :exportable
+  end
+
+  resources :bookmarks do
+    concerns :exportable
+
+    collection do
+      delete 'clear'
+    end
+  end
+  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
+end
diff --git a/hyrax/config/solr.yml b/hyrax/config/solr.yml
new file mode 100644
index 00000000..baed60a9
--- /dev/null
+++ b/hyrax/config/solr.yml
@@ -0,0 +1,7 @@
+# NB: the URLs in this file should match those in blacklight.yml
+development:
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production
+test:
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || '127.0.0.1' %>:<%= ENV['SOLR_TEST_PORT'] || '8985' %>/solr/hydra-test
+production:
+  url: <%= ENV['SOLR_URL_SCHEME'] || 'http' %>://<%= ENV['SOLR_HOST'] || 'solr' %>:<%= ENV['SOLR_PORT'] || '8983' %>/solr/hyrax_production
diff --git a/hyrax/config/solr_wrapper_test.yml b/hyrax/config/solr_wrapper_test.yml
new file mode 100644
index 00000000..46571e69
--- /dev/null
+++ b/hyrax/config/solr_wrapper_test.yml
@@ -0,0 +1,8 @@
+#config/solr_wrapper_test.yml
+# version: 6.1.0
+port: 8985
+instance_dir: tmp/solr-test
+collection:
+    persist: false
+    dir: solr/conf
+    name: hydra-test
diff --git a/hyrax/config/solr_wrapper_valkyrie_test.yml b/hyrax/config/solr_wrapper_valkyrie_test.yml
new file mode 100644
index 00000000..226a6748
--- /dev/null
+++ b/hyrax/config/solr_wrapper_valkyrie_test.yml
@@ -0,0 +1,7 @@
+# config/solr_wrapper_valkyrie_test.yml
+port: 8987
+instance_dir: tmp/solr-valkyrie-test
+collection:
+    persist: false
+    dir: solr/conf
+    name: hyrax-valkyrie-test
diff --git a/hyrax/config/spring.rb b/hyrax/config/spring.rb
new file mode 100644
index 00000000..9fa7863f
--- /dev/null
+++ b/hyrax/config/spring.rb
@@ -0,0 +1,6 @@
+%w[
+  .ruby-version
+  .rbenv-vars
+  tmp/restart.txt
+  tmp/caching-dev.txt
+].each { |path| Spring.watch(path) }
diff --git a/hyrax/config/storage.yml b/hyrax/config/storage.yml
new file mode 100644
index 00000000..d32f76e8
--- /dev/null
+++ b/hyrax/config/storage.yml
@@ -0,0 +1,34 @@
+test:
+  service: Disk
+  root: <%= Rails.root.join("tmp/storage") %>
+
+local:
+  service: Disk
+  root: <%= Rails.root.join("storage") %>
+
+# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
+# amazon:
+#   service: S3
+#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
+#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
+#   region: us-east-1
+#   bucket: your_own_bucket
+
+# Remember not to checkin your GCS keyfile to a repository
+# google:
+#   service: GCS
+#   project: your_project
+#   credentials: <%= Rails.root.join("path/to/gcs.keyfile") %>
+#   bucket: your_own_bucket
+
+# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
+# microsoft:
+#   service: AzureStorage
+#   storage_account_name: your_account_name
+#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
+#   container: your_container_name
+
+# mirror:
+#   service: Mirror
+#   primary: local
+#   mirrors: [ amazon, google, microsoft ]
diff --git a/hyrax/config/tinymce.yml b/hyrax/config/tinymce.yml
new file mode 100644
index 00000000..ed2b4c00
--- /dev/null
+++ b/hyrax/config/tinymce.yml
@@ -0,0 +1,13 @@
+default: &default
+  setup: tinymce_nav_safety # onChange event init
+content_block:
+  <<: *default
+  menubar: false
+  toolbar1: styleselect | bold italic | undo redo
+  toolbar2: table | fullscreen | image
+  plugins:
+    - table
+    - fullscreen
+    - image
+custom:
+  <<: *default
diff --git a/hyrax/config/uv/uv-config.json b/hyrax/config/uv/uv-config.json
new file mode 100644
index 00000000..077404aa
--- /dev/null
+++ b/hyrax/config/uv/uv-config.json
@@ -0,0 +1,3 @@
+{
+  
+}
\ No newline at end of file
diff --git a/hyrax/config/uv/uv.html b/hyrax/config/uv/uv.html
new file mode 100644
index 00000000..c8e8eced
--- /dev/null
+++ b/hyrax/config/uv/uv.html
@@ -0,0 +1,87 @@
+
+<!--
+    This is what the embed iframe src links to. It doesn't need to communicate with the parent page, only fill the available space and look for #? parameters
+-->
+
+<html>
+    <head>
+        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
+        <link rel="icon" href="favicon.ico">
+        <link rel="stylesheet" type="text/css" href="uv.css">
+        <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
+        <script type="text/javascript" src="lib/offline.js"></script>
+        <script type="text/javascript" src="helpers.js"></script>
+        <style>
+            body {
+                margin: 0;
+                padding: 0;
+                overflow: hidden;
+            }
+        </style>
+        <script type="text/javascript">
+        window.addEventListener('uvLoaded', function(e) { 
+                urlDataProvider = new UV.URLDataProvider(true);
+                var formattedLocales;
+                var locales = urlDataProvider.get('locales', '');
+    
+                if (locales) {
+                    var names = locales.split(',');
+                    formattedLocales = [];
+    
+                    for (var i in names) {
+                        var nameparts = String(names[i]).split(':');
+                        formattedLocales[i] = {name: nameparts[0], label: nameparts[1]};
+                    }
+                    
+                } else {
+                    formattedLocales = [
+                        {
+                            name: 'en-GB'
+                        }
+                    ]
+                }
+    
+                uv = createUV('#uv', {
+                    root: '.',
+                    iiifResourceUri: urlDataProvider.get('manifest'),
+                    configUri: urlDataProvider.get('config'),
+                    collectionIndex: Number(urlDataProvider.get('c', 0)),
+                    manifestIndex: Number(urlDataProvider.get('m', 0)),
+                    sequenceIndex: Number(urlDataProvider.get('s', 0)),
+                    canvasIndex: Number(urlDataProvider.get('cv', 0)),
+                    rangeId: urlDataProvider.get('rid', 0),
+                    rotation: Number(urlDataProvider.get('r', 0)),
+                    xywh: urlDataProvider.get('xywh', ''),
+                    embedded: true,
+                    locales: formattedLocales
+                }, urlDataProvider);
+            }, false);
+        </script>
+    </head>    
+    <body>
+    
+        <div id="uv" class="uv"></div>
+    
+        <script>
+            $(function() {
+        
+                var $UV = $('#uv');
+        
+                function resize() {
+                    var windowWidth = window.innerWidth;
+                    var windowHeight = window.innerHeight;
+                    $UV.width(windowWidth);
+                    $UV.height(windowHeight);
+                }
+        
+                $(window).on('resize' ,function() {
+                    resize();
+                });
+                
+                resize();
+            });
+            
+        </script>
+        <script type="text/javascript" src="uv.js"></script>
+    </body>
+</html>
diff --git a/hyrax/config/valkyrie_index.yml b/hyrax/config/valkyrie_index.yml
new file mode 100644
index 00000000..239162f4
--- /dev/null
+++ b/hyrax/config/valkyrie_index.yml
@@ -0,0 +1,12 @@
+development:
+  host: <%= ENV['VALKYRIE_SOLR_HOST'] %>
+  port: <%= ENV['VALKYRIE_SOLR_PORT'] %>
+  core: <%= ENV['VALKYRIE_SOLR_CORE'] || 'hyrax-valkyrie-dev' %>
+test:
+  host: <%= ENV['VALKYRIE_SOLR_HOST'] %>
+  port: <%= ENV['VALKYRIE_SOLR_PORT'] || 8987 %>
+  core: <%= ENV['VALKYRIE_SOLR_CORE'] || 'hyrax-valkyrie-test' %>
+production:
+  host: <%= ENV['VALKYRIE_SOLR_HOST'] %>
+  port: <%= ENV['VALKYRIE_SOLR_PORT'] %>
+  core: <%= ENV['VALKYRIE_SOLR_CORE'] %>
diff --git a/hyrax/config/workflows/default_workflow.json b/hyrax/config/workflows/default_workflow.json
new file mode 100644
index 00000000..c0a8d0ea
--- /dev/null
+++ b/hyrax/config/workflows/default_workflow.json
@@ -0,0 +1,21 @@
+{
+    "workflows": [
+        {
+            "name": "default",
+            "label": "Default workflow",
+            "description": "A single submission step, default workflow",
+            "allows_access_grant": true,
+            "actions": [
+                {
+                    "name": "deposit",
+                    "from_states": [],
+                    "transition_to": "deposited",
+                    "methods": [
+                        "Hyrax::Workflow::GrantEditToDepositor",
+                        "Hyrax::Workflow::ActivateObject"
+                    ]
+                }
+            ]
+        }
+    ]
+}
diff --git a/hyrax/config/workflows/mediated_deposit_workflow.json b/hyrax/config/workflows/mediated_deposit_workflow.json
new file mode 100644
index 00000000..fd4fe40e
--- /dev/null
+++ b/hyrax/config/workflows/mediated_deposit_workflow.json
@@ -0,0 +1,76 @@
+{
+    "workflows": [
+        {
+            "name": "one_step_mediated_deposit",
+            "label": "One-step mediated deposit workflow",
+            "description": "A single-step workflow for mediated deposit in which all deposits must be approved by a reviewer. Reviewer may also send deposits back to the depositor.",
+            "allows_access_grant": false,
+            "actions": [
+                {
+                    "name": "deposit",
+                    "from_states": [],
+                    "transition_to": "pending_review",
+                    "notifications": [
+                        {
+                            "notification_type": "email",
+                            "name": "Hyrax::Workflow::PendingReviewNotification",
+                            "to": ["approving"]
+                        }
+                    ],
+                    "methods": [
+                        "Hyrax::Workflow::GrantReadToDepositor",
+                        "Hyrax::Workflow::DeactivateObject"
+                    ]
+                }, {
+                    "name": "request_changes",
+                    "from_states": [{"names": ["deposited", "pending_review"], "roles": ["approving"]}],
+                    "transition_to": "changes_required",
+                    "notifications": [
+                        {
+                            "notification_type": "email",
+                            "name": "Hyrax::Workflow::ChangesRequiredNotification",
+                            "to": ["approving"]
+                        }
+                    ],
+                    "methods": [
+                        "Hyrax::Workflow::DeactivateObject",
+                        "Hyrax::Workflow::GrantEditToDepositor"
+                    ]
+                }, {
+                    "name": "approve",
+                    "from_states": [{"names": ["pending_review"], "roles": ["approving"]}],
+                    "transition_to": "deposited",
+                    "notifications": [
+                        {
+                            "notification_type": "email",
+                            "name": "Hyrax::Workflow::DepositedNotification",
+                            "to": ["approving"]
+                        }
+                    ],
+                    "methods": [
+                        "Hyrax::Workflow::GrantReadToDepositor",
+                        "Hyrax::Workflow::RevokeEditFromDepositor",
+                        "Hyrax::Workflow::ActivateObject"
+                    ]
+                }, {
+                    "name": "request_review",
+                    "from_states": [{"names": ["changes_required"], "roles": ["depositing"]}],
+                    "transition_to": "pending_review",
+                    "notifications": [
+                        {
+                            "notification_type": "email",
+                            "name": "Hyrax::Workflow::PendingReviewNotification",
+                            "to": ["approving"]
+                        }
+                    ]
+                }, {
+                    "name": "comment_only",
+                    "from_states": [
+                        { "names": ["pending_review", "deposited"], "roles": ["approving"] },
+                        { "names": ["changes_required"], "roles": ["depositing"] }
+                    ]
+                }
+            ]
+        }
+    ]
+}
diff --git a/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb b/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb
new file mode 100644
index 00000000..71d74dde
--- /dev/null
+++ b/hyrax/db/migrate/20220217192729_create_searches.blacklight.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+# This migration comes from blacklight (originally 20140202020201)
+class CreateSearches < ActiveRecord::Migration[4.2]
+  def self.up
+    create_table :searches do |t|
+      t.binary  :query_params
+      t.integer :user_id, index: true
+      t.string :user_type
+
+      t.timestamps null: false
+    end
+  end
+
+  def self.down
+    drop_table :searches
+  end
+end
diff --git a/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb b/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb
new file mode 100644
index 00000000..06104a34
--- /dev/null
+++ b/hyrax/db/migrate/20220217192730_create_bookmarks.blacklight.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+# This migration comes from blacklight (originally 20140202020202)
+class CreateBookmarks < ActiveRecord::Migration[4.2]
+  def self.up
+    create_table :bookmarks do |t|
+      t.integer :user_id, index: true, null: false
+      t.string :user_type
+      t.string :document_id, index: true
+      t.string :document_type
+      t.binary :title
+      t.timestamps null: false
+    end
+  end
+
+  def self.down
+    drop_table :bookmarks
+  end
+  
+end
diff --git a/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb b/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb
new file mode 100644
index 00000000..cee3e2cb
--- /dev/null
+++ b/hyrax/db/migrate/20220217192731_add_polymorphic_type_to_bookmarks.blacklight.rb
@@ -0,0 +1,9 @@
+# frozen_string_literal: true
+# This migration comes from blacklight (originally 20140320000000)
+class AddPolymorphicTypeToBookmarks < ActiveRecord::Migration[4.2]
+  def change
+    add_column(:bookmarks, :document_type, :string) unless Bookmark.connection.column_exists? :bookmarks, :document_type
+    
+    add_index :bookmarks, :user_id unless Bookmark.connection.index_exists? :bookmarks, :user_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192748_devise_create_users.rb b/hyrax/db/migrate/20220217192748_devise_create_users.rb
new file mode 100644
index 00000000..f674a595
--- /dev/null
+++ b/hyrax/db/migrate/20220217192748_devise_create_users.rb
@@ -0,0 +1,44 @@
+# frozen_string_literal: true
+
+class DeviseCreateUsers < ActiveRecord::Migration[5.2]
+  def change
+    create_table :users do |t|
+      ## Database authenticatable
+      t.string :email,              null: false, default: ""
+      t.string :encrypted_password, null: false, default: ""
+
+      ## Recoverable
+      t.string   :reset_password_token
+      t.datetime :reset_password_sent_at
+
+      ## Rememberable
+      t.datetime :remember_created_at
+
+      ## Trackable
+      # t.integer  :sign_in_count, default: 0, null: false
+      # t.datetime :current_sign_in_at
+      # t.datetime :last_sign_in_at
+      # t.string   :current_sign_in_ip
+      # t.string   :last_sign_in_ip
+
+      ## Confirmable
+      # t.string   :confirmation_token
+      # t.datetime :confirmed_at
+      # t.datetime :confirmation_sent_at
+      # t.string   :unconfirmed_email # Only if using reconfirmable
+
+      ## Lockable
+      # t.integer  :failed_attempts, default: 0, null: false # Only if lock strategy is :failed_attempts
+      # t.string   :unlock_token # Only if unlock strategy is :email or :both
+      # t.datetime :locked_at
+
+
+      t.timestamps null: false
+    end
+
+    add_index :users, :email,                unique: true
+    add_index :users, :reset_password_token, unique: true
+    # add_index :users, :confirmation_token,   unique: true
+    # add_index :users, :unlock_token,         unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb b/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb
new file mode 100644
index 00000000..1adadb97
--- /dev/null
+++ b/hyrax/db/migrate/20220217192751_add_devise_guests_to_users.rb
@@ -0,0 +1,15 @@
+class AddDeviseGuestsToUsers < ActiveRecord::Migration[5.2]
+  def self.up
+    change_table(:users) do |t|
+      ## Database authenticatable
+      t.boolean :guest, :default => false
+    end
+
+  end
+
+  def self.down
+    # By default, we don't want to make any assumption about how to roll back a migration when your
+    # model already existed. Please edit below which fields you would like to remove in this migration.
+    raise ActiveRecord::IrreversibleMigration
+  end
+end
diff --git a/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb b/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb
new file mode 100644
index 00000000..66fac050
--- /dev/null
+++ b/hyrax/db/migrate/20220217192823_create_version_committers.hyrax.rb
@@ -0,0 +1,15 @@
+class CreateVersionCommitters < ActiveRecord::Migration[5.2]
+  def self.up
+    create_table :version_committers do |t|
+      t.string :obj_id
+      t.string :datastream_id
+      t.string :version_id
+      t.string :committer_login
+      t.timestamps null: false
+    end
+  end
+
+  def self.down
+    drop_table :version_committers
+  end
+end
diff --git a/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb b/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb
new file mode 100644
index 00000000..68fa1973
--- /dev/null
+++ b/hyrax/db/migrate/20220217192824_create_checksum_audit_logs.hyrax.rb
@@ -0,0 +1,19 @@
+class CreateChecksumAuditLogs < ActiveRecord::Migration[5.2]
+  def self.up
+    create_table :checksum_audit_logs do |t|
+      t.string :file_set_id
+      t.string :file_id
+      t.string :version
+      t.integer :pass
+      t.string :expected_result
+      t.string :actual_result
+      t.timestamps null: false
+    end
+    add_index :checksum_audit_logs, [:file_set_id, :file_id], name: 'by_file_set_id_and_file_id', order: { created_at: 'DESC' }
+  end
+
+  def self.down
+    remove_index(:checksum_audit_logs, name: 'by_file_set_id_and_file_id')
+    drop_table :checksum_audit_logs
+  end
+end
diff --git a/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb b/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb
new file mode 100644
index 00000000..ec7b2ac8
--- /dev/null
+++ b/hyrax/db/migrate/20220217192825_create_single_use_links.hyrax.rb
@@ -0,0 +1,12 @@
+class CreateSingleUseLinks < ActiveRecord::Migration[5.2]
+  def change
+    create_table :single_use_links do |t|
+      t.string :downloadKey
+      t.string :path
+      t.string :itemId
+      t.datetime :expires
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb b/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb
new file mode 100644
index 00000000..6d46f26b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192826_add_social_to_users.hyrax.rb
@@ -0,0 +1,13 @@
+class AddSocialToUsers < ActiveRecord::Migration[5.2]
+  def self.up
+    add_column :users, :facebook_handle, :string
+    add_column :users, :twitter_handle, :string
+    add_column :users, :googleplus_handle, :string
+  end
+
+  def self.down
+    remove_column :users, :facebook_handle, :string
+    remove_column :users, :twitter_handle, :string
+    remove_column :users, :googleplus_handle, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb b/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb
new file mode 100644
index 00000000..e91c8bab
--- /dev/null
+++ b/hyrax/db/migrate/20220217192827_add_ldap_attrs_to_user.hyrax.rb
@@ -0,0 +1,27 @@
+class AddLdapAttrsToUser < ActiveRecord::Migration[5.2]
+  def self.up
+    add_column :users, :display_name, :string
+    add_column :users, :address, :string
+    add_column :users, :admin_area, :string
+    add_column :users, :department, :string
+    add_column :users, :title, :string
+    add_column :users, :office, :string
+    add_column :users, :chat_id, :string
+    add_column :users, :website, :string
+    add_column :users, :affiliation, :string
+    add_column :users, :telephone, :string
+  end
+
+  def self.down
+    remove_column :users, :display_name
+    remove_column :users, :address
+    remove_column :users, :admin_area
+    remove_column :users, :department
+    remove_column :users, :title
+    remove_column :users, :office
+    remove_column :users, :chat_id
+    remove_column :users, :website
+    remove_column :users, :affiliation
+    remove_column :users, :telephone
+  end
+end
diff --git a/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb b/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb
new file mode 100644
index 00000000..1aa8d252
--- /dev/null
+++ b/hyrax/db/migrate/20220217192828_add_avatars_to_users.hyrax.rb
@@ -0,0 +1,15 @@
+class AddAvatarsToUsers < ActiveRecord::Migration[5.2]
+  def self.up
+    add_column :users, "avatar_file_name",    :string
+    add_column :users, "avatar_content_type", :string
+    add_column :users, "avatar_file_size",    :integer
+    add_column :users, "avatar_updated_at",   :datetime
+  end
+
+  def self.down
+    remove_column :users, "avatar_file_name"
+    remove_column :users, "avatar_content_type"
+    remove_column :users, "avatar_file_size"
+    remove_column :users, "avatar_updated_at"
+  end
+end
diff --git a/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb b/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb
new file mode 100644
index 00000000..27b082ac
--- /dev/null
+++ b/hyrax/db/migrate/20220217192829_create_trophies.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateTrophies < ActiveRecord::Migration[5.2]
+  def change
+    create_table :trophies do |t|
+      t.integer :user_id
+      t.string :generic_file_id
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb b/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb
new file mode 100644
index 00000000..7710944e
--- /dev/null
+++ b/hyrax/db/migrate/20220217192830_add_linkedin_to_users.hyrax.rb
@@ -0,0 +1,5 @@
+class AddLinkedinToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :linkedin_handle, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb b/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb
new file mode 100644
index 00000000..7ff6ad95
--- /dev/null
+++ b/hyrax/db/migrate/20220217192831_create_tinymce_assets.hyrax.rb
@@ -0,0 +1,8 @@
+class CreateTinymceAssets < ActiveRecord::Migration[5.2]
+  def change
+    create_table :tinymce_assets do |t|
+      t.string :file
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb b/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb
new file mode 100644
index 00000000..2a30af2d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192832_create_content_blocks.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateContentBlocks < ActiveRecord::Migration[5.2]
+  def change
+    create_table :content_blocks do |t|
+      t.string :name
+      t.text :value
+      t.timestamps null: false
+    end
+    add_index :content_blocks, :name, unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb b/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb
new file mode 100644
index 00000000..acf55b78
--- /dev/null
+++ b/hyrax/db/migrate/20220217192833_create_featured_works.hyrax.rb
@@ -0,0 +1,12 @@
+class CreateFeaturedWorks < ActiveRecord::Migration[5.2]
+  def change
+    create_table :featured_works do |t|
+      t.integer :order, default: 5
+      t.string :work_id
+
+      t.timestamps null: false
+    end
+    add_index :featured_works, :work_id
+    add_index :featured_works, :order
+  end
+end
diff --git a/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb b/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb
new file mode 100644
index 00000000..d2d00d32
--- /dev/null
+++ b/hyrax/db/migrate/20220217192834_add_external_key_to_content_blocks.hyrax.rb
@@ -0,0 +1,6 @@
+class AddExternalKeyToContentBlocks < ActiveRecord::Migration[5.2]
+  def change
+    add_column :content_blocks, :external_key, :string
+    remove_index :content_blocks, :name
+  end
+end
diff --git a/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb b/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb
new file mode 100644
index 00000000..b473c662
--- /dev/null
+++ b/hyrax/db/migrate/20220217192835_create_proxy_deposit_rights.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateProxyDepositRights < ActiveRecord::Migration[5.2]
+  def change
+    create_table :proxy_deposit_rights do |t|
+      t.references :grantor
+      t.references :grantee
+      t.timestamps null: false
+    end
+    
+  end
+end
diff --git a/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb b/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb
new file mode 100644
index 00000000..d26225aa
--- /dev/null
+++ b/hyrax/db/migrate/20220217192836_create_proxy_deposit_requests.hyrax.rb
@@ -0,0 +1,15 @@
+class CreateProxyDepositRequests < ActiveRecord::Migration[5.2]
+  def change
+    create_table :proxy_deposit_requests do |t|
+      t.string :generic_file_id, null: false
+      t.references :sending_user, null: false
+      t.references :receiving_user, null: false
+      t.datetime :fulfillment_date
+      t.string :status, null: false, default: 'pending'
+      t.text :sender_comment
+      t.text :receiver_comment
+      t.timestamps null: false
+    end
+    
+  end
+end
diff --git a/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb b/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb
new file mode 100644
index 00000000..d30650ff
--- /dev/null
+++ b/hyrax/db/migrate/20220217192837_create_file_view_stats.hyrax.rb
@@ -0,0 +1,12 @@
+class CreateFileViewStats < ActiveRecord::Migration[5.2]
+  def change
+    create_table :file_view_stats do |t|
+      t.datetime :date
+      t.integer :views
+      t.string :file_id
+
+      t.timestamps null: false
+    end
+    add_index :file_view_stats, :file_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb b/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb
new file mode 100644
index 00000000..e46dcf4c
--- /dev/null
+++ b/hyrax/db/migrate/20220217192838_create_file_download_stats.hyrax.rb
@@ -0,0 +1,12 @@
+class CreateFileDownloadStats < ActiveRecord::Migration[5.2]
+  def change
+    create_table :file_download_stats do |t|
+      t.datetime :date
+      t.integer :downloads
+      t.string :file_id
+
+      t.timestamps null: false
+    end
+    add_index :file_download_stats, :file_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb b/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb
new file mode 100644
index 00000000..70c7a1bf
--- /dev/null
+++ b/hyrax/db/migrate/20220217192839_add_orcid_to_users.hyrax.rb
@@ -0,0 +1,5 @@
+class AddOrcidToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :orcid, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb b/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb
new file mode 100644
index 00000000..83b87be5
--- /dev/null
+++ b/hyrax/db/migrate/20220217192840_create_user_stats.hyrax.rb
@@ -0,0 +1,19 @@
+class CreateUserStats < ActiveRecord::Migration[5.2]
+  def change
+    create_table :user_stats do |t|
+      t.integer :user_id
+      t.datetime :date
+      t.integer :file_views
+      t.integer :file_downloads
+
+      t.timestamps null: false
+    end
+
+    add_column :file_view_stats, :user_id, :integer
+    add_column :file_download_stats, :user_id, :integer
+
+    add_index :user_stats, :user_id
+    add_index :file_view_stats, :user_id
+    add_index :file_download_stats, :user_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb b/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb
new file mode 100644
index 00000000..2138c97a
--- /dev/null
+++ b/hyrax/db/migrate/20220217192841_create_work_view_stats.hyrax.rb
@@ -0,0 +1,12 @@
+class CreateWorkViewStats < ActiveRecord::Migration[5.2]
+  def change
+    create_table :work_view_stats do |t|
+      t.datetime :date
+      t.integer  :work_views
+      t.string   :work_id
+
+      t.timestamps null: false
+    end
+    add_index :work_view_stats, :work_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb b/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb
new file mode 100644
index 00000000..eb87767b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192842_add_works_to_user_stats.hyrax.rb
@@ -0,0 +1,13 @@
+class AddWorksToUserStats < ActiveRecord::Migration[5.2]
+  def self.up
+    add_column :user_stats, :work_views, :integer
+    add_column :work_view_stats, :user_id, :integer
+    add_index :work_view_stats, :user_id
+  end
+
+  def self.down
+    remove_column :user_stats, :work_views, :integer
+    remove_column :work_view_stats, :user_id, :integer
+    remove_index :work_view_stats, :user_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb
new file mode 100644
index 00000000..423cf543
--- /dev/null
+++ b/hyrax/db/migrate/20220217192843_change_trophy_generic_file_id_to_work_id.hyrax.rb
@@ -0,0 +1,5 @@
+class ChangeTrophyGenericFileIdToWorkId < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :trophies, :generic_file_id, :work_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb
new file mode 100644
index 00000000..ae365fa1
--- /dev/null
+++ b/hyrax/db/migrate/20220217192844_change_proxy_deposit_generic_file_id_to_work_id.hyrax.rb
@@ -0,0 +1,5 @@
+class ChangeProxyDepositGenericFileIdToWorkId < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :proxy_deposit_requests, :generic_file_id, :work_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb b/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb
new file mode 100644
index 00000000..4cf6c517
--- /dev/null
+++ b/hyrax/db/migrate/20220217192845_change_audit_log_generic_file_id_to_file_set_id.hyrax.rb
@@ -0,0 +1,5 @@
+class ChangeAuditLogGenericFileIdToFileSetId < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :checksum_audit_logs, :generic_file_id, :file_set_id unless ChecksumAuditLog.column_names.include?('file_set_id')
+  end
+end
diff --git a/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb
new file mode 100644
index 00000000..13c53087
--- /dev/null
+++ b/hyrax/db/migrate/20220217192846_change_proxy_deposit_request_generic_file_id_to_work_id.hyrax.rb
@@ -0,0 +1,5 @@
+class ChangeProxyDepositRequestGenericFileIdToWorkId < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :proxy_deposit_requests, :generic_file_id, :generic_id if ProxyDepositRequest.column_names.include?('generic_file_id')
+  end
+end
diff --git a/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb b/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb
new file mode 100644
index 00000000..4c8895f2
--- /dev/null
+++ b/hyrax/db/migrate/20220217192847_create_uploaded_files.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateUploadedFiles < ActiveRecord::Migration[5.2]
+  def change
+    create_table :uploaded_files do |t|
+      t.string :file
+      t.references :user, index: true, foreign_key: true
+      t.string :file_set_uri, index: true
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192848_create_features.hyrax.rb b/hyrax/db/migrate/20220217192848_create_features.hyrax.rb
new file mode 100644
index 00000000..4e9b325f
--- /dev/null
+++ b/hyrax/db/migrate/20220217192848_create_features.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateFeatures < ActiveRecord::Migration[5.2]
+  def change
+    create_table :hyrax_features do |t|
+      t.string :key, null: false
+      t.boolean :enabled, null: false, default: false
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb b/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb
new file mode 100644
index 00000000..1906eba5
--- /dev/null
+++ b/hyrax/db/migrate/20220217192849_create_operations.hyrax.rb
@@ -0,0 +1,23 @@
+class CreateOperations < ActiveRecord::Migration[5.2]
+  def change
+    create_table :curation_concerns_operations do |t|
+      t.string :status
+      t.string :operation_type
+      t.string :job_class
+      t.string :job_id
+      t.string :type # For Single Table Inheritance
+      t.text :message
+      t.references :user, index: true, foreign_key: true
+
+      t.integer :parent_id, null: true, index: true
+      t.integer :lft, null: false, index: true
+      t.integer :rgt, null: false, index: true
+
+      # optional fields
+      t.integer :depth, null: false, default: 0
+      t.integer :children_count, null: false, default: 0
+
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb b/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb
new file mode 100644
index 00000000..487749eb
--- /dev/null
+++ b/hyrax/db/migrate/20220217192850_change_featured_work_generic_file_id_to_work_id.hyrax.rb
@@ -0,0 +1,6 @@
+class ChangeFeaturedWorkGenericFileIdToWorkId < ActiveRecord::Migration[5.2]
+  def change
+    return unless column_exists?(:featured_works, :generic_file_id)
+    rename_column :featured_works, :generic_file_id, :work_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb b/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb
new file mode 100644
index 00000000..3dcf9f39
--- /dev/null
+++ b/hyrax/db/migrate/20220217192851_add_arkivo_to_users.hyrax.rb
@@ -0,0 +1,8 @@
+class AddArkivoToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :arkivo_token, :string
+    add_column :users, :arkivo_subscription, :string
+    add_column :users, :zotero_token, :binary
+    add_column :users, :zotero_userid, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb b/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb
new file mode 100644
index 00000000..db48839d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192852_create_sipity.hyrax.rb
@@ -0,0 +1,163 @@
+class CreateSipity < ActiveRecord::Migration[5.2]
+  def change
+    create_table "sipity_notification_recipients" do |t|
+      t.integer  "notification_id",                null: false
+      t.integer  "role_id",                        null: false
+      t.string   "recipient_strategy",             null: false
+      t.datetime "created_at",                     null: false
+      t.datetime "updated_at",                     null: false
+    end
+
+    add_index "sipity_notification_recipients", ["notification_id", "role_id", "recipient_strategy"], name: "sipity_notifications_recipients_surrogate"
+    add_index "sipity_notification_recipients", ["notification_id"], name: "sipity_notification_recipients_notification"
+    add_index "sipity_notification_recipients", ["recipient_strategy"], name: "sipity_notification_recipients_recipient_strategy"
+    add_index "sipity_notification_recipients", ["role_id"], name: "sipity_notification_recipients_role"
+
+    create_table "sipity_notifications" do |t|
+      t.string   "name",              null: false
+      t.string   "notification_type", null: false
+      t.datetime "created_at",        null: false
+      t.datetime "updated_at",        null: false
+    end
+
+    add_index "sipity_notifications", ["name"], name: "index_sipity_notifications_on_name", unique: true
+    add_index "sipity_notifications", ["notification_type"], name: "index_sipity_notifications_on_notification_type"
+
+    create_table "sipity_notifiable_contexts" do |t|
+      t.integer  "scope_for_notification_id",               null: false
+      t.string   "scope_for_notification_type",             null: false
+      t.string   "reason_for_notification",                 null: false
+      t.integer  "notification_id",                         null: false
+      t.datetime "created_at",                              null: false
+      t.datetime "updated_at",                              null: false
+    end
+
+    add_index "sipity_notifiable_contexts", ["notification_id"], name: "sipity_notifiable_contexts_notification_id"
+    add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification", "notification_id"], name: "sipity_notifiable_contexts_concern_surrogate", unique: true
+    add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification"], name: "sipity_notifiable_contexts_concern_context"
+    add_index "sipity_notifiable_contexts", ["scope_for_notification_id", "scope_for_notification_type"], name: "sipity_notifiable_contexts_concern"
+
+    create_table "sipity_agents" do |t|
+      t.string   "proxy_for_id",               null: false
+      t.string   "proxy_for_type",             null: false
+      t.datetime "created_at",                 null: false
+      t.datetime "updated_at",                 null: false
+    end
+
+    add_index "sipity_agents", ["proxy_for_id", "proxy_for_type"], name: "sipity_agents_proxy_for", unique: true
+
+    create_table "sipity_comments" do |t|
+      t.integer  "entity_id",                                                    null: false
+      t.integer  "agent_id",                                                     null: false
+      t.text     "comment"
+      t.datetime "created_at",                                                   null: false
+      t.datetime "updated_at",                                                   null: false
+    end
+
+    add_index "sipity_comments", ["agent_id"], name: "index_sipity_comments_on_agent_id"
+    add_index "sipity_comments", ["created_at"], name: "index_sipity_comments_on_created_at"
+    add_index "sipity_comments", ["entity_id"], name: "index_sipity_comments_on_entity_id"
+
+    create_table "sipity_entities" do |t|
+      t.string   "proxy_for_global_id",           null: false
+      t.integer  "workflow_id",                   null: false
+      t.integer  "workflow_state_id",             null: true
+      t.datetime "created_at",                    null: false
+      t.datetime "updated_at",                    null: false
+    end
+
+    add_index "sipity_entities", ["proxy_for_global_id"], name: "sipity_entities_proxy_for_global_id", unique: true
+    add_index "sipity_entities", ["workflow_id"], name: "index_sipity_entities_on_workflow_id"
+    add_index "sipity_entities", ["workflow_state_id"], name: "index_sipity_entities_on_workflow_state_id"
+
+    create_table "sipity_entity_specific_responsibilities" do |t|
+      t.integer  "workflow_role_id",            null: false
+      t.string   "entity_id",                   null: false
+      t.integer  "agent_id",                    null: false
+      t.datetime "created_at",                  null: false
+      t.datetime "updated_at",                  null: false
+    end
+
+    add_index "sipity_entity_specific_responsibilities", ["agent_id"], name: "sipity_entity_specific_responsibilities_agent"
+    add_index "sipity_entity_specific_responsibilities", ["entity_id"], name: "sipity_entity_specific_responsibilities_entity"
+    add_index "sipity_entity_specific_responsibilities", ["workflow_role_id", "entity_id", "agent_id"], name: "sipity_entity_specific_responsibilities_aggregate", unique: true
+    add_index "sipity_entity_specific_responsibilities", ["workflow_role_id"], name: "sipity_entity_specific_responsibilities_role"
+
+    create_table "sipity_workflows" do |t|
+      t.string   "name",                      null: false
+      t.string   "label"
+      t.text     "description"
+      t.datetime "created_at",                null: false
+      t.datetime "updated_at",                null: false
+    end
+
+    add_index "sipity_workflows", ["name"], name: "index_sipity_workflows_on_name", unique: true
+
+    create_table "sipity_workflow_actions" do |t|
+      t.integer  "workflow_id",                                                  null: false
+      t.integer  "resulting_workflow_state_id"
+      t.string   "name",                                                         null: false
+      t.datetime "created_at",                                                   null: false
+      t.datetime "updated_at",                                                   null: false
+    end
+
+    add_index "sipity_workflow_actions", ["resulting_workflow_state_id"], name: "sipity_workflow_actions_resulting_workflow_state"
+    add_index "sipity_workflow_actions", ["workflow_id", "name"], name: "sipity_workflow_actions_aggregate", unique: true
+    add_index "sipity_workflow_actions", ["workflow_id"], name: "sipity_workflow_actions_workflow"
+
+    create_table "sipity_workflow_responsibilities" do |t|
+      t.integer  "agent_id",                   null: false
+      t.integer  "workflow_role_id",           null: false
+      t.datetime "created_at",                 null: false
+      t.datetime "updated_at",                 null: false
+    end
+
+    add_index "sipity_workflow_responsibilities", ["agent_id", "workflow_role_id"], name: "sipity_workflow_responsibilities_aggregate", unique: true
+
+    create_table "sipity_workflow_roles" do |t|
+      t.integer  "workflow_id",           null: false
+      t.integer  "role_id",               null: false
+      t.datetime "created_at",            null: false
+      t.datetime "updated_at",            null: false
+    end
+
+    add_index "sipity_workflow_roles", ["workflow_id", "role_id"], name: "sipity_workflow_roles_aggregate", unique: true
+
+    create_table "sipity_workflow_state_action_permissions" do |t|
+      t.integer  "workflow_role_id",                   null: false
+      t.integer  "workflow_state_action_id",           null: false
+      t.datetime "created_at",                         null: false
+      t.datetime "updated_at",                         null: false
+    end
+
+    add_index "sipity_workflow_state_action_permissions", ["workflow_role_id", "workflow_state_action_id"], name: "sipity_workflow_state_action_permissions_aggregate", unique: true
+
+    create_table "sipity_workflow_state_actions" do |t|
+      t.integer  "originating_workflow_state_id",           null: false
+      t.integer  "workflow_action_id",                      null: false
+      t.datetime "created_at",                              null: false
+      t.datetime "updated_at",                              null: false
+    end
+
+    add_index "sipity_workflow_state_actions", ["originating_workflow_state_id", "workflow_action_id"], name: "sipity_workflow_state_actions_aggregate", unique: true
+
+    create_table "sipity_workflow_states" do |t|
+      t.integer  "workflow_id",             null: false
+      t.string   "name",                    null: false
+      t.datetime "created_at",              null: false
+      t.datetime "updated_at",              null: false
+    end
+
+    add_index "sipity_workflow_states", ["name"], name: "index_sipity_workflow_states_on_name"
+    add_index "sipity_workflow_states", ["workflow_id", "name"], name: "sipity_type_state_aggregate", unique: true
+
+    create_table "sipity_roles" do |t|
+      t.string   "name",                      null: false
+      t.text     "description"
+      t.datetime "created_at",                null: false
+      t.datetime "updated_at",                null: false
+    end
+
+    add_index "sipity_roles", ["name"], name: "index_sipity_roles_on_name", unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb b/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb
new file mode 100644
index 00000000..ff7dcecb
--- /dev/null
+++ b/hyrax/db/migrate/20220217192853_create_sipity_workflow_methods.hyrax.rb
@@ -0,0 +1,10 @@
+class CreateSipityWorkflowMethods < ActiveRecord::Migration[5.2]
+  def change
+    create_table :sipity_workflow_methods do |t|
+      t.string   "service_name",                    null: false
+      t.integer  "weight",                          null: false
+      t.integer  "workflow_action_id", index: true, null: false
+      t.timestamps                                  null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb b/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb
new file mode 100644
index 00000000..b139395b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192854_create_permission_template.hyrax.rb
@@ -0,0 +1,11 @@
+class CreatePermissionTemplate < ActiveRecord::Migration[5.2]
+  def change
+    create_table :permission_templates do |t|
+      t.belongs_to :workflow
+      t.string :admin_set_id
+      t.string :visibility
+      t.timestamps
+    end
+    add_index :permission_templates, :admin_set_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb b/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb
new file mode 100644
index 00000000..d6e9b5d2
--- /dev/null
+++ b/hyrax/db/migrate/20220217192855_create_permission_template_access.hyrax.rb
@@ -0,0 +1,11 @@
+class CreatePermissionTemplateAccess < ActiveRecord::Migration[5.2]
+  def change
+    create_table :permission_template_accesses do |t|
+      t.references :permission_template, foreign_key: true
+      t.string :agent_type
+      t.string :agent_id
+      t.string :access
+      t.timestamps
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb b/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb
new file mode 100644
index 00000000..7696db1b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192856_add_release_to_permission_templates.hyrax.rb
@@ -0,0 +1,6 @@
+class AddReleaseToPermissionTemplates < ActiveRecord::Migration[5.2]
+  def change
+    add_column :permission_templates, :release_date, :date
+    add_column :permission_templates, :release_period, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb b/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb
new file mode 100644
index 00000000..fd40cc5d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192857_add_permission_template_to_sipity_workflow.hyrax.rb
@@ -0,0 +1,26 @@
+class AddPermissionTemplateToSipityWorkflow < ActiveRecord::Migration[5.2]
+  def change
+    add_column :sipity_workflows, :permission_template_id, :integer, index: true
+    remove_index :sipity_workflows, :name
+    add_index :sipity_workflows, [:permission_template_id, :name], name: :index_sipity_workflows_on_permission_template_and_name, unique: true
+    remove_index :permission_templates, :admin_set_id
+    add_index :permission_templates, :admin_set_id, unique: true
+
+    # Only allow one to be true; Note the options should be nil or true to enforce uniqueness
+    add_column :sipity_workflows, :active, :boolean, default: nil, index: :unique
+
+    # Doing an inline data migration
+    begin
+      if Hyrax::PermissionTemplate.column_names.include?('workflow_id')
+        Hyrax::PermissionTemplate.each do |permission_template|
+          workflow_id = permission_template.workflow_id
+          next unless workflow_id
+          Sipity::Workflow.find(workflow_id).update(active: true)
+        end
+        remove_column :permission_templates, :workflow_id
+      end
+    rescue
+      # It's okay, we didn't have the column
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb b/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb
new file mode 100644
index 00000000..27933c16
--- /dev/null
+++ b/hyrax/db/migrate/20220217192858_tidy_up_because_of_bad_exception.hyrax.rb
@@ -0,0 +1,13 @@
+class TidyUpBecauseOfBadException < ActiveRecord::Migration[5.2]
+  def change
+    if column_exists?(Hyrax::PermissionTemplate.table_name, :workflow_id)
+      Hyrax::PermissionTemplate.all.each do |permission_template|
+        workflow_id = permission_template.workflow_id
+        next unless workflow_id
+        Sipity::Workflow.find(workflow_id).update(active: true)
+      end
+
+      remove_column Hyrax::PermissionTemplate.table_name, :workflow_id
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb b/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb
new file mode 100644
index 00000000..0c56e5a8
--- /dev/null
+++ b/hyrax/db/migrate/20220217192859_add_allows_access_grant_to_workflow.hyrax.rb
@@ -0,0 +1,5 @@
+class AddAllowsAccessGrantToWorkflow < ActiveRecord::Migration[5.2]
+  def change
+    add_column :sipity_workflows, :allows_access_grant, :boolean
+  end
+end
diff --git a/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb b/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb
new file mode 100644
index 00000000..5c527ff5
--- /dev/null
+++ b/hyrax/db/migrate/20220217192860_change_checksum_audit_log.hyrax.rb
@@ -0,0 +1,18 @@
+class ChangeChecksumAuditLog < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :checksum_audit_logs, :version, :checked_uri
+    add_column    :checksum_audit_logs, :passed, :boolean
+
+    reversible do |dir|
+      dir.up do
+        execute 'UPDATE checksum_audit_logs SET passed = (pass = 1)'
+      end
+      dir.down do
+        execute 'UPDATE checksum_audit_logs SET pass = CASE WHEN passed THEN 1 ELSE 0 END'
+      end
+    end
+
+    remove_column :checksum_audit_logs, :pass
+    add_index     :checksum_audit_logs, :checked_uri
+  end
+end
diff --git a/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb b/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb
new file mode 100644
index 00000000..4710e913
--- /dev/null
+++ b/hyrax/db/migrate/20220217192861_create_job_io_wrappers.hyrax.rb
@@ -0,0 +1,15 @@
+class CreateJobIoWrappers < ActiveRecord::Migration[5.2]
+  def change
+    create_table :job_io_wrappers do |t|
+      t.references :user
+      t.references :uploaded_file
+      t.string :file_set_id
+      t.string :mime_type
+      t.string :original_name
+      t.string :path
+      t.string :relation
+
+      t.timestamps
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb b/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb
new file mode 100644
index 00000000..a225b52d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192862_create_collection_types.hyrax.rb
@@ -0,0 +1,17 @@
+class CreateCollectionTypes < ActiveRecord::Migration[5.2]
+  def change
+    create_table :hyrax_collection_types do |t|
+      t.string :title
+      t.text :description
+      t.string :machine_id
+      t.boolean :nestable, null: false, default: true
+      t.boolean :discovery, null: false, default: true
+      t.boolean :sharing, null: false, default: true
+      t.boolean :multiple_membership, null: false, default: true
+      t.boolean :require_membership, null: false, default: false
+      t.boolean :workflow, null: false, default: false
+      t.boolean :visibility, null: false, default: false
+    end
+    add_index :hyrax_collection_types, :machine_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb b/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb
new file mode 100644
index 00000000..b643515b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192863_update_collection_type_column_names.hyrax.rb
@@ -0,0 +1,9 @@
+class UpdateCollectionTypeColumnNames < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :hyrax_collection_types, :discovery, :discoverable
+    rename_column :hyrax_collection_types, :sharing, :sharable
+    rename_column :hyrax_collection_types, :multiple_membership, :allow_multiple_membership
+    rename_column :hyrax_collection_types, :workflow, :assigns_workflow
+    rename_column :hyrax_collection_types, :visibility, :assigns_visibility
+  end
+end
diff --git a/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb b/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb
new file mode 100644
index 00000000..188a6a71
--- /dev/null
+++ b/hyrax/db/migrate/20220217192864_update_collection_type_column_options.hyrax.rb
@@ -0,0 +1,17 @@
+class UpdateCollectionTypeColumnOptions < ActiveRecord::Migration[5.2]
+  def up
+    change_column :hyrax_collection_types, :title, :string, unique: true
+    change_column :hyrax_collection_types, :machine_id, :string, unique: true
+
+    remove_index :hyrax_collection_types, :machine_id
+    add_index :hyrax_collection_types, :machine_id, unique: true
+  end
+
+  def down
+    change_column :hyrax_collection_types, :title, :string
+    change_column :hyrax_collection_types, :machine_id, :string
+
+    remove_index :hyrax_collection_types, :machine_id
+    add_index :hyrax_collection_types, :machine_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb b/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb
new file mode 100644
index 00000000..432a634b
--- /dev/null
+++ b/hyrax/db/migrate/20220217192865_create_collection_branding_infos.hyrax.rb
@@ -0,0 +1,15 @@
+class CreateCollectionBrandingInfos < ActiveRecord::Migration[5.2]
+  def change
+    create_table :collection_branding_infos do |t|
+      t.string :collection_id
+      t.string :role
+      t.string :local_path
+      t.string :alt_text
+      t.string :target_url
+      t.integer :height
+      t.integer :width
+
+      t.timestamps
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb b/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb
new file mode 100644
index 00000000..5cdd4e80
--- /dev/null
+++ b/hyrax/db/migrate/20220217192866_create_collection_type_participants.hyrax.rb
@@ -0,0 +1,11 @@
+class CreateCollectionTypeParticipants < ActiveRecord::Migration[5.2]
+  def change
+    create_table :collection_type_participants do |t|
+      t.references :hyrax_collection_type, foreign_key: true, index: {:name => "hyrax_collection_type_id"}
+      t.string :agent_type
+      t.string :agent_id
+      t.string :access
+      t.timestamps
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb b/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb
new file mode 100644
index 00000000..0275c15a
--- /dev/null
+++ b/hyrax/db/migrate/20220217192867_rename_admin_set_id_to_source_id.hyrax.rb
@@ -0,0 +1,5 @@
+class RenameAdminSetIdToSourceId < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :permission_templates, :admin_set_id, :source_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb b/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb
new file mode 100644
index 00000000..6e66e41c
--- /dev/null
+++ b/hyrax/db/migrate/20220217192868_add_preferred_locale_to_users.hyrax.rb
@@ -0,0 +1,5 @@
+class AddPreferredLocaleToUsers < ActiveRecord::Migration[5.2]
+  def change
+    add_column :users, :preferred_locale, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb b/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb
new file mode 100644
index 00000000..855f162c
--- /dev/null
+++ b/hyrax/db/migrate/20220217192869_add_collection_type_sharing_options.hyrax.rb
@@ -0,0 +1,5 @@
+class AddCollectionTypeSharingOptions < ActiveRecord::Migration[5.2]
+  def change
+    add_column :hyrax_collection_types, :share_applies_to_new_works, :boolean, null: false, default: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb b/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb
new file mode 100644
index 00000000..076ab155
--- /dev/null
+++ b/hyrax/db/migrate/20220217192870_add_unique_constraint_to_permission_template_accesses.hyrax.rb
@@ -0,0 +1,8 @@
+class AddUniqueConstraintToPermissionTemplateAccesses < ActiveRecord::Migration[5.2]
+  def change
+    add_index :permission_template_accesses,
+              [:permission_template_id, :agent_id, :agent_type, :access],
+              unique: true,
+              name: 'uk_permission_template_accesses'
+  end
+end
diff --git a/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb b/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb
new file mode 100644
index 00000000..9352c03d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192871_add_branding_to_collection_type.hyrax.rb
@@ -0,0 +1,5 @@
+class AddBrandingToCollectionType < ActiveRecord::Migration[5.2]
+  def change
+    add_column :hyrax_collection_types, :brandable, :boolean, null: false, default: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb b/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb
new file mode 100644
index 00000000..ea700a62
--- /dev/null
+++ b/hyrax/db/migrate/20220217192872_add_badge_color_to_collection_types.hyrax.rb
@@ -0,0 +1,5 @@
+class AddBadgeColorToCollectionTypes < ActiveRecord::Migration[5.2]
+  def change
+     add_column :hyrax_collection_types, :badge_color, :string, default: '#663333'
+  end
+end
diff --git a/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb b/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb
new file mode 100644
index 00000000..10b25604
--- /dev/null
+++ b/hyrax/db/migrate/20220217192873_update_single_use_links_column_names.hyrax.rb
@@ -0,0 +1,6 @@
+class UpdateSingleUseLinksColumnNames < ActiveRecord::Migration[5.2]
+  def change
+    rename_column :single_use_links, :downloadKey, :download_key
+    rename_column :single_use_links, :itemId, :item_id
+  end
+end
diff --git a/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb b/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb
new file mode 100644
index 00000000..56db332d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192874_change_sipity_entity_specific_responsibility.hyrax.rb
@@ -0,0 +1,9 @@
+class ChangeSipityEntitySpecificResponsibility < ActiveRecord::Migration[5.2]
+  def change
+    if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
+      change_column :sipity_entity_specific_responsibilities, :entity_id, 'integer USING CAST(entity_id AS integer)'
+    else
+      change_column :sipity_entity_specific_responsibilities, :entity_id, :integer
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb b/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb
new file mode 100644
index 00000000..879be44c
--- /dev/null
+++ b/hyrax/db/migrate/20220217192875_create_default_administrative_set.hyrax.rb
@@ -0,0 +1,8 @@
+class CreateDefaultAdministrativeSet < ActiveRecord::Migration[5.2]
+  def change
+    create_table :hyrax_default_administrative_set do |t|
+      t.string :default_admin_set_id, null: false
+      t.timestamps null: false
+    end
+  end
+end
diff --git a/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb b/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb
new file mode 100644
index 00000000..d42e89f9
--- /dev/null
+++ b/hyrax/db/migrate/20220217192876_create_mailboxer.mailboxer_engine.rb
@@ -0,0 +1,65 @@
+# This migration comes from mailboxer_engine (originally 20110511145103)
+class CreateMailboxer < ActiveRecord::Migration[4.2]
+  def self.up
+  #Tables
+    #Conversations
+    create_table :mailboxer_conversations do |t|
+      t.column :subject, :string, :default => ""
+      t.column :created_at, :datetime, :null => false
+      t.column :updated_at, :datetime, :null => false
+    end
+    #Receipts
+    create_table :mailboxer_receipts do |t|
+      t.references :receiver, :polymorphic => true
+      t.column :notification_id, :integer, :null => false
+      t.column :is_read, :boolean, :default => false
+      t.column :trashed, :boolean, :default => false
+      t.column :deleted, :boolean, :default => false
+      t.column :mailbox_type, :string, :limit => 25
+      t.column :created_at, :datetime, :null => false
+      t.column :updated_at, :datetime, :null => false
+    end
+    #Notifications and Messages
+    create_table :mailboxer_notifications do |t|
+      t.column :type, :string
+      t.column :body, :text
+      t.column :subject, :string, :default => ""
+      t.references :sender, :polymorphic => true
+      t.column :conversation_id, :integer
+      t.column :draft, :boolean, :default => false
+      t.string :notification_code, :default => nil
+      t.references :notified_object, :polymorphic => true, index: { name: 'mailboxer_notifications_notified_object' }
+      t.column :attachment, :string
+      t.column :updated_at, :datetime, :null => false
+      t.column :created_at, :datetime, :null => false
+      t.boolean :global, default: false
+      t.datetime :expires
+    end
+
+  #Indexes
+    #Conversations
+    #Receipts
+    add_index "mailboxer_receipts","notification_id"
+
+    #Messages
+    add_index "mailboxer_notifications","conversation_id"
+
+  #Foreign keys
+    #Conversations
+    #Receipts
+    add_foreign_key "mailboxer_receipts", "mailboxer_notifications", :name => "receipts_on_notification_id", :column => "notification_id"
+    #Messages
+    add_foreign_key "mailboxer_notifications", "mailboxer_conversations", :name => "notifications_on_conversation_id", :column => "conversation_id"
+  end
+
+  def self.down
+  #Tables
+    remove_foreign_key "mailboxer_receipts", :name => "receipts_on_notification_id"
+    remove_foreign_key "mailboxer_notifications", :name => "notifications_on_conversation_id"
+
+  #Indexes
+    drop_table :mailboxer_receipts
+    drop_table :mailboxer_conversations
+    drop_table :mailboxer_notifications
+  end
+end
diff --git a/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb b/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb
new file mode 100644
index 00000000..a9860bdc
--- /dev/null
+++ b/hyrax/db/migrate/20220217192877_add_conversation_optout.mailboxer_engine.rb
@@ -0,0 +1,15 @@
+# This migration comes from mailboxer_engine (originally 20131206080416)
+class AddConversationOptout < ActiveRecord::Migration[4.2]
+  def self.up
+    create_table :mailboxer_conversation_opt_outs do |t|
+      t.references :unsubscriber, :polymorphic => true
+      t.references :conversation
+    end
+    add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", :name => "mb_opt_outs_on_conversations_id", :column => "conversation_id"
+  end
+
+  def self.down
+    remove_foreign_key "mailboxer_conversation_opt_outs", :name => "mb_opt_outs_on_conversations_id"
+    drop_table :mailboxer_conversation_opt_outs
+  end
+end
diff --git a/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb b/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb
new file mode 100644
index 00000000..608d7f62
--- /dev/null
+++ b/hyrax/db/migrate/20220217192878_add_missing_indices.mailboxer_engine.rb
@@ -0,0 +1,20 @@
+# This migration comes from mailboxer_engine (originally 20131206080417)
+class AddMissingIndices < ActiveRecord::Migration[4.2]
+  def change
+    # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63
+    # characters limitation.
+    add_index :mailboxer_conversation_opt_outs, [:unsubscriber_id, :unsubscriber_type],
+      name: 'index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type'
+    add_index :mailboxer_conversation_opt_outs, :conversation_id
+
+    add_index :mailboxer_notifications, :type
+    add_index :mailboxer_notifications, [:sender_id, :sender_type]
+
+    # We'll explicitly specify its name, as the auto-generated name is too long and exceeds 63
+    # characters limitation.
+    add_index :mailboxer_notifications, [:notified_object_id, :notified_object_type],
+      name: 'index_mailboxer_notifications_on_notified_object_id_and_type'
+
+    add_index :mailboxer_receipts, [:receiver_id, :receiver_type]
+  end
+end
diff --git a/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb b/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb
new file mode 100644
index 00000000..498d152d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192879_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb
@@ -0,0 +1,8 @@
+# This migration comes from mailboxer_engine (originally 20151103080417)
+class AddDeliveryTrackingInfoToMailboxerReceipts < ActiveRecord::Migration[4.2]
+  def change
+    add_column :mailboxer_receipts, :is_delivered, :boolean, default: false
+    add_column :mailboxer_receipts, :delivery_method, :string
+    add_column :mailboxer_receipts, :message_id, :string
+  end
+end
diff --git a/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb b/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb
new file mode 100644
index 00000000..14e7f342
--- /dev/null
+++ b/hyrax/db/migrate/20220217192880_create_qa_local_authorities.rb
@@ -0,0 +1,10 @@
+class CreateQaLocalAuthorities < ActiveRecord::Migration[5.2]
+  def change
+    create_table :qa_local_authorities do |t|
+      t.string :name
+
+      t.timestamps
+    end
+    add_index :qa_local_authorities, :name, unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb b/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb
new file mode 100644
index 00000000..63129848
--- /dev/null
+++ b/hyrax/db/migrate/20220217192881_create_qa_local_authority_entries.rb
@@ -0,0 +1,12 @@
+class CreateQaLocalAuthorityEntries < ActiveRecord::Migration[5.2]
+  def change
+    create_table :qa_local_authority_entries do |t|
+      t.references :local_authority, foreign_key: { to_table: :qa_local_authorities }, index: true
+      t.string :label
+      t.string :uri
+
+      t.timestamps
+    end
+    add_index :qa_local_authority_entries, :uri, unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb b/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb
new file mode 100644
index 00000000..e109556d
--- /dev/null
+++ b/hyrax/db/migrate/20220217192905_create_minter_states.noid_rails_engine.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+# This migration comes from noid_rails_engine (originally 20160610010003)
+
+class CreateMinterStates < ActiveRecord::Migration[4.2]
+  def change
+    create_table :minter_states do |t|
+      t.string :namespace, null: false, default: 'default'
+      t.string :template, null: false
+      t.text :counters
+      t.bigint :seq, default: 0
+      t.binary :random
+      t.timestamps null: false
+    end
+    # Use both model and DB-level constraints for consistency while scaling horizontally
+    add_index :minter_states, :namespace, unique: true
+  end
+end
diff --git a/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb b/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb
new file mode 100644
index 00000000..20013f8a
--- /dev/null
+++ b/hyrax/db/migrate/20220217192906_rename_minter_state_random_to_rand.noid_rails_engine.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+# This migration comes from noid_rails_engine (originally 20161021203429)
+
+class RenameMinterStateRandomToRand < ActiveRecord::Migration[4.2]
+  def change
+    rename_column :minter_states, :random, :rand
+  end
+end
diff --git a/hyrax/db/migrate/20220218044917_user_roles.rb b/hyrax/db/migrate/20220218044917_user_roles.rb
new file mode 100644
index 00000000..b40a6998
--- /dev/null
+++ b/hyrax/db/migrate/20220218044917_user_roles.rb
@@ -0,0 +1,20 @@
+# frozen_string_literal: true
+
+class UserRoles < ActiveRecord::Migration[5.0]
+  def up
+    create_table :roles do |t|
+      t.string :name
+    end
+    create_table :roles_users, id: false do |t|
+      t.references :role
+      t.references :user
+    end
+    add_index :roles_users, %i[role_id user_id]
+    add_index :roles_users, %i[user_id role_id]
+  end
+
+  def down
+    drop_table :roles_users
+    drop_table :roles
+  end
+end
diff --git a/hyrax/db/schema.rb b/hyrax/db/schema.rb
new file mode 100644
index 00000000..7d3296a0
--- /dev/null
+++ b/hyrax/db/schema.rb
@@ -0,0 +1,582 @@
+# This file is auto-generated from the current state of the database. Instead
+# of editing this file, please use the migrations feature of Active Record to
+# incrementally modify your database, and then regenerate this schema definition.
+#
+# Note that this schema.rb definition is the authoritative source for your
+# database schema. If you need to create the application database on another
+# system, you should be using db:schema:load, not running all the migrations
+# from scratch. The latter is a flawed and unsustainable approach (the more migrations
+# you'll amass, the slower it'll run and the greater likelihood for issues).
+#
+# It's strongly recommended that you check this file into your version control system.
+
+ActiveRecord::Schema.define(version: 2022_02_18_044917) do
+
+  # These are extensions that must be enabled in order to support this database
+  enable_extension "plpgsql"
+
+  create_table "bookmarks", id: :serial, force: :cascade do |t|
+    t.integer "user_id", null: false
+    t.string "user_type"
+    t.string "document_id"
+    t.string "document_type"
+    t.binary "title"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["document_id"], name: "index_bookmarks_on_document_id"
+    t.index ["user_id"], name: "index_bookmarks_on_user_id"
+  end
+
+  create_table "checksum_audit_logs", force: :cascade do |t|
+    t.string "file_set_id"
+    t.string "file_id"
+    t.string "checked_uri"
+    t.string "expected_result"
+    t.string "actual_result"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.boolean "passed"
+    t.index ["checked_uri"], name: "index_checksum_audit_logs_on_checked_uri"
+    t.index ["file_set_id", "file_id"], name: "by_file_set_id_and_file_id"
+  end
+
+  create_table "collection_branding_infos", force: :cascade do |t|
+    t.string "collection_id"
+    t.string "role"
+    t.string "local_path"
+    t.string "alt_text"
+    t.string "target_url"
+    t.integer "height"
+    t.integer "width"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "collection_type_participants", force: :cascade do |t|
+    t.bigint "hyrax_collection_type_id"
+    t.string "agent_type"
+    t.string "agent_id"
+    t.string "access"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["hyrax_collection_type_id"], name: "hyrax_collection_type_id"
+  end
+
+  create_table "content_blocks", force: :cascade do |t|
+    t.string "name"
+    t.text "value"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.string "external_key"
+  end
+
+  create_table "curation_concerns_operations", force: :cascade do |t|
+    t.string "status"
+    t.string "operation_type"
+    t.string "job_class"
+    t.string "job_id"
+    t.string "type"
+    t.text "message"
+    t.bigint "user_id"
+    t.integer "parent_id"
+    t.integer "lft", null: false
+    t.integer "rgt", null: false
+    t.integer "depth", default: 0, null: false
+    t.integer "children_count", default: 0, null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["lft"], name: "index_curation_concerns_operations_on_lft"
+    t.index ["parent_id"], name: "index_curation_concerns_operations_on_parent_id"
+    t.index ["rgt"], name: "index_curation_concerns_operations_on_rgt"
+    t.index ["user_id"], name: "index_curation_concerns_operations_on_user_id"
+  end
+
+  create_table "featured_works", force: :cascade do |t|
+    t.integer "order", default: 5
+    t.string "work_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["order"], name: "index_featured_works_on_order"
+    t.index ["work_id"], name: "index_featured_works_on_work_id"
+  end
+
+  create_table "file_download_stats", force: :cascade do |t|
+    t.datetime "date"
+    t.integer "downloads"
+    t.string "file_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.integer "user_id"
+    t.index ["file_id"], name: "index_file_download_stats_on_file_id"
+    t.index ["user_id"], name: "index_file_download_stats_on_user_id"
+  end
+
+  create_table "file_view_stats", force: :cascade do |t|
+    t.datetime "date"
+    t.integer "views"
+    t.string "file_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.integer "user_id"
+    t.index ["file_id"], name: "index_file_view_stats_on_file_id"
+    t.index ["user_id"], name: "index_file_view_stats_on_user_id"
+  end
+
+  create_table "hyrax_collection_types", force: :cascade do |t|
+    t.string "title"
+    t.text "description"
+    t.string "machine_id"
+    t.boolean "nestable", default: true, null: false
+    t.boolean "discoverable", default: true, null: false
+    t.boolean "sharable", default: true, null: false
+    t.boolean "allow_multiple_membership", default: true, null: false
+    t.boolean "require_membership", default: false, null: false
+    t.boolean "assigns_workflow", default: false, null: false
+    t.boolean "assigns_visibility", default: false, null: false
+    t.boolean "share_applies_to_new_works", default: true, null: false
+    t.boolean "brandable", default: true, null: false
+    t.string "badge_color", default: "#663333"
+    t.index ["machine_id"], name: "index_hyrax_collection_types_on_machine_id", unique: true
+  end
+
+  create_table "hyrax_default_administrative_set", force: :cascade do |t|
+    t.string "default_admin_set_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "hyrax_features", force: :cascade do |t|
+    t.string "key", null: false
+    t.boolean "enabled", default: false, null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "job_io_wrappers", force: :cascade do |t|
+    t.bigint "user_id"
+    t.bigint "uploaded_file_id"
+    t.string "file_set_id"
+    t.string "mime_type"
+    t.string "original_name"
+    t.string "path"
+    t.string "relation"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["uploaded_file_id"], name: "index_job_io_wrappers_on_uploaded_file_id"
+    t.index ["user_id"], name: "index_job_io_wrappers_on_user_id"
+  end
+
+  create_table "mailboxer_conversation_opt_outs", id: :serial, force: :cascade do |t|
+    t.string "unsubscriber_type"
+    t.integer "unsubscriber_id"
+    t.integer "conversation_id"
+    t.index ["conversation_id"], name: "index_mailboxer_conversation_opt_outs_on_conversation_id"
+    t.index ["unsubscriber_id", "unsubscriber_type"], name: "index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type"
+  end
+
+  create_table "mailboxer_conversations", id: :serial, force: :cascade do |t|
+    t.string "subject", default: ""
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "mailboxer_notifications", id: :serial, force: :cascade do |t|
+    t.string "type"
+    t.text "body"
+    t.string "subject", default: ""
+    t.string "sender_type"
+    t.integer "sender_id"
+    t.integer "conversation_id"
+    t.boolean "draft", default: false
+    t.string "notification_code"
+    t.string "notified_object_type"
+    t.integer "notified_object_id"
+    t.string "attachment"
+    t.datetime "updated_at", null: false
+    t.datetime "created_at", null: false
+    t.boolean "global", default: false
+    t.datetime "expires"
+    t.index ["conversation_id"], name: "index_mailboxer_notifications_on_conversation_id"
+    t.index ["notified_object_id", "notified_object_type"], name: "index_mailboxer_notifications_on_notified_object_id_and_type"
+    t.index ["notified_object_type", "notified_object_id"], name: "mailboxer_notifications_notified_object"
+    t.index ["sender_id", "sender_type"], name: "index_mailboxer_notifications_on_sender_id_and_sender_type"
+    t.index ["type"], name: "index_mailboxer_notifications_on_type"
+  end
+
+  create_table "mailboxer_receipts", id: :serial, force: :cascade do |t|
+    t.string "receiver_type"
+    t.integer "receiver_id"
+    t.integer "notification_id", null: false
+    t.boolean "is_read", default: false
+    t.boolean "trashed", default: false
+    t.boolean "deleted", default: false
+    t.string "mailbox_type", limit: 25
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.boolean "is_delivered", default: false
+    t.string "delivery_method"
+    t.string "message_id"
+    t.index ["notification_id"], name: "index_mailboxer_receipts_on_notification_id"
+    t.index ["receiver_id", "receiver_type"], name: "index_mailboxer_receipts_on_receiver_id_and_receiver_type"
+  end
+
+  create_table "minter_states", id: :serial, force: :cascade do |t|
+    t.string "namespace", default: "default", null: false
+    t.string "template", null: false
+    t.text "counters"
+    t.bigint "seq", default: 0
+    t.binary "rand"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["namespace"], name: "index_minter_states_on_namespace", unique: true
+  end
+
+  create_table "permission_template_accesses", force: :cascade do |t|
+    t.bigint "permission_template_id"
+    t.string "agent_type"
+    t.string "agent_id"
+    t.string "access"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["permission_template_id", "agent_id", "agent_type", "access"], name: "uk_permission_template_accesses", unique: true
+    t.index ["permission_template_id"], name: "index_permission_template_accesses_on_permission_template_id"
+  end
+
+  create_table "permission_templates", force: :cascade do |t|
+    t.string "source_id"
+    t.string "visibility"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.date "release_date"
+    t.string "release_period"
+    t.index ["source_id"], name: "index_permission_templates_on_source_id", unique: true
+  end
+
+  create_table "proxy_deposit_requests", force: :cascade do |t|
+    t.string "work_id", null: false
+    t.bigint "sending_user_id", null: false
+    t.bigint "receiving_user_id", null: false
+    t.datetime "fulfillment_date"
+    t.string "status", default: "pending", null: false
+    t.text "sender_comment"
+    t.text "receiver_comment"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["receiving_user_id"], name: "index_proxy_deposit_requests_on_receiving_user_id"
+    t.index ["sending_user_id"], name: "index_proxy_deposit_requests_on_sending_user_id"
+  end
+
+  create_table "proxy_deposit_rights", force: :cascade do |t|
+    t.bigint "grantor_id"
+    t.bigint "grantee_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["grantee_id"], name: "index_proxy_deposit_rights_on_grantee_id"
+    t.index ["grantor_id"], name: "index_proxy_deposit_rights_on_grantor_id"
+  end
+
+  create_table "qa_local_authorities", force: :cascade do |t|
+    t.string "name"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["name"], name: "index_qa_local_authorities_on_name", unique: true
+  end
+
+  create_table "qa_local_authority_entries", force: :cascade do |t|
+    t.bigint "local_authority_id"
+    t.string "label"
+    t.string "uri"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["local_authority_id"], name: "index_qa_local_authority_entries_on_local_authority_id"
+    t.index ["uri"], name: "index_qa_local_authority_entries_on_uri", unique: true
+  end
+
+  create_table "roles", id: :serial, force: :cascade do |t|
+    t.string "name"
+  end
+
+  create_table "roles_users", id: false, force: :cascade do |t|
+    t.integer "role_id"
+    t.integer "user_id"
+    t.index ["role_id", "user_id"], name: "index_roles_users_on_role_id_and_user_id"
+    t.index ["role_id"], name: "index_roles_users_on_role_id"
+    t.index ["user_id", "role_id"], name: "index_roles_users_on_user_id_and_role_id"
+    t.index ["user_id"], name: "index_roles_users_on_user_id"
+  end
+
+  create_table "searches", id: :serial, force: :cascade do |t|
+    t.binary "query_params"
+    t.integer "user_id"
+    t.string "user_type"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["user_id"], name: "index_searches_on_user_id"
+  end
+
+  create_table "single_use_links", force: :cascade do |t|
+    t.string "download_key"
+    t.string "path"
+    t.string "item_id"
+    t.datetime "expires"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "sipity_agents", force: :cascade do |t|
+    t.string "proxy_for_id", null: false
+    t.string "proxy_for_type", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["proxy_for_id", "proxy_for_type"], name: "sipity_agents_proxy_for", unique: true
+  end
+
+  create_table "sipity_comments", force: :cascade do |t|
+    t.integer "entity_id", null: false
+    t.integer "agent_id", null: false
+    t.text "comment"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["agent_id"], name: "index_sipity_comments_on_agent_id"
+    t.index ["created_at"], name: "index_sipity_comments_on_created_at"
+    t.index ["entity_id"], name: "index_sipity_comments_on_entity_id"
+  end
+
+  create_table "sipity_entities", force: :cascade do |t|
+    t.string "proxy_for_global_id", null: false
+    t.integer "workflow_id", null: false
+    t.integer "workflow_state_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["proxy_for_global_id"], name: "sipity_entities_proxy_for_global_id", unique: true
+    t.index ["workflow_id"], name: "index_sipity_entities_on_workflow_id"
+    t.index ["workflow_state_id"], name: "index_sipity_entities_on_workflow_state_id"
+  end
+
+  create_table "sipity_entity_specific_responsibilities", force: :cascade do |t|
+    t.integer "workflow_role_id", null: false
+    t.integer "entity_id", null: false
+    t.integer "agent_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["agent_id"], name: "sipity_entity_specific_responsibilities_agent"
+    t.index ["entity_id"], name: "sipity_entity_specific_responsibilities_entity"
+    t.index ["workflow_role_id", "entity_id", "agent_id"], name: "sipity_entity_specific_responsibilities_aggregate", unique: true
+    t.index ["workflow_role_id"], name: "sipity_entity_specific_responsibilities_role"
+  end
+
+  create_table "sipity_notifiable_contexts", force: :cascade do |t|
+    t.integer "scope_for_notification_id", null: false
+    t.string "scope_for_notification_type", null: false
+    t.string "reason_for_notification", null: false
+    t.integer "notification_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["notification_id"], name: "sipity_notifiable_contexts_notification_id"
+    t.index ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification", "notification_id"], name: "sipity_notifiable_contexts_concern_surrogate", unique: true
+    t.index ["scope_for_notification_id", "scope_for_notification_type", "reason_for_notification"], name: "sipity_notifiable_contexts_concern_context"
+    t.index ["scope_for_notification_id", "scope_for_notification_type"], name: "sipity_notifiable_contexts_concern"
+  end
+
+  create_table "sipity_notification_recipients", force: :cascade do |t|
+    t.integer "notification_id", null: false
+    t.integer "role_id", null: false
+    t.string "recipient_strategy", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["notification_id", "role_id", "recipient_strategy"], name: "sipity_notifications_recipients_surrogate"
+    t.index ["notification_id"], name: "sipity_notification_recipients_notification"
+    t.index ["recipient_strategy"], name: "sipity_notification_recipients_recipient_strategy"
+    t.index ["role_id"], name: "sipity_notification_recipients_role"
+  end
+
+  create_table "sipity_notifications", force: :cascade do |t|
+    t.string "name", null: false
+    t.string "notification_type", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["name"], name: "index_sipity_notifications_on_name", unique: true
+    t.index ["notification_type"], name: "index_sipity_notifications_on_notification_type"
+  end
+
+  create_table "sipity_roles", force: :cascade do |t|
+    t.string "name", null: false
+    t.text "description"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["name"], name: "index_sipity_roles_on_name", unique: true
+  end
+
+  create_table "sipity_workflow_actions", force: :cascade do |t|
+    t.integer "workflow_id", null: false
+    t.integer "resulting_workflow_state_id"
+    t.string "name", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["resulting_workflow_state_id"], name: "sipity_workflow_actions_resulting_workflow_state"
+    t.index ["workflow_id", "name"], name: "sipity_workflow_actions_aggregate", unique: true
+    t.index ["workflow_id"], name: "sipity_workflow_actions_workflow"
+  end
+
+  create_table "sipity_workflow_methods", force: :cascade do |t|
+    t.string "service_name", null: false
+    t.integer "weight", null: false
+    t.integer "workflow_action_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["workflow_action_id"], name: "index_sipity_workflow_methods_on_workflow_action_id"
+  end
+
+  create_table "sipity_workflow_responsibilities", force: :cascade do |t|
+    t.integer "agent_id", null: false
+    t.integer "workflow_role_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["agent_id", "workflow_role_id"], name: "sipity_workflow_responsibilities_aggregate", unique: true
+  end
+
+  create_table "sipity_workflow_roles", force: :cascade do |t|
+    t.integer "workflow_id", null: false
+    t.integer "role_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["workflow_id", "role_id"], name: "sipity_workflow_roles_aggregate", unique: true
+  end
+
+  create_table "sipity_workflow_state_action_permissions", force: :cascade do |t|
+    t.integer "workflow_role_id", null: false
+    t.integer "workflow_state_action_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["workflow_role_id", "workflow_state_action_id"], name: "sipity_workflow_state_action_permissions_aggregate", unique: true
+  end
+
+  create_table "sipity_workflow_state_actions", force: :cascade do |t|
+    t.integer "originating_workflow_state_id", null: false
+    t.integer "workflow_action_id", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["originating_workflow_state_id", "workflow_action_id"], name: "sipity_workflow_state_actions_aggregate", unique: true
+  end
+
+  create_table "sipity_workflow_states", force: :cascade do |t|
+    t.integer "workflow_id", null: false
+    t.string "name", null: false
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["name"], name: "index_sipity_workflow_states_on_name"
+    t.index ["workflow_id", "name"], name: "sipity_type_state_aggregate", unique: true
+  end
+
+  create_table "sipity_workflows", force: :cascade do |t|
+    t.string "name", null: false
+    t.string "label"
+    t.text "description"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.integer "permission_template_id"
+    t.boolean "active"
+    t.boolean "allows_access_grant"
+    t.index ["permission_template_id", "name"], name: "index_sipity_workflows_on_permission_template_and_name", unique: true
+  end
+
+  create_table "tinymce_assets", force: :cascade do |t|
+    t.string "file"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "trophies", force: :cascade do |t|
+    t.integer "user_id"
+    t.string "work_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "uploaded_files", force: :cascade do |t|
+    t.string "file"
+    t.bigint "user_id"
+    t.string "file_set_uri"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.index ["file_set_uri"], name: "index_uploaded_files_on_file_set_uri"
+    t.index ["user_id"], name: "index_uploaded_files_on_user_id"
+  end
+
+  create_table "user_stats", force: :cascade do |t|
+    t.integer "user_id"
+    t.datetime "date"
+    t.integer "file_views"
+    t.integer "file_downloads"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.integer "work_views"
+    t.index ["user_id"], name: "index_user_stats_on_user_id"
+  end
+
+  create_table "users", force: :cascade do |t|
+    t.string "email", default: "", null: false
+    t.string "encrypted_password", default: "", null: false
+    t.string "reset_password_token"
+    t.datetime "reset_password_sent_at"
+    t.datetime "remember_created_at"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.boolean "guest", default: false
+    t.string "facebook_handle"
+    t.string "twitter_handle"
+    t.string "googleplus_handle"
+    t.string "display_name"
+    t.string "address"
+    t.string "admin_area"
+    t.string "department"
+    t.string "title"
+    t.string "office"
+    t.string "chat_id"
+    t.string "website"
+    t.string "affiliation"
+    t.string "telephone"
+    t.string "avatar_file_name"
+    t.string "avatar_content_type"
+    t.integer "avatar_file_size"
+    t.datetime "avatar_updated_at"
+    t.string "linkedin_handle"
+    t.string "orcid"
+    t.string "arkivo_token"
+    t.string "arkivo_subscription"
+    t.binary "zotero_token"
+    t.string "zotero_userid"
+    t.string "preferred_locale"
+    t.index ["email"], name: "index_users_on_email", unique: true
+    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
+  end
+
+  create_table "version_committers", force: :cascade do |t|
+    t.string "obj_id"
+    t.string "datastream_id"
+    t.string "version_id"
+    t.string "committer_login"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+  end
+
+  create_table "work_view_stats", force: :cascade do |t|
+    t.datetime "date"
+    t.integer "work_views"
+    t.string "work_id"
+    t.datetime "created_at", null: false
+    t.datetime "updated_at", null: false
+    t.integer "user_id"
+    t.index ["user_id"], name: "index_work_view_stats_on_user_id"
+    t.index ["work_id"], name: "index_work_view_stats_on_work_id"
+  end
+
+  add_foreign_key "collection_type_participants", "hyrax_collection_types"
+  add_foreign_key "curation_concerns_operations", "users"
+  add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", column: "conversation_id", name: "mb_opt_outs_on_conversations_id"
+  add_foreign_key "mailboxer_notifications", "mailboxer_conversations", column: "conversation_id", name: "notifications_on_conversation_id"
+  add_foreign_key "mailboxer_receipts", "mailboxer_notifications", column: "notification_id", name: "receipts_on_notification_id"
+  add_foreign_key "permission_template_accesses", "permission_templates"
+  add_foreign_key "qa_local_authority_entries", "qa_local_authorities", column: "local_authority_id"
+  add_foreign_key "uploaded_files", "users"
+end
diff --git a/hyrax/db/seeds.rb b/hyrax/db/seeds.rb
new file mode 100644
index 00000000..1beea2ac
--- /dev/null
+++ b/hyrax/db/seeds.rb
@@ -0,0 +1,7 @@
+# This file should contain all the record creation needed to seed the database with its default values.
+# The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup).
+#
+# Examples:
+#
+#   movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }])
+#   Character.create(name: 'Luke', movie: movies.first)
diff --git a/hyrax/docker-entrypoint.sh b/hyrax/docker-entrypoint.sh
new file mode 100644
index 00000000..2521c602
--- /dev/null
+++ b/hyrax/docker-entrypoint.sh
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+echo "Creating log folder"
+mkdir -p $APP_WORKDIR/log
+
+if [ "$RAILS_ENV" = "production" ]; then
+    # Verify all the production gems are installed
+    bundle check
+else
+    # install any missing development gems (as we can tweak the development container without rebuilding it)
+    bundle check || bundle install --without production
+fi
+
+## Run any pending migrations, if the database exists
+## If not setup the database
+bundle exec rake db:exists && bundle exec rake db:migrate || bundle exec rake db:setup
+
+# Check solr and fedora are running
+n=0
+solr_running=false
+fedora_running=false
+while [[ $n -lt 15 ]]
+do
+    # check Solr is running
+    if [ "solr_running" = false ] ; then
+      SOLR=$(curl --silent --connect-timeout 45 "http://${SOLR_HOST:-solr}:${SOLR_PORT:-8983}/solr/" | grep "Apache SOLR")
+      if [ -n "$SOLR" ] ; then
+          echo "Solr is running"
+          solr_running=true
+      fi
+    fi
+
+    # check Fedora is running
+    if [ "fedora_running" = false ] ; then
+      FEDORA=$(curl --silent --connect-timeout 45 "http://${FEDORA_HOST:-fcrepo}:${FEDORA_PORT:-8080}/fcrepo/" | grep "Fedora Commons Repository")
+      if [ -n "$FEDORA" ] ; then
+          echo "Fedora is running"
+          fedora_running=true
+      fi
+    fi
+
+    if [ "solr_running" = true ] &&  [ "fedora_running" = true ] ; then
+      break
+    else
+      sleep 1
+    fi
+    n=$(( n+1 ))
+done
+
+# Exit if Solr is not running
+if [ "solr_running" = false ] ; then
+    echo "ERROR: Solr is not running"
+    exit 1
+fi
+
+# Exit if Fedora is not running
+if [ "fedora_running" = false ] ; then
+    echo "ERROR: Fedora is not running"
+    exit 1
+fi
+
+echo "Setting up hyrax... (this can take a few minutes)"
+bundle exec rake rdms:setup_hyrax["seed/setup.json"]
+
+# echo "--------- Starting Hyrax in $RAILS_ENV mode ---------"
+rm -f /tmp/hyrax.pid
+bundle exec rails server -p 3000 -b '0.0.0.0' --pid /tmp/hyrax.pid
diff --git a/hyrax/lib/assets/.keep b/hyrax/lib/assets/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/lib/tasks/.keep b/hyrax/lib/tasks/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/lib/tasks/db_exists.rake b/hyrax/lib/tasks/db_exists.rake
new file mode 100644
index 00000000..4103f4ab
--- /dev/null
+++ b/hyrax/lib/tasks/db_exists.rake
@@ -0,0 +1,13 @@
+namespace :db do
+  desc "Checks to see if the database exists"
+  task :exists do
+    begin
+      Rake::Task['environment'].invoke
+      ActiveRecord::Base.connection
+    rescue
+      exit 1
+    else
+      exit 0
+    end
+  end
+end
diff --git a/hyrax/lib/tasks/setup_hyrax.rake b/hyrax/lib/tasks/setup_hyrax.rake
new file mode 100644
index 00000000..0f9a38d4
--- /dev/null
+++ b/hyrax/lib/tasks/setup_hyrax.rake
@@ -0,0 +1,48 @@
+namespace :rdms do
+  desc 'Setup Hyrax, will read from specified file usage: rdms:setup_hyrax["setup.json"]'
+  task :"setup_hyrax", [:seedfile] => :environment do |task, args|
+    seedfile = args.seedfile
+    unless args.seedfile.present?
+      seedfile = Rails.root.join("seed","setup.json")
+    end
+
+    if (File.exists?(seedfile))
+      puts("Running hyrax setup from seedfile: #{seedfile}")
+    else
+      abort("ERROR: missing seedfile for hyrax setup: #{seedfile}")
+    end
+
+    seed = JSON.parse(File.read(seedfile))
+
+    ##############################################
+    # make the requested users
+    ######
+
+    admin = Role.where(name: "admin").first_or_create!
+    seed["users"].each do |user|
+      newUser = User.where(email: user["email"]).first_or_create!(password: user["password"], display_name: user["name"])
+      if user["role"] == "admin"
+        unless admin.users.include?(newUser)
+          admin.users << newUser
+          admin.save!
+        end
+      end
+    end
+
+    # finished creating users
+    ##############################################
+
+
+    ##############################################
+    # Create default administrative set and load workflow
+    ######
+    Rake::Task['hyrax:default_admin_set:create'].invoke
+    Rake::Task['hyrax:workflow:load'].invoke
+    Rake::Task['hyrax:default_collection_types:create'].invoke
+
+    ##############################################
+    # Create languages controlled vocabulary
+    ######
+    Rake::Task['hyrax:controlled_vocabularies:language'].invoke if Qa::Authorities::Local.subauthority_for('languages').all.size == 0
+  end
+end
diff --git a/hyrax/lib/tasks/test_servers.rake b/hyrax/lib/tasks/test_servers.rake
new file mode 100644
index 00000000..cf44f3a1
--- /dev/null
+++ b/hyrax/lib/tasks/test_servers.rake
@@ -0,0 +1,60 @@
+FEDORA_PID_FILE = 'tmp/.fedora-test.pid'
+SOLR_PID_FILE = 'tmp/.solr-test.pid'
+MINTER_FILE = 'tmp/minter'
+
+namespace :test do
+  namespace :servers do
+
+    desc "Load the solr options and solr instance"
+    task :environment do
+      abort "ERROR: must be run with RAILS_ENV=test (currently: #{ENV['RAILS_ENV']})" unless ENV['RAILS_ENV'] == 'test'
+
+      SolrWrapper.default_instance_options =  { config: 'config/solr_wrapper_test.yml' }
+      @solr_instance = SolrWrapper.default_instance
+      @fcrepo_instance = FcrepoWrapper.default_instance(config: 'config/fcrepo_wrapper_test.yml')
+    end
+
+    desc 'Starts a test Solr and Fedora instance for running cucumber tests'
+    task :start => :environment do
+      abort "WARNING: Solr-test is already running; run \"rake test:servers:stop\" to stop it" if File.exists?(SOLR_PID_FILE)
+      abort "WARNING: Fedora-test is already running; run \"rake test:servers:stop\" to stop it" if File.exists?(FEDORA_PID_FILE)
+
+      # clean out any old solr files
+      @solr_instance.remove_instance_dir!
+      @solr_instance.extract_and_configure
+
+      # start solr
+      @solr_instance.start
+      # create the core - a bit of a bodge is required to get the correct collection options
+      collection_options = HashWithIndifferentAccess.new(@solr_instance.config.options[:collection].except(:name))
+      @solr_instance.create(collection_options)
+      File.write(SOLR_PID_FILE, @solr_instance.pid)
+
+      # start fedora
+      @fcrepo_instance.remove_instance_dir!
+      @fcrepo_instance.start
+      File.write(FEDORA_PID_FILE, @fcrepo_instance.pid)
+    end
+
+    task :stop => :environment do
+      # kill fedora and clean up
+      if File.exists?(FEDORA_PID_FILE)
+        # NB: we cannot use @fcrepo_instance.stop here as the @instance does not know its PID, so kill in the conventional way instead
+        Process.kill 'HUP', File.read(FEDORA_PID_FILE).to_i
+        File.delete(FEDORA_PID_FILE)
+        sleep(0.5)
+        @fcrepo_instance.remove_instance_dir!
+      end
+
+      # stop solr and clean up
+      if File.exists?(SOLR_PID_FILE)
+        @solr_instance.stop
+        File.delete(SOLR_PID_FILE)
+        @solr_instance.remove_instance_dir!
+      end
+
+      # delete the test minter file
+      File.delete(MINTER_FILE) if File.exists?(MINTER_FILE)
+    end
+  end
+end
diff --git a/hyrax/log/.keep b/hyrax/log/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/package.json b/hyrax/package.json
new file mode 100644
index 00000000..571cadee
--- /dev/null
+++ b/hyrax/package.json
@@ -0,0 +1,17 @@
+{
+  "name": "hyrax",
+  "private": true,
+  "repository": "git@github.com:samvera/hyrax.git",
+  "dependencies": {
+  "universalviewer": "^3.0.16"
+},
+"scripts": {
+  "preinstall": "rm -rf ./public/uv",
+  "postinstall": "yarn run uv-install && yarn run uv-config",
+  "uv-install": "shx cp -r ./node_modules/universalviewer/dist ./public/uv",
+  "uv-config": "shx cp ./config/uv/uv.html ./public/uv/uv.html & shx cp ./config/uv/uv-config.json ./public/uv/"
+  },
+  "devDependencies": {
+  "shx": "^0.3.2"
+  }
+}
diff --git a/hyrax/public/404.html b/hyrax/public/404.html
new file mode 100644
index 00000000..2be3af26
--- /dev/null
+++ b/hyrax/public/404.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The page you were looking for doesn't exist (404)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/404.html -->
+  <div class="dialog">
+    <div>
+      <h1>The page you were looking for doesn't exist.</h1>
+      <p>You may have mistyped the address or the page may have moved.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/hyrax/public/422.html b/hyrax/public/422.html
new file mode 100644
index 00000000..c08eac0d
--- /dev/null
+++ b/hyrax/public/422.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>The change you wanted was rejected (422)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/422.html -->
+  <div class="dialog">
+    <div>
+      <h1>The change you wanted was rejected.</h1>
+      <p>Maybe you tried to change something you didn't have access to.</p>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/hyrax/public/500.html b/hyrax/public/500.html
new file mode 100644
index 00000000..78a030af
--- /dev/null
+++ b/hyrax/public/500.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <title>We're sorry, but something went wrong (500)</title>
+  <meta name="viewport" content="width=device-width,initial-scale=1">
+  <style>
+  .rails-default-error-page {
+    background-color: #EFEFEF;
+    color: #2E2F30;
+    text-align: center;
+    font-family: arial, sans-serif;
+    margin: 0;
+  }
+
+  .rails-default-error-page div.dialog {
+    width: 95%;
+    max-width: 33em;
+    margin: 4em auto 0;
+  }
+
+  .rails-default-error-page div.dialog > div {
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #BBB;
+    border-top: #B00100 solid 4px;
+    border-top-left-radius: 9px;
+    border-top-right-radius: 9px;
+    background-color: white;
+    padding: 7px 12% 0;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+
+  .rails-default-error-page h1 {
+    font-size: 100%;
+    color: #730E15;
+    line-height: 1.5em;
+  }
+
+  .rails-default-error-page div.dialog > p {
+    margin: 0 0 1em;
+    padding: 1em;
+    background-color: #F7F7F7;
+    border: 1px solid #CCC;
+    border-right-color: #999;
+    border-left-color: #999;
+    border-bottom-color: #999;
+    border-bottom-left-radius: 4px;
+    border-bottom-right-radius: 4px;
+    border-top-color: #DADADA;
+    color: #666;
+    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
+  }
+  </style>
+</head>
+
+<body class="rails-default-error-page">
+  <!-- This file lives in public/500.html -->
+  <div class="dialog">
+    <div>
+      <h1>We're sorry, but something went wrong.</h1>
+    </div>
+    <p>If you are the application owner check the logs for more information.</p>
+  </div>
+</body>
+</html>
diff --git a/hyrax/public/apple-touch-icon-precomposed.png b/hyrax/public/apple-touch-icon-precomposed.png
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/public/apple-touch-icon.png b/hyrax/public/apple-touch-icon.png
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/public/favicon.ico b/hyrax/public/favicon.ico
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/public/robots.txt b/hyrax/public/robots.txt
new file mode 100644
index 00000000..37b576a4
--- /dev/null
+++ b/hyrax/public/robots.txt
@@ -0,0 +1 @@
+# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
diff --git a/hyrax/seed/.keep b/hyrax/seed/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/seed/setup.json b/hyrax/seed/setup.json
new file mode 100644
index 00000000..7aa4540a
--- /dev/null
+++ b/hyrax/seed/setup.json
@@ -0,0 +1,22 @@
+{
+  "users": [{
+      "email": "admin@hyrax",
+      "password": "password",
+      "name": "hyrax Admin",
+      "role": "admin"
+    },
+    {
+      "email": "user@hyrax",
+      "password": "demouser",
+      "name": "Demo User",
+      "role": "user",
+      "depositor": true
+    },
+    {
+      "email": "workflow@hyrax",
+      "password": "workflow",
+      "name": "Workflow Admin",
+      "role": "admin"
+    }
+  ]
+}
diff --git a/hyrax/solr/conf/_rest_managed.json b/hyrax/solr/conf/_rest_managed.json
new file mode 100644
index 00000000..e7ada3f6
--- /dev/null
+++ b/hyrax/solr/conf/_rest_managed.json
@@ -0,0 +1,3 @@
+{
+  "initArgs":{},
+  "managedList":[]}
\ No newline at end of file
diff --git a/hyrax/solr/conf/admin-extra.html b/hyrax/solr/conf/admin-extra.html
new file mode 100644
index 00000000..21b50901
--- /dev/null
+++ b/hyrax/solr/conf/admin-extra.html
@@ -0,0 +1,31 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+
+<!-- The content of this page will be statically included into the top
+of the admin page.  Uncomment this as an example to see there the content
+will show up.
+
+<hr>
+<i>This line will appear before the first table</i>
+<tr>
+<td colspan="2">
+This row will be appended to the end of the first table
+</td>
+</tr>
+<hr>
+
+-->
diff --git a/hyrax/solr/conf/elevate.xml b/hyrax/solr/conf/elevate.xml
new file mode 100644
index 00000000..b91e75ce
--- /dev/null
+++ b/hyrax/solr/conf/elevate.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+
+<!-- If this file is found in the config directory, it will only be
+     loaded once at startup.  If it is found in Solr's data
+     directory, it will be re-loaded every commit.
+-->
+
+<elevate>
+ <query text="foo bar">
+  <doc id="1" />
+  <doc id="2" />
+  <doc id="3" />
+ </query>
+ 
+ <query text="ipod">
+   <doc id="MA147LL/A" />  <!-- put the actual ipod at the top -->
+   <doc id="IW-02" exclude="true" /> <!-- exclude this cable -->
+ </query>
+ 
+</elevate>
diff --git a/hyrax/solr/conf/mapping-ISOLatin1Accent.txt b/hyrax/solr/conf/mapping-ISOLatin1Accent.txt
new file mode 100644
index 00000000..186ca313
--- /dev/null
+++ b/hyrax/solr/conf/mapping-ISOLatin1Accent.txt
@@ -0,0 +1,246 @@
+# The ASF licenses this file to You 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.
+
+# Syntax:
+#   "source" => "target"
+#     "source".length() > 0 (source cannot be empty.)
+#     "target".length() >= 0 (target can be empty.)
+
+# example:
+#   "??" => "A"
+#   "\u00C0" => "A"
+#   "\u00C0" => "\u0041"
+#   "??" => "ss"
+#   "\t" => " "
+#   "\n" => ""
+
+# ?? => A
+"\u00C0" => "A"
+
+# ?? => A
+"\u00C1" => "A"
+
+# ?? => A
+"\u00C2" => "A"
+
+# ?? => A
+"\u00C3" => "A"
+
+# ?? => A
+"\u00C4" => "A"
+
+# ?? => A
+"\u00C5" => "A"
+
+# ?? => AE
+"\u00C6" => "AE"
+
+# ?? => C
+"\u00C7" => "C"
+
+# ?? => E
+"\u00C8" => "E"
+
+# ?? => E
+"\u00C9" => "E"
+
+# ?? => E
+"\u00CA" => "E"
+
+# ?? => E
+"\u00CB" => "E"
+
+# ?? => I
+"\u00CC" => "I"
+
+# ?? => I
+"\u00CD" => "I"
+
+# ?? => I
+"\u00CE" => "I"
+
+# ?? => I
+"\u00CF" => "I"
+
+# ?? => IJ
+"\u0132" => "IJ"
+
+# ?? => D
+"\u00D0" => "D"
+
+# ?? => N
+"\u00D1" => "N"
+
+# ?? => O
+"\u00D2" => "O"
+
+# ?? => O
+"\u00D3" => "O"
+
+# ?? => O
+"\u00D4" => "O"
+
+# ?? => O
+"\u00D5" => "O"
+
+# ?? => O
+"\u00D6" => "O"
+
+# ?? => O
+"\u00D8" => "O"
+
+# ?? => OE
+"\u0152" => "OE"
+
+# ??
+"\u00DE" => "TH"
+
+# ?? => U
+"\u00D9" => "U"
+
+# ?? => U
+"\u00DA" => "U"
+
+# ?? => U
+"\u00DB" => "U"
+
+# ?? => U
+"\u00DC" => "U"
+
+# ?? => Y
+"\u00DD" => "Y"
+
+# ?? => Y
+"\u0178" => "Y"
+
+# ?? => a
+"\u00E0" => "a"
+
+# ?? => a
+"\u00E1" => "a"
+
+# ?? => a
+"\u00E2" => "a"
+
+# ?? => a
+"\u00E3" => "a"
+
+# ?? => a
+"\u00E4" => "a"
+
+# ?? => a
+"\u00E5" => "a"
+
+# ?? => ae
+"\u00E6" => "ae"
+
+# ?? => c
+"\u00E7" => "c"
+
+# ?? => e
+"\u00E8" => "e"
+
+# ?? => e
+"\u00E9" => "e"
+
+# ?? => e
+"\u00EA" => "e"
+
+# ?? => e
+"\u00EB" => "e"
+
+# ?? => i
+"\u00EC" => "i"
+
+# ?? => i
+"\u00ED" => "i"
+
+# ?? => i
+"\u00EE" => "i"
+
+# ?? => i
+"\u00EF" => "i"
+
+# ?? => ij
+"\u0133" => "ij"
+
+# ?? => d
+"\u00F0" => "d"
+
+# ?? => n
+"\u00F1" => "n"
+
+# ?? => o
+"\u00F2" => "o"
+
+# ?? => o
+"\u00F3" => "o"
+
+# ?? => o
+"\u00F4" => "o"
+
+# ?? => o
+"\u00F5" => "o"
+
+# ?? => o
+"\u00F6" => "o"
+
+# ?? => o
+"\u00F8" => "o"
+
+# ?? => oe
+"\u0153" => "oe"
+
+# ?? => ss
+"\u00DF" => "ss"
+
+# ?? => th
+"\u00FE" => "th"
+
+# ?? => u
+"\u00F9" => "u"
+
+# ?? => u
+"\u00FA" => "u"
+
+# ?? => u
+"\u00FB" => "u"
+
+# ?? => u
+"\u00FC" => "u"
+
+# ?? => y
+"\u00FD" => "y"
+
+# ?? => y
+"\u00FF" => "y"
+
+# ??? => ff
+"\uFB00" => "ff"
+
+# ??? => fi
+"\uFB01" => "fi"
+
+# ??? => fl
+"\uFB02" => "fl"
+
+# ??? => ffi
+"\uFB03" => "ffi"
+
+# ??? => ffl
+"\uFB04" => "ffl"
+
+# ??? => ft
+"\uFB05" => "ft"
+
+# ??? => st
+"\uFB06" => "st"
diff --git a/hyrax/solr/conf/protwords.txt b/hyrax/solr/conf/protwords.txt
new file mode 100644
index 00000000..5a32e503
--- /dev/null
+++ b/hyrax/solr/conf/protwords.txt
@@ -0,0 +1,21 @@
+# The ASF licenses this file to You 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.
+
+#-----------------------------------------------------------------------
+# Use a protected word file to protect against the stemmer reducing two
+# unrelated words to the same base word.
+
+# Some non-words that normally won't be encountered,
+# just to test that they won't be stemmed.
+dontstems
+zwhacky
+
diff --git a/hyrax/solr/conf/schema.xml b/hyrax/solr/conf/schema.xml
new file mode 100644
index 00000000..19697ecd
--- /dev/null
+++ b/hyrax/solr/conf/schema.xml
@@ -0,0 +1,367 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+
+<!--
+ This is the Solr schema file. This file should be named "schema.xml" and
+ should be in the conf directory under the solr home
+ (i.e. ./solr/conf/schema.xml by default)
+ or located where the classloader for the Solr webapp can find it.
+
+ This example schema is the recommended starting point for users.
+ It should be kept correct and concise, usable out-of-the-box.
+
+ For more information, on how to customize this file, please see
+ http://wiki.apache.org/solr/SchemaXml
+
+ PERFORMANCE NOTE: this schema includes many optional features and should not
+ be used for benchmarking.  To improve performance one could
+  - set stored="false" for all fields possible (esp large fields) when you
+    only need to search on the field but don't need to return the original
+    value.
+  - set indexed="false" if you don't need to search on the field, but only
+    return the field as a result of searching on other indexed fields.
+  - remove all unneeded copyField statements
+  - for best index size and searching performance, set "index" to false
+    for all general text fields, use copyField to copy them to the
+    catchall "text" field, and use that for searching.
+  - For maximum indexing performance, use the StreamingUpdateSolrServer
+    java client.
+  - Remember to run the JVM in server mode, and use a higher logging level
+    that avoids logging every request
+-->
+
+<schema name="Hydra Demo Index" version="1.5">
+  <!-- attribute "name" is the name of this schema and is only used for display purposes.
+       Applications should change this to reflect the nature of the search collection.
+       version="1.5" is Solr's version number for the schema syntax and semantics.  It should
+       not normally be changed by applications.
+       1.0: multiValued attribute did not exist, all fields are multiValued by nature
+       1.1: multiValued attribute introduced, false by default
+       1.2: omitTermFreqAndPositions attribute introduced, true by default except for text fields.
+       1.3: removed optional field compress feature
+       1.4: default auto-phrase (QueryParser feature) to off
+       1.5: omitNorms defaults to true for primitive field types (int, float, boolean, string...)
+# TODO 1.6: useDocValuesAsStored defaults to true.
+# See https://github.com/samvera/active_fedora/issues/1346
+     -->
+
+  <types>
+    <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
+    <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true"/>
+    <fieldType name="rand" class="solr.RandomSortField" omitNorms="true"/>
+
+    <!-- Default numeric field types.  -->
+    <fieldType name="int" class="solr.IntPointField" docValues="true"/>
+    <fieldType name="float" class="solr.FloatPointField" docValues="true"/>
+    <fieldType name="long" class="solr.LongPointField" docValues="true"/>
+    <fieldType name="double" class="solr.DoublePointField" docValues="true"/>
+
+    <!-- PointField numeric field types for faster range queries -->
+    <fieldType name="tint" class="solr.IntPointField" docValues="true"/>
+    <fieldType name="tfloat" class="solr.FloatPointField" docValues="true"/>
+    <fieldType name="tlong" class="solr.LongPointField" docValues="true"/>
+    <fieldType name="tdouble" class="solr.DoublePointField" docValues="true"/>
+
+    <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
+         Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z
+      -->
+    <fieldType name="date" class="solr.DatePointField" docValues="true"/>
+    <!-- A PointField based date field for faster date range queries and date faceting. -->
+    <fieldType name="tdate" class="solr.DatePointField" docValues="true"/>
+    <!-- A DateRange based date field for truly faster date range queries. -->
+    <fieldType name="dateRange" class="solr.DateRangeField" omitNorms="true" omitTermFreqAndPositions="true"/>
+
+    <!-- This point type indexes the coordinates as separate fields (subFields)
+      If subFieldType is defined, it references a type, and a dynamic field
+      definition is created matching *___<typename>.  Alternately, if
+      subFieldSuffix is defined, that is used to create the subFields.
+      Example: if subFieldType="double", then the coordinates would be
+        indexed in fields myloc_0___double,myloc_1___double.
+      Example: if subFieldSuffix="_d" then the coordinates would be indexed
+        in fields myloc_0_d,myloc_1_d
+      The subFields are an implementation detail of the fieldType, and end
+      users normally should not need to know about them.
+     -->
+    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
+
+    <!-- A geospatial field type new to Solr 4.  It supports multiValued and polygon shapes.
+      For more information about this and other Spatial fields new to Solr 4, see:
+      http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
+    -->
+    <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
+      geo="true" distErrPct="0.025" maxDistErr="0.000009" distanceUnits="degrees" />
+
+    <fieldType name="text" class="solr.TextField" omitNorms="false">
+      <analyzer>
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>  <!-- NFKC, case folding, diacritics removed -->
+        <filter class="solr.TrimFilterFactory"/>
+      </analyzer>
+    </fieldType>
+
+    <!-- A text field that only splits on whitespace for exact matching of words -->
+    <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100">
+      <analyzer>
+        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
+        <filter class="solr.TrimFilterFactory"/>
+      </analyzer>
+    </fieldType>
+
+    <!-- single token analyzed text, for sorting.  Punctuation is significant. -->
+    <fieldtype name="alphaSort" class="solr.TextField" sortMissingLast="true" omitNorms="true">
+      <analyzer>
+        <tokenizer class="solr.KeywordTokenizerFactory" />
+        <filter class="solr.ICUFoldingFilterFactory"/>
+        <filter class="solr.TrimFilterFactory" />
+      </analyzer>
+    </fieldtype>
+
+    <!-- A text field with defaults appropriate for English -->
+    <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
+      <analyzer>
+        <tokenizer class="solr.ICUTokenizerFactory"/>
+        <filter class="solr.ICUFoldingFilterFactory"/>  <!-- NFKC, case folding, diacritics removed -->
+        <filter class="solr.EnglishPossessiveFilterFactory"/>
+        <!-- EnglishMinimalStemFilterFactory is less aggressive than PorterStemFilterFactory: -->
+        <filter class="solr.EnglishMinimalStemFilterFactory"/>
+        <!--
+        <filter class="solr.PorterStemFilterFactory"/>
+        -->
+        <filter class="solr.TrimFilterFactory"/>
+      </analyzer>
+    </fieldType>
+
+    <!-- queries for paths match documents at that path, or in descendent paths -->
+    <fieldType name="descendent_path" class="solr.TextField">
+      <analyzer type="index">
+        <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.KeywordTokenizerFactory" />
+      </analyzer>
+    </fieldType>
+
+    <!-- queries for paths match documents at that path, or in ancestor paths -->
+    <fieldType name="ancestor_path" class="solr.TextField">
+      <analyzer type="index">
+        <tokenizer class="solr.KeywordTokenizerFactory" />
+      </analyzer>
+      <analyzer type="query">
+        <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="/" />
+      </analyzer>
+    </fieldType>
+
+    <fieldType class="solr.TextField" name="textSuggest" positionIncrementGap="100">
+      <analyzer>
+        <tokenizer class="solr.KeywordTokenizerFactory"/>
+        <filter class="solr.LowerCaseFilterFactory"/>
+        <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
+      </analyzer>
+    </fieldType>
+  </types>
+
+
+  <fields>
+    <!-- If you remove this field, you must _also_ disable the update log in solrconfig.xml
+    or Solr won't start. _version_ and update log are required for SolrCloud
+    -->
+    <field name="_version_" type="long" indexed="true" stored="true"/>
+
+    <field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/>
+    <field name="timestamp" type="date" indexed="true" stored="true" default="NOW" multiValued="false"/>
+
+    <field name="lat" type="tdouble" stored="true" indexed="true" multiValued="false"/>
+    <field name="lng" type="tdouble" stored="true" indexed="true" multiValued="false"/>
+
+    <!-- NOTE:  not all possible Solr field types are represented in the dynamic fields -->
+
+    <!-- text (_t...) -->
+    <dynamicField name="*_ti" type="text" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_tim" type="text" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_ts" type="text" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_tsm" type="text" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_tsi" type="text" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_tsim" type="text" stored="true" indexed="true" multiValued="true"/>
+    <dynamicField name="*_tiv" type="text" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_tsiv" type="text" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_tsimv" type="text" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
+
+    <!-- English text (_te...) -->
+    <dynamicField name="*_tei" type="text_en" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_teim" type="text_en" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_tes" type="text_en" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_tesm" type="text_en" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_tesi" type="text_en" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_tesim" type="text_en" stored="true" indexed="true" multiValued="true"/>
+    <dynamicField name="*_teiv" type="text_en" stored="false" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_teimv" type="text_en" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_tesiv" type="text_en" stored="true" indexed="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
+    <dynamicField name="*_tesimv" type="text_en" stored="true" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
+
+    <!-- string (_s...) -->
+    <dynamicField name="*_si" type="string" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_sim" type="string" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_ss" type="string" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_ssm" type="string" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_ssi" type="string" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_ssim" type="string" stored="true" indexed="true" multiValued="true"/>
+    <dynamicField name="*_ssort" type="alphaSort" stored="false" indexed="true" multiValued="false"/>
+
+    <!-- integer (_i...) -->
+    <dynamicField name="*_ii" type="int" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_iim" type="int" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_is" type="int" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_ism" type="int" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_isi" type="int" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_isim" type="int" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- IntegerPointField (_it...) (for faster range queries) -->
+    <dynamicField name="*_iti" type="tint" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_itim" type="tint" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_its" type="tint" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_itsm" type="tint" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_itsi" type="tint" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_itsim" type="tint" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- date (_dt...) -->
+    <!-- The format for this date field is of the form 1995-12-31T23:59:59Z
+         Optional fractional seconds are allowed: 1995-12-31T23:59:59.999Z -->
+    <dynamicField name="*_dti" type="date" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dtim" type="date" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_dts" type="date" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_dtsm" type="date" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_dtsi" type="date" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dtsim" type="date" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- DatePointField (_dtt...) (for faster range queries) -->
+    <dynamicField name="*_dtti" type="tdate" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dttim" type="tdate" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_dtts" type="tdate" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_dttsm" type="tdate" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_dttsi" type="tdate" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dttsim" type="tdate" stored="true" indexed="true" multiValued="true"/>
+
+
+    <!-- date range (_dr...) (for faster AND better range queries) -->
+    <dynamicField name="*_dri" type="dateRange" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_drim" type="dateRange" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_drsi" type="dateRange" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_drsim" type="dateRange" stored="true" indexed="true" multiValued="true"/>
+    <dynamicField name="*_drs" type="dateRange" stored="true" indexed="true" multiValued="false"/> <!-- indexed anyway because DateRangeField errors otherwise -->
+    <dynamicField name="*_drsm" type="dateRange" stored="true" indexed="true" multiValued="true"/> <!-- indexed anyway because DateRangeField errors otherwise -->
+
+    <!-- long (_l...) -->
+    <dynamicField name="*_li" type="long" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_lim" type="long" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_ls" type="long" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_lsm" type="long" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_lsi" type="long" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_lsim" type="long" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- LongPointField (_lt...) (for faster range queries) -->
+    <dynamicField name="*_lti" type="tlong" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_ltim" type="tlong" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_lts" type="tlong" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_ltsm" type="tlong" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_ltsi" type="tlong" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_ltsim" type="tlong" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- double (_db...) -->
+    <dynamicField name="*_dbi" type="double" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dbim" type="double" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_dbs" type="double" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_dbsm" type="double" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_dbsi" type="double" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dbsim" type="double" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- DoublePointField (_dbt...) (for faster range queries) -->
+    <dynamicField name="*_dbti" type="tdouble" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dbtim" type="tdouble" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_dbts" type="tdouble" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_dbtsm" type="tdouble" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_dbtsi" type="tdouble" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_dbtsim" type="tdouble" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- float (_f...) -->
+    <dynamicField name="*_fi" type="float" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_fim" type="float" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_fs" type="float" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_fsm" type="float" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_fsi" type="float" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_fsim" type="float" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- FloatPointField (_ft...) (for faster range queries) -->
+    <dynamicField name="*_fti" type="tfloat" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_ftim" type="tfloat" stored="false" indexed="true" multiValued="true"/>
+    <dynamicField name="*_fts" type="tfloat" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_ftsm" type="tfloat" stored="true" indexed="false" multiValued="true"/>
+    <dynamicField name="*_ftsi" type="tfloat" stored="true" indexed="true" multiValued="false"/>
+    <dynamicField name="*_ftsim" type="tfloat" stored="true" indexed="true" multiValued="true"/>
+
+    <!-- boolean (_b...) -->
+    <dynamicField name="*_bi" type="boolean" stored="false" indexed="true" multiValued="false"/>
+    <dynamicField name="*_bs" type="boolean" stored="true" indexed="false" multiValued="false"/>
+    <dynamicField name="*_bsi" type="boolean" stored="true" indexed="true" multiValued="false"/>
+
+    <!-- Type used to index the lat and lon components for the "location" FieldType -->
+    <dynamicField name="*_coordinate" type="tdouble" indexed="true"  stored="false" />
+
+    <dynamicField name="*suggest" type="textSuggest" indexed="true" stored="false" multiValued="true" />
+
+    <!-- you must define copyField source and dest fields explicity or schemaBrowser doesn't work -->
+    <field name="all_text_timv" type="text" stored="false" indexed="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true"/>
+
+
+  </fields>
+
+ <!-- Field to use to determine and enforce document uniqueness.
+      Unless this field is marked with required="false", it will be a required field
+   -->
+ <uniqueKey>id</uniqueKey>
+
+  <!-- copyField commands copy one field to another at the time a document
+        is added to the index.  It's used either to index the same field differently,
+        or to add multiple fields to the same field for easier/faster searching.  -->
+   <!-- Copy Fields -->
+
+   <!-- Above, multiple source fields are copied to the [text] field.
+    Another way to map multiple source fields to the same
+    destination field is to use the dynamic field syntax.
+    copyField also supports a maxChars to copy setting.  -->
+
+   <!-- <copyField source="*_tesim" dest="all_text_timv" maxChars="3000"/> -->
+   <!-- for suggestions -->
+   <copyField source="*_tesim" dest="suggest"/>
+   <copyField source="*_ssim" dest="suggest"/>
+
+ <!-- Similarity is the scoring routine for each document vs. a query.
+      A custom similarity may be specified here, but the default is fine
+      for most applications.  -->
+ <!-- <similarity class="org.apache.lucene.search.DefaultSimilarity"/> -->
+ <!-- ... OR ...
+      Specify a SimilarityFactory class name implementation
+      allowing parameters to be used.
+ -->
+ <!--
+ <similarity class="com.example.solr.CustomSimilarityFactory">
+   <str name="paramkey">param value</str>
+ </similarity>
+ -->
+
+</schema>
diff --git a/hyrax/solr/conf/scripts.conf b/hyrax/solr/conf/scripts.conf
new file mode 100644
index 00000000..f58b262a
--- /dev/null
+++ b/hyrax/solr/conf/scripts.conf
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+user=
+solr_hostname=localhost
+solr_port=8983
+rsyncd_port=18983
+data_dir=
+webapp_name=solr
+master_host=
+master_data_dir=
+master_status_dir=
diff --git a/hyrax/solr/conf/solrconfig.xml b/hyrax/solr/conf/solrconfig.xml
new file mode 100644
index 00000000..8aadbef9
--- /dev/null
+++ b/hyrax/solr/conf/solrconfig.xml
@@ -0,0 +1,325 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+
+<!--
+ This is a stripped down config file used for a simple example...  
+ It is *not* a good example to work from. 
+-->
+<config>
+  
+  <!-- Controls what version of Lucene various components of Solr
+       adhere to.  Generally, you want to use the latest version to
+       get all bug fixes and improvements. It is highly recommended
+       that you fully re-index after changing this setting as it can
+       affect both how text is indexed and queried.
+  -->
+  <luceneMatchVersion>5.0.0</luceneMatchVersion>
+  
+  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" />
+  <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" />
+  <lib dir="${solr.install.dir:../../../..}/contrib/extraction/lib" regex=".*\.jar" />
+  <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-cell-\d.*\.jar" />
+
+  <directoryFactory name="DirectoryFactory" 
+                    class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}">
+  </directoryFactory> 
+
+  <codecFactory class="solr.SchemaCodecFactory"/>
+
+  <schemaFactory class="ClassicIndexSchemaFactory"/>
+
+
+  <dataDir>${solr.blacklight-core.data.dir:}</dataDir>
+  
+  <requestDispatcher handleSelect="true" >
+    <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048000" />
+  </requestDispatcher>
+  
+  <requestHandler name="/analysis/field" startup="lazy" class="solr.FieldAnalysisRequestHandler" />
+
+  <!-- config for the admin interface --> 
+  <admin>
+    <defaultQuery>*:*</defaultQuery>
+  </admin>
+
+  <updateHandler class="solr.DirectUpdateHandler2">
+    <updateLog>
+      <str name="dir">${solr.ulog.dir:}</str>
+    </updateLog>
+
+    <autoCommit>
+      <maxTime>${solr.autoCommit.maxTime:15000}</maxTime>
+      <openSearcher>false</openSearcher>
+    </autoCommit>
+
+    <autoSoftCommit>
+      <maxTime>${solr.autoSoftCommit.maxTime:-1}</maxTime>
+    </autoSoftCommit>
+  </updateHandler>
+
+  <!-- SearchHandler
+
+       http://wiki.apache.org/solr/SearchHandler
+
+       For processing Search Queries, the primary Request Handler
+       provided with Solr is "SearchHandler" It delegates to a sequent
+       of SearchComponents (see below) and supports distributed
+       queries across multiple shards
+    -->
+  <requestHandler name="search" class="solr.SearchHandler" default="true">
+    <!-- default values for query parameters can be specified, these
+         will be overridden by parameters in the request
+      -->
+     <lst name="defaults">
+       <str name="defType">edismax</str>
+       <str name="echoParams">explicit</str>
+       <str name="q.alt">*:*</str>
+       <str name="mm">2&lt;-1 5&lt;-2 6&lt;90%</str>
+       <int name="qs">1</int>
+       <int name="ps">2</int>
+       <float name="tie">0.01</float>
+       <!-- this qf and pf are used by default, if not otherwise specified by
+            client. The default blacklight_config will use these for the
+            "keywords" search. See the author_qf/author_pf, title_qf, etc
+            below, which the default blacklight_config will specify for
+            those searches. You may also be interested in:
+            http://wiki.apache.org/solr/LocalParams
+       -->
+        <str name="qf">
+          id
+          title_tesim
+          author_tesim
+          subject_tesim
+        </str>
+        <str name="pf">
+          all_text_timv^10
+        </str>
+
+       <str name="author_qf">
+          author_tesim
+       </str>
+       <str name="author_pf">
+       </str>
+       <str name="title_qf">
+          title_tesim
+       </str>
+       <str name="title_pf">
+       </str>
+       <str name="subject_qf">
+          subject_tesim
+       </str>
+       <str name="subject_pf">
+       </str>
+
+       <str name="fl">
+         *,
+         score
+       </str>
+
+       <str name="facet">true</str>
+       <str name="facet.mincount">1</str>
+
+       <str name="spellcheck">true</str>
+       <str name="spellcheck.dictionary">default</str>
+       <str name="spellcheck.onlyMorePopular">true</str>
+       <str name="spellcheck.extendedResults">true</str>
+       <str name="spellcheck.collate">false</str>
+       <str name="spellcheck.count">5</str>
+
+     </lst>
+    <arr name="last-components">
+      <str>spellcheck</str>
+    </arr>
+  </requestHandler>
+
+  <requestHandler name="permissions" class="solr.SearchHandler" >
+    <lst name="defaults">
+      <str name="facet">off</str>
+      <str name="echoParams">all</str>
+      <str name="rows">1</str>
+      <str name="q">{!raw f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
+      <str name="fl">
+        id,
+        access_ssim,
+        discover_access_group_ssim,discover_access_person_ssim,
+        read_access_group_ssim,read_access_person_ssim,
+        edit_access_group_ssim,edit_access_person_ssim,
+        depositor_ti,
+        embargo_release_date_dtsi
+        inheritable_access_ssim,
+        inheritable_discover_access_group_ssim,inheritable_discover_access_person_ssim,
+        inheritable_read_access_group_ssim,inheritable_read_access_person_ssim,
+        inheritable_edit_access_group_ssim,inheritable_edit_access_person_ssim,
+        inheritable_embargo_release_date_dtsi
+      </str>
+    </lst>
+  </requestHandler>
+
+  <requestHandler name="standard" class="solr.SearchHandler">
+     <lst name="defaults">
+       <str name="echoParams">explicit</str>
+       <str name="defType">lucene</str>
+     </lst>
+  </requestHandler>
+
+  <!-- for requests to get a single document; use id=666 instead of q=id:666 -->
+  <requestHandler name="document" class="solr.SearchHandler" >
+    <lst name="defaults">
+      <str name="echoParams">all</str>
+      <str name="fl">*</str>
+      <str name="rows">1</str>
+      <str name="q">{!term f=id v=$id}</str> <!-- use id=666 instead of q=id:666 -->
+    </lst>
+  </requestHandler>
+
+  <searchComponent name="termsComponent" class="solr.TermsComponent" />
+
+  <requestHandler name="/terms" class="solr.SearchHandler">
+    <lst name="defaults">
+      <bool name="terms">true</bool>
+    </lst>
+    <arr name="components">
+      <str>termsComponent</str>
+    </arr>
+  </requestHandler>
+
+<!-- Spell Check
+
+        The spell check component can return a list of alternative spelling
+        suggestions.  
+
+        http://wiki.apache.org/solr/SpellCheckComponent
+     -->
+  <searchComponent name="spellcheck" class="solr.SpellCheckComponent">
+
+    <str name="queryAnalyzerFieldType">textSpell</str>
+
+    <!-- Multiple "Spell Checkers" can be declared and used by this
+         component
+      -->
+
+    <!-- a spellchecker built from a field of the main index, and
+         written to disk
+      -->
+    <lst name="spellchecker">
+      <str name="name">default</str>
+      <str name="field">spell</str>
+      <str name="spellcheckIndexDir">./spell</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+    <lst name="spellchecker">
+      <str name="name">author</str>
+      <str name="field">author_spell</str>
+      <str name="spellcheckIndexDir">./spell_author</str>
+      <str name="accuracy">0.7</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+    <lst name="spellchecker">
+      <str name="name">subject</str>
+      <str name="field">subject_spell</str>
+      <str name="spellcheckIndexDir">./spell_subject</str>
+      <str name="accuracy">0.7</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+    <lst name="spellchecker">
+      <str name="name">title</str>
+      <str name="field">title_spell</str>
+      <str name="spellcheckIndexDir">./spell_title</str>
+      <str name="accuracy">0.7</str>
+      <str name="buildOnOptimize">true</str>
+    </lst>
+
+    <!-- a spellchecker that uses a different distance measure -->
+    <!--
+       <lst name="spellchecker">
+         <str name="name">jarowinkler</str>
+         <str name="field">spell</str>
+         <str name="distanceMeasure">
+           org.apache.lucene.search.spell.JaroWinklerDistance
+         </str>
+         <str name="spellcheckIndexDir">spellcheckerJaro</str>
+       </lst>
+     -->
+
+    <!-- a spellchecker that use an alternate comparator 
+
+         comparatorClass be one of:
+          1. score (default)
+          2. freq (Frequency first, then score)
+          3. A fully qualified class name
+      -->
+    <!--
+       <lst name="spellchecker">
+         <str name="name">freq</str>
+         <str name="field">lowerfilt</str>
+         <str name="spellcheckIndexDir">spellcheckerFreq</str>
+         <str name="comparatorClass">freq</str>
+         <str name="buildOnCommit">true</str>
+      -->
+
+    <!-- A spellchecker that reads the list of words from a file -->
+    <!--
+       <lst name="spellchecker">
+         <str name="classname">solr.FileBasedSpellChecker</str>
+         <str name="name">file</str>
+         <str name="sourceLocation">spellings.txt</str>
+         <str name="characterEncoding">UTF-8</str>
+         <str name="spellcheckIndexDir">spellcheckerFile</str>
+       </lst>
+      -->
+  </searchComponent>
+
+<!-- suggest searchComponent and requestHandler disabled by default due to performance penalties -->
+<!--
+  <searchComponent name="suggest" class="solr.SuggestComponent">
+    <lst name="suggester">
+      <str name="name">mySuggester</str>
+      <str name="lookupImpl">FuzzyLookupFactory</str>
+      <str name="suggestAnalyzerFieldType">textSuggest</str>
+      <str name="buildOnCommit">true</str>
+      <str name="field">suggest</str>
+    </lst>
+  </searchComponent>
+
+  <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy">
+    <lst name="defaults">
+      <str name="suggest">true</str>
+      <str name="suggest.count">5</str>
+      <str name="suggest.dictionary">mySuggester</str>
+    </lst>
+    <arr name="components">
+      <str>suggest</str>
+    </arr>
+  </requestHandler>
+-->
+ 
+  <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
+    <lst name="defaults">
+      <str name="fmap.Last-Modified">last_modified</str>
+      <str name="uprefix">ignored_</str>
+    </lst>
+    <!--Optional.  Specify a path to a tika configuration file. See the Tika docs for details.-->
+    <!-- <str name="tika.config">/my/path/to/tika.config</str> -->
+    <!-- Optional. Specify one or more date formats to parse. See DateUtil.DEFAULT_DATE_FORMATS
+         for default date formats -->
+    <!-- <lst name="date.formats"> -->
+    <!--   <str>yyyy&#45;MM&#45;dd</str> -->
+    <!-- </lst> -->
+  </requestHandler>
+</config>
+
diff --git a/hyrax/solr/conf/spellings.txt b/hyrax/solr/conf/spellings.txt
new file mode 100644
index 00000000..765190ae
--- /dev/null
+++ b/hyrax/solr/conf/spellings.txt
@@ -0,0 +1,2 @@
+pizza
+history
diff --git a/hyrax/solr/conf/stopwords.txt b/hyrax/solr/conf/stopwords.txt
new file mode 100644
index 00000000..22f277fe
--- /dev/null
+++ b/hyrax/solr/conf/stopwords.txt
@@ -0,0 +1,58 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+#-----------------------------------------------------------------------
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+#Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+s
+such
+t
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
+
diff --git a/hyrax/solr/conf/stopwords_en.txt b/hyrax/solr/conf/stopwords_en.txt
new file mode 100644
index 00000000..22f277fe
--- /dev/null
+++ b/hyrax/solr/conf/stopwords_en.txt
@@ -0,0 +1,58 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+#-----------------------------------------------------------------------
+# a couple of test stopwords to test that the words are really being
+# configured from this file:
+stopworda
+stopwordb
+
+#Standard english stop words taken from Lucene's StopAnalyzer
+a
+an
+and
+are
+as
+at
+be
+but
+by
+for
+if
+in
+into
+is
+it
+no
+not
+of
+on
+or
+s
+such
+t
+that
+the
+their
+then
+there
+these
+they
+this
+to
+was
+will
+with
+
diff --git a/hyrax/solr/conf/synonyms.txt b/hyrax/solr/conf/synonyms.txt
new file mode 100644
index 00000000..453eb313
--- /dev/null
+++ b/hyrax/solr/conf/synonyms.txt
@@ -0,0 +1,31 @@
+# The ASF licenses this file to You 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.
+
+#-----------------------------------------------------------------------
+#some test synonym mappings unlikely to appear in real input text
+aaa => aaaa
+bbb => bbbb1 bbbb2
+ccc => cccc1,cccc2
+a\=>a => b\=>b
+a\,a => b\,b
+fooaaa,baraaa,bazaaa
+
+# Some synonym groups specific to this example
+GB,gib,gigabyte,gigabytes
+MB,mib,megabyte,megabytes
+Television, Televisions, TV, TVs
+#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming
+#after us won't split it into two words.
+
+# Synonym mappings can be used for spelling correction too
+pixima => pixma
+
diff --git a/hyrax/solr/conf/xslt/example.xsl b/hyrax/solr/conf/xslt/example.xsl
new file mode 100644
index 00000000..ff7cae74
--- /dev/null
+++ b/hyrax/solr/conf/xslt/example.xsl
@@ -0,0 +1,132 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to HTML
+ -->
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
+>
+
+  <xsl:output media-type="text/html; charset=UTF-8" encoding="UTF-8"/> 
+  
+  <xsl:variable name="title" select="concat('Solr search results (',response/result/@numFound,' documents)')"/>
+  
+  <xsl:template match='/'>
+    <html>
+      <head>
+        <title><xsl:value-of select="$title"/></title>
+        <xsl:call-template name="css"/>
+      </head>
+      <body>
+        <h1><xsl:value-of select="$title"/></h1>
+        <div class="note">
+          This has been formatted by the sample "example.xsl" transform -
+          use your own XSLT to get a nicer page
+        </div>
+        <xsl:apply-templates select="response/result/doc"/>
+      </body>
+    </html>
+  </xsl:template>
+  
+  <xsl:template match="doc">
+    <xsl:variable name="pos" select="position()"/>
+    <div class="doc">
+      <table width="100%">
+        <xsl:apply-templates>
+          <xsl:with-param name="pos"><xsl:value-of select="$pos"/></xsl:with-param>
+        </xsl:apply-templates>
+      </table>
+    </div>
+  </xsl:template>
+
+  <xsl:template match="doc/*[@name='score']" priority="100">
+    <xsl:param name="pos"></xsl:param>
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <xsl:value-of select="."/>
+
+        <xsl:if test="boolean(//lst[@name='explain'])">
+          <xsl:element name="a">
+            <!-- can't allow whitespace here -->
+            <xsl:attribute name="href">javascript:toggle("<xsl:value-of select="concat('exp-',$pos)" />");</xsl:attribute>?</xsl:element>
+          <br/>
+          <xsl:element name="div">
+            <xsl:attribute name="class">exp</xsl:attribute>
+            <xsl:attribute name="id">
+              <xsl:value-of select="concat('exp-',$pos)" />
+            </xsl:attribute>
+            <xsl:value-of select="//lst[@name='explain']/str[position()=$pos]"/>
+          </xsl:element>
+        </xsl:if>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="doc/arr" priority="100">
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <ul>
+        <xsl:for-each select="*">
+          <li><xsl:value-of select="."/></li>
+        </xsl:for-each>
+        </ul>
+      </td>
+    </tr>
+  </xsl:template>
+
+
+  <xsl:template match="doc/*">
+    <tr>
+      <td class="name">
+        <xsl:value-of select="@name"/>
+      </td>
+      <td class="value">
+        <xsl:value-of select="."/>
+      </td>
+    </tr>
+  </xsl:template>
+
+  <xsl:template match="*"/>
+  
+  <xsl:template name="css">
+    <script>
+      function toggle(id) {
+        var obj = document.getElementById(id);
+        obj.style.display = (obj.style.display != 'block') ? 'block' : 'none';
+      }
+    </script>
+    <style type="text/css">
+      body { font-family: "Lucida Grande", sans-serif }
+      td.name { font-style: italic; font-size:80%; }
+      td { vertical-align: top; }
+      ul { margin: 0px; margin-left: 1em; padding: 0px; }
+      .note { font-size:80%; }
+      .doc { margin-top: 1em; border-top: solid grey 1px; }
+      .exp { display: none; font-family: monospace; white-space: pre; }
+    </style>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/hyrax/solr/conf/xslt/example_atom.xsl b/hyrax/solr/conf/xslt/example_atom.xsl
new file mode 100644
index 00000000..dbc7afa3
--- /dev/null
+++ b/hyrax/solr/conf/xslt/example_atom.xsl
@@ -0,0 +1,67 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to Atom
+ -->
+
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+  <xsl:output
+       method="xml"
+       encoding="utf-8"
+       media-type="text/xml; charset=UTF-8"
+  />
+
+  <xsl:template match='/'>
+    <xsl:variable name="query" select="response/lst[@name='responseHeader']/lst[@name='params']/str[@name='q']"/>
+    <feed xmlns="http://www.w3.org/2005/Atom">
+      <title>Example Solr Atom 1.0 Feed</title>
+      <subtitle>
+       This has been formatted by the sample "example_atom.xsl" transform -
+       use your own XSLT to get a nicer Atom feed.
+      </subtitle>
+      <author>
+        <name>Apache Solr</name>
+        <email>solr-user@lucene.apache.org</email>
+      </author>
+      <link rel="self" type="application/atom+xml" 
+            href="http://localhost:8983/solr/q={$query}&amp;wt=xslt&amp;tr=atom.xsl"/>
+      <updated>
+        <xsl:value-of select="response/result/doc[position()=1]/date[@name='timestamp']"/>
+      </updated>
+      <id>tag:localhost,2007:example</id>
+      <xsl:apply-templates select="response/result/doc"/>
+    </feed>
+  </xsl:template>
+    
+  <!-- search results xslt -->
+  <xsl:template match="doc">
+    <xsl:variable name="id" select="str[@name='id']"/>
+    <entry>
+      <title><xsl:value-of select="str[@name='name']"/></title>
+      <link href="http://localhost:8983/solr/select?q={$id}"/>
+      <id>tag:localhost,2007:<xsl:value-of select="$id"/></id>
+      <summary><xsl:value-of select="arr[@name='features']"/></summary>
+      <updated><xsl:value-of select="date[@name='timestamp']"/></updated>
+    </entry>
+  </xsl:template>
+
+</xsl:stylesheet>
diff --git a/hyrax/solr/conf/xslt/example_rss.xsl b/hyrax/solr/conf/xslt/example_rss.xsl
new file mode 100644
index 00000000..b5bd0cf9
--- /dev/null
+++ b/hyrax/solr/conf/xslt/example_rss.xsl
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='UTF-8'?>
+
+<!-- 
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ -->
+
+<!-- 
+  Simple transform of Solr query results to RSS
+ -->
+
+<xsl:stylesheet version='1.0'
+    xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
+
+  <xsl:output
+       method="xml"
+       encoding="utf-8"
+       media-type="text/xml; charset=UTF-8"
+  />
+  <xsl:template match='/'>
+    <rss version="2.0">
+       <channel>
+	 <title>Example Solr RSS 2.0 Feed</title>
+         <link>http://localhost:8983/solr</link>
+         <description>
+          This has been formatted by the sample "example_rss.xsl" transform -
+          use your own XSLT to get a nicer RSS feed.
+         </description>
+         <language>en-us</language>
+         <docs>http://localhost:8983/solr</docs>
+         <xsl:apply-templates select="response/result/doc"/>
+       </channel>
+    </rss>
+  </xsl:template>
+  
+  <!-- search results xslt -->
+  <xsl:template match="doc">
+    <xsl:variable name="id" select="str[@name='id']"/>
+    <xsl:variable name="timestamp" select="date[@name='timestamp']"/>
+    <item>
+      <title><xsl:value-of select="str[@name='name']"/></title>
+      <link>
+        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+      </link>
+      <description>
+        <xsl:value-of select="arr[@name='features']"/>
+      </description>
+      <pubDate><xsl:value-of select="$timestamp"/></pubDate>
+      <guid>
+        http://localhost:8983/solr/select?q=id:<xsl:value-of select="$id"/>
+      </guid>
+    </item>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/hyrax/solr/conf/xslt/luke.xsl b/hyrax/solr/conf/xslt/luke.xsl
new file mode 100644
index 00000000..d3f71c6d
--- /dev/null
+++ b/hyrax/solr/conf/xslt/luke.xsl
@@ -0,0 +1,337 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You 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.
+-->
+
+
+<!-- 
+  Display the luke request handler with graphs
+ -->
+<xsl:stylesheet
+    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+    xmlns="http://www.w3.org/1999/xhtml"
+    version="1.0"
+    >
+    <xsl:output
+        method="html"
+        encoding="UTF-8"
+        media-type="text/html; charset=UTF-8"
+        doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+    />
+
+    <xsl:variable name="title">Solr Luke Request Handler Response</xsl:variable>
+
+    <xsl:template match="/">
+        <html xmlns="http://www.w3.org/1999/xhtml">
+            <head>
+                <link rel="stylesheet" type="text/css" href="solr-admin.css"/>
+                <link rel="icon" href="favicon.ico" type="image/ico"/>
+                <link rel="shortcut icon" href="favicon.ico" type="image/ico"/>
+                <title>
+                    <xsl:value-of select="$title"/>
+                </title>
+                <xsl:call-template name="css"/>
+
+            </head>
+            <body>
+                <h1>
+                    <xsl:value-of select="$title"/>
+                </h1>
+                <div class="doc">
+                    <ul>
+                        <xsl:if test="response/lst[@name='index']">
+                            <li>
+                                <a href="#index">Index Statistics</a>
+                            </li>
+                        </xsl:if>
+                        <xsl:if test="response/lst[@name='fields']">
+                            <li>
+                                <a href="#fields">Field Statistics</a>
+                                <ul>
+                                    <xsl:for-each select="response/lst[@name='fields']/lst">
+                                        <li>
+                                            <a href="#{@name}">
+                                                <xsl:value-of select="@name"/>
+                                            </a>
+                                        </li>
+                                    </xsl:for-each>
+                                </ul>
+                            </li>
+                        </xsl:if>
+                        <xsl:if test="response/lst[@name='doc']">
+                            <li>
+                                <a href="#doc">Document statistics</a>
+                            </li>
+                        </xsl:if>
+                    </ul>
+                </div>
+                <xsl:if test="response/lst[@name='index']">
+                    <h2><a name="index"/>Index Statistics</h2>
+                    <xsl:apply-templates select="response/lst[@name='index']"/>
+                </xsl:if>
+                <xsl:if test="response/lst[@name='fields']">
+                    <h2><a name="fields"/>Field Statistics</h2>
+                    <xsl:apply-templates select="response/lst[@name='fields']"/>
+                </xsl:if>
+                <xsl:if test="response/lst[@name='doc']">
+                    <h2><a name="doc"/>Document statistics</h2>
+                    <xsl:apply-templates select="response/lst[@name='doc']"/>
+                </xsl:if>
+            </body>
+        </html>
+    </xsl:template>
+
+    <xsl:template match="lst">
+        <xsl:if test="parent::lst">
+            <tr>
+                <td colspan="2">
+                    <div class="doc">
+                        <xsl:call-template name="list"/>
+                    </div>
+                </td>
+            </tr>
+        </xsl:if>
+        <xsl:if test="not(parent::lst)">
+            <div class="doc">
+                <xsl:call-template name="list"/>
+            </div>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="list">
+        <xsl:if test="count(child::*)>0">
+            <table>
+                <thead>
+                    <tr>
+                        <th colspan="2">
+                            <p>
+                                <a name="{@name}"/>
+                            </p>
+                            <xsl:value-of select="@name"/>
+                        </th>
+                    </tr>
+                </thead>
+                <tbody>
+                    <xsl:choose>
+                        <xsl:when
+                            test="@name='histogram'">
+                            <tr>
+                                <td colspan="2">
+                                    <xsl:call-template name="histogram"/>
+                                </td>
+                            </tr>
+                        </xsl:when>
+                        <xsl:otherwise>
+                            <xsl:apply-templates/>
+                        </xsl:otherwise>
+                    </xsl:choose>
+                </tbody>
+            </table>
+        </xsl:if>
+    </xsl:template>
+
+    <xsl:template name="histogram">
+        <div class="doc">
+            <xsl:call-template name="barchart">
+                <xsl:with-param name="max_bar_width">50</xsl:with-param>
+                <xsl:with-param name="iwidth">800</xsl:with-param>
+                <xsl:with-param name="iheight">160</xsl:with-param>
+                <xsl:with-param name="fill">blue</xsl:with-param>
+            </xsl:call-template>
+        </div>
+    </xsl:template>
+
+    <xsl:template name="barchart">
+        <xsl:param name="max_bar_width"/>
+        <xsl:param name="iwidth"/>
+        <xsl:param name="iheight"/>
+        <xsl:param name="fill"/>
+        <xsl:variable name="max">
+            <xsl:for-each select="int">
+                <xsl:sort data-type="number" order="descending"/>
+                <xsl:if test="position()=1">
+                    <xsl:value-of select="."/>
+                </xsl:if>
+            </xsl:for-each>
+        </xsl:variable>
+        <xsl:variable name="bars">
+           <xsl:value-of select="count(int)"/>
+        </xsl:variable>
+        <xsl:variable name="bar_width">
+           <xsl:choose>
+             <xsl:when test="$max_bar_width &lt; ($iwidth div $bars)">
+               <xsl:value-of select="$max_bar_width"/>
+             </xsl:when>
+             <xsl:otherwise>
+               <xsl:value-of select="$iwidth div $bars"/>
+             </xsl:otherwise>
+           </xsl:choose>
+        </xsl:variable>
+        <table class="histogram">
+           <tbody>
+              <tr>
+                <xsl:for-each select="int">
+                   <td>
+                 <xsl:value-of select="."/>
+                 <div class="histogram">
+                  <xsl:attribute name="style">background-color: <xsl:value-of select="$fill"/>; width: <xsl:value-of select="$bar_width"/>px; height: <xsl:value-of select="($iheight*number(.)) div $max"/>px;</xsl:attribute>
+                 </div>
+                   </td> 
+                </xsl:for-each>
+              </tr>
+              <tr>
+                <xsl:for-each select="int">
+                   <td>
+                       <xsl:value-of select="@name"/>
+                   </td>
+                </xsl:for-each>
+              </tr>
+           </tbody>
+        </table>
+    </xsl:template>
+
+    <xsl:template name="keyvalue">
+        <xsl:choose>
+            <xsl:when test="@name">
+                <tr>
+                    <td class="name">
+                        <xsl:value-of select="@name"/>
+                    </td>
+                    <td class="value">
+                        <xsl:value-of select="."/>
+                    </td>
+                </tr>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:value-of select="."/>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <xsl:template match="int|bool|long|float|double|uuid|date">
+        <xsl:call-template name="keyvalue"/>
+    </xsl:template>
+
+    <xsl:template match="arr">
+        <tr>
+            <td class="name">
+                <xsl:value-of select="@name"/>
+            </td>
+            <td class="value">
+                <ul>
+                    <xsl:for-each select="child::*">
+                        <li>
+                            <xsl:apply-templates/>
+                        </li>
+                    </xsl:for-each>
+                </ul>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template match="str">
+        <xsl:choose>
+            <xsl:when test="@name='schema' or @name='index' or @name='flags'">
+                <xsl:call-template name="schema"/>
+            </xsl:when>
+            <xsl:otherwise>
+                <xsl:call-template name="keyvalue"/>
+            </xsl:otherwise>
+        </xsl:choose>
+    </xsl:template>
+
+    <xsl:template name="schema">
+        <tr>
+            <td class="name">
+                <xsl:value-of select="@name"/>
+            </td>
+            <td class="value">
+                <xsl:if test="contains(.,'unstored')">
+                    <xsl:value-of select="."/>
+                </xsl:if>
+                <xsl:if test="not(contains(.,'unstored'))">
+                    <xsl:call-template name="infochar2string">
+                        <xsl:with-param name="charList">
+                            <xsl:value-of select="."/>
+                        </xsl:with-param>
+                    </xsl:call-template>
+                </xsl:if>
+            </td>
+        </tr>
+    </xsl:template>
+
+    <xsl:template name="infochar2string">
+        <xsl:param name="i">1</xsl:param>
+        <xsl:param name="charList"/>
+
+        <xsl:variable name="char">
+            <xsl:value-of select="substring($charList,$i,1)"/>
+        </xsl:variable>
+        <xsl:choose>
+            <xsl:when test="$char='I'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='I']"/> - </xsl:when>
+            <xsl:when test="$char='T'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='T']"/> - </xsl:when>
+            <xsl:when test="$char='S'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='S']"/> - </xsl:when>
+            <xsl:when test="$char='M'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='M']"/> - </xsl:when>
+            <xsl:when test="$char='V'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='V']"/> - </xsl:when>
+            <xsl:when test="$char='o'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='o']"/> - </xsl:when>
+            <xsl:when test="$char='p'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='p']"/> - </xsl:when>
+            <xsl:when test="$char='O'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='O']"/> - </xsl:when>
+            <xsl:when test="$char='L'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='L']"/> - </xsl:when>
+            <xsl:when test="$char='B'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='B']"/> - </xsl:when>
+            <xsl:when test="$char='C'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='C']"/> - </xsl:when>
+            <xsl:when test="$char='f'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='f']"/> - </xsl:when>
+            <xsl:when test="$char='l'">
+                <xsl:value-of select="/response/lst[@name='info']/lst/str[@name='l']"/> -
+            </xsl:when>
+        </xsl:choose>
+
+        <xsl:if test="not($i>=string-length($charList))">
+            <xsl:call-template name="infochar2string">
+                <xsl:with-param name="i">
+                    <xsl:value-of select="$i+1"/>
+                </xsl:with-param>
+                <xsl:with-param name="charList">
+                    <xsl:value-of select="$charList"/>
+                </xsl:with-param>
+            </xsl:call-template>
+        </xsl:if>
+    </xsl:template>
+    <xsl:template name="css">
+        <style type="text/css">
+            <![CDATA[
+            td.name {font-style: italic; font-size:80%; }
+            .doc { margin: 0.5em; border: solid grey 1px; }
+            .exp { display: none; font-family: monospace; white-space: pre; }
+            div.histogram { background: none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;}
+            table.histogram { width: auto; vertical-align: bottom; }
+            table.histogram td, table.histogram th { text-align: center; vertical-align: bottom; border-bottom: 1px solid #ff9933; width: auto; }
+            ]]>
+        </style>
+    </xsl:template>
+</xsl:stylesheet>
diff --git a/hyrax/solr/sample_solr_documents.yml b/hyrax/solr/sample_solr_documents.yml
new file mode 100644
index 00000000..eee603dd
--- /dev/null
+++ b/hyrax/solr/sample_solr_documents.yml
@@ -0,0 +1,2692 @@
+---
+- lc_1letter_facet:
+  - P - Language & Literature
+  author_t:
+  - Ayaz, Shaikh,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00799cam
+    a2200241 a 4500</leader><controlfield tag=\"001\">   00282214 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090120022042.0</controlfield><controlfield
+    tag=\"008\">000417s1998    pk            000 0 urdo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   00282214 </subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">P-U-00282214; 05; 06</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"041\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">urd</subfield><subfield
+    code=\"h\">snd</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">PK2788.9.A9</subfield><subfield code=\"b\">F55
+    1998</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\" \"><subfield
+    code=\"a\">Ayaz, Shaikh,</subfield><subfield code=\"d\">1923-1997.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Fikr-i Ayāz /</subfield><subfield
+    code=\"c\">murattibīn, Āṣif Farruk̲h̲ī, Shāh Muḥammad Pīrzādah.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Karācī :</subfield><subfield
+    code=\"b\">Dāniyāl,</subfield><subfield code=\"c\">[1998]</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">375 p. ;</subfield><subfield
+    code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield tag=\"520\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Selected poems and articles from the
+    works of renowned Sindhi poet; chiefly translated from Sindhi.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Farruk̲h̲ī, Āṣif,</subfield><subfield
+    code=\"d\">1959-</subfield></datafield><datafield tag=\"700\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">Pīrzādah, Shāh Muḥammad.</subfield></datafield></record></collection>"
+  published_display:
+  - Karācī
+  author_display: Ayaz, Shaikh, 1923-1997
+  lc_callnum_display:
+  - PK2788.9.A9 F55 1998
+  title_t:
+  - Fikr-i Ayāz /
+  pub_date:
+  - '1998'
+  pub_date_sort: 1998
+  format: Book
+  material_type_display:
+  - 375 p.
+  lc_b4cutter_facet:
+  - PK2788.9.A9
+  title_display: Fikr-i Ayāz
+  title_sort: fikr-i ayāz
+  id: 00282214
+  author_sort: Ayaz Shaikh 19231997 Fikri Ayāz
+  title_addl_t:
+  - Fikr-i Ayāz /
+  author_addl_t:
+  - Farruk̲h̲ī, Āṣif,
+  - Pīrzādah, Shāh Muḥammad.
+  lc_alpha_facet:
+  - PK
+  language_facet:
+  - Urdu
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - M - Music
+  author_t:
+  - Ayaz, Shaikh,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00778cam
+    a22002417a 4500</leader><controlfield tag=\"001\">   00282371 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090120021204.0</controlfield><controlfield
+    tag=\"008\">000509s1986    pk            000 0 urdo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   00282371 </subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">P-U-00282371; 08</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"041\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">urd</subfield><subfield
+    code=\"h\">snd</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">MLCME 2002/02660 (D)</subfield></datafield><datafield
+    tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Ayaz, Shaikh,</subfield><subfield
+    code=\"d\">1923-1997.</subfield></datafield><datafield tag=\"245\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"a\">Sāhivāl jail kī ḍāʼirī /</subfield><subfield
+    code=\"c\">Shaik̲h̲ Ayāz; tarjumah, Kiran Singh.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Karācī :</subfield><subfield
+    code=\"b\">Maktabah-yi Dāniyāl,</subfield><subfield code=\"c\">1986.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">232 p. ;</subfield><subfield
+    code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield tag=\"500\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Translated from Sindhi.</subfield></datafield><datafield
+    tag=\"520\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Author's memoirs during
+    his imprisonment in Sahiwal District jail during late 1960s.</subfield></datafield><datafield
+    tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical
+    references.</subfield></datafield></record></collection>"
+  published_display:
+  - Karācī
+  author_display: Ayaz, Shaikh, 1923-1997
+  lc_callnum_display:
+  - MLCME 2002/02660 (D)
+  title_t:
+  - Sāhivāl jail kī ḍāʼirī /
+  pub_date:
+  - '1986'
+  pub_date_sort: 1986
+  format: Book
+  material_type_display:
+  - 232 p.
+  lc_b4cutter_facet:
+  - MLCME 2002/02660 (D)
+  title_display: Sāhivāl jail kī ḍāʼirī
+  title_sort: sāhivāl jail kī ḍāʼirī
+  id: 00282371
+  author_sort: Ayaz Shaikh 19231997 Sāhivāl jail kī ḍāʼirī
+  title_addl_t:
+  - Sāhivāl jail kī ḍāʼirī /
+  language_facet:
+  - Urdu
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: 'guft va gū-yi Akbar Ganjī bā ʻAbd Allāh Nūrī : bih payvast-i
+    matn-i istīz̤āḥ-i ʻAbd Allāh Nūrī dar Majlis-i panjum'
+  author_vern_display: "‏نورى، عبد الله"
+  subject_addl_t:
+  - Interviews
+  - Trials, litigation, etc
+  - Officials and employees Interviews
+  - Politics and government 1997-
+  title_display: Naqdī barā-yi tamām-i fuṣūl
+  subject_era_facet:
+  - 1997-
+  id: 00313831
+  isbn_t:
+  - '9645625963'
+  subject_geo_facet:
+  - Iran
+  subject_topic_facet:
+  - Nūrī, ʻAbd Allāh, 1949-
+  - Iran. Vizārat-i Kishvar
+  lc_alpha_facet:
+  - DS
+  title_series_t:
+  - Farhang-i ʻumūmī
+  - "‏فرهنگ  عمومى"
+  subtitle_t:
+  - 'guft va gū-yi Akbar Ganjī bā ʻAbd Allāh Nūrī : bih payvast-i matn-i istīz̤āḥ-i
+    ʻAbd Allāh Nūrī dar Majlis-i panjum.'
+  - "‏گفت و گوى اکبر گنجى با عبد الله نورى : به پيوست  متن استيضاح عبد الله نورى در
+    مجلس پنجم"
+  lc_1letter_facet:
+  - D - World History
+  author_t:
+  - Nūrī, ʻAbd Allāh,
+  - "‏نورى، عبد الله"
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01988cam
+    a2200421 a 4500</leader><controlfield tag=\"001\">   00313831 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121100001.0</controlfield><controlfield
+    tag=\"008\">010611s2000    ir       b    001 0dper d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   00313831 </subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9645625963</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN01-B3014</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">MH</subfield><subfield
+    code=\"c\">MH</subfield><subfield code=\"d\">CStRLIN</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield><subfield
+    code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">a-ir---</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">DS318.84.N87</subfield><subfield code=\"b\">N87
+    2000</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield
+    code=\"c\">(3</subfield><subfield code=\"c\">(4</subfield></datafield><datafield
+    tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">Nūrī, ʻAbd Allāh,</subfield><subfield code=\"d\">1949-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Naqdī barā-yi tamām-i fuṣūl :</subfield><subfield code=\"b\">guft
+    va gū-yi Akbar Ganjī bā ʻAbd Allāh Nūrī : bih payvast-i matn-i istīz̤āḥ-i
+    ʻAbd Allāh Nūrī dar Majlis-i panjum.</subfield></datafield><datafield tag=\"246\"
+    ind1=\"1\" ind2=\"5\"><subfield code=\"a\">Critique for all seasons :</subfield><subfield
+    code=\"b\">Akbar Ganji's conversation with Abdullah Nuri</subfield></datafield><datafield
+    tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield
+    code=\"a\">Chāp-i 1.</subfield></datafield><datafield tag=\"260\" ind1=\" \"
+    ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield code=\"a\">Tihrān
+    :</subfield><subfield code=\"b\">Ṭarḥ-i Naw,</subfield><subfield code=\"c\">2000.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">245 p. ;</subfield><subfield
+    code=\"c\">22 cm.</subfield></datafield><datafield tag=\"440\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"6\">880-05</subfield><subfield code=\"a\">Farhang-i ʻumūmī</subfield></datafield><datafield
+    tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical
+    references and index.</subfield></datafield><datafield tag=\"600\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">880-06</subfield><subfield code=\"a\">Nūrī,
+    ʻAbd Allāh,</subfield><subfield code=\"d\">1949-</subfield><subfield code=\"v\">Interviews.</subfield></datafield><datafield
+    tag=\"610\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Iran.</subfield><subfield
+    code=\"b\">Vizārat-i Kishvar</subfield><subfield code=\"x\">Officials and employees</subfield><subfield
+    code=\"v\">Interviews.</subfield></datafield><datafield tag=\"600\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">880-07</subfield><subfield code=\"a\">Nūrī,
+    ʻAbd Allāh,</subfield><subfield code=\"d\">1949-</subfield><subfield code=\"v\">Trials,
+    litigation, etc.</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Iran</subfield><subfield code=\"x\">Politics and government</subfield><subfield
+    code=\"y\">1997-</subfield></datafield><datafield tag=\"700\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">Ganjī, Akbar.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/r‏</subfield><subfield
+    code=\"a\">‏نورى، عبد الله.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-02/(3/r‏</subfield><subfield code=\"a\">‏نقدى
+    براى تمام فصول :‏</subfield><subfield code=\"b\">‏گفت و گوى اکبر گنجى با عبد الله
+    نورى : به پيوست  متن استيضاح عبد الله نورى در مجلس پنجم.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(4/r‏</subfield><subfield
+    code=\"a\">‏چاپ 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">260-04/(3/r‏</subfield><subfield code=\"a\">‏تهران :‏</subfield><subfield
+    code=\"b\">‏طرح نو،‏</subfield><subfield code=\"c\">‏‪2000‬.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\"0\"><subfield code=\"6\">440-05/(3/r‏</subfield><subfield
+    code=\"a\">‏فرهنگ  عمومى</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"4\"><subfield code=\"6\">600-06/(3/r‏</subfield><subfield code=\"a\">‏نورى،
+    عبد الله.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"4\"><subfield
+    code=\"6\">600-07/(3/r‏</subfield><subfield code=\"a\">‏نورى، عبد الله.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">700-08/(3/r‏</subfield><subfield
+    code=\"a\">‏گنجى، اكبر.</subfield></datafield></record></collection>"
+  published_display:
+  - Tihrān
+  author_display: Nūrī, ʻAbd Allāh, 1949-
+  title_vern_display: "‏نقدى براى تمام فصول :‏"
+  lc_callnum_display:
+  - DS318.84.N87 N87 2000
+  title_t:
+  - 'Naqdī barā-yi tamām-i fuṣūl :'
+  - "‏نقدى براى تمام فصول :‏"
+  pub_date:
+  - '2000'
+  pub_date_sort: 2000
+  published_vern_display:
+  - "‏تهران :‏"
+  format: Book
+  subtitle_vern_display: "‏گفت و گوى اکبر گنجى با عبد الله نورى : به پيوست  متن استيضاح
+    عبد الله نورى در مجلس پنجم"
+  material_type_display:
+  - 245 p.
+  lc_b4cutter_facet:
+  - DS318.84.N87
+  subject_t:
+  - Nūrī, ʻAbd Allāh, 1949-
+  - Iran. Vizārat-i Kishvar
+  - Iran
+  - "‏نورى، عبد الله"
+  title_sort: 'naqdī barā-yi tamām-i fuṣūl :guft va gū-yi akbar ganjī bā ʻabd
+    allāh nūrī : bih payvast-i matn-i istīz̤āḥ-i ʻabd allāh nūrī dar majlis-i
+    panjum'
+  author_sort: Nūrī ʻAbd Allāh 1949 Naqdī barāyi tamāmi fuṣūl guft va gūyi
+    Akbar Ganjī bā ʻAbd Allāh Nūrī  bih payvasti matni istīz̤āḥi ʻAbd Allāh
+    Nūrī dar Majlisi panjum
+  title_addl_t:
+  - 'Naqdī barā-yi tamām-i fuṣūl : guft va gū-yi Akbar Ganjī bā ʻAbd Allāh
+    Nūrī : bih payvast-i matn-i istīz̤āḥ-i ʻAbd Allāh Nūrī dar Majlis-i panjum.'
+  - 'Critique for all seasons : Akbar Ganji''s conversation with Abdullah Nuri'
+  - "‏نقدى براى تمام فصول :‏ ‏گفت و گوى اکبر گنجى با عبد الله نورى : به پيوست  متن
+    استيضاح عبد الله نورى در مجلس پنجم"
+  author_addl_t:
+  - Ganjī, Akbar.
+  - "‏گنجى، اكبر"
+  language_facet:
+  - Persian
+  timestamp: '2014-02-03T18:42:53.056Z'
+- author_t:
+  - Yoshida, Hajime,
+  - "吉田一"
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00956dam
+    a22002655a 4500</leader><controlfield tag=\"001\">   00314247 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126095911.0</controlfield><controlfield
+    tag=\"008\">000214s1997    ja            000 0 jpn  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   00314247 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP00-B1931</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield
+    tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">Yoshida, Hajime,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Kubo Sakae \"Kazanbaichi\" o yomu /</subfield><subfield code=\"c\">Yoshida
+    Hajime cho.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield
+    code=\"6\">880-03</subfield><subfield code=\"a\">Tōkyō :</subfield><subfield
+    code=\"b\">Hōsei Daigaku Shuppankyoku,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">480 p. ;</subfield><subfield
+    code=\"c\">19 cm.</subfield></datafield><datafield tag=\"600\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">880-04</subfield><subfield code=\"a\">Kubo, Sakae,</subfield><subfield
+    code=\"d\">1901-1958.</subfield><subfield code=\"t\">Kazanbaichi.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Japanese drama</subfield><subfield
+    code=\"y\">20th century.</subfield></datafield><datafield tag=\"650\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Political plays, Japanese.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Theater</subfield><subfield
+    code=\"z\">Japan</subfield><subfield code=\"x\">History.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/$1</subfield><subfield
+    code=\"a\">吉田一,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">245-02/$1</subfield><subfield
+    code=\"a\">久保栄 「火山灰地」 を読む /</subfield><subfield code=\"c\">吉田一著.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield
+    code=\"a\">東京 :</subfield><subfield code=\"b\">法政大学出版局,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"4\"><subfield code=\"6\">600-04/$1</subfield><subfield
+    code=\"a\">久保栄,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield
+    code=\"t\">火山灰地.</subfield></datafield></record></collection>"
+  published_display:
+  - Tōkyō
+  title_vern_display: "久保栄 「火山灰地」 を読む"
+  author_display: Yoshida, Hajime, 1934-
+  title_t:
+  - Kubo Sakae "Kazanbaichi" o yomu /
+  - "久保栄 「火山灰地」 を読む"
+  pub_date:
+  - '1997'
+  pub_date_sort: 1997
+  published_vern_display:
+  - "東京"
+  format: Book
+  author_vern_display: "吉田一, 1934-"
+  material_type_display:
+  - 480 p.
+  title_display: Kubo Sakae "Kazanbaichi" o yomu
+  subject_addl_t:
+  - 20th century
+  - Japan History
+  subject_t:
+  - Kubo, Sakae, 1901-1958. Kazanbaichi
+  - Japanese drama
+  - Political plays, Japanese
+  - Theater
+  - "久保栄, 1901-1958. 火山灰地"
+  subject_era_facet:
+  - 20th century
+  title_sort: kubo sakae "kazanbaichi" o yomu
+  id: '00314247'
+  author_sort: Yoshida Hajime 1934 Kubo Sakae Kazanbaichi o yomu
+  title_addl_t:
+  - Kubo Sakae "Kazanbaichi" o yomu /
+  - "久保栄 「火山灰地」 を読む"
+  subject_geo_facet:
+  - Japan
+  subject_topic_facet:
+  - Kubo, Sakae, 1901-1958
+  - Japanese drama
+  - Political plays, Japanese
+  - Theater
+  language_facet:
+  - Japanese
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - D - World History
+  author_t:
+  - Vi︠a︡tkin, M. P. (Mikhail Porfirʹevich),
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00987cam
+    a22002531  4500</leader><controlfield tag=\"001\">   43037890 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171234.0</controlfield><controlfield
+    tag=\"008\">810731m19419999ru b     b    000 0 ruso </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   43037890 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)28783996</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">ICU</subfield><subfield code=\"d\">OCoLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">e-ur-kz</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DK861.K3</subfield><subfield
+    code=\"b\">V5</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">Vi︠a︡tkin, M. P.</subfield><subfield code=\"q\">(Mikhail
+    Porfirʹevich),</subfield><subfield code=\"d\">1895-1967.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Ocherki po istorii Kazakhskoĭ
+    SSR.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">[Moskva],</subfield><subfield code=\"b\">Ogiz, Gospolitizdat,</subfield><subfield
+    code=\"c\">1941-</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">v.</subfield><subfield code=\"b\">fold. map.</subfield><subfield
+    code=\"c\">20 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">At head of title: Akademii︠a︡ nauk SSSR.  Institut istorii
+    i Kazakhstanskiĭ filial.  M. Vi︠a︡tkin.</subfield></datafield><datafield tag=\"504\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">\"Obzor literatury i istochnikov\":
+    v. 1, p. 5-[19]. \"Bibliograficheskiĭ ukazatelʹ\": v. 1, p. 356-364.</subfield></datafield><datafield
+    tag=\"505\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">t. 1. S drevneĭshikh vremen
+    po 1870 g.</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Kazakhstan</subfield><subfield code=\"x\">History.</subfield></datafield><datafield
+    tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Institut istorii (Akademii︠a︡
+    nauk SSSR)</subfield></datafield><datafield tag=\"710\" ind1=\"2\" ind2=\" \"><subfield
+    code=\"a\">Akademii︠a︡ nauk Kazakhskoĭ SSR, Alma Ata.</subfield></datafield></record></collection>"
+  published_display:
+  - Moskva
+  author_display: Vi︠a︡tkin, M. P. (Mikhail Porfirʹevich), 1895-1967
+  lc_callnum_display:
+  - DK861.K3 V5
+  title_t:
+  - Ocherki po istorii Kazakhskoĭ SSR.
+  pub_date:
+  - '1941'
+  pub_date_sort: 1941
+  format: Book
+  material_type_display:
+  - v.
+  lc_b4cutter_facet:
+  - DK861.K3
+  title_display: Ocherki po istorii Kazakhskoĭ SSR
+  subject_addl_t:
+  - History
+  subject_t:
+  - Kazakhstan
+  title_sort: ocherki po istorii kazakhskoĭ ssr
+  id: '43037890'
+  author_sort: Vi︠a︡tkin M P Mikhail Porfirʹevich 18951967 Ocherki po istorii Kazakhskoĭ
+    SSR
+  title_addl_t:
+  - Ocherki po istorii Kazakhskoĭ SSR.
+  subject_geo_facet:
+  - Kazakhstan
+  author_addl_t:
+  - Institut istorii (Akademii︠a︡ nauk SSSR)
+  - Akademii︠a︡ nauk Kazakhskoĭ SSR, Alma Ata.
+  lc_alpha_facet:
+  - DK
+  language_facet:
+  - Russian
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - K - Law
+  author_t:
+  - Korea (North)
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00955cam
+    a22002411  4500</leader><controlfield tag=\"001\">   53029833 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171326.0</controlfield><controlfield
+    tag=\"008\">860911s1952    ru           f000 0 rus  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   53029833 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)14207259</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">CU</subfield><subfield code=\"d\">CU</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">premarc</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-kn---</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">KPC13</subfield><subfield
+    code=\"b\">1952</subfield></datafield><datafield tag=\"110\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">Korea (North)</subfield></datafield><datafield tag=\"240\"
+    ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Laws, etc. (Konstitut︠s︡ii︠a︡ i osnovnye
+    zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ Respubliki)</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Konstitut︠s︡ii︠a︡ i osnovnye
+    zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ Respubliki.</subfield><subfield
+    code=\"c\">Perevod s koreĭskogo I︠U︡.N. Mazura i Khan Dyk Pona. Pod red. i s
+    vstup. statʹeĭ G. Tavrova.</subfield></datafield><datafield tag=\"260\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">Moskva,</subfield><subfield code=\"b\">Izd-vo
+    inostrannoĭ lit-ry,</subfield><subfield code=\"c\">1952.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">396 p.</subfield><subfield
+    code=\"c\">21 cm.</subfield></datafield><datafield tag=\"490\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"a\">Zakonodatelʹstvo stran narodnoĭ demokratii</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Mazur, I︠U︡. N.</subfield></datafield><datafield
+    tag=\"710\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Korea (North)</subfield><subfield
+    code=\"t\">Constitution.</subfield></datafield></record></collection>"
+  published_display:
+  - Moskva
+  author_display: Korea (North)
+  lc_callnum_display:
+  - KPC13 1952
+  title_t:
+  - Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ
+    Respubliki.
+  pub_date:
+  - '1952'
+  pub_date_sort: 1952
+  format: Book
+  material_type_display:
+  - 396 p.
+  lc_b4cutter_facet:
+  - KPC13
+  title_display: Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ
+    Respubliki
+  title_sort: konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty koreĭskoĭ narodno-demokraticheskoĭ
+    respubliki
+  id: '53029833'
+  author_sort: Korea North Laws etc Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty
+    Koreĭskoĭ NarodnoDemokraticheskoĭ Respubliki Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye
+    akty Koreĭskoĭ NarodnoDemokraticheskoĭ Respubliki
+  title_addl_t:
+  - Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ
+    Respubliki.
+  - Laws, etc. (Konstitut︠s︡ii︠a︡ i osnovnye zakonodatelʹnye akty Koreĭskoĭ Narodno-Demokraticheskoĭ
+    Respubliki)
+  author_addl_t:
+  - Mazur, I︠U︡. N.
+  - Korea (North)
+  title_added_entry_t:
+  - Constitution
+  title_series_t:
+  - Zakonodatelʹstvo stran narodnoĭ demokratii
+  lc_alpha_facet:
+  - KPC
+  language_facet:
+  - Russian
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - D - World History
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01062cam
+    a2200301 a 4500</leader><controlfield tag=\"001\">   77826928 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122103906.0</controlfield><controlfield
+    tag=\"008\">070816s1976    ko            000 0ckor  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   77826928 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP07-B11425</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">*BZV*</subfield><subfield code=\"d\">MH-HY</subfield><subfield code=\"d\">OCoLC</subfield><subfield
+    code=\"d\">CU</subfield><subfield code=\"d\">CStRLIN</subfield><subfield code=\"d\">DLC-R</subfield><subfield
+    code=\"d\">DLC</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">a-kr---</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">DS912.38</subfield><subfield code=\"b\">.K982
+    1976</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield
+    code=\"c\">$1</subfield></datafield><datafield tag=\"130\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Koryŏsa.</subfield><subfield
+    code=\"p\">Yŏlchŏn.</subfield><subfield code=\"k\">Selections.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Koryŏ inmul yŏlchŏn /</subfield><subfield code=\"c\">Yi Min-su pʻyŏnyŏk.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield
+    code=\"a\">Sŏul :</subfield><subfield code=\"b\">Sŏmundang,</subfield><subfield
+    code=\"c\">1976.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">255 p. ;</subfield><subfield code=\"c\">19 cm.</subfield></datafield><datafield
+    tag=\"490\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Sŏmun munʼgo ;</subfield><subfield code=\"v\">237</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Korea</subfield><subfield
+    code=\"x\">History</subfield><subfield code=\"y\">Koryŏ period, 935-1392</subfield><subfield
+    code=\"v\">Biography.</subfield></datafield><datafield tag=\"651\" ind1=\" \"
+    ind2=\"0\"><subfield code=\"a\">Korea</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield
+    code=\"a\">Yi, Min-su,</subfield><subfield code=\"d\">1916-</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">130-01/$1</subfield><subfield
+    code=\"a\">高麗史.</subfield><subfield code=\"p\">列傅.</subfield><subfield code=\"k\">Selections.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">245-02/$1</subfield><subfield
+    code=\"a\">高麗 人物 列傅 /</subfield><subfield code=\"c\">李 民樹 編譯.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield
+    code=\"a\">서울 :</subfield><subfield code=\"b\">瑞文堂,</subfield><subfield code=\"c\">1976.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\" \"><subfield code=\"6\">490-04/$1</subfield><subfield
+    code=\"a\">瑞文 文庫 ;</subfield><subfield code=\"v\">237</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">700-05/$1</subfield><subfield
+    code=\"a\">李 民樹,</subfield><subfield code=\"d\">1916-</subfield></datafield></record></collection>"
+  published_display:
+  - Sŏul
+  title_vern_display: "高麗 人物 列傅"
+  lc_callnum_display:
+  - DS912.38 .K982 1976
+  title_t:
+  - Koryŏ inmul yŏlchŏn /
+  - "高麗 人物 列傅"
+  pub_date:
+  - '1976'
+  pub_date_sort: 1976
+  published_vern_display:
+  - "서울"
+  format: Book
+  material_type_display:
+  - 255 p.
+  lc_b4cutter_facet:
+  - DS912.38
+  title_display: Koryŏ inmul yŏlchŏn
+  subject_addl_t:
+  - History Koryŏ period, 935-1392 Biography
+  - Biography
+  subject_t:
+  - Korea
+  subject_era_facet:
+  - Koryŏ period, 935-1392
+  title_sort: koryŏ inmul yŏlchŏn
+  id: '77826928'
+  author_sort: "\U0010FFFF Koryŏ inmul yŏlchŏn"
+  title_addl_t:
+  - Koryŏ inmul yŏlchŏn /
+  - Koryŏsa. Yŏlchŏn. Selections
+  - "高麗 人物 列傅"
+  - "高麗史. 列傅. Selections"
+  subject_geo_facet:
+  - Korea
+  author_addl_t:
+  - Yi, Min-su,
+  - "李 民樹"
+  title_series_t:
+  - Sŏmun munʼgo ; 237
+  - "瑞文 文庫 ; 237"
+  lc_alpha_facet:
+  - DS
+  language_facet:
+  - Korean
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - P - Language & Literature
+  author_t:
+  - Parikshit Sharma, Ogeti,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00813cam
+    a2200217 i 4500</leader><controlfield tag=\"001\">   78908283 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121104206.0</controlfield><controlfield
+    tag=\"008\">790619s1976    ii            000 0 sano </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   78908283 </subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PK3799.P29</subfield><subfield
+    code=\"b\">Y3</subfield></datafield><datafield tag=\"100\" ind1=\"2\" ind2=\"
+    \"><subfield code=\"a\">Parikshit Sharma, Ogeti,</subfield><subfield code=\"d\">1930-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Yaśodharā-mahākāvyam
+    /</subfield><subfield code=\"c\">Ogeṭi Parīkṣitśarmā.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Puṇyapattanam :</subfield><subfield
+    code=\"b\">Śāradā-Gaurava-Grantha-Mālā ;</subfield><subfield code=\"a\">Haidrābāda
+    :</subfield><subfield code=\"b\">prāptisthalam O. Acyutarāmaśāstrī,</subfield><subfield
+    code=\"c\">1976.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">24, 128, 2 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield
+    tag=\"490\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">Śāradā-gaurava-grantha-mālā
+    ; 37</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">In Sanskrit; introductory matter in English or Sanskrit.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">A poem.</subfield></datafield><datafield
+    tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Gautama Buddha</subfield><subfield
+    code=\"v\">Poetry.</subfield></datafield><datafield tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">Yaśodharā</subfield><subfield code=\"c\">(Wife of Gautama Buddha)</subfield><subfield
+    code=\"v\">Poetry.</subfield></datafield></record></collection>"
+  published_display:
+  - Puṇyapattanam
+  - Haidrābāda
+  author_display: Parikshit Sharma, Ogeti, 1930-
+  lc_callnum_display:
+  - PK3799.P29 Y3
+  title_t:
+  - Yaśodharā-mahākāvyam /
+  pub_date:
+  - '1976'
+  pub_date_sort: 1976
+  format: Book
+  material_type_display:
+  - 24, 128, 2 p.
+  lc_b4cutter_facet:
+  - PK3799.P29
+  title_display: Yaśodharā-mahākāvyam
+  subject_addl_t:
+  - Poetry
+  subject_t:
+  - Gautama Buddha
+  - Yaśodharā (Wife of Gautama Buddha)
+  title_sort: yaśodharā-mahākāvyam
+  id: '78908283'
+  author_sort: Parikshit Sharma Ogeti 1930 Yaśodharāmahākāvyam
+  title_addl_t:
+  - Yaśodharā-mahākāvyam /
+  subject_topic_facet:
+  - Gautama Buddha
+  - Yaśodharā (Wife of Gautama Buddha)
+  title_series_t:
+  - Śāradā-gaurava-grantha-mālā ; 37
+  lc_alpha_facet:
+  - PK
+  language_facet:
+  - Sanskrit
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - H - Social Sciences
+  author_t:
+  - Iṣlāḥī, Amīn Aḥsan,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00729cam
+    a2200229 i 4500</leader><controlfield tag=\"001\">   79930185 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123080110.0</controlfield><controlfield
+    tag=\"008\">791203r19781950pk            000 0 urdo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   79930185 </subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">Rs10.00</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-pk---</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HQ1745.5</subfield><subfield
+    code=\"b\">.I83 1978</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">Iṣlāḥī, Amīn Aḥsan,</subfield><subfield code=\"d\">1904-1997.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Pākistānī ʻaurat dorāhe
+    par /</subfield><subfield code=\"c\">tālīf Amīn Aḥsan Iṣlāḥī.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Lāhaur :</subfield><subfield
+    code=\"b\">Maktabah-yi Markazī Anjuman-i K̲h̲uddāmulqurʼān,</subfield><subfield
+    code=\"c\">1978.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">8, 174 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">In Urdu.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">First published in 1950.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Women</subfield><subfield
+    code=\"z\">Pakistan.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Women</subfield><subfield code=\"z\">Pakistan</subfield><subfield code=\"x\">Social
+    conditions.</subfield></datafield></record></collection>"
+  published_display:
+  - Lāhaur
+  author_display: Iṣlāḥī, Amīn Aḥsan, 1904-1997
+  lc_callnum_display:
+  - HQ1745.5 .I83 1978
+  title_t:
+  - Pākistānī ʻaurat dorāhe par /
+  pub_date:
+  - '1978'
+  pub_date_sort: 1978
+  format: Book
+  material_type_display:
+  - 8, 174 p.
+  lc_b4cutter_facet:
+  - HQ1745.5
+  title_display: Pākistānī ʻaurat dorāhe par
+  subject_addl_t:
+  - Pakistan
+  - Pakistan Social conditions
+  subject_t:
+  - Women
+  title_sort: pākistānī ʻaurat dorāhe par
+  id: '79930185'
+  author_sort: Iṣlāḥī Amīn Aḥsan 19041997 Pākistānī ʻaurat dorāhe par
+  title_addl_t:
+  - Pākistānī ʻaurat dorāhe par /
+  subject_geo_facet:
+  - Pakistan
+  subject_topic_facet:
+  - Women
+  lc_alpha_facet:
+  - HQ
+  language_facet:
+  - Urdu
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - M - Music
+  author_t:
+  - Nārāyaṇapaṇḍita,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01012cam
+    a22002657a 4500</leader><controlfield tag=\"001\">   85910001 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121023106.0</controlfield><controlfield
+    tag=\"007\">heuamb---baca</controlfield><controlfield tag=\"007\">heubmb---baaa</controlfield><controlfield
+    tag=\"008\">860321r19851946dcu     bb   s001 0 sano </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   85910001 </subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">LC San A 616</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Microfiche 90/61328 (P)</subfield></datafield><datafield
+    tag=\"100\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">Nārāyaṇapaṇḍita,</subfield><subfield
+    code=\"d\">17th cent.</subfield></datafield><datafield tag=\"245\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"a\">Āśleṣāśataka of Nārāyaṇa Paṇḍita</subfield><subfield
+    code=\"h\">[microform].</subfield></datafield><datafield tag=\"260\" ind1=\" \"
+    ind2=\" \"><subfield code=\"a\">Trivandrum :</subfield><subfield code=\"b\">University
+    MSS. Library, University of Travancore,</subfield><subfield code=\"c\">1946.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">xii, 24 p. ;</subfield><subfield
+    code=\"c\">24 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">Poem.</subfield></datafield><datafield tag=\"500\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">In Sanskrit; introd. in English.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">\"Reprint from the Journal
+    of the Travancore University Oriental Manuscripts Library, no. 7.\"</subfield></datafield><datafield
+    tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical
+    references and index.</subfield></datafield><datafield tag=\"500\" ind1=\" \"
+    ind2=\" \"><subfield code=\"a\">Master microform held by: DLC.</subfield></datafield><datafield
+    tag=\"533\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Microfiche.</subfield><subfield
+    code=\"b\">Washington, D.C. :</subfield><subfield code=\"c\">Library of Congress
+    Photoduplication Service,</subfield><subfield code=\"d\">1985.</subfield><subfield
+    code=\"e\">1 microfiche ; 11 x 15 cm.</subfield></datafield></record></collection>"
+  published_display:
+  - Trivandrum
+  author_display: Nārāyaṇapaṇḍita, 17th cent
+  lc_callnum_display:
+  - Microfiche 90/61328 (P)
+  title_t:
+  - Āśleṣāśataka of Nārāyaṇa Paṇḍita
+  pub_date:
+  - '1946'
+  pub_date_sort: 1946
+  format: Book
+  material_type_display:
+  - xii, 24 p.
+  lc_b4cutter_facet:
+  - Microfiche 90/61328 (P)
+  title_display: Āśleṣāśataka of Nārāyaṇa Paṇḍita
+  title_sort: āśleṣāśataka of nārāyaṇa paṇḍita
+  id: '85910001'
+  author_sort: Nārāyaṇapaṇḍita 17th cent Āśleṣāśataka of Nārāyaṇa Paṇḍita
+    microform
+  title_addl_t:
+  - Āśleṣāśataka of Nārāyaṇa Paṇḍita
+  language_facet:
+  - Sanskrit
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: sipurim mafliʼim ha-mevusasim ʻal ʻuvdot hisṭoriyot
+  author_vern_display: "‏פינקל, חיים יעקב"
+  subject_addl_t:
+  - Anecdotes
+  title_display: Shodede-yam Yehudiyim
+  id: '86207417'
+  isbn_t:
+  - '9650101373'
+  subject_topic_facet:
+  - Jewish pirates
+  - Jewish criminals
+  lc_alpha_facet:
+  - G
+  subtitle_t:
+  - sipurim mafliʼim ha-mevusasim ʻal ʻuvdot hisṭoriyot /
+  - "‏ספורים מפליאים המבוססים על עובדות היסטוריות /‏"
+  author_t:
+  - Finkel, Chaim Jacob.
+  - "‏פינקל, חיים יעקב"
+  lc_1letter_facet:
+  - G - Geography, Anthropology, Recreation
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01258cam
+    a2200301 a 4500</leader><controlfield tag=\"001\">   86207417 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123161900.0</controlfield><controlfield
+    tag=\"008\">930810s1984    is a          000 0 heb  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   86207417 </subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9650101373</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH93-B1897</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield></datafield><datafield tag=\"041\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">heb</subfield><subfield code=\"h\">eng</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">G535</subfield><subfield
+    code=\"b\">.F54 1984</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\"
+    \"><subfield code=\"c\">(2</subfield></datafield><datafield tag=\"100\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Finkel,
+    Chaim Jacob.</subfield></datafield><datafield tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"a\">Jewish pirates.</subfield><subfield code=\"l\">Hebrew</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Shodede-yam Yehudiyim :</subfield><subfield code=\"b\">sipurim mafliʼim
+    ha-mevusasim ʻal ʻuvdot hisṭoriyot /</subfield><subfield code=\"c\">Ḥayim Yaʻaḳov
+    Finḳel ; me-Anglit, Ofirah Rahaṭ.</subfield></datafield><datafield tag=\"260\"
+    ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Yerushalayim
+    :</subfield><subfield code=\"b\">Devir,</subfield><subfield code=\"c\">c1984.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">283 p. :</subfield><subfield
+    code=\"b\">ill. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Title on t.p. verso: Jewish
+    pirates.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Jewish pirates</subfield><subfield code=\"v\">Anecdotes.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Jewish criminals</subfield><subfield
+    code=\"v\">Anecdotes.</subfield></datafield><datafield tag=\"740\" ind1=\"0\"
+    ind2=\" \"><subfield code=\"a\">Jewish pirates.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(2/r‏</subfield><subfield
+    code=\"a\">‏פינקל, חיים יעקב.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-02/(2/r‏</subfield><subfield code=\"a\">‏שודדי־ים
+    יהודיים :‏</subfield><subfield code=\"b\">‏ספורים מפליאים המבוססים על עובדות היסטוריות
+    /‏</subfield><subfield code=\"c\">‏חיים יעקב פינקל ; מאנגלית, אופירה רהט.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/(2/r‏</subfield><subfield
+    code=\"a\">‏ירושלים :‏</subfield><subfield code=\"b\">‏דביר,‏</subfield><subfield
+    code=\"c\">‏‪c1984‬.</subfield></datafield></record></collection>"
+  published_display:
+  - Yerushalayim
+  author_display: Finkel, Chaim Jacob
+  title_vern_display: "‏שודדי־ים יהודיים :‏"
+  lc_callnum_display:
+  - G535 .F54 1984
+  title_t:
+  - 'Shodede-yam Yehudiyim :'
+  - "‏שודדי־ים יהודיים :‏"
+  pub_date:
+  - '1984'
+  pub_date_sort: 1984
+  published_vern_display:
+  - "‏ירושלים :‏"
+  format: Book
+  subtitle_vern_display: "‏ספורים מפליאים המבוססים על עובדות היסטוריות /‏"
+  lc_b4cutter_facet:
+  - G535
+  material_type_display:
+  - 283 p.
+  subject_t:
+  - Jewish pirates
+  - Jewish criminals
+  title_sort: shodede-yam yehudiyim :sipurim mafliʼim ha-mevusasim ʻal ʻuvdot hisṭoriyot
+  author_sort: Finkel Chaim Jacob Jewish pirates Hebrew Shodedeyam Yehudiyim sipurim
+    mafliʼim hamevusasim ʻal ʻuvdot hisṭoriyot
+  title_addl_t:
+  - 'Shodede-yam Yehudiyim : sipurim mafliʼim ha-mevusasim ʻal ʻuvdot hisṭoriyot
+    /'
+  - Jewish pirates. Hebrew
+  - "‏שודדי־ים יהודיים :‏ ‏ספורים מפליאים המבוססים על עובדות היסטוריות /‏"
+  title_added_entry_t:
+  - Jewish pirates.
+  language_facet:
+  - Hebrew
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  author_t:
+  - Muvaḥḥid Abṭaḥī, Ḥujjat.
+  - "‏موحد ابطحى، خجة"
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01657cam
+    a2200337 a 4500</leader><controlfield tag=\"001\">   87931798 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121115059.0</controlfield><controlfield
+    tag=\"008\">060428m19869999ir ah    b    000 0 per d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   87931798 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN06-B3656</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">NjP</subfield><subfield
+    code=\"c\">NjP</subfield><subfield code=\"d\">UkLSOA</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a------</subfield><subfield
+    code=\"a\">f------</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">BP44</subfield><subfield code=\"b\">.M88 1986</subfield></datafield><datafield
+    tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(3</subfield><subfield
+    code=\"c\">(4</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Muvaḥḥid Abṭaḥī,
+    HÌ£ujjat.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">880-02</subfield><subfield code=\"a\">Āshnāʼī bā ḥawzahʹhā-yi
+    ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh /</subfield><subfield code=\"c\">bih
+    qalam-i Ḥujjat Muvaḥḥid Abṭaḥī.</subfield></datafield><datafield tag=\"246\"
+    ind1=\"3\" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Āshnāyī
+    bā ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh</subfield></datafield><datafield
+    tag=\"246\" ind1=\"3\" ind2=\"0\"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield
+    code=\"a\">Iṣfahān :</subfield><subfield code=\"b\">Ḥawzah-i ʻIlmīyah,</subfield><subfield
+    code=\"c\">1365-   [1986-      ]</subfield></datafield><datafield tag=\"300\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">v. &lt;1&gt; :</subfield><subfield
+    code=\"b\">ill. (some col.), facsims. ;</subfield><subfield code=\"c\">25 cm.</subfield></datafield><datafield
+    tag=\"504\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Bibliography: v. 1, p.451-455.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Religious institutions</subfield><subfield
+    code=\"z\">Islamic countries.</subfield></datafield><datafield tag=\"650\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Shiites</subfield><subfield code=\"x\">Education</subfield><subfield
+    code=\"z\">Islamic countries.</subfield></datafield><datafield tag=\"650\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Islamic universities and colleges.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/r‏</subfield><subfield
+    code=\"a\">‏موحد ابطحى، خجة.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-02/(3/r‏</subfield><subfield code=\"a\">‏اشنائى
+    با حوزه‌هاى علميۀ شيعه در طول تاريخ /‏</subfield><subfield code=\"c\">‏بقلم حجة
+    موحد ابطحى.</subfield></datafield><datafield tag=\"880\" ind1=\"3\" ind2=\" \"><subfield
+    code=\"6\">246-03/(3/r‏</subfield><subfield code=\"a\">‏اشنايى با حوزه‌هاى علميۀ
+    شيعه در طول تاريخ</subfield></datafield><datafield tag=\"880\" ind1=\"3\" ind2=\"0\"><subfield
+    code=\"6\">246-04/(3/r‏</subfield><subfield code=\"a\">‏حوزه هاى علميۀ شيعه</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-05/(3/r‏</subfield><subfield
+    code=\"a\">‏اصفهان :‏</subfield><subfield code=\"b\">‏حوزۀ علميه،‏</subfield><subfield
+    code=\"c\">‏‪1365- [1986-    ]‬.</subfield></datafield></record></collection>"
+  published_display:
+  - Iṣfahān
+  title_vern_display: "‏اشنائى با حوزه‌هاى علميۀ شيعه در طول تاريخ /‏"
+  author_display: Muvaḥḥid Abṭaḥī, Ḥujjat
+  lc_callnum_display:
+  - BP44 .M88 1986
+  title_t:
+  - Āshnāʼī bā ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh /
+  - "‏اشنائى با حوزه‌هاى علميۀ شيعه در طول تاريخ /‏"
+  pub_date:
+  - '1986'
+  pub_date_sort: 1986
+  published_vern_display:
+  - "‏اصفهان :‏"
+  format: Book
+  author_vern_display: "‏موحد ابطحى، خجة"
+  material_type_display:
+  - v. <1>
+  lc_b4cutter_facet:
+  - BP44
+  title_display: Āshnāʼī bā ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh
+  subject_addl_t:
+  - Islamic countries
+  - Education Islamic countries
+  subject_t:
+  - Religious institutions
+  - Shiites
+  - Islamic universities and colleges
+  title_sort: āshnāʼī bā ḥawzahʹhā-yi ʻilmīyah-ʼi shīʻah dar ṭūl-i tārīkh
+  id: '87931798'
+  author_sort: Muvaḥḥid Abṭaḥī Ḥujjat Āshnāʼī bā ḥawzahʹhāyi ʻilmīyahʼi
+    Shīʻah dar ṭūli tārīkh
+  title_addl_t:
+  - Āshnāʼī bā ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh /
+  - Āshnāyī bā ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah dar ṭūl-i tārīkh
+  - Ḥawzahʹhā-yi ʻilmīyah-ʼi Shīʻah
+  - "‏اشنائى با حوزه‌هاى علميۀ شيعه در طول تاريخ /‏"
+  - "‏اشنايى با حوزه‌هاى علميۀ شيعه در طول تاريخ"
+  - "‏حوزه هاى علميۀ شيعه"
+  subject_geo_facet:
+  - Islamic countries
+  subject_topic_facet:
+  - Religious institutions
+  - Shiites
+  - Islamic universities and colleges
+  lc_alpha_facet:
+  - BP
+  language_facet:
+  - Persian
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - M - Music
+  author_t:
+  - Lomtʻatʻiże, Čola,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00610cam
+    a22001817a 4500</leader><controlfield tag=\"001\">   90142413 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126150928.0</controlfield><controlfield
+    tag=\"008\">900409s1975    gs            000 0 geo  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   90142413 </subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">MLCSN 96/3906 (H)</subfield></datafield><datafield tag=\"100\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"a\">Lomtʻatʻiże, Čola,</subfield><subfield code=\"d\">1879-1915.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Mrecvelobis mušakis cʻxovrebis
+    cesi :</subfield><subfield code=\"b\">tʻeoriul-metʻoduri narkvevi /</subfield><subfield
+    code=\"c\">Čola Lomtʻatʻiże.</subfield></datafield><datafield tag=\"246\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"i\">Title in colophon:</subfield><subfield code=\"a\">Obraz
+    zhizni rabotnika promyshlennosti</subfield></datafield><datafield tag=\"260\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Tʻbilisi :</subfield><subfield code=\"b\">Mecʻniereba,</subfield><subfield
+    code=\"c\">1975.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">65 p. ;</subfield><subfield code=\"c\">22 cm.</subfield></datafield><datafield
+    tag=\"653\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Industrial workers;</subfield><subfield
+    code=\"a\">life style</subfield></datafield></record></collection>"
+  published_display:
+  - Tʻbilisi
+  author_display: Lomtʻatʻiże, Čola, 1879-1915
+  lc_callnum_display:
+  - MLCSN 96/3906 (H)
+  title_t:
+  - 'Mrecvelobis mušakis cʻxovrebis cesi :'
+  pub_date:
+  - '1975'
+  pub_date_sort: 1975
+  subtitle_display: tʻeoriul-metʻoduri narkvevi
+  format: Book
+  material_type_display:
+  - 65 p.
+  lc_b4cutter_facet:
+  - MLCSN 96/3906 (H)
+  title_display: Mrecvelobis mušakis cʻxovrebis cesi
+  subject_t:
+  - Industrial workers; life style
+  title_sort: mrecvelobis mušakis cʻxovrebis cesi :tʻeoriul-metʻoduri narkvevi
+  id: '90142413'
+  author_sort: Lomtʻatʻiże Čola 18791915 Mrecvelobis mušakis cʻxovrebis cesi tʻeoriulmetʻoduri
+    narkvevi
+  title_addl_t:
+  - 'Mrecvelobis mušakis cʻxovrebis cesi : tʻeoriul-metʻoduri narkvevi /'
+  - Obraz zhizni rabotnika promyshlennosti
+  subject_topic_facet:
+  - Industrial workers; life style
+  language_facet:
+  - Georgian
+  subtitle_t:
+  - tʻeoriul-metʻoduri narkvevi /
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - K - Law
+  author_t:
+  - Korea (North)
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01106cam
+    a2200325 a 4500</leader><controlfield tag=\"001\">   92117465 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126171556.0</controlfield><controlfield
+    tag=\"008\">920805s1990    ko       l    000 0 kor  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   92117465 </subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">W300000 (set)</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP92-B14190</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">a-kn---</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">KPC13</subfield><subfield code=\"b\">.K67 1990</subfield></datafield><datafield
+    tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield
+    tag=\"110\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Korea (North)</subfield></datafield><datafield
+    tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Laws, etc.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">Pukhan pŏmnyŏngjip /</subfield><subfield code=\"c\">chʻaegim pʻyŏnjip
+    Chŏng Kyŏng-mo, Chʻoe Tal-gon.</subfield></datafield><datafield tag=\"250\"
+    ind1=\" \" ind2=\" \"><subfield code=\"6\">880-02</subfield><subfield code=\"a\">Chaepʻan.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield
+    code=\"a\">Sŏul Tʻŭkpyŏlsi :</subfield><subfield code=\"b\">Taeryuk Yŏnʼguso,</subfield><subfield
+    code=\"c\">1990.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">5 v. ;</subfield><subfield code=\"c\">27 cm.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Law</subfield><subfield
+    code=\"z\">Korea (North)</subfield></datafield><datafield tag=\"700\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield code=\"a\">Chŏng,
+    Kyŏng-mo,</subfield><subfield code=\"d\">1937-</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield
+    code=\"a\">Chʻoe, Tal-gon.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-01/$1</subfield><subfield code=\"a\">北韓 法令集 /</subfield><subfield
+    code=\"c\">責任 編輯 鄭 慶謨, 崔 逹坤.</subfield></datafield><datafield tag=\"880\" ind1=\"
+    \" ind2=\" \"><subfield code=\"6\">250-02/$1</subfield><subfield code=\"a\">再版.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-03/$1</subfield><subfield
+    code=\"a\">서울 持別市 :</subfield><subfield code=\"b\">大陸 研究所,</subfield><subfield
+    code=\"c\">1990.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"6\">700-04/$1</subfield><subfield code=\"a\">鄭 慶謨,</subfield><subfield
+    code=\"d\">1937-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"6\">700-05/$1</subfield><subfield code=\"a\">崔 逹坤.</subfield></datafield></record></collection>"
+  published_display:
+  - Sŏul Tʻŭkpyŏlsi
+  title_vern_display: "北韓 法令集 /"
+  author_display: Korea (North)
+  lc_callnum_display:
+  - KPC13 .K67 1990
+  title_t:
+  - Pukhan pŏmnyŏngjip /
+  - "北韓 法令集 /"
+  pub_date:
+  - '1990'
+  pub_date_sort: 1990
+  published_vern_display:
+  - "서울 持別市 :"
+  format: Book
+  material_type_display:
+  - 5 v.
+  lc_b4cutter_facet:
+  - KPC13
+  title_display: Pukhan pŏmnyŏngjip
+  subject_addl_t:
+  - Korea (North)
+  subject_t:
+  - Law
+  title_sort: pukhan pŏmnyŏngjip
+  id: '92117465'
+  author_sort: Korea North Laws etc Pukhan pŏmnyŏngjip
+  title_addl_t:
+  - Pukhan pŏmnyŏngjip /
+  - Laws, etc
+  - "北韓 法令集 /"
+  subject_geo_facet:
+  - Korea (North)
+  subject_topic_facet:
+  - Law
+  author_addl_t:
+  - Chŏng, Kyŏng-mo,
+  - Chʻoe, Tal-gon.
+  - "鄭 慶謨,"
+  - "崔 逹坤."
+  lc_alpha_facet:
+  - KPC
+  language_facet:
+  - Korean
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: ṿe-hu perush yafeh u-menupeh ʻal Shulḥan ʻarukh Oraḥ ḥayim
+    asher ḥiber Yosef Ḳaro ... ʻim ḥidushe dinim she-hishmiṭ ha-gaʼon ... ṿe-himtsiʼam
+    ... Mosheh Iserlish
+  author_vern_display: "‏ישראל מאיר,‏ ‏הכהן"
+  subject_addl_t:
+  - Customs and practices
+  title_display: Sefer Mishnah berurah
+  id: '92828023'
+  subject_topic_facet:
+  - Karo, Joseph ben Ephraim, 1488-1575
+  - Jewish law
+  - Judaism
+  lc_alpha_facet:
+  - BM
+  subtitle_t:
+  - ṿe-hu perush yafeh u-menupeh ʻal Shulḥan ʻarukh Oraḥ ḥayim asher ḥiber Yosef
+    Ḳaro ... ʻim ḥidushe dinim she-hishmiṭ ha-gaʼon ... ṿe-himtsiʼam ... Mosheh
+    Iserlish /
+  - "‏והוא פירוש יפה ומנפה על שלחן ערוך ארח חיים אשר חבר יוסף קארו ... עם חידושי דינים
+    שהשמיט הגאון ... והמציאם משה איסרליש /‏"
+  author_t:
+  - Israel Meir, ha-Kohen,
+  - "‏ישראל מאיר,‏ ‏הכהן"
+  lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>03361cam
+    a2200493 a 4500</leader><controlfield tag=\"001\">   92828023 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122150744.0</controlfield><controlfield
+    tag=\"008\">921008m19929999is            000 0 heb  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   92828023 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH92-B2385</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BM520.88.A53</subfield><subfield
+    code=\"b\">I88 1992b</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\"
+    \"><subfield code=\"c\">(2</subfield></datafield><datafield tag=\"100\" ind1=\"0\"
+    ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Israel Meir,</subfield><subfield
+    code=\"c\">ha-Kohen,</subfield><subfield code=\"d\">1838-1933.</subfield></datafield><datafield
+    tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Mishnah berurah</subfield></datafield><datafield tag=\"245\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Sefer Mishnah
+    berurah :</subfield><subfield code=\"b\">ṿe-hu perush yafeh u-menupeh ʻal Shulḥan
+    ʻarukh Oraḥ ḥayim asher ḥiber Yosef Ḳaro ... ʻim ḥidushe dinim she-hishmiṭ
+    ha-gaʼon ... ṿe-himtsiʼam ... Mosheh Iserlish /</subfield><subfield code=\"c\">kol
+    eleh ḥibarti [z.o. asafti ṿe-ʻarakhti] Yiśraʼel Meʼir b.R. Aryeh Zeʼev ha-Kohen.</subfield></datafield><datafield
+    tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Hotsaʼah ḥadashah, menuḳedet u-mefuseḳet uve-fiʻnuaḥ rashe-tevot
+    uve-hagahah meduḳdeḳet.</subfield></datafield><datafield tag=\"260\" ind1=\"
+    \" ind2=\" \"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">[Jerusalem?
+    :</subfield><subfield code=\"b\">ḥ. mo. l. ],</subfield><subfield code=\"c\">752-&lt;[768]&gt;
+    [1992-&lt;2007 or 2008&gt;]</subfield><subfield code=\"e\">(Yerushalayim :</subfield><subfield
+    code=\"f\">Nidpas ʻa. y. Makhon le-hotsaʼat sefarim ʻA. L.B.)</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">v. &lt;1-5&gt; ;</subfield><subfield
+    code=\"c\">29 cm.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">Title on cover &lt;v. 2-3, 5&gt;: Sefer Mishnah berurah
+    ha-menuḳad.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">Vol. 4- has ed. statement: Mahadura meyuḥedet ʻim hagahot ṿe-heʻarot
+    \"Ish matsliaḥ\" la-Sefaradim ṿa-ʻadot ha-Mizraḥ.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Vol. 4- published: Bene
+    Beraḳ : \"Mekhon ha-Rav Matsliaḥ\" she-ʻa. y. Mosdot Yeshivat \"Kise Raḥamim\"
+    Sefaradit.</subfield></datafield><datafield tag=\"500\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">Includes text of Shulḥan ʻarukh, Oraḥ ḥayim.</subfield></datafield><datafield
+    tag=\"500\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes Beʼer ha-Golah
+    by Mosheh Ravḳash, Baʼer heṭev by Judah ben Simon Ashkenazi, Shaʻare teshuvah
+    by HÌ£ayim Mordekhai Margaliyot.</subfield></datafield><datafield tag=\"600\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"a\">Karo, Joseph ben Ephraim,</subfield><subfield
+    code=\"d\">1488-1575.</subfield><subfield code=\"t\">Oraḥ ḥayim.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Jewish law.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Judaism</subfield><subfield
+    code=\"x\">Customs and practices.</subfield></datafield><datafield tag=\"700\"
+    ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-06</subfield><subfield code=\"a\">Isserles,
+    Moses ben Israel,</subfield><subfield code=\"d\">ca. 1525-1572.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\"2\"><subfield code=\"6\">880-07</subfield><subfield
+    code=\"a\">Karo, Joseph ben Ephraim,</subfield><subfield code=\"d\">1488-1575.</subfield><subfield
+    code=\"t\">Oraḥ ḥayim.</subfield></datafield><datafield tag=\"740\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">Mishnah
+    berurah.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">880-09</subfield><subfield code=\"a\">Sefer Mishnah berurah ha-menuḳad.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-10</subfield><subfield
+    code=\"a\">Ish matsliaḥ.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\" \"><subfield code=\"6\">100-01/(2/r‏</subfield><subfield code=\"a\">‏ישראל
+    מאיר,‏</subfield><subfield code=\"c\">‏הכהן.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">240-02/(2/r‏</subfield><subfield
+    code=\"a\">‏משנה ברורה</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-03/(2/r‏</subfield><subfield code=\"a\">‏ספר
+    משנה ברורה :‏</subfield><subfield code=\"b\">‏והוא פירוש יפה ומנפה על שלחן ערוך
+    ארח חיים אשר חבר יוסף קארו ... עם חידושי דינים שהשמיט הגאון ... והמציאם משה איסרליש
+    /‏</subfield><subfield code=\"c\">‏כל אלה חיברתי [ז״א אספתי וערכתי] ישראל מאיר
+    בר׳ אריה זאב הכהן.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">250-04/(2/r‏</subfield><subfield code=\"a\">‏הוצאה חדשה,
+    מנקדת ומפסקת ובפענוח ראשי־תבות ובהגהה מדקדקת.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-05/(2/r‏</subfield><subfield
+    code=\"a\">‏[Jerusalem? :‏</subfield><subfield code=\"b\">‏חמו״ל,‏</subfield><subfield
+    code=\"c\">‏‪752-&lt;[768]&gt; [1992-&lt;2007 or 2008&gt;]‏</subfield><subfield
+    code=\"e\">‏(ירושלים :‏</subfield><subfield code=\"f\">‏נדפס ע״י מכון להוצאת ספרים
+    ע.ל.ב.)‬</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"4\"><subfield
+    code=\"6\">630-00/(2/r‏</subfield><subfield code=\"a\">‏שלחן ערוך.‏</subfield><subfield
+    code=\"p\">‏ארח חיים.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">700-06/(2/r‏</subfield><subfield code=\"a\">‏איסרליש,
+    משה.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"2\"><subfield
+    code=\"6\">700-07/(2/r‏</subfield><subfield code=\"a\">‏קארו, יוסף.‏</subfield><subfield
+    code=\"t\">‏אורח חיים.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-08/(2/r‏</subfield><subfield code=\"a\">‏משנה
+    ברורה.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">740-09/(2/r‏</subfield><subfield code=\"a\">‏ספר משנה ברורה המנקד.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-10/(2/r</subfield><subfield
+    code=\"a\">איש מצליח.</subfield></datafield></record></collection>"
+  published_display:
+  - Jerusalem?
+  author_display: Israel Meir, ha-Kohen, 1838-1933
+  title_vern_display: "‏ספר משנה ברורה :‏"
+  lc_callnum_display:
+  - BM520.88.A53 I88 1992b
+  title_t:
+  - 'Sefer Mishnah berurah :'
+  - "‏ספר משנה ברורה :‏"
+  pub_date:
+  - '1992'
+  pub_date_sort: 1992
+  published_vern_display:
+  - "‏[Jerusalem? :‏"
+  format: Book
+  subtitle_vern_display: "‏והוא פירוש יפה ומנפה על שלחן ערוך ארח חיים אשר חבר יוסף
+    קארו ... עם חידושי דינים שהשמיט הגאון ... והמציאם משה איסרליש /‏"
+  lc_b4cutter_facet:
+  - BM520.88.A53
+  material_type_display:
+  - v. <1-5>
+  subject_t:
+  - Karo, Joseph ben Ephraim, 1488-1575. Oraḥ ḥayim
+  - Jewish law
+  - Judaism
+  - "‏שלחן ערוך.‏ ‏ארח חיים"
+  title_sort: sefer mishnah berurah :ṿe-hu perush yafeh u-menupeh ʻal shulḥan ʻarukh
+    oraḥ ḥayim asher ḥiber yosef ḳaro ... ʻim ḥidushe dinim she-hishmiṭ ha-gaʼon
+    ... ṿe-himtsiʼam ... mosheh iserlish
+  author_sort: Israel Meir haKohen 18381933 Mishnah berurah Sefer Mishnah berurah
+    ṿehu perush yafeh umenupeh ʻal Shulḥan ʻarukh Oraḥ ḥayim asher ḥiber Yosef
+    Ḳaro  ʻim ḥidushe dinim shehishmiṭ hagaʼon  ṿehimtsiʼam  Mosheh Iserlish
+  title_addl_t:
+  - 'Sefer Mishnah berurah : ṿe-hu perush yafeh u-menupeh ʻal Shulḥan ʻarukh Oraḥ
+    ḥayim asher ḥiber Yosef Ḳaro ... ʻim ḥidushe dinim she-hishmiṭ ha-gaʼon ...
+    ṿe-himtsiʼam ... Mosheh Iserlish /'
+  - Mishnah berurah
+  - "‏ספר משנה ברורה :‏ ‏והוא פירוש יפה ומנפה על שלחן ערוך ארח חיים אשר חבר יוסף קארו
+    ... עם חידושי דינים שהשמיט הגאון ... והמציאם משה איסרליש /‏"
+  - "‏משנה ברורה"
+  author_addl_t:
+  - Isserles, Moses ben Israel,
+  - Karo, Joseph ben Ephraim,
+  - "‏איסרליש, משה"
+  - "‏קארו, יוסף.‏"
+  title_added_entry_t:
+  - Oraḥ ḥayim
+  - Mishnah berurah.
+  - Sefer Mishnah berurah ha-menuḳad.
+  - Ish matsliaḥ.
+  - "‏אורח חיים"
+  - "‏משנה ברורה"
+  - "‏ספר משנה ברורה המנקד"
+  - "איש מצליח"
+  language_facet:
+  - Hebrew
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: 'kangnam yŏin kwa sin pʻalbulchʻul : Kim Hong-sin setʻae rŭpʻo'
+  author_vern_display: "김 홍신, 1947-"
+  subject_addl_t:
+  - Korea (South) Social conditions
+  - Social conditions
+  title_display: Ajikto kŭrŏk chŏrŏk sasimnikka
+  id: '94120425'
+  subject_geo_facet:
+  - Seoul (Korea)
+  - Korea (South)
+  subject_topic_facet:
+  - Women
+  lc_alpha_facet:
+  - HQ
+  subtitle_t:
+  - 'kangnam yŏin kwa sin pʻalbulchʻul : Kim Hong-sin setʻae rŭpʻo.'
+  - "강남 여인 과 신 팔불출 : 金 洪信 세태 르포"
+  author_t:
+  - Kim, Hong-sin,
+  - "김 홍신"
+  lc_1letter_facet:
+  - H - Social Sciences
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01149cam
+    a2200301 a 4500</leader><controlfield tag=\"001\">   94120425 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123075708.0</controlfield><controlfield
+    tag=\"008\">940328s1990    ko            000 0 kor d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   94120425 </subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"c\">W3800</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLP94-B5791</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">CLASIA</subfield><subfield
+    code=\"c\">CLASIA</subfield><subfield code=\"d\">DLC</subfield><subfield code=\"d\">CStRLIN</subfield><subfield
+    code=\"d\">DLC-R</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield tag=\"043\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">a-ko---</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HQ1765.5</subfield><subfield
+    code=\"b\">.K46 1990</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\"
+    \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Kim, Hong-sin,</subfield><subfield
+    code=\"d\">1947-</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">880-02</subfield><subfield code=\"a\">Ajikto kŭrŏk chŏrŏk sasimnikka
+    :</subfield><subfield code=\"b\">kangnam yŏin kwa sin pʻalbulchʻul : Kim Hong-sin
+    setʻae rŭpʻo.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Chʻopʻan.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Sŏul :</subfield><subfield code=\"b\">Yŏwŏn Chʻulpʻanʼguk,</subfield><subfield
+    code=\"c\">1990</subfield><subfield code=\"g\">(1992 printing)</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">289 p. ;</subfield><subfield
+    code=\"c\">22 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Women</subfield><subfield code=\"z\">Korea (South)</subfield><subfield
+    code=\"x\">Social conditions.</subfield></datafield><datafield tag=\"651\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Seoul (Korea)</subfield><subfield code=\"x\">Social
+    conditions.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\" \"><subfield
+    code=\"6\">100-01/$1</subfield><subfield code=\"a\">김 홍신,</subfield><subfield
+    code=\"d\">1947-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">245-02/$1</subfield><subfield code=\"a\">아직도 그럭 저럭 사십니까 :</subfield><subfield
+    code=\"b\">강남 여인 과 신 팔불출 : 金 洪信 세태 르포.</subfield></datafield><datafield tag=\"880\"
+    ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">초판.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield
+    code=\"a\">서울 :</subfield><subfield code=\"b\">女苑 出版局,</subfield><subfield code=\"c\">1990</subfield><subfield
+    code=\"g\">(1992 printing)</subfield></datafield></record></collection>"
+  published_display:
+  - Sŏul
+  author_display: Kim, Hong-sin, 1947-
+  title_vern_display: "아직도 그럭 저럭 사십니까"
+  lc_callnum_display:
+  - HQ1765.5 .K46 1990
+  title_t:
+  - 'Ajikto kŭrŏk chŏrŏk sasimnikka :'
+  - "아직도 그럭 저럭 사십니까"
+  pub_date:
+  - '1990'
+  pub_date_sort: 1990
+  published_vern_display:
+  - "서울"
+  format: Book
+  subtitle_vern_display: "강남 여인 과 신 팔불출 : 金 洪信 세태 르포"
+  lc_b4cutter_facet:
+  - HQ1765.5
+  material_type_display:
+  - 289 p.
+  subject_t:
+  - Women
+  - Seoul (Korea)
+  title_sort: 'ajikto kŭrŏk chŏrŏk sasimnikka :kangnam yŏin kwa sin pʻalbulchʻul
+    : kim hong-sin setʻae rŭpʻo'
+  author_sort: Kim Hongsin 1947 Ajikto kŭrŏk chŏrŏk sasimnikka kangnam yŏin kwa
+    sin pʻalbulchʻul  Kim Hongsin setʻae rŭpʻo
+  title_addl_t:
+  - 'Ajikto kŭrŏk chŏrŏk sasimnikka : kangnam yŏin kwa sin pʻalbulchʻul : Kim
+    Hong-sin setʻae rŭpʻo.'
+  - "아직도 그럭 저럭 사십니까 : 강남 여인 과 신 팔불출 : 金 洪信 세태 르포"
+  language_facet:
+  - Korean
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: dar khiradvarzī-i siyāsī va huvīyat-i mā Īrānīyān
+  author_vern_display: "‏رجايى، فرهنگ ."
+  subject_addl_t:
+  - Iran
+  - Ethnic identity
+  - Politics and government
+  - Civilization
+  title_display: Maʻrakah-ʼi jahānʹbīnīʹhā
+  id: '96933325'
+  subject_geo_facet:
+  - Iran
+  subject_topic_facet:
+  - Political science
+  - Iranians
+  lc_alpha_facet:
+  - DS
+  title_series_t:
+  - Sipihr-i farhang va jāmiʻah ; 1
+  - "‏سپهر فرهنگ و جامعه ؛‏ ‏1"
+  subtitle_t:
+  - dar khiradvarzī-i siyāsī va huvīyat-i mā Īrānīyān /
+  - "‏در خردورزى سياسى و هويت ما ايرانيان /‏"
+  author_t:
+  - Rajāyī, Farhang,
+  - "‏رجايى، فرهنگ ."
+  lc_1letter_facet:
+  - D - World History
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01484cam
+    a2200349 a 4500</leader><controlfield tag=\"001\">   96933325 </controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121112252.0</controlfield><controlfield
+    tag=\"008\">040115s1994    ir       b    001 0 per  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">   96933325 </subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN04-B274</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">a-ir---</subfield></datafield><datafield tag=\"050\"
+    ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS274</subfield><subfield code=\"b\">.R327
+    1994</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\" \"><subfield
+    code=\"c\">(3</subfield><subfield code=\"c\">(4</subfield></datafield><datafield
+    tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">Rajāyī, Farhang,</subfield><subfield code=\"d\">1952 or 3-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Maʻrakah-ʼi jahānʹbīnīʹhā :</subfield><subfield code=\"b\">dar
+    khiradvarzī-i siyāsī va huvīyat-i mā Īrānīyān /</subfield><subfield code=\"c\">Farhang
+    Rajāʼī.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" \"><subfield
+    code=\"6\">880-03</subfield><subfield code=\"a\">Chāp-i 1.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Tihrān :</subfield><subfield code=\"b\">Iḥyā-yi Kitāb,</subfield><subfield
+    code=\"c\">1373 [1994 or 1995]</subfield></datafield><datafield tag=\"300\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">323 p. ;</subfield><subfield code=\"c\">22
+    cm.</subfield></datafield><datafield tag=\"440\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"6\">880-05</subfield><subfield code=\"a\">Sipihr-i farhang va jāmiʻah
+    ;</subfield><subfield code=\"v\">1</subfield></datafield><datafield tag=\"504\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Includes bibliographical references
+    (p.287-320) and index.</subfield></datafield><datafield tag=\"651\" ind1=\" \"
+    ind2=\"0\"><subfield code=\"a\">Iran</subfield><subfield code=\"x\">Politics and
+    government.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Political science</subfield><subfield code=\"z\">Iran.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Iranians</subfield><subfield
+    code=\"x\">Ethnic identity.</subfield></datafield><datafield tag=\"651\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Iran</subfield><subfield code=\"x\">Civilization.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(4/r‏</subfield><subfield
+    code=\"a\">‏رجايى، فرهنگ .</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-02/(3/r‏</subfield><subfield code=\"a\">‏معركۀ
+    جهان‌بينىها :‏</subfield><subfield code=\"b\">‏در خردورزى سياسى و هويت ما ايرانيان
+    /‏</subfield><subfield code=\"c\">‏فرهنگ رجائى.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(4/r‏</subfield><subfield
+    code=\"a\">‏چاپ 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">260-04/(3/r‏</subfield><subfield code=\"a\">‏تهران :‏</subfield><subfield
+    code=\"b\">‏احياء كتاب،‏</subfield><subfield code=\"c\">‏‪1373 [1994 or 1995]‬.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\"0\"><subfield code=\"6\">440-05/(3/r‏</subfield><subfield
+    code=\"a\">‏سپهر فرهنگ و جامعه ؛‏</subfield><subfield code=\"v\">‏1</subfield></datafield></record></collection>"
+  published_display:
+  - Tihrān
+  author_display: Rajāyī, Farhang, 1952 or 3-
+  title_vern_display: "‏معركۀ جهان‌بينىها :‏"
+  lc_callnum_display:
+  - DS274 .R327 1994
+  title_t:
+  - 'Maʻrakah-ʼi jahānʹbīnīʹhā :'
+  - "‏معركۀ جهان‌بينىها :‏"
+  pub_date:
+  - '1994'
+  pub_date_sort: 1994
+  published_vern_display:
+  - "‏تهران :‏"
+  format: Book
+  subtitle_vern_display: "‏در خردورزى سياسى و هويت ما ايرانيان /‏"
+  material_type_display:
+  - 323 p.
+  lc_b4cutter_facet:
+  - DS274
+  subject_t:
+  - Political science
+  - Iranians
+  - Iran
+  title_sort: maʻrakah-ʼi jahānʹbīnīʹhā :dar khiradvarzī-i siyāsī va huvīyat-i
+    mā īrānīyān
+  author_sort: Rajāyī Farhang 1952 or 3 Maʻrakahʼi jahānʹbīnīʹhā dar khiradvarzīi
+    siyāsī va huvīyati mā Īrānīyān
+  title_addl_t:
+  - 'Maʻrakah-ʼi jahānʹbīnīʹhā : dar khiradvarzī-i siyāsī va huvīyat-i mā
+    Īrānīyān /'
+  - "‏معركۀ جهان‌بينىها :‏ ‏در خردورزى سياسى و هويت ما ايرانيان /‏"
+  language_facet:
+  - Persian
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - P - Language & Literature
+  author_t:
+  - Nārāyaṇa Paṇḍitācārya,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01588cam
+    a2200313 a 4500</leader><controlfield tag=\"001\">  2001417245</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121030347.0</controlfield><controlfield
+    tag=\"008\">011001m20009999ii            001 0 sano </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2001417245</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-San-2001-417245; 11</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield><subfield code=\"c\">Rs200.00 (v. 1)</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"041\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">sanengkan</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PK3798.N313</subfield><subfield
+    code=\"b\">S87 2000</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"a\">Nārāyaṇa Paṇḍitācārya,</subfield><subfield code=\"d\">13th
+    cent.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"a\">Sumadhvavijayaḥ /</subfield><subfield code=\"c\">Nārāyaṇapaṇḍitācāryaviracitaḥ
+    ; Nārāyaṇapaṇḍitācāryaviracitabhāvaprakāśikā, Viśvapatitīrthaviracitapadārthadīpikodbodhikā,
+    Chalārīśeṣācāryaviracitamandopakāriṇī iti vyākhyānatrayasametaḥ ;
+    edited by A.B. Shyamachar and S.R. Pandurangi.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Bangalore :</subfield><subfield
+    code=\"b\">Dvaita Vedanta Studies and Research Foundation,</subfield><subfield
+    code=\"c\">2000-</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">v. &lt;1   &gt; ;</subfield><subfield code=\"c\">25 cm.</subfield></datafield><datafield
+    tag=\"546\" ind1=\" \" ind2=\" \"><subfield code=\"a\">In Sanskrit; prefatory
+    matter in English and Kannada.</subfield></datafield><datafield tag=\"520\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">Verse work on Madhva, 13th cent. Vaishnava
+    religious leader and exponent of dualistic philosophy; includes autocommentary
+    and two classical commentaries.</subfield></datafield><datafield tag=\"500\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">Includes indexes.</subfield></datafield><datafield
+    tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Madhva,</subfield><subfield
+    code=\"d\">13th cent.</subfield><subfield code=\"v\">Poetry.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">Nārāyaṇa Paṇḍitācārya,</subfield><subfield
+    code=\"d\">17th cent.</subfield><subfield code=\"t\">Bhāvaprakāśikā.</subfield><subfield
+    code=\"f\">2000.</subfield></datafield><datafield tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"a\">Viśvapatitīrtha,</subfield><subfield code=\"d\">16th cent.</subfield><subfield
+    code=\"t\">Padārthadīpikodbodhikā.</subfield><subfield code=\"f\">2000.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">Chalāriśeṣācārya.</subfield><subfield
+    code=\"t\">Mandopakāriṇī.</subfield><subfield code=\"f\">2000.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Shyamachar, A. B.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Pandurangi, S. R.</subfield></datafield></record></collection>"
+  published_display:
+  - Bangalore
+  author_display: Nārāyaṇa Paṇḍitācārya, 13th cent
+  lc_callnum_display:
+  - PK3798.N313 S87 2000
+  title_t:
+  - Sumadhvavijayaḥ /
+  pub_date:
+  - '2000'
+  pub_date_sort: 2000
+  format: Book
+  material_type_display:
+  - v. <1   >
+  lc_b4cutter_facet:
+  - PK3798.N313
+  title_display: Sumadhvavijayaḥ
+  subject_addl_t:
+  - Poetry
+  subject_t:
+  - Madhva, 13th cent
+  title_sort: sumadhvavijayaḥ
+  id: '2001417245'
+  author_sort: Nārāyaṇa Paṇḍitācārya 13th cent Sumadhvavijayaḥ
+  title_addl_t:
+  - Sumadhvavijayaḥ /
+  subject_topic_facet:
+  - Madhva, 13th cent
+  author_addl_t:
+  - Nārāyaṇa Paṇḍitācārya,
+  - Viśvapatitīrtha,
+  - Chalāriśeṣācārya.
+  - Shyamachar, A. B.
+  - Pandurangi, S. R.
+  title_added_entry_t:
+  - Bhāvaprakāśikā
+  - Padārthadīpikodbodhikā
+  - Mandopakāriṇī
+  lc_alpha_facet:
+  - PK
+  language_facet:
+  - Sanskrit
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - U - Military Science
+  author_t:
+  - Wuld Mawlāy al-Zayn, Sayyid Muḥammad wuld Sayyid.
+  - "ولد مولاي الزين، سيد محمد ولد سيد"
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01197cam
+    a22003014a 4500</leader><controlfield tag=\"001\">  2003546302</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123173626.0</controlfield><controlfield
+    tag=\"008\">030922s2003    mu            000 0 ara  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2003546302</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN03-B4961</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">U21.2</subfield><subfield
+    code=\"b\">.W85 2003</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\"
+    \"><subfield code=\"c\">(3</subfield></datafield><datafield tag=\"100\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Wuld Mawlāy
+    al-Zayn, Sayyid Muḥammad wuld Sayyid.</subfield></datafield><datafield tag=\"245\"
+    ind1=\"1\" ind2=\"3\"><subfield code=\"6\">880-02</subfield><subfield code=\"a\">al-HÌ£arb
+    fī al-alfīyah al-thālithah /</subfield><subfield code=\"c\">bi-qalam Sayyid
+    Muḥammad wuld Sayyid wuld Mawlāy al-Zayn.</subfield></datafield><datafield tag=\"260\"
+    ind1=\" \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Nuwākshūṭ
+    :</subfield><subfield code=\"b\">[s.n.],</subfield><subfield code=\"c\">2003.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">128 p. ;</subfield><subfield
+    code=\"c\">20 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">War</subfield><subfield code=\"x\">History</subfield><subfield code=\"y\">21st
+    century.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Military art and science</subfield><subfield code=\"x\">History</subfield><subfield
+    code=\"y\">21st century.</subfield></datafield><datafield tag=\"650\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">War</subfield><subfield code=\"x\">Forecasting.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Military art and science</subfield><subfield
+    code=\"x\">Forecasting.</subfield></datafield><datafield tag=\"650\" ind1=\" \"
+    ind2=\"0\"><subfield code=\"a\">Warfare, Conventional.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Military weapons.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/(3/r</subfield><subfield
+    code=\"a\">ولد مولاي الزين، سيد محمد ولد سيد.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"2\"><subfield code=\"6\">245-02/(3/r</subfield><subfield
+    code=\"a\">الحرب في الألفية الثالثة /</subfield><subfield code=\"c\">بقلم سيد
+    محمد ولد سيد ولد مولاي الزين.</subfield></datafield><datafield tag=\"880\" ind1=\"
+    \" ind2=\" \"><subfield code=\"6\">260-03/(3/r</subfield><subfield code=\"a\">نواكشوط
+    :</subfield><subfield code=\"b\">[s.n.]،</subfield><subfield code=\"c\">2003.</subfield></datafield></record></collection>"
+  published_display:
+  - Nuwākshūṭ
+  title_vern_display: "الحرب في الألفية الثالثة"
+  author_display: Wuld Mawlāy al-Zayn, Sayyid Muḥammad wuld Sayyid
+  lc_callnum_display:
+  - U21.2 .W85 2003
+  title_t:
+  - al-Ḥarb fī al-alfīyah al-thālithah /
+  - "الحرب في الألفية الثالثة"
+  pub_date:
+  - '2003'
+  pub_date_sort: 2003
+  published_vern_display:
+  - "نواكشوط"
+  format: Book
+  author_vern_display: "ولد مولاي الزين، سيد محمد ولد سيد"
+  material_type_display:
+  - 128 p.
+  lc_b4cutter_facet:
+  - U21.2
+  title_display: al-Ḥarb fī al-alfīyah al-thālithah
+  subject_addl_t:
+  - History 21st century
+  - Forecasting
+  subject_t:
+  - War
+  - Military art and science
+  - Warfare, Conventional
+  - Military weapons
+  subject_era_facet:
+  - 21st century
+  title_sort: ḥarb fī al-alfīyah al-thālithah
+  id: '2003546302'
+  author_sort: Wuld Mawlāy alZayn Sayyid Muḥammad wuld Sayyid Ḥarb fī alalfīyah
+    althālithah
+  title_addl_t:
+  - al-Ḥarb fī al-alfīyah al-thālithah /
+  - "الحرب في الألفية الثالثة"
+  subject_topic_facet:
+  - War
+  - Military art and science
+  - Warfare, Conventional
+  - Military weapons
+  lc_alpha_facet:
+  - U
+  language_facet:
+  - Arabic
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - D - World History
+  author_t:
+  - Bstan-ʼdzin-mkhas-grub,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>00875cam
+    a22002534a 4500</leader><controlfield tag=\"001\">  2004310986</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123105515.0</controlfield><controlfield
+    tag=\"008\">040812s2004    cc a          000 0 tibo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2004310986</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Ch-Tib-2004-310986; 16</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield><subfield code=\"c\">Rs154.00</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS797.82.B663</subfield><subfield
+    code=\"b\">B75 2004</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"a\">Bstan-ʼdzin-mkhas-grub,</subfield><subfield code=\"d\">1967-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Bon-brgyaʼi lo rgyus lugs
+    gñis gsal baʼi me loṅ źes bya ba bźugs so /</subfield><subfield code=\"c\">Bstan-ʼdzin-mkhas-grub
+    kyis brtsams.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">[Lha-sa :</subfield><subfield code=\"b\">s.n.,</subfield><subfield
+    code=\"c\">2004]</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">149 p. :</subfield><subfield code=\"b\">ill. ;</subfield><subfield
+    code=\"c\">21 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Historical account of Bon-brgya in
+    Tibet during 7th-9th cent.</subfield></datafield><datafield tag=\"651\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Bon-brgya (China)</subfield><subfield code=\"x\">History.</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Bon-brgya (China)</subfield><subfield
+    code=\"x\">Kings and rulers.</subfield></datafield></record></collection>"
+  published_display:
+  - Lha-sa
+  author_display: Bstan-ʼdzin-mkhas-grub, 1967-
+  lc_callnum_display:
+  - DS797.82.B663 B75 2004
+  title_t:
+  - Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ źes bya ba bźugs so /
+  pub_date:
+  - '2004'
+  pub_date_sort: 2004
+  format: Book
+  material_type_display:
+  - 149 p.
+  lc_b4cutter_facet:
+  - DS797.82.B663
+  title_display: Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ źes bya ba bźugs
+    so
+  subject_addl_t:
+  - History
+  - Kings and rulers
+  subject_t:
+  - Bon-brgya (China)
+  title_sort: bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ źes bya ba bźugs
+    so
+  id: '2004310986'
+  author_sort: Bstanʼdzinmkhasgrub 1967 Bonbrgyaʼi lo rgyus lugs gñis gsal baʼi me
+    loṅ źes bya ba bźugs so
+  title_addl_t:
+  - Bon-brgyaʼi lo rgyus lugs gñis gsal baʼi me loṅ źes bya ba bźugs so /
+  subject_geo_facet:
+  - Bon-brgya (China)
+  lc_alpha_facet:
+  - DS
+  language_facet:
+  - Tibetan
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: min jald al-dhāt ilá ṣidq al-sharḥ
+  author_vern_display: "أبو الخير، علي عبد الحميد"
+  subject_addl_t:
+  - 20th century
+  - 21st century
+  title_display: Thuqūb fī ʻaql al-ummah
+  subject_era_facet:
+  - 20th century
+  - 21st century
+  id: '2005461726'
+  subject_topic_facet:
+  - Islam
+  lc_alpha_facet:
+  - BP
+  subtitle_t:
+  - min jald al-dhāt ilá ṣidq al-sharḥ.
+  - "من جلد الذات إلى صدق الشرح"
+  author_t:
+  - Abū al-Khayr, ʻAlī ʻAbd al-Ḥamīd.
+  - "أبو الخير، علي عبد الحميد"
+  lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01127nam
+    a2200277 a 4500</leader><controlfield tag=\"001\">  2005461726</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126155550.0</controlfield><controlfield
+    tag=\"008\">070712s2006    ua            000 0 ara d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2005461726</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLN07-B4171</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">EMU</subfield><subfield
+    code=\"c\">EMU</subfield><subfield code=\"d\">CUY</subfield><subfield code=\"d\">DLC-R</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield><subfield
+    code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">BP161.3</subfield><subfield code=\"b\">.A27 2006</subfield></datafield><datafield
+    tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(3</subfield></datafield><datafield
+    tag=\"100\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">Abū al-Khayr, ʻAlī ʻAbd al-Ḥamīd.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Thuqūb fī ʻaql al-ummah :</subfield><subfield code=\"b\">min jald
+    al-dhāt ilá ṣidq al-sharḥ.</subfield></datafield><datafield tag=\"250\" ind1=\"
+    \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">al-Ṭabʻah
+    1.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield
+    code=\"6\">880-04</subfield><subfield code=\"a\">al-Maʻādī, al-Qāhirah :</subfield><subfield
+    code=\"b\">Markaz Yāfā lil-Dirāsāt wa-al-Abḥāth,</subfield><subfield code=\"c\">2006.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">85 p. ;</subfield><subfield
+    code=\"c\">24 cm.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Islam</subfield><subfield code=\"y\">20th century.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Islam</subfield><subfield
+    code=\"y\">21st century.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">100-01/(3/r</subfield><subfield code=\"a\">أبو
+    الخير، علي عبد الحميد.</subfield></datafield><datafield tag=\"880\" ind1=\"1\"
+    ind2=\"0\"><subfield code=\"6\">245-02/(3/r</subfield><subfield code=\"a\">ثقوب
+    في عقل الأمة :</subfield><subfield code=\"b\">من جلد الذات إلى صدق الشرح.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">250-03/(3/r</subfield><subfield
+    code=\"a\">الطبعة 1.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">260-04/(3/r</subfield><subfield code=\"a\">المعادي، القاهرة
+    :</subfield><subfield code=\"b\">مركز يافا للدراسات والأبحاث،</subfield><subfield
+    code=\"c\">2006.</subfield></datafield></record></collection>"
+  published_display:
+  - al-Maʻādī, al-Qāhirah
+  author_display: Abū al-Khayr, ʻAlī ʻAbd al-Ḥamīd
+  title_vern_display: "ثقوب في عقل الأمة"
+  lc_callnum_display:
+  - BP161.3 .A27 2006
+  title_t:
+  - 'Thuqūb fī ʻaql al-ummah :'
+  - "ثقوب في عقل الأمة"
+  pub_date:
+  - '2006'
+  pub_date_sort: 2006
+  published_vern_display:
+  - "المعادي، القاهرة"
+  format: Book
+  subtitle_vern_display: "من جلد الذات إلى صدق الشرح"
+  lc_b4cutter_facet:
+  - BP161.3
+  material_type_display:
+  - 85 p.
+  subject_t:
+  - Islam
+  title_sort: thuqūb fī ʻaql al-ummah :min jald al-dhāt ilá ṣidq al-sharḥ
+  author_sort: Abū alKhayr ʻAlī ʻAbd alḤamīd Thuqūb fī ʻaql alummah min jald
+    aldhāt ilá ṣidq alsharḥ
+  title_addl_t:
+  - 'Thuqūb fī ʻaql al-ummah : min jald al-dhāt ilá ṣidq al-sharḥ.'
+  - "ثقوب في عقل الأمة : من جلد الذات إلى صدق الشرح"
+  language_facet:
+  - Arabic
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - H - Social Sciences
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>03730cam
+    a22006257a 4500</leader><controlfield tag=\"001\">  2005553155</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121104139.0</controlfield><controlfield
+    tag=\"008\">051007m19659999is     | l    000 0 heb  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2005553155</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(CStRLIN)DCLH05-B11400</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC-R</subfield><subfield
+    code=\"c\">DLC-R</subfield></datafield><datafield tag=\"043\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">a-is---</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">HG8695.2</subfield><subfield code=\"b\">.B57 1962</subfield></datafield><datafield
+    tag=\"066\" ind1=\" \" ind2=\" \"><subfield code=\"c\">(2</subfield></datafield><datafield
+    tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield code=\"6\">880-01</subfield><subfield
+    code=\"a\">[Bituaḥ u-viṭaḥon sotsyali].</subfield></datafield><datafield tag=\"260\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">[Israel ,</subfield><subfield code=\"c\">1962-&lt;2001&gt;]</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">items 1-&lt;13&gt; of &lt;13&gt;
+    ;</subfield><subfield code=\"c\">22-25 cm.</subfield></datafield><datafield tag=\"505\"
+    ind1=\"1\" ind2=\" \"><subfield code=\"a\">[1] Megamot be-mesheḳ ha-biṭuaḥ
+    ṿeha-piḳuaḥ ʻal ʻisḳe biṭuaḥ bi-shenat 1965. 1966. 52 leaves ; 25 cm. --
+    [2] Biṭuaḥ ziḳnah : meʻudkan le-Yuli 2001. 24 p. ; 22 cm. -- [3] Biṭuaḥ sheʼirim
+    : meʻudkan le-Yuli 2001. 2001. 24 p. ; 22 cm.  -- [4] Gimlah le-yeled nekheh :
+    meʻudkan le-Yuni 2001. 2001. 16 p. 22 cm. -- [5] Biṭuaḥ imahut : meʻudkan le-Yuli
+    2002. 24 p. ; 22 cm. -- [6] Biṭuaḥ siʻud :  meʻudkan le-Februʼar 2001. 2001.
+    12 p. ; 22 cm. -- [7] Medaʻ le-ʻoved ʻatsmaʼi :  meʻudkan le-Februʼar 2000. 2000.
+    18 p. ; 22 cm. -- [8] Biṭuaḥ nifgeʻe teʻunot. 1999. 1 folded leaflet ; 22 cm.
+    -- [9] ha-Ḳeren le-nifgeʻe ṭeror -- [10] Teluyim be-nifgeʻe ʻavodah :  meʻudkan
+    le-Februʼar 2001. 2001. 24 p. ; 22 cm. -- [11] Sherut miluʼim :  meʻudkan le-Yuli
+    2002. 2002. 16 p. ; 22 cm. -- [12] Ḳitsbah le-sherutim meyuhadim le-nekhim ḳashim
+    :  meʻudkan le-Detsember 2002. 2002. 16 p. ; 22 cm. -- [13] Mumḥim benleʼumiyim
+    ʻal medukat ha-biṭaḥon ha-sotsyali / Yitsḥaḳ Ḳanev. 1962. 10  p. ; 24 cm.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Insurance</subfield><subfield
+    code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Social security</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Family allowances</subfield><subfield
+    code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Maternity insurance</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Accident insurance</subfield><subfield
+    code=\"z\">Israel.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Old age</subfield><subfield code=\"x\">Economic aspects.</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Israel</subfield><subfield
+    code=\"x\">Social policy.</subfield></datafield><datafield tag=\"651\" ind1=\"
+    \" ind2=\"0\"><subfield code=\"a\">Israel</subfield><subfield code=\"x\">Armed
+    Forces</subfield><subfield code=\"x\">Reserves</subfield><subfield code=\"x\">Pay,
+    allowances, etc.</subfield><subfield code=\"x\">Law and legislation</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Social security</subfield><subfield
+    code=\"x\">Law and legislation</subfield><subfield code=\"z\">Israel.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Megamot be-mesheḳ ha-biṭuaḥ ṿeha-piḳuaḥ ʻal ʻisḳe biṭuaḥ bi-shenat
+    1965.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">880-03</subfield><subfield code=\"a\">Biṭuaḥ ziḳnah.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Biṭuaḥ sheʼirim.</subfield></datafield><datafield tag=\"740\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">Gimlah le-yeled
+    nekheh.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">880-06</subfield><subfield code=\"a\">Biṭuaḥ imahut.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-07</subfield><subfield
+    code=\"a\">Biṭuaḥ siʻud.</subfield></datafield><datafield tag=\"740\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">880-08</subfield><subfield code=\"a\">Medaʻ le-ʻoved
+    ʻatsmaʼi.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">880-09</subfield><subfield code=\"a\">Biṭuaḥ nifgeʻe teʻunot.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-10</subfield><subfield
+    code=\"a\">Ḳeren le-nifgeʻe ṭeror.</subfield></datafield><datafield tag=\"740\"
+    ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-11</subfield><subfield code=\"a\">Teluyim
+    be-nifgeʻe ʻavodah.</subfield></datafield><datafield tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">880-12</subfield><subfield code=\"a\">Sherut miluʼim.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-13</subfield><subfield
+    code=\"a\">Ḳitsbah le-sherutim meyuḥadim le-nekhim ḳashim.</subfield></datafield><datafield
+    tag=\"740\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">880-14</subfield><subfield
+    code=\"a\">Mumḥim benleʼumiyim ʻal medukat ha-biṭaḥon ha-sotsyali.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"0\"><subfield code=\"6\">245-01/(2/r</subfield><subfield
+    code=\"a\">[ביטוח וביטחון סוציאלי].</subfield></datafield><datafield tag=\"880\"
+    ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-02/(2/r</subfield><subfield code=\"a\">מגמות
+    במשק הביטוח והפיקוח על עסקי ביטוח בשנת 1965.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-03/(2/r</subfield><subfield
+    code=\"a\">ביטוח זקנה.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-04/(2/r</subfield><subfield code=\"a\">ביטוח
+    שאירים.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">740-05/(2/r</subfield><subfield code=\"a\">גמלה לילד נכה.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-06/(2/r</subfield><subfield
+    code=\"a\">ביטוח אמהות.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-07/(2/r</subfield><subfield code=\"a\">ביטוח
+    סיעוד.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">740-08/(2/r</subfield><subfield code=\"a\">מדע לעובד עצמאי.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-09/(2/r</subfield><subfield
+    code=\"a\">ביטוח נפגעי תעונות.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-10/(2/r</subfield><subfield code=\"a\">קרן
+    לנפגעי טרור.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield
+    code=\"6\">740-11/(2/r</subfield><subfield code=\"a\">תלויים בניפגעי תעונה.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"0\" ind2=\"2\"><subfield code=\"6\">740-12/(2/r</subfield><subfield
+    code=\"a\">שירות מילואים.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-13/(2/r</subfield><subfield code=\"a\">קצבה
+    לשירותים מיוחדים לנכים קשים.</subfield></datafield><datafield tag=\"880\" ind1=\"0\"
+    ind2=\"2\"><subfield code=\"6\">740-14/(2/r</subfield><subfield code=\"a\">מומחים
+    בינלאומיים על מדוכת הביטחון הסוציאלי.</subfield></datafield></record></collection>"
+  published_display:
+  - Israel
+  title_vern_display: "ביטוח וביטחון סוציאלי"
+  lc_callnum_display:
+  - HG8695.2 .B57 1962
+  title_t:
+  - "[Bituaḥ u-viṭaḥon sotsyali]."
+  - "ביטוח וביטחון סוציאלי"
+  pub_date:
+  - '1962'
+  pub_date_sort: 1962
+  format: Book
+  material_type_display:
+  - items 1-<13> of <13>
+  lc_b4cutter_facet:
+  - HG8695.2
+  title_display: Bituaḥ u-viṭaḥon sotsyali
+  subject_addl_t:
+  - Israel
+  - Economic aspects
+  - Law and legislation Israel
+  - Social policy
+  - Armed Forces Reserves Pay, allowances, etc. Law and legislation
+  subject_t:
+  - Insurance
+  - Social security
+  - Family allowances
+  - Maternity insurance
+  - Accident insurance
+  - Old age
+  - Israel
+  title_sort: bituaḥ u-viṭaḥon sotsyali
+  id: '2005553155'
+  author_sort: "\U0010FFFF Bituaḥ uviṭaḥon sotsyali"
+  title_addl_t:
+  - "[Bituaḥ u-viṭaḥon sotsyali]."
+  - "ביטוח וביטחון סוציאלי"
+  subject_geo_facet:
+  - Israel
+  subject_topic_facet:
+  - Insurance
+  - Social security
+  - Family allowances
+  - Maternity insurance
+  - Accident insurance
+  - Old age
+  title_added_entry_t:
+  - Megamot be-mesheḳ ha-biṭuaḥ ṿeha-piḳuaḥ ʻal ʻisḳe biṭuaḥ bi-shenat 1965.
+  - Biṭuaḥ ziḳnah.
+  - Biṭuaḥ sheʼirim.
+  - Gimlah le-yeled nekheh.
+  - Biṭuaḥ imahut.
+  - Biṭuaḥ siʻud.
+  - Medaʻ le-ʻoved ʻatsmaʼi.
+  - Biṭuaḥ nifgeʻe teʻunot.
+  - Ḳeren le-nifgeʻe ṭeror.
+  - Teluyim be-nifgeʻe ʻavodah.
+  - Sherut miluʼim.
+  - Ḳitsbah le-sherutim meyuḥadim le-nekhim ḳashim.
+  - Mumḥim benleʼumiyim ʻal medukat ha-biṭaḥon ha-sotsyali.
+  - "מגמות במשק הביטוח והפיקוח על עסקי ביטוח בשנת 1965"
+  - "ביטוח זקנה"
+  - "ביטוח שאירים"
+  - "גמלה לילד נכה"
+  - "ביטוח אמהות"
+  - "ביטוח סיעוד"
+  - "מדע לעובד עצמאי"
+  - "ביטוח נפגעי תעונות"
+  - "קרן לנפגעי טרור"
+  - "תלויים בניפגעי תעונה"
+  - "שירות מילואים"
+  - "קצבה לשירותים מיוחדים לנכים קשים"
+  - "מומחים בינלאומיים על מדוכת הביטחון הסוציאלי"
+  lc_alpha_facet:
+  - HG
+  language_facet:
+  - Hebrew
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - E - History of the Americas (General)
+  author_t:
+  - Hearth, Amy Hill,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01490cam
+    a2200361 a 4500</leader><controlfield tag=\"001\">  2007020969</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126093447.0</controlfield><controlfield
+    tag=\"008\">070522s2008    nyua     b    000 0beng  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2007020969</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9780743297790 (alk. paper)</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">0743297792 (alk. paper)</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocn137335139</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)137335139</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield><subfield code=\"d\">BAKER</subfield><subfield code=\"d\">BTCTA</subfield><subfield
+    code=\"d\">YDXCP</subfield><subfield code=\"d\">C#P</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">n-us-nj</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">E99.D2</subfield><subfield
+    code=\"b\">H437 2008</subfield></datafield><datafield tag=\"082\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">974.004/97345</subfield><subfield code=\"a\">B</subfield><subfield
+    code=\"2\">22</subfield></datafield><datafield tag=\"100\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">Hearth, Amy Hill,</subfield><subfield code=\"d\">1958-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">\"Strong Medicine speaks\"
+    :</subfield><subfield code=\"b\">a Native American elder has her say : an oral
+    history /</subfield><subfield code=\"c\">Amy Hill Hearth.</subfield></datafield><datafield
+    tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">1st Atria Books hardcover
+    ed.</subfield></datafield><datafield tag=\"260\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">New York :</subfield><subfield code=\"b\">Atria Books,</subfield><subfield
+    code=\"c\">2008.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">xvii, 267 p. :</subfield><subfield code=\"b\">ill. ;</subfield><subfield
+    code=\"c\">23 cm.</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">Includes bibliographical references (p. 261-266).</subfield></datafield><datafield
+    tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Strong Medicine,</subfield><subfield
+    code=\"d\">1922-</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Delaware women</subfield><subfield code=\"z\">New Jersey</subfield><subfield
+    code=\"z\">Bridgeton</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Indian women shamans</subfield><subfield
+    code=\"z\">New Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield
+    code=\"v\">Biography.</subfield></datafield><datafield tag=\"650\" ind1=\" \"
+    ind2=\"0\"><subfield code=\"a\">Delaware Indians</subfield><subfield code=\"z\">New
+    Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield code=\"v\">Biography.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Delaware Indians</subfield><subfield
+    code=\"z\">New Jersey</subfield><subfield code=\"z\">Bridgeton</subfield><subfield
+    code=\"x\">History.</subfield></datafield><datafield tag=\"700\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"a\">Strong Medicine,</subfield><subfield code=\"d\">1922-</subfield></datafield><datafield
+    tag=\"856\" ind1=\"4\" ind2=\"1\"><subfield code=\"3\">Table of contents only</subfield><subfield
+    code=\"u\">http://www.loc.gov/catdir/toc/ecip0719/2007020969.html</subfield></datafield><datafield
+    tag=\"856\" ind1=\"4\" ind2=\"2\"><subfield code=\"3\">Publisher description</subfield><subfield
+    code=\"u\">http://www.loc.gov/catdir/enhancements/fy0808/2007020969-d.html</subfield></datafield><datafield
+    tag=\"856\" ind1=\"4\" ind2=\"1\"><subfield code=\"3\">Sample text</subfield><subfield
+    code=\"u\">http://www.loc.gov/catdir/enhancements/fy0808/2007020969-s.html</subfield></datafield></record></collection>"
+  published_display:
+  - New York
+  author_display: Hearth, Amy Hill, 1958-
+  lc_callnum_display:
+  - E99.D2 H437 2008
+  title_t:
+  - "\"Strong Medicine speaks\" :"
+  pub_date:
+  - '2008'
+  pub_date_sort: 2008
+  subtitle_display: 'a Native American elder has her say : an oral history'
+  format: Book
+  url_suppl_display:
+  - http://www.loc.gov/catdir/toc/ecip0719/2007020969.html
+  - http://www.loc.gov/catdir/enhancements/fy0808/2007020969-d.html
+  - http://www.loc.gov/catdir/enhancements/fy0808/2007020969-s.html
+  material_type_display:
+  - xvii, 267 p.
+  lc_b4cutter_facet:
+  - E99.D2
+  title_display: "\"Strong Medicine speaks\""
+  subject_addl_t:
+  - New Jersey Bridgeton Biography
+  - New Jersey Bridgeton History
+  subject_t:
+  - Strong Medicine, 1922-
+  - Delaware women
+  - Indian women shamans
+  - Delaware Indians
+  title_sort: "\"strong medicine speaks\" :a native american elder has her say : an
+    oral history"
+  isbn_t:
+  - '9780743297790'
+  - 0743297792
+  id: '2007020969'
+  author_sort: Hearth Amy Hill 1958 Strong Medicine speaks a Native American elder
+    has her say  an oral history
+  title_addl_t:
+  - "\"Strong Medicine speaks\" : a Native American elder has her say : an oral history
+    /"
+  subject_geo_facet:
+  - New Jersey
+  - Bridgeton
+  subject_topic_facet:
+  - Strong Medicine, 1922-
+  - Delaware women
+  - Indian women shamans
+  - Delaware Indians
+  author_addl_t:
+  - Strong Medicine,
+  lc_alpha_facet:
+  - E
+  language_facet:
+  - English
+  subtitle_t:
+  - 'a Native American elder has her say : an oral history /'
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  author_t:
+  - Dkon-mchog-rgya-mtsho, Ra-se,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01099cam
+    a22002534a 4500</leader><controlfield tag=\"001\">  2008305903</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122162012.0</controlfield><controlfield
+    tag=\"008\">080602s2008    ii a          000 0 tibo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008305903</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-305903; 01;
+    05-01</subfield></datafield><datafield tag=\"037\" ind1=\" \" ind2=\" \"><subfield
+    code=\"b\">Library of Congress -- New Delhi Overseas Office</subfield><subfield
+    code=\"c\">Rs400.00</subfield></datafield><datafield tag=\"040\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">DLC</subfield><subfield code=\"c\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BQ7684.4</subfield><subfield
+    code=\"b\">.D564 2008</subfield></datafield><datafield tag=\"100\" ind1=\"0\"
+    ind2=\" \"><subfield code=\"a\">Dkon-mchog-rgya-mtsho,</subfield><subfield code=\"c\">Ra-se,</subfield><subfield
+    code=\"d\">1968-</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"a\">Dris lan don gcig ma :</subfield><subfield code=\"b\">dam paʼi chos
+    dgoṅs pa gcig paʼi dri ba legs bśad bsu baʼi pho ñaʼi dris lan Dgoṅs-gcig
+    smra baʼi mdzes rgyan źes bya ba bźugs so /</subfield><subfield code=\"c\">Dwags-po
+    Spyan-sṅa-ba Dkon-mchog-rgya-mtshos brtsams.</subfield></datafield><datafield
+    tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Par theṅ 2.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">[ʼPhags-yul Dhe-ra-dhun
+    :</subfield><subfield code=\"b\">Sroṅ-btsan dpe mdzod khaṅ nas grems spel byas,</subfield><subfield
+    code=\"c\">2008]</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">208 p. :</subfield><subfield code=\"b\">1 col. ill. ;</subfield><subfield
+    code=\"c\">24 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">On the Dgoṅs-gcig teaching of Drikung
+    Kagyudpa sect in questions/answers format.</subfield></datafield><datafield tag=\"650\"
+    ind1=\" \" ind2=\"0\"><subfield code=\"a\">ʼBri-guṅ-pa (Sect)</subfield><subfield
+    code=\"x\">Doctrines</subfield><subfield code=\"v\">Miscellanea.</subfield></datafield><datafield
+    tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Sroṅ-btsan dpe mdzod khaṅ.</subfield></datafield></record></collection>"
+  published_display:
+  - "ʼPhags-yul Dhe-ra-dhun"
+  author_display: Dkon-mchog-rgya-mtsho, Ra-se, 1968-
+  lc_callnum_display:
+  - BQ7684.4 .D564 2008
+  title_t:
+  - 'Dris lan don gcig ma :'
+  pub_date:
+  - '2008'
+  pub_date_sort: 2008
+  subtitle_display: dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bśad bsu baʼi pho
+    ñaʼi dris lan Dgoṅs-gcig smra baʼi mdzes rgyan źes bya ba bźugs so
+  format: Book
+  material_type_display:
+  - 208 p.
+  lc_b4cutter_facet:
+  - BQ7684.4
+  title_display: Dris lan don gcig ma
+  subject_addl_t:
+  - Doctrines Miscellanea
+  subject_t:
+  - "ʼBri-guṅ-pa (Sect)"
+  title_sort: dris lan don gcig ma :dam paʼi chos dgoṅs pa gcig paʼi dri ba legs
+    bśad bsu baʼi pho ñaʼi dris lan dgoṅs-gcig smra baʼi mdzes rgyan źes bya ba
+    bźugs so
+  id: '2008305903'
+  author_sort: Dkonmchogrgyamtsho Rase 1968 Dris lan don gcig ma dam paʼi chos dgoṅs
+    pa gcig paʼi dri ba legs bśad bsu baʼi pho ñaʼi dris lan Dgoṅsgcig smra baʼi
+    mdzes rgyan źes bya ba bźugs so
+  title_addl_t:
+  - 'Dris lan don gcig ma : dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bśad bsu
+    baʼi pho ñaʼi dris lan Dgoṅs-gcig smra baʼi mdzes rgyan źes bya ba bźugs so
+    /'
+  subject_topic_facet:
+  - "ʼBri-guṅ-pa (Sect)"
+  author_addl_t:
+  - Sroṅ-btsan dpe mdzod khaṅ.
+  lc_alpha_facet:
+  - BQ
+  language_facet:
+  - Tibetan
+  subtitle_t:
+  - dam paʼi chos dgoṅs pa gcig paʼi dri ba legs bśad bsu baʼi pho ñaʼi dris lan
+    Dgoṅs-gcig smra baʼi mdzes rgyan źes bya ba bźugs so /
+  timestamp: '2014-02-03T18:42:53.056Z'
+- subtitle_display: a supplication to the noble Lama Mahaguru Padmasambhava
+  subject_addl_t:
+  - Prayers and devotions
+  - India Prayers and devotions
+  title_display: Pluvial nectar of blessings
+  id: '2008308175'
+  isbn_t:
+  - '8186470336'
+  subject_geo_facet:
+  - India
+  subject_topic_facet:
+  - Padma Sambhava, ca. 717-ca. 762
+  - Priests, Buddhist
+  lc_alpha_facet:
+  - BQ
+  subtitle_t:
+  - a supplication to the noble Lama Mahaguru Padmasambhava /
+  author_t:
+  - Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V,
+  lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01582cam
+    a2200325 a 4500</leader><controlfield tag=\"001\">  2008308175</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123091532.0</controlfield><controlfield
+    tag=\"008\">080718s2002    ii       b    000 0 eng  </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008308175</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">8186470336</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-E-2008-308175; 59-13</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield><subfield code=\"c\">Rs185.00</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield></datafield><datafield tag=\"041\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"a\">eng</subfield><subfield code=\"a\">tib</subfield><subfield
+    code=\"h\">tib</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">a-ii---</subfield></datafield><datafield tag=\"050\"
+    ind1=\"0\" ind2=\"0\"><subfield code=\"a\">BQ5593.P3</subfield><subfield code=\"b\">N3313
+    2002</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" \"><subfield
+    code=\"a\">Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho,</subfield><subfield code=\"c\">Dalai
+    Lama V,</subfield><subfield code=\"d\">1617-1682.</subfield></datafield><datafield
+    tag=\"240\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Rje btsun bla ma ma hā
+    gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs bdud rtsiʼi char rgyun.</subfield><subfield
+    code=\"l\">English &amp; Tibetan</subfield></datafield><datafield tag=\"245\"
+    ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Pluvial nectar of blessings :</subfield><subfield
+    code=\"b\">a supplication to the noble Lama Mahaguru Padmasambhava /</subfield><subfield
+    code=\"c\">by His Holiness Ngag-dbang-blo-bzang-rgya-mtsho, the fifth Dalai Lama
+    ; translated from the Tibetan with commentary by Dennis Cordell.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala :</subfield><subfield
+    code=\"b\">Library of Tibetan Works and Archives,</subfield><subfield code=\"c\">2002.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">viii, 101 p. ;</subfield><subfield
+    code=\"c\">22 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">English and Tibetan</subfield><subfield code=\"b\">(Tibetan
+    also in roman).</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">Includes bibliographical references (p. [97]-101).</subfield></datafield><datafield
+    tag=\"600\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Padma Sambhava,</subfield><subfield
+    code=\"d\">ca. 717-ca. 762</subfield><subfield code=\"v\">Prayers and devotions.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Priests, Buddhist</subfield><subfield
+    code=\"z\">India</subfield><subfield code=\"v\">Prayers and devotions.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"1\" ind2=\" \"><subfield code=\"a\">Cordell, Dennis.</subfield></datafield><datafield
+    tag=\"700\" ind1=\"0\" ind2=\"2\"><subfield code=\"a\">Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho,</subfield><subfield
+    code=\"c\">Dalai Lama V,</subfield><subfield code=\"d\">1617-1682</subfield><subfield
+    code=\"t\">Rje btsun bla ma ma hā gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa
+    byin rlabs bdud rtsiʼi char rgyun.</subfield><subfield code=\"f\">2002</subfield></datafield><datafield
+    tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Library of Tibetan Works
+    &amp; Archives.</subfield></datafield></record></collection>"
+  published_display:
+  - Dharamsala
+  author_display: Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V, 1617-1682
+  lc_callnum_display:
+  - BQ5593.P3 N3313 2002
+  title_t:
+  - 'Pluvial nectar of blessings :'
+  pub_date:
+  - '2002'
+  pub_date_sort: 2002
+  format: Book
+  lc_b4cutter_facet:
+  - BQ5593.P3
+  material_type_display:
+  - viii, 101 p.
+  subject_t:
+  - Padma Sambhava, ca. 717-ca. 762
+  - Priests, Buddhist
+  title_sort: pluvial nectar of blessings :a supplication to the noble lama mahaguru
+    padmasambhava
+  author_sort: Ṅagdbaṅblobzaṅrgyamtsho Dalai Lama V 16171682 Rje btsun bla ma ma
+    hā gu ru Padmaʼbyuṅgnas la gsol ba ʼdebs pa byin rlabs bdud rtsiʼi char rgyun
+    English  Tibetan Pluvial nectar of blessings a supplication to the noble Lama
+    Mahaguru Padmasambhava
+  title_addl_t:
+  - 'Pluvial nectar of blessings : a supplication to the noble Lama Mahaguru Padmasambhava
+    /'
+  - Rje btsun bla ma ma hā gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs
+    bdud rtsiʼi char rgyun. English & Tibetan
+  author_addl_t:
+  - Cordell, Dennis.
+  - Ṅag-dbaṅ-blo-bzaṅ-rgya-mtsho, Dalai Lama V,
+  - Library of Tibetan Works & Archives.
+  title_added_entry_t:
+  - Rje btsun bla ma ma hā gu ru Padma-ʼbyuṅ-gnas la gsol ba ʼdebs pa byin rlabs
+    bdud rtsiʼi char rgyun
+  language_facet:
+  - English
+  - Tibetan
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - B - Philosophy, Psychology, Religion
+  author_t:
+  - Bstan-ʼdzin-rgya-mtsho, Dalai Lama XIV,
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01221cam
+    a22002534a 4500</leader><controlfield tag=\"001\">  2008308201</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090122162646.0</controlfield><controlfield
+    tag=\"008\">080721s2008    ii            000 0 tibo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008308201</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308201; 27</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield><subfield code=\"c\">Rs150.00</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"050\" ind1=\"0\"
+    ind2=\"0\"><subfield code=\"a\">BQ4036</subfield><subfield code=\"b\">.B78 2008</subfield></datafield><datafield
+    tag=\"100\" ind1=\"0\" ind2=\" \"><subfield code=\"a\">Bstan-ʼdzin-rgya-mtsho,</subfield><subfield
+    code=\"c\">Dalai Lama XIV,</subfield><subfield code=\"d\">1935-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">Bod kyi naṅ chos ṅo sprod
+    sñiṅ bsdus :</subfield><subfield code=\"b\">goṅ sa skyabs mgon chen po mchog
+    nas deṅ dus Bod rigs na gźon rnams la naṅ chos ṅo sprod bstsal ba bźugs so.</subfield></datafield><datafield
+    tag=\"250\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Par theṅs 2.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala, H.P. :</subfield><subfield
+    code=\"b\">Sku-bcar Rnam-par-rgyal-ba Phan-bde-legs-bśad-gliṅ Grwa-tshaṅ gi
+    Śes-yon Lhan-tshogs,</subfield><subfield code=\"c\">2008.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">4, iv, 254 p. ;</subfield><subfield
+    code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"520\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Series of lectures delivered by His
+    Holiness the Dali Lama to younger generation of Tibetan studying in different
+    colleges and universities in India and students from schools in Dharamsala on
+    the introduction of Buddhist teaching.</subfield></datafield><datafield tag=\"650\"
+    ind1=\" \" ind2=\"0\"><subfield code=\"a\">Buddhism</subfield><subfield code=\"x\">Essence,
+    genius, nature.</subfield></datafield><datafield tag=\"710\" ind1=\"2\" ind2=\"
+    \"><subfield code=\"a\">Rnam-rgyal Grwa-tshaṅ.</subfield><subfield code=\"b\">Śes-yon
+    Lhan-tshogs.</subfield></datafield></record></collection>"
+  published_display:
+  - Dharamsala, H.P.
+  author_display: Bstan-ʼdzin-rgya-mtsho, Dalai Lama XIV, 1935-
+  lc_callnum_display:
+  - BQ4036 .B78 2008
+  title_t:
+  - 'Bod kyi naṅ chos ṅo sprod sñiṅ bsdus :'
+  pub_date:
+  - '2008'
+  pub_date_sort: 2008
+  subtitle_display: goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gźon
+    rnams la naṅ chos ṅo sprod bstsal ba bźugs so
+  format: Book
+  material_type_display:
+  - 4, iv, 254 p.
+  lc_b4cutter_facet:
+  - BQ4036
+  title_display: Bod kyi naṅ chos ṅo sprod sñiṅ bsdus
+  subject_addl_t:
+  - Essence, genius, nature
+  subject_t:
+  - Buddhism
+  title_sort: bod kyi naṅ chos ṅo sprod sñiṅ bsdus :goṅ sa skyabs mgon chen po
+    mchog nas deṅ dus bod rigs na gźon rnams la naṅ chos ṅo sprod bstsal ba bźugs
+    so
+  id: '2008308201'
+  author_sort: Bstanʼdzinrgyamtsho Dalai Lama XIV 1935 Bod kyi naṅ chos ṅo sprod
+    sñiṅ bsdus goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gźon
+    rnams la naṅ chos ṅo sprod bstsal ba bźugs so
+  title_addl_t:
+  - 'Bod kyi naṅ chos ṅo sprod sñiṅ bsdus : goṅ sa skyabs mgon chen po mchog
+    nas deṅ dus Bod rigs na gźon rnams la naṅ chos ṅo sprod bstsal ba bźugs so.'
+  subject_topic_facet:
+  - Buddhism
+  author_addl_t:
+  - Rnam-rgyal Grwa-tshaṅ. Śes-yon Lhan-tshogs.
+  lc_alpha_facet:
+  - BQ
+  language_facet:
+  - Tibetan
+  subtitle_t:
+  - goṅ sa skyabs mgon chen po mchog nas deṅ dus Bod rigs na gźon rnams la naṅ
+    chos ṅo sprod bstsal ba bźugs so.
+  timestamp: '2014-02-03T18:42:53.056Z'
+- lc_1letter_facet:
+  - D - World History
+  author_t:
+  - Thub-bstan-yar-ʼphel, Rnam-grwa.
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01111cam
+    a2200289 a 4500</leader><controlfield tag=\"001\">  2008308202</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121092141.0</controlfield><controlfield
+    tag=\"008\">080721s2005    ii b     b    000 0 tibo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008308202</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308202; 16</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield><subfield code=\"c\">Rs150.00</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield
+    code=\"c\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lcode</subfield></datafield><datafield tag=\"043\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield></datafield><datafield tag=\"050\"
+    ind1=\"0\" ind2=\"0\"><subfield code=\"a\">DS785</subfield><subfield code=\"b\">.T475
+    2005</subfield></datafield><datafield tag=\"100\" ind1=\"0\" ind2=\" \"><subfield
+    code=\"a\">Thub-bstan-yar-ʼphel,</subfield><subfield code=\"c\">Rnam-grwa.</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"a\">Bod gaṅs can gyi rgyal
+    rabs mdor bsdus dris lan brgya pa rab gsal śel gyi me loṅ źes bya ba bźugs
+    so /</subfield><subfield code=\"c\">Rnam-grwa Thub-bstan-yar-ʼphel.</subfield></datafield><datafield
+    tag=\"246\" ind1=\"1\" ind2=\"8\"><subfield code=\"a\">Rgyal rabs dris lan brgya
+    pa rab gsal śel gyi me loṅ</subfield></datafield><datafield tag=\"250\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">1st ed.</subfield></datafield><datafield tag=\"260\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Dharamsala, H.P. :</subfield><subfield
+    code=\"b\">Sku-bcar Rnam-rgyal Grwa-tshaṅ nas ʼgrems spel źus,</subfield><subfield
+    code=\"c\">2005.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">a-e, iv, ii, 407 p. :</subfield><subfield code=\"b\">maps
+    ;</subfield><subfield code=\"c\">23 cm.</subfield></datafield><datafield tag=\"546\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield
+    tag=\"520\" ind1=\" \" ind2=\" \"><subfield code=\"a\">History of Tibet in questions/answers
+    format.</subfield></datafield><datafield tag=\"504\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">Includes bibliographical references (p. 406-407).</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Tibet (China)</subfield><subfield
+    code=\"x\">History</subfield><subfield code=\"v\">Miscellanea.</subfield></datafield><datafield
+    tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Rnam-rgyal Grwa-tshaṅ.</subfield></datafield></record></collection>"
+  published_display:
+  - Dharamsala, H.P.
+  author_display: Thub-bstan-yar-ʼphel, Rnam-grwa
+  lc_callnum_display:
+  - DS785 .T475 2005
+  title_t:
+  - Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal śel gyi me
+    loṅ źes bya ba bźugs so /
+  pub_date:
+  - '2005'
+  pub_date_sort: 2005
+  format: Book
+  material_type_display:
+  - a-e, iv, ii, 407 p.
+  lc_b4cutter_facet:
+  - DS785
+  title_display: Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal
+    śel gyi me loṅ źes bya ba bźugs so
+  subject_addl_t:
+  - History Miscellanea
+  subject_t:
+  - Tibet (China)
+  title_sort: bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal śel
+    gyi me loṅ źes bya ba bźugs so
+  id: '2008308202'
+  author_sort: Thubbstanyarʼphel Rnamgrwa Bod gaṅs can gyi rgyal rabs mdor bsdus
+    dris lan brgya pa rab gsal śel gyi me loṅ źes bya ba bźugs so
+  title_addl_t:
+  - Bod gaṅs can gyi rgyal rabs mdor bsdus dris lan brgya pa rab gsal śel gyi me
+    loṅ źes bya ba bźugs so /
+  - Rgyal rabs dris lan brgya pa rab gsal śel gyi me loṅ
+  subject_geo_facet:
+  - Tibet (China)
+  author_addl_t:
+  - Rnam-rgyal Grwa-tshaṅ.
+  lc_alpha_facet:
+  - DS
+  language_facet:
+  - Tibetan
+  timestamp: '2014-02-03T18:42:53.056Z'
+- marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01127cam
+    a22002895a 4500</leader><controlfield tag=\"001\">  2008308478</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090123131001.0</controlfield><controlfield
+    tag=\"008\">080728s2007    ii            000 0 tibo </controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008308478</subfield></datafield><datafield
+    tag=\"025\" ind1=\" \" ind2=\" \"><subfield code=\"a\">I-Tib-2008-308478; 23</subfield></datafield><datafield
+    tag=\"037\" ind1=\" \" ind2=\" \"><subfield code=\"b\">Library of Congress --
+    New Delhi Overseas Office</subfield></datafield><datafield tag=\"040\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">DLC</subfield><subfield code=\"c\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lcode</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-ti</subfield><subfield
+    code=\"a\">a-ii---</subfield></datafield><datafield tag=\"245\" ind1=\"0\" ind2=\"0\"><subfield
+    code=\"a\">Śes yon.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">1st ed.</subfield></datafield><datafield tag=\"260\" ind1=\"
+    \" ind2=\" \"><subfield code=\"a\">Dharamsala, Distt. Kangra, H.P. :</subfield><subfield
+    code=\"b\">Skabs bźi paʼi ʼbriṅ rim dge ʼos slob thon pa thun moṅ gis ʼgrems
+    spel źus,</subfield><subfield code=\"c\">2007.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">xii, 419 p. ;</subfield><subfield
+    code=\"c\">22 cm.</subfield></datafield><datafield tag=\"546\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">In Tibetan.</subfield></datafield><datafield tag=\"500\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">Copyright: College for Higher Tibetan
+    Studies.</subfield></datafield><datafield tag=\"520\" ind1=\" \" ind2=\" \"><subfield
+    code=\"a\">Contributed articles reflecting new educational policy for development
+    of Tibetan education system in exile Tibetan community and Tibetan language teaching
+    method etc.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Education and state</subfield><subfield code=\"z\">China</subfield><subfield
+    code=\"z\">Tibet.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Tibetans</subfield><subfield code=\"x\">Education</subfield><subfield
+    code=\"z\">India.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Tibetan language</subfield><subfield code=\"x\">Study and teaching</subfield><subfield
+    code=\"z\">India.</subfield></datafield><datafield tag=\"650\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">Teaching</subfield><subfield code=\"x\">Methodology.</subfield></datafield><datafield
+    tag=\"710\" ind1=\"2\" ind2=\" \"><subfield code=\"a\">Sa-rā Bod kyi mtho rim
+    slob gñer khaṅ.</subfield></datafield></record></collection>"
+  published_display:
+  - Dharamsala, Distt. Kangra, H.P.
+  title_t:
+  - Śes yon.
+  pub_date:
+  - '2007'
+  pub_date_sort: 2007
+  format: Book
+  title_display: Śes yon
+  subject_addl_t:
+  - China Tibet
+  - Education India
+  - Study and teaching India
+  - Methodology
+  - Education Policy
+  material_type_display:
+  - xii, 419 p.
+  subject_t:
+  - Education and state
+  - Tibetans
+  - Tibetan language
+  - Teaching
+  title_sort: śes yon
+  id: '2008308478'
+  author_sort: "\U0010FFFF Śes yon"
+  title_addl_t:
+  - Śes yon.
+  subject_geo_facet:
+  - China
+  - Tibet
+  - India
+  subject_topic_facet:
+  - Education and state
+  - Tibetans
+  - Tibetan language
+  - Teaching
+  author_addl_t:
+  - Sa-rā Bod kyi mtho rim slob gñer khaṅ.
+  language_facet:
+  - Tibetan
+  timestamp: '2014-02-03T18:42:53.056Z'
+- author_vern_display: "吉田一, 1934-"
+  subject_addl_t:
+  - 20th century History and criticism
+  - History and criticism
+  - Japan History
+  title_display: Kubo Sakae 'Kazanbaichi' o yomu
+  subject_era_facet:
+  - 20th century
+  id: '2008543486'
+  isbn_t:
+  - '9784588460050'
+  - '4588460056'
+  subject_geo_facet:
+  - Japan
+  subject_topic_facet:
+  - Kubo, Sakae, 1901-1958
+  - Japanese drama
+  - Political plays, Japanese
+  - Theater
+  lc_alpha_facet:
+  - PL
+  author_t:
+  - Yoshida, Hajime,
+  - "吉田一"
+  lc_1letter_facet:
+  - P - Language & Literature
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01230nam
+    a22003494a 4500</leader><controlfield tag=\"001\">  2008543486</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090126101044.0</controlfield><controlfield
+    tag=\"008\">081217s1997    ja            000 0 jpn d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2008543486</subfield><subfield
+    code=\"z\">  2000314247</subfield></datafield><datafield tag=\"020\" ind1=\" \"
+    ind2=\" \"><subfield code=\"a\">9784588460050</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">4588460056</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocm40868083</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">UIU</subfield><subfield
+    code=\"c\">UIU</subfield><subfield code=\"d\">TRCLS</subfield><subfield code=\"d\">OCLCG</subfield><subfield
+    code=\"d\">DLC</subfield></datafield><datafield tag=\"042\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield tag=\"043\"
+    ind1=\" \" ind2=\" \"><subfield code=\"a\">a-ja---</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">PL832.U25</subfield><subfield
+    code=\"b\">Z96 1997</subfield></datafield><datafield tag=\"066\" ind1=\" \" ind2=\"
+    \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\" ind1=\"1\"
+    ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Yoshida,
+    Hajime,</subfield><subfield code=\"d\">1934-</subfield></datafield><datafield
+    tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-02</subfield><subfield
+    code=\"a\">Kubo Sakae 'Kazanbaichi' o yomu /</subfield><subfield code=\"c\">Yoshida
+    Hajime cho.</subfield></datafield><datafield tag=\"250\" ind1=\" \" ind2=\" \"><subfield
+    code=\"6\">880-03</subfield><subfield code=\"a\">Shohan.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Tōkyō :</subfield><subfield code=\"b\">Hōsei Daigaku Shuppankyoku,</subfield><subfield
+    code=\"c\">1997.</subfield></datafield><datafield tag=\"300\" ind1=\" \" ind2=\"
+    \"><subfield code=\"a\">480 p. ;</subfield><subfield code=\"c\">19 cm.</subfield></datafield><datafield
+    tag=\"600\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">880-05</subfield><subfield
+    code=\"a\">Kubo, Sakae,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield
+    code=\"t\">Kazanbaichi.</subfield></datafield><datafield tag=\"650\" ind1=\" \"
+    ind2=\"0\"><subfield code=\"a\">Japanese drama</subfield><subfield code=\"y\">20th
+    century</subfield><subfield code=\"x\">History and criticism.</subfield></datafield><datafield
+    tag=\"650\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Political plays, Japanese</subfield><subfield
+    code=\"x\">History and criticism.</subfield></datafield><datafield tag=\"650\"
+    ind1=\" \" ind2=\"0\"><subfield code=\"a\">Theater</subfield><subfield code=\"z\">Japan</subfield><subfield
+    code=\"x\">History.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"
+    \"><subfield code=\"6\">100-01/$1</subfield><subfield code=\"a\">吉田一,</subfield><subfield
+    code=\"d\">1934-</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">245-02/$1</subfield><subfield code=\"a\">久保栄「火山灰地」を読む /</subfield><subfield
+    code=\"c\">吉田一著.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">初版.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield
+    code=\"a\">東京 :</subfield><subfield code=\"b\">法政大学出版局,</subfield><subfield code=\"c\">1997.</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield code=\"6\">600-05/$1</subfield><subfield
+    code=\"a\">久保栄,</subfield><subfield code=\"d\">1901-1958.</subfield><subfield
+    code=\"t\">Kazanbaichi.</subfield></datafield></record></collection>"
+  published_display:
+  - Tōkyō
+  author_display: Yoshida, Hajime, 1934-
+  title_vern_display: "久保栄「火山灰地」を読む"
+  lc_callnum_display:
+  - PL832.U25 Z96 1997
+  title_t:
+  - Kubo Sakae 'Kazanbaichi' o yomu /
+  - "久保栄「火山灰地」を読む"
+  pub_date:
+  - '1997'
+  pub_date_sort: 1997
+  published_vern_display:
+  - "東京"
+  format: Book
+  lc_b4cutter_facet:
+  - PL832.U25
+  material_type_display:
+  - 480 p.
+  subject_t:
+  - Kubo, Sakae, 1901-1958. Kazanbaichi
+  - Japanese drama
+  - Political plays, Japanese
+  - Theater
+  - "久保栄, 1901-1958. Kazanbaichi"
+  title_sort: kubo sakae 'kazanbaichi' o yomu
+  author_sort: Yoshida Hajime 1934 Kubo Sakae Kazanbaichi o yomu
+  title_addl_t:
+  - Kubo Sakae 'Kazanbaichi' o yomu /
+  - "久保栄「火山灰地」を読む"
+  language_facet:
+  - Japanese
+  timestamp: '2014-02-03T18:42:53.056Z'
+- author_vern_display: "林行止"
+  subject_addl_t:
+  - 1990-
+  - 2005-2015
+  - Economic conditions 1997-
+  - Politics and government 1997-
+  title_display: Ci an zhou bian
+  subject_era_facet:
+  - 1990-
+  - 2005-2015
+  - 1997-
+  id: '2009373513'
+  isbn_t:
+  - '9789573908678'
+  - '9573908670'
+  subject_geo_facet:
+  - Economic history
+  - World politics
+  - Hong Kong (China)
+  lc_alpha_facet:
+  - HC
+  title_series_t:
+  - Lin Xingzhi zuo pin ji ; 51
+  - "林行止作品集 ; 51"
+  author_t:
+  - Lin, Xingzhi.
+  - "林行止"
+  lc_1letter_facet:
+  - H - Social Sciences
+  marc_display: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><collection xmlns=\"http://www.loc.gov/MARC21/slim\"><record><leader>01213nam
+    a22003614a 4500</leader><controlfield tag=\"001\">  2009373513</controlfield><controlfield
+    tag=\"003\">DLC</controlfield><controlfield tag=\"005\">20090121153231.0</controlfield><controlfield
+    tag=\"008\">090114s2008    ch            000 0 chi d</controlfield><datafield
+    tag=\"010\" ind1=\" \" ind2=\" \"><subfield code=\"a\">  2009373513</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9789573908678</subfield></datafield><datafield
+    tag=\"020\" ind1=\" \" ind2=\" \"><subfield code=\"a\">9573908670</subfield></datafield><datafield
+    tag=\"035\" ind1=\" \" ind2=\" \"><subfield code=\"a\">(OCoLC)ocn268619391</subfield></datafield><datafield
+    tag=\"040\" ind1=\" \" ind2=\" \"><subfield code=\"a\">HUA</subfield><subfield
+    code=\"c\">HUA</subfield><subfield code=\"d\">HKP</subfield><subfield code=\"d\">DLC</subfield></datafield><datafield
+    tag=\"042\" ind1=\" \" ind2=\" \"><subfield code=\"a\">lccopycat</subfield></datafield><datafield
+    tag=\"043\" ind1=\" \" ind2=\" \"><subfield code=\"a\">a-cc-hk</subfield></datafield><datafield
+    tag=\"050\" ind1=\"0\" ind2=\"0\"><subfield code=\"a\">HC59.15</subfield><subfield
+    code=\"b\">.L533 2008</subfield></datafield><datafield tag=\"066\" ind1=\" \"
+    ind2=\" \"><subfield code=\"c\">$1</subfield></datafield><datafield tag=\"100\"
+    ind1=\"1\" ind2=\" \"><subfield code=\"6\">880-01</subfield><subfield code=\"a\">Lin,
+    Xingzhi.</subfield></datafield><datafield tag=\"245\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">880-02</subfield><subfield code=\"a\">Ci an zhou bian /</subfield><subfield
+    code=\"c\">Lin Xingzhi zhu.</subfield></datafield><datafield tag=\"250\" ind1=\"
+    \" ind2=\" \"><subfield code=\"6\">880-03</subfield><subfield code=\"a\">Chu ban.</subfield></datafield><datafield
+    tag=\"260\" ind1=\" \" ind2=\" \"><subfield code=\"6\">880-04</subfield><subfield
+    code=\"a\">Taibei Xian Banqiao Shi :</subfield><subfield code=\"b\">Yuan jing
+    chu ban shi ye you xian gong si,</subfield><subfield code=\"c\">2008.</subfield></datafield><datafield
+    tag=\"300\" ind1=\" \" ind2=\" \"><subfield code=\"a\">5, 300 p. ;</subfield><subfield
+    code=\"c\">21 cm.</subfield></datafield><datafield tag=\"490\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"6\">880-05</subfield><subfield code=\"a\">Lin Xingzhi zuo
+    pin ji ;</subfield><subfield code=\"v\">51</subfield></datafield><datafield tag=\"651\"
+    ind1=\" \" ind2=\"0\"><subfield code=\"a\">Economic history</subfield><subfield
+    code=\"y\">1990-</subfield></datafield><datafield tag=\"651\" ind1=\" \" ind2=\"0\"><subfield
+    code=\"a\">World politics</subfield><subfield code=\"y\">2005-2015.</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Hong Kong (China)</subfield><subfield
+    code=\"x\">Economic conditions</subfield><subfield code=\"y\">1997-</subfield></datafield><datafield
+    tag=\"651\" ind1=\" \" ind2=\"0\"><subfield code=\"a\">Hong Kong (China)</subfield><subfield
+    code=\"x\">Politics and government</subfield><subfield code=\"y\">1997-</subfield></datafield><datafield
+    tag=\"880\" ind1=\"1\" ind2=\" \"><subfield code=\"6\">100-01/$1</subfield><subfield
+    code=\"a\">林行止.</subfield></datafield><datafield tag=\"880\" ind1=\"1\" ind2=\"0\"><subfield
+    code=\"6\">245-02/$1</subfield><subfield code=\"a\">次按驟變 /</subfield><subfield
+    code=\"c\">林行止著.</subfield></datafield><datafield tag=\"880\" ind1=\" \" ind2=\"
+    \"><subfield code=\"6\">250-03/$1</subfield><subfield code=\"a\">初版.</subfield></datafield><datafield
+    tag=\"880\" ind1=\" \" ind2=\" \"><subfield code=\"6\">260-04/$1</subfield><subfield
+    code=\"a\">臺北縣板橋市 :</subfield><subfield code=\"b\">遠景出版事業有限公司,</subfield><subfield
+    code=\"c\">2008.</subfield></datafield><datafield tag=\"880\" ind1=\"0\" ind2=\"
+    \"><subfield code=\"6\">490-05/$1</subfield><subfield code=\"a\">林行止作品集 ;</subfield><subfield
+    code=\"v\">51</subfield></datafield></record></collection>"
+  published_display:
+  - Taibei Xian Banqiao Shi
+  author_display: Lin, Xingzhi
+  title_vern_display: "次按驟變"
+  lc_callnum_display:
+  - HC59.15 .L533 2008
+  title_t:
+  - Ci an zhou bian /
+  - "次按驟變"
+  pub_date:
+  - '2008'
+  pub_date_sort: 2008
+  published_vern_display:
+  - "臺北縣板橋市"
+  format: Book
+  lc_b4cutter_facet:
+  - HC59.15
+  material_type_display:
+  - 5, 300 p.
+  subject_t:
+  - Economic history
+  - World politics
+  - Hong Kong (China)
+  title_sort: ci an zhou bian
+  author_sort: Lin Xingzhi Ci an zhou bian
+  title_addl_t:
+  - Ci an zhou bian /
+  - "次按驟變"
+  language_facet:
+  - Chinese
+  timestamp: '2014-02-03T18:42:53.056Z'
diff --git a/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb b/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb
new file mode 100644
index 00000000..4bb60aef
--- /dev/null
+++ b/hyrax/spec/actors/hyrax/actors/dataset_actor_spec.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+
+RSpec.describe Hyrax::Actors::DatasetActor do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb b/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb
new file mode 100644
index 00000000..db10c1ce
--- /dev/null
+++ b/hyrax/spec/controllers/hyrax/datasets_controller_spec.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+
+RSpec.describe Hyrax::DatasetsController do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/features/create_dataset_spec.rb b/hyrax/spec/features/create_dataset_spec.rb
new file mode 100644
index 00000000..40c17322
--- /dev/null
+++ b/hyrax/spec/features/create_dataset_spec.rb
@@ -0,0 +1,70 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+include Warden::Test::Helpers
+
+# NOTE: If you generated more than one work, you have to set "js: true"
+RSpec.feature 'Create a Dataset', js: false do
+  context 'a logged in user' do
+    let(:user_attributes) do
+      { email: 'test@example.com' }
+    end
+    let(:user) do
+      User.new(user_attributes) { |u| u.save(validate: false) }
+    end
+    let(:admin_set_id) { Hyrax::AdminSetCreateService.find_or_create_default_admin_set.id.to_s }
+    let(:permission_template) { Hyrax::PermissionTemplate.find_or_create_by!(source_id: admin_set_id) }
+    let(:workflow) { Sipity::Workflow.create!(active: true, name: 'test-workflow', permission_template: permission_template) }
+
+    before do
+      # Create a single action that can be taken
+      Sipity::WorkflowAction.create!(name: 'submit', workflow: workflow)
+
+      # Grant the user access to deposit into the admin set.
+      Hyrax::PermissionTemplateAccess.create!(
+        permission_template_id: permission_template.id,
+        agent_type: 'user',
+        agent_id: user.user_key,
+        access: 'deposit'
+      )
+      login_as user
+    end
+
+    scenario do
+      pending 'Changes may be required for this test to pass.  See TODO in test.'
+
+      visit '/dashboard'
+      click_link "Works"
+      click_link "Add new work"
+
+      # TODO: If you generate more than one work uncomment these lines
+      # choose "payload_concern", option: "Dataset"
+      # click_button "Create work"
+
+      expect(page).to have_content "Add New Dataset"
+      click_link "Files" # switch tab
+      expect(page).to have_content "Add files"
+      expect(page).to have_content "Add folder"
+      within('div#add-files') do
+        attach_file("files[]", "#{Hyrax::Engine.root}/spec/fixtures/image.jp2", visible: false)
+        attach_file("files[]", "#{Hyrax::Engine.root}/spec/fixtures/jp2_fits.xml", visible: false)
+      end
+      click_link "Descriptions" # switch tab
+      fill_in('Title', with: 'My Test Work')
+      fill_in('Creator', with: 'Doe, Jane')
+      select('In Copyright', from: 'Rights statement')
+
+      # With selenium and the chrome driver, focus remains on the
+      # select box. Click outside the box so the next line can't find
+      # its element
+      find('body').click
+      choose('dataset_visibility_open')
+      expect(page).to have_content('Please note, making something visible to the world (i.e. marking this as Public) may be viewed as publishing which could impact your ability to')
+      check('agreement')
+
+      click_on('Save')
+      expect(page).to have_content('My Test Work')
+      expect(page).to have_content "Your files are being processed by Hyrax in the background."
+    end
+  end
+end
diff --git a/hyrax/spec/forms/hyrax/dataset_form_spec.rb b/hyrax/spec/forms/hyrax/dataset_form_spec.rb
new file mode 100644
index 00000000..0e35e8ea
--- /dev/null
+++ b/hyrax/spec/forms/hyrax/dataset_form_spec.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+
+RSpec.describe Hyrax::DatasetForm do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/models/collection_spec.rb b/hyrax/spec/models/collection_spec.rb
new file mode 100644
index 00000000..304c637c
--- /dev/null
+++ b/hyrax/spec/models/collection_spec.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+require 'rails_helper'
+
+RSpec.describe Collection do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/models/dataset_spec.rb b/hyrax/spec/models/dataset_spec.rb
new file mode 100644
index 00000000..77a91571
--- /dev/null
+++ b/hyrax/spec/models/dataset_spec.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+
+RSpec.describe Dataset do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/models/file_set_spec.rb b/hyrax/spec/models/file_set_spec.rb
new file mode 100644
index 00000000..ee22238b
--- /dev/null
+++ b/hyrax/spec/models/file_set_spec.rb
@@ -0,0 +1,8 @@
+# frozen_string_literal: true
+require 'rails_helper'
+
+RSpec.describe FileSet do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/models/qa/local_authority_entry_spec.rb b/hyrax/spec/models/qa/local_authority_entry_spec.rb
new file mode 100644
index 00000000..031019d9
--- /dev/null
+++ b/hyrax/spec/models/qa/local_authority_entry_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Qa::LocalAuthorityEntry, type: :model do
+  pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/hyrax/spec/models/qa/local_authority_spec.rb b/hyrax/spec/models/qa/local_authority_spec.rb
new file mode 100644
index 00000000..dda462a5
--- /dev/null
+++ b/hyrax/spec/models/qa/local_authority_spec.rb
@@ -0,0 +1,5 @@
+require 'rails_helper'
+
+RSpec.describe Qa::LocalAuthority, type: :model do
+  pending "add some examples to (or delete) #{__FILE__}"
+end
diff --git a/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb b/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb
new file mode 100644
index 00000000..1d69ff0f
--- /dev/null
+++ b/hyrax/spec/presenters/hyrax/dataset_presenter_spec.rb
@@ -0,0 +1,9 @@
+# Generated via
+#  `rails generate hyrax:work Dataset`
+require 'rails_helper'
+
+RSpec.describe Hyrax::DatasetPresenter do
+  it "has tests" do
+    skip "Add your tests here"
+  end
+end
diff --git a/hyrax/spec/rails_helper.rb b/hyrax/spec/rails_helper.rb
new file mode 100644
index 00000000..b6317b5a
--- /dev/null
+++ b/hyrax/spec/rails_helper.rb
@@ -0,0 +1,64 @@
+# This file is copied to spec/ when you run 'rails generate rspec:install'
+require 'spec_helper'
+ENV['RAILS_ENV'] ||= 'test'
+require_relative '../config/environment'
+# Prevent database truncation if the environment is production
+abort("The Rails environment is running in production mode!") if Rails.env.production?
+require 'rspec/rails'
+# Add additional requires below this line. Rails is not loaded until this point!
+
+# Requires supporting ruby files with custom matchers and macros, etc, in
+# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
+# run as spec files by default. This means that files in spec/support that end
+# in _spec.rb will both be required and run as specs, causing the specs to be
+# run twice. It is recommended that you do not name files matching this glob to
+# end with _spec.rb. You can configure this pattern with the --pattern
+# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
+#
+# The following line is provided for convenience purposes. It has the downside
+# of increasing the boot-up time by auto-requiring all files in the support
+# directory. Alternatively, in the individual `*_spec.rb` files, manually
+# require only the support files necessary.
+#
+# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
+
+# Checks for pending migrations and applies them before tests are run.
+# If you are not using ActiveRecord, you can remove these lines.
+begin
+  ActiveRecord::Migration.maintain_test_schema!
+rescue ActiveRecord::PendingMigrationError => e
+  puts e.to_s.strip
+  exit 1
+end
+RSpec.configure do |config|
+  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
+  config.fixture_path = "#{::Rails.root}/spec/fixtures"
+
+  # If you're not using ActiveRecord, or you'd prefer not to run each of your
+  # examples within a transaction, remove the following line or assign false
+  # instead of true.
+  config.use_transactional_fixtures = true
+
+  # You can uncomment this line to turn off ActiveRecord support entirely.
+  # config.use_active_record = false
+
+  # RSpec Rails can automatically mix in different behaviours to your tests
+  # based on their file location, for example enabling you to call `get` and
+  # `post` in specs under `spec/controllers`.
+  #
+  # You can disable this behaviour by removing the line below, and instead
+  # explicitly tag your specs with their type, e.g.:
+  #
+  #     RSpec.describe UsersController, type: :controller do
+  #       # ...
+  #     end
+  #
+  # The different available types are documented in the features, such as in
+  # https://relishapp.com/rspec/rspec-rails/docs
+  config.infer_spec_type_from_file_location!
+
+  # Filter lines from Rails gems in backtraces.
+  config.filter_rails_from_backtrace!
+  # arbitrary gems may also be filtered via:
+  # config.filter_gems_from_backtrace("gem name")
+end
diff --git a/hyrax/spec/spec_helper.rb b/hyrax/spec/spec_helper.rb
new file mode 100644
index 00000000..a0d40805
--- /dev/null
+++ b/hyrax/spec/spec_helper.rb
@@ -0,0 +1,94 @@
+# This file was generated by the `rails generate rspec:install` command. Conventionally, all
+# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
+# The generated `.rspec` file contains `--require spec_helper` which will cause
+# this file to always be loaded, without a need to explicitly require it in any
+# files.
+#
+# Given that it is always loaded, you are encouraged to keep this file as
+# light-weight as possible. Requiring heavyweight dependencies from this file
+# will add to the boot time of your test suite on EVERY test run, even for an
+# individual file that may not need all of that loaded. Instead, consider making
+# a separate helper file that requires the additional dependencies and performs
+# the additional setup, and require it from the spec files that actually need
+# it.
+#
+# See https://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
+RSpec.configure do |config|
+  # rspec-expectations config goes here. You can use an alternate
+  # assertion/expectation library such as wrong or the stdlib/minitest
+  # assertions if you prefer.
+  config.expect_with :rspec do |expectations|
+    # This option will default to `true` in RSpec 4. It makes the `description`
+    # and `failure_message` of custom matchers include text for helper methods
+    # defined using `chain`, e.g.:
+    #     be_bigger_than(2).and_smaller_than(4).description
+    #     # => "be bigger than 2 and smaller than 4"
+    # ...rather than:
+    #     # => "be bigger than 2"
+    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+  end
+
+  # rspec-mocks config goes here. You can use an alternate test double
+  # library (such as bogus or mocha) by changing the `mock_with` option here.
+  config.mock_with :rspec do |mocks|
+    # Prevents you from mocking or stubbing a method that does not exist on
+    # a real object. This is generally recommended, and will default to
+    # `true` in RSpec 4.
+    mocks.verify_partial_doubles = true
+  end
+
+  # This option will default to `:apply_to_host_groups` in RSpec 4 (and will
+  # have no way to turn it off -- the option exists only for backwards
+  # compatibility in RSpec 3). It causes shared context metadata to be
+  # inherited by the metadata hash of host groups and examples, rather than
+  # triggering implicit auto-inclusion in groups with matching metadata.
+  config.shared_context_metadata_behavior = :apply_to_host_groups
+
+# The settings below are suggested to provide a good initial experience
+# with RSpec, but feel free to customize to your heart's content.
+=begin
+  # This allows you to limit a spec run to individual examples or groups
+  # you care about by tagging them with `:focus` metadata. When nothing
+  # is tagged with `:focus`, all examples get run. RSpec also provides
+  # aliases for `it`, `describe`, and `context` that include `:focus`
+  # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+  config.filter_run_when_matching :focus
+
+  # Allows RSpec to persist some state between runs in order to support
+  # the `--only-failures` and `--next-failure` CLI options. We recommend
+  # you configure your source control system to ignore this file.
+  config.example_status_persistence_file_path = "spec/examples.txt"
+
+  # Limits the available syntax to the non-monkey patched syntax that is
+  # recommended. For more details, see:
+  # https://relishapp.com/rspec/rspec-core/docs/configuration/zero-monkey-patching-mode
+  config.disable_monkey_patching!
+
+  # Many RSpec users commonly either run the entire suite or an individual
+  # file, and it's useful to allow more verbose output when running an
+  # individual spec file.
+  if config.files_to_run.one?
+    # Use the documentation formatter for detailed output,
+    # unless a formatter has already been configured
+    # (e.g. via a command-line flag).
+    config.default_formatter = "doc"
+  end
+
+  # Print the 10 slowest examples and example groups at the
+  # end of the spec run, to help surface which specs are running
+  # particularly slow.
+  config.profile_examples = 10
+
+  # Run specs in random order to surface order dependencies. If you find an
+  # order dependency and want to debug it, you can fix the order by providing
+  # the seed, which is printed after each run.
+  #     --seed 1234
+  config.order = :random
+
+  # Seed global randomization in this process using the `--seed` CLI option.
+  # Setting this allows you to use `--seed` to deterministically reproduce
+  # test failures related to randomization by passing the same `--seed` value
+  # as the one that triggered the failure.
+  Kernel.srand config.seed
+=end
+end
diff --git a/hyrax/storage/.keep b/hyrax/storage/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/application_system_test_case.rb b/hyrax/test/application_system_test_case.rb
new file mode 100644
index 00000000..d19212ab
--- /dev/null
+++ b/hyrax/test/application_system_test_case.rb
@@ -0,0 +1,5 @@
+require "test_helper"
+
+class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
+  driven_by :selenium, using: :chrome, screen_size: [1400, 1400]
+end
diff --git a/hyrax/test/controllers/.keep b/hyrax/test/controllers/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/fixtures/.keep b/hyrax/test/fixtures/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/fixtures/files/.keep b/hyrax/test/fixtures/files/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/fixtures/users.yml b/hyrax/test/fixtures/users.yml
new file mode 100644
index 00000000..80aed36e
--- /dev/null
+++ b/hyrax/test/fixtures/users.yml
@@ -0,0 +1,11 @@
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
+
+# This model initially had no columns defined. If you add columns to the
+# model remove the '{}' from the fixture names and add the columns immediately
+# below each fixture, per the syntax in the comments below
+#
+one: {}
+# column: value
+#
+two: {}
+# column: value
diff --git a/hyrax/test/helpers/.keep b/hyrax/test/helpers/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/integration/.keep b/hyrax/test/integration/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/mailers/.keep b/hyrax/test/mailers/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/models/.keep b/hyrax/test/models/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/models/user_test.rb b/hyrax/test/models/user_test.rb
new file mode 100644
index 00000000..82f61e01
--- /dev/null
+++ b/hyrax/test/models/user_test.rb
@@ -0,0 +1,7 @@
+require 'test_helper'
+
+class UserTest < ActiveSupport::TestCase
+  # test "the truth" do
+  #   assert true
+  # end
+end
diff --git a/hyrax/test/system/.keep b/hyrax/test/system/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/test/test_helper.rb b/hyrax/test/test_helper.rb
new file mode 100644
index 00000000..3ab84e3d
--- /dev/null
+++ b/hyrax/test/test_helper.rb
@@ -0,0 +1,10 @@
+ENV['RAILS_ENV'] ||= 'test'
+require_relative '../config/environment'
+require 'rails/test_help'
+
+class ActiveSupport::TestCase
+  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
+  fixtures :all
+
+  # Add more helper methods to be used by all tests here...
+end
diff --git a/hyrax/tmp/.keep b/hyrax/tmp/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/hyrax/vendor/.keep b/hyrax/vendor/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/matomo.conf b/matomo.conf
new file mode 100644
index 00000000..d5401f65
--- /dev/null
+++ b/matomo.conf
@@ -0,0 +1,69 @@
+upstream php-handler {
+	server matomo_app:9000;
+}
+
+server {
+	listen 80;
+
+	add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance
+	root /var/www/html; # replace with path to your matomo instance
+	index index.php;
+	try_files $uri $uri/ =404;
+
+	## only allow accessing the following php files
+	location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
+		# regex to split $uri to $fastcgi_script_name and $fastcgi_path
+		fastcgi_split_path_info ^(.+\.php)(/.+)$;
+
+		# Check that the PHP script exists before passing it
+		try_files $fastcgi_script_name =404;
+
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+		fastcgi_param PATH_INFO $fastcgi_path_info;
+		fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
+		fastcgi_pass php-handler;
+	}
+
+	## deny access to all other .php files
+	location ~* ^.+\.php$ {
+		deny all;
+		return 403;
+	}
+
+	## disable all access to the following directories
+	location ~ /(config|tmp|core|lang) {
+		deny all;
+		return 403; # replace with 404 to not show these directories exist
+	}
+	location ~ /\.ht {
+		deny all;
+		return 403;
+	}
+
+	location ~ js/container_.*_preview\.js$ {
+		expires off;
+		add_header Cache-Control 'private, no-cache, no-store';
+	}
+
+	location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
+		allow all;
+		## Cache images,CSS,JS and webfonts for an hour
+		## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
+		expires 1h;
+		add_header Pragma public;
+		add_header Cache-Control "public";
+	}
+
+	location ~ /(libs|vendor|plugins|misc/user) {
+		deny all;
+		return 403;
+	}
+
+	## properly display textfiles in root directory
+	location ~/(.*\.md|LEGALNOTICE|LICENSE) {
+		default_type text/plain;
+	}
+}
+
+# vim: filetype=nginx
diff --git a/matomo_config.ini.php b/matomo_config.ini.php
new file mode 100644
index 00000000..99c8167b
--- /dev/null
+++ b/matomo_config.ini.php
@@ -0,0 +1,79 @@
+; <?php exit; ?> DO NOT REMOVE THIS LINE
+; file automatically generated or modified by Matomo; you can manually override the default values in global.ini.php by redefining them in this file.
+[database]
+host = "matomo_db"
+username = "matomo"
+password = "password"
+dbname = "matomo"
+tables_prefix = "matomo_"
+charset = "utf8mb4"
+
+[General]
+salt = "62d1afc176ba96cd3d5a13af32ad762b"
+trusted_hosts[] = "localhost:8000"
+
+[PluginsInstalled]
+PluginsInstalled[] = "Diagnostics"
+PluginsInstalled[] = "Login"
+PluginsInstalled[] = "CoreAdminHome"
+PluginsInstalled[] = "UsersManager"
+PluginsInstalled[] = "SitesManager"
+PluginsInstalled[] = "Installation"
+PluginsInstalled[] = "Monolog"
+PluginsInstalled[] = "Intl"
+PluginsInstalled[] = "CoreVue"
+PluginsInstalled[] = "CorePluginsAdmin"
+PluginsInstalled[] = "CoreHome"
+PluginsInstalled[] = "WebsiteMeasurable"
+PluginsInstalled[] = "IntranetMeasurable"
+PluginsInstalled[] = "CoreVisualizations"
+PluginsInstalled[] = "Proxy"
+PluginsInstalled[] = "API"
+PluginsInstalled[] = "Widgetize"
+PluginsInstalled[] = "Transitions"
+PluginsInstalled[] = "LanguagesManager"
+PluginsInstalled[] = "Actions"
+PluginsInstalled[] = "Dashboard"
+PluginsInstalled[] = "MultiSites"
+PluginsInstalled[] = "Referrers"
+PluginsInstalled[] = "UserLanguage"
+PluginsInstalled[] = "DevicesDetection"
+PluginsInstalled[] = "Goals"
+PluginsInstalled[] = "Ecommerce"
+PluginsInstalled[] = "SEO"
+PluginsInstalled[] = "Events"
+PluginsInstalled[] = "UserCountry"
+PluginsInstalled[] = "GeoIp2"
+PluginsInstalled[] = "VisitsSummary"
+PluginsInstalled[] = "VisitFrequency"
+PluginsInstalled[] = "VisitTime"
+PluginsInstalled[] = "VisitorInterest"
+PluginsInstalled[] = "RssWidget"
+PluginsInstalled[] = "Feedback"
+PluginsInstalled[] = "TwoFactorAuth"
+PluginsInstalled[] = "CoreUpdater"
+PluginsInstalled[] = "CoreConsole"
+PluginsInstalled[] = "ScheduledReports"
+PluginsInstalled[] = "UserCountryMap"
+PluginsInstalled[] = "Live"
+PluginsInstalled[] = "PrivacyManager"
+PluginsInstalled[] = "ImageGraph"
+PluginsInstalled[] = "Annotations"
+PluginsInstalled[] = "MobileMessaging"
+PluginsInstalled[] = "Overlay"
+PluginsInstalled[] = "SegmentEditor"
+PluginsInstalled[] = "Insights"
+PluginsInstalled[] = "Morpheus"
+PluginsInstalled[] = "Contents"
+PluginsInstalled[] = "BulkTracking"
+PluginsInstalled[] = "Resolution"
+PluginsInstalled[] = "DevicePlugins"
+PluginsInstalled[] = "Heartbeat"
+PluginsInstalled[] = "Marketplace"
+PluginsInstalled[] = "ProfessionalServices"
+PluginsInstalled[] = "UserId"
+PluginsInstalled[] = "CustomJsTracker"
+PluginsInstalled[] = "Tour"
+PluginsInstalled[] = "PagePerformance"
+PluginsInstalled[] = "CustomDimensions"
+
-- 
GitLab